'\" t .TH "MACHINE\-ID" "5" "" "systemd 257.13" "machine-id" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" machine-id \- فایل پیکربندی شناسه محلی ماشین .SH "خلاصه دستور (SYNOPSIS)" .PP /etc/machine\-id .SH "توضیحات (DESCRIPTION)" .PP فایل /etc/machine\-id حاوی شناسه یکتای ماشین (machine ID) سیستم محلی است که در هنگام نصب یا بوت سیستم تنظیم می‌شود\&. شناسه ماشین یک رشته هگزادسیمال ۳۲ کاراکتری با حروف کوچک است که به یک خط جدید ختم می‌شود\&. در صورت رمزگشایی از فرمت هگزادسیمال، معادل یک مقدار ۱۶ بایتی/۱۲۸ بیتی است\&. این شناسه نمی‌تواند تماماً صفر باشد\&. .PP شناسه ماشین معمولاً در طول نصب سیستم یا در نخستین بوت از یک منبع تصادفی تولید می‌شود و در تمام بوت‌های بعدی ثابت می‌ماند\&. به صورت اختیاری، در سیستم‌های بدون وضعیت (stateless)، در صورت نیاز در مراحل اولیه بوت در زمان اجرا تولید می‌شود\&. .PP شناسه ماشین می‌تواند برای مثال هنگام بوت از طریق شبکه، با پارامتر خط فرمان هسته \fIsystemd\&.machine_id=\fR یا با ارسال گزینه \fB\-\-machine\-id=\fR به systemd تنظیم شود\&. شناسه‌ای که به این صورت مشخص شود، اولویت بالاتری دارد و به جای شناسه ذخیره‌شده در /etc/machine\-id استفاده خواهد شد\&. .PP شناسه ماشین بر اساس پیکربندی محلی یا شبکه تغییر نمی‌کند و با تعویض سخت‌افزار نیز عوض نمی‌شود\&. به دلیل همین ویژگی و طول بلندتر آن، این شناسه جایگزین بسیار مفیدتری برای فراخوانی \fBgethostid\fR(3) تعیین‌شده توسط استاندارد POSIX است\&. .PP این شناسه ماشین از همان قالب و منطق شناسه ماشین D\-Bus پیروی می‌کند\&. .PP این شناسه به صورت یکتا میزبان را شناسایی می‌کند\&. باید آن را «محرمانه» در نظر گرفت و نباید در محیط‌های نامطمئن، به‌ویژه در شبکه، افشا شود\&. اگر برای برنامه‌ای نیاز به یک شناسه یکتا و پایدار وابسته به ماشین باشد، نباید از شناسه ماشین یا هر بخشی از آن به صورت مستقیم استفاده کرد\&. در عوض، شناسه ماشین باید با استفاده از یک تابع هش رمزنگاری‌شده کلیددار و یک کلید ثابت مخصوص برنامه هش شود\&. به این ترتیب شناسه کاملاً یکتا بوده و به روشی پایدار از شناسه ماشین مشتق می‌شود، اما امکان بازیابی شناسه اصلی ماشین از روی شناسه اختصاصی برنامه وجود نخواهد داشت\&. رابط برنامه‌نویسی \fBsd_id128_get_machine_app_specific\fR(3) پیاده‌سازی چنین الگوریتمی را ارائه می‌دهد\&. .SH "مقداردهی اولیه (INITIALIZATION)" .PP هر ماشین باید در عملکرد عادی یک شناسه غیرخالی داشته باشد\&. شناسه هر ماشین باید یکتا باشد\&. برای دستیابی به این اهداف، /etc/machine\-id را می‌توان به چند روش مختلف مقداردهی اولیه کرد\&. .PP برای نصب‌های عادی سیستم‌عامل، که در آن یک ایمیج سفارشی برای ماشینی خاص ایجاد می‌شود، /etc/machine\-id باید در طول نصب مقداردهی شود\&. .PP ابزار \fBsystemd-machine-id-setup\fR(1) می‌تواند توسط ابزارهای نصب‌کننده برای مقداردهی اولیه شناسه ماشین در زمان نصب استفاده شود، اما /etc/machine\-id می‌تواند با هر روش دیگری نیز نوشته شود\&. .PP برای ایمیج‌های سیستم‌عامل که یک بار ایجاد شده و در چندین ماشین استفاده می‌شوند (برای مثال برای کانتینرها یا در محیط‌های ابری)، /etc/machine\-id باید در ایمیج عمومی سیستم فایل یا وجود نداشته باشد و یا فایلی خالی باشد (تفاوت بین این دو گزینه در بخش «معناشناسی اولین بوت» در زیر توضیح داده شده است)\&. در طول بوت یک شناسه تولید می‌شود و در صورت امکان در این فایل ذخیره می‌گردد\&. وجود یک فایل خالی توصیه می‌شود زیرا امکان bind\-mount کردن یک فایل موقت روی فایل واقعی را فراهم می‌کند، در حالتی که ایمیج به صورت فقط‌خواندنی استفاده شود و /etc در مراحل اولیه بوت به صورت فقط‌خواندنی متصل (mount) شده باشد\&. همچنین ببینید: \m[blue]\fBSafely Building Images\fR\m[]\&\s-2\u[1]\d\s+2\&. .PP ابزار \fBsystemd-firstboot\fR(1) می‌تواند برای مقداردهی اولیه /etc/machine\-id در ایمیج‌های سیستم متصل‌شده (اما بوت‌نشده) استفاده شود\&. .PP هنگامی که یک ماشین با \fBsystemd\fR(1) بوت می‌شود، شناسه ماشین تثبیت خواهد شد\&. اگر گزینه‌های \fIsystemd\&.machine_id=\fR یا \fB\-\-machine\-id=\fR (بخش اول را ببینید) مشخص شده باشند، از این مقدار استفاده می‌شود\&. در غیر این صورت، مقدار موجود در /etc/machine\-id به کار گرفته خواهد شد\&. اگر این فایل خالی باشد یا وجود نداشته باشد، systemd تلاش می‌کند از شناسه ماشین D\-Bus از /var/lib/dbus/machine\-id، مقدار گزینه خط فرمان هسته \fIcontainer_uuid\fR، مقدار KVM DMI با نام product_uuid یا devicetree با نام vm,uuid (در سیستم‌های KVM)، شناسه Xen hypervisor با نام uuid، و در نهایت یک UUID تولیدشده به صورت تصادفی استفاده کند\&. \fIsystemd\&.machine_id=firmware\fR می‌تواند برای تولید شناسه ماشین از فِرم‌ور تنظیم شود\&. .PP پس از تثبیت شناسه ماشین، \fBsystemd\fR(1) تلاش خواهد کرد آن را در /etc/machine\-id ذخیره کند\&. اگر این کار ناموفق باشد، سعی می‌کند یک فایل موقت را روی /etc/machine\-id bind\-mount کند\&. اگر سیستم فایل فقط‌خواندنی باشد و شامل یک فایل (احتمالاً خالی) /etc/machine\-id نباشد، خطا رخ می‌دهد\&. .PP سرویس \fBsystemd-machine-id-commit.service\fR(8) در صورتی که /etc/machine\-id یا /etc/ در طول مراحل اولیه بوت فقط‌خواندنی باشند اما بعداً قابل نوشتن شوند، تلاش خواهد کرد شناسه ماشین را در سیستم فایل بنویسد\&. .SH "معناشناسی اولین بوت (FIRST BOOT SEMANTICS)" .PP فایل /etc/machine\-id برای تشخیص اینکه آیا یک بوت، اولین بوت است یا خیر استفاده می‌شود\&. قوانین به شرح زیر است: .sp .RS 4 .ie n \{\ \h'-04' 1.\h'+01'\c .\} .el \{\ .sp -1 .IP " 1." 4.2 .\} آرگومان خط فرمان هسته \fIsystemd\&.condition_first_boot=\fR می‌تواند برای لغو منطق تشخیص خودکار استفاده شود، ببینید: \fBkernel-command-line\fR(7)\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 2.\h'+01'\c .\} .el \{\ .sp -1 .IP " 2." 4.2 .\} در غیر این صورت، اگر /etc/machine\-id وجود نداشته باشد، این بوت به عنوان اولین بوت در نظر گرفته می‌شود\&. در طول مراحل اولیه بوت، \fBsystemd\fR رشته "uninitialized\en" را در این فایل می‌نویسد و یک فایل موقت حاوی شناسه واقعی ماشین را روی آن mount می‌کند\&. بعداً (پس از رسیدن به first\-boot\-complete\&.target)، شناسه واقعی ماشین روی دیسک ذخیره خواهد شد\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 3.\h'+01'\c .\} .el \{\ .sp -1 .IP " 3." 4.2 .\} اگر /etc/machine\-id حاوی رشته "uninitialized" باشد، بوت نیز به عنوان اولین بوت در نظر گرفته می‌شود\&. همان سازوکار فوق اعمال می‌گردد\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 4.\h'+01'\c .\} .el \{\ .sp -1 .IP " 4." 4.2 .\} اگر /etc/machine\-id وجود داشته باشد و خالی باشد، بوت به عنوان اولین بوت در نظر گرفته \fInot\fR می‌شود\&. با این وجود \fBsystemd\fR همچنان فایلی حاوی شناسه واقعی ماشین را روی آن bind\-mount کرده و بعداً تلاش می‌کند آن را روی دیسک بنویسد (اگر /etc/ قابل نوشتن باشد)\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 5.\h'+01'\c .\} .el \{\ .sp -1 .IP " 5." 4.2 .\} اگر /etc/machine\-id از قبل حاوی یک شناسه معتبر ماشین باشد، این یک بوت اولیه نیست\&. .RE .PP اگر بر اساس قوانین بالا یک بوت اولیه تشخیص داده شود، واحدهای دارای \fIConditionFirstBoot=yes\fR اجرا خواهند شد و \fBsystemd\fR مراحل مقداردهی اولیه اضافی، به‌ویژه اعمال تنظیمات پیش‌فرض واحدها (presetting units) را انجام می‌دهد\&. .SH "ارتباط با OSF UUIDها (RELATION TO OSF UUIDS)" .PP توجه داشته باشید که از نظر تاریخی، شناسه ماشین یک OSF UUID طبق تعریف \m[blue]\fBRFC 4122\fR\m[]\&\s-2\u[2]\d\s+2 یا Microsoft GUID نیست؛ با این حال، از نگارش v30 ابزار systemd به بعد، شناسه‌های تازه تولیدشده ماشین طبق RFC 4122 به عنوان Variant 1 Version 4 UUID شناخته می‌شوند\&. .PP به منظور حفظ سازگاری با سیستم‌های نصب‌شده پیشین، برنامه‌ای که به یک UUID کاملاً سازگار با RFC 4122 نیاز دارد باید شناسه ماشین را رمزگشایی کرده و سپس عملیات زیر را به صورت (غیرقابل بازگشت) اعمال کند تا آن را به یک RFC 4122 Variant 1 Version 4 UUID معتبر تبدیل نماید\&. با فرض اینکه "id" یک آرایه از کاراکترهای بدون علامت (unsigned char) باشد: .sp .if n \{\ .RS 4 .\} .nf /* Set UUID version to 4 \-\-\-\ truly random generation */ id[6] = (id[6] & 0x0F) | 0x40; /* Set the UUID variant to DCE */ id[8] = (id[8] & 0x3F) | 0x80; .fi .if n \{\ .RE .\} .PP (این کد از "generate_random_uuid()" در drivers/char/random\&.c از سورس‌های کرنل لینوکس الهام گرفته شده است\&.) .SH "تاریخچه (HISTORY)" .PP قالب فایل پیکربندی ساده /etc/machine\-id از فایل /var/lib/dbus/machine\-id که توسط D\-Bus معرفی شد سرچشمه می‌گیرد\&. در واقع، این فایل دوم ممکن است یک پیوند نمادین (symlink) به /etc/machine\-id باشد\&. .SH "همچنین ببینید (SEE ALSO)" .PP \fBsystemd\fR(1)، \fBsystemd-machine-id-setup\fR(1)، \fBgethostid\fR(3)، \fBhostname\fR(5)، \fBmachine-info\fR(5)، \fBos-release\fR(5)، \fBsd-id128\fR(3)، \fBsd_id128_get_machine\fR(3)، \fBsystemd-firstboot\fR(1) .SH "یادداشت‌ها (NOTES)" .IP " 1." 4 Safely Building Images .RS 4 \%https://systemd.io/BUILDING_IMAGES .RE .IP " 2." 4 RFC 4122 .RS 4 \%https://tools.ietf.org/html/rfc4122 .RE