machine-id Linux: cara cek dan reset pada citra untuk kloning

machine-id adalah pengenal persisten untuk satu instalasi Linux berbasis systemd, biasanya tersimpan di /etc/machine-id. Nilainya umumnya tetap sama setelah boot ulang atau penggantian hostname. Saat menyiapkan citra untuk kloning, atur keadaan berkas ini pada citra yang sudah dimatikan agar beberapa instans tidak mewarisi ID yang sama.

Apa itu machine-id?

Machine-id mengenali sistem lokal dengan nilai 128 bit atau 16 bita. Di /etc/machine-id, nilai itu ditulis sebagai 32 karakter heksadesimal huruf kecil dan diakhiri baris baru; nilainya tidak boleh seluruhnya nol. Systemd menetapkannya saat instalasi atau boot dan biasanya mempertahankannya untuk boot berikutnya.

Pengenal ini berbeda dari nama server yang mudah dibaca. Hostname dapat dipilih dan diganti administrator, sedangkan machine-id dipakai sebagai identitas instans instalasi sistem operasi. Jika tujuan Anda hanya mengganti nama, lihat cara mengganti hostname Rocky Linux.

Machine-id juga bukan nomor seri perangkat keras atau alamat MAC antarmuka jaringan. Mengganti perangkat keras atau konfigurasi jaringan saja tidak mengganti nilai yang tersimpan. Format dan perilaku inisialisasinya dijelaskan dalam manual machine-id dari systemd.

Periksa machine-id saat ini

Pada sistem yang Anda kelola, tampilkan nilainya dengan:

cat /etc/machine-id

Pada sistem biasa yang sudah diinisialisasi, keluaran berisi nilai heksadesimal 32 karakter. Jika berkas kosong atau tidak ada, jangan langsung mengisinya dengan teks sembarang. Citra, kontainer, atau sistem berkas hanya baca dapat memiliki mekanisme inisialisasi khusus saat boot.

Jangan menyalin ID asli ke artikel publik, log terbuka, atau tangkapan layar permintaan dukungan. Systemd memperlakukan nilai ini sebagai informasi yang tidak boleh diekspos ke lingkungan yang tidak dipercaya, khususnya melalui jaringan. Jika aplikasi membutuhkan pengenal stabil yang dapat dipublikasikan, gunakan pengenal turunan khusus aplikasi dengan fungsi hash kriptografis berkunci, bukan machine-id mentah atau potongannya.

Apakah boot ulang atau perubahan hostname mengganti ID?

Biasanya tidak. Machine-id menandai instalasi sistem operasi secara persisten, bukan dibuat ulang pada setiap boot. Nilai ini terpisah dari hostname, alamat IP, dan alamat MAC.

Karena itu, dua server bernama berbeda tetapi memiliki machine-id sama dapat menandakan bahwa citra disalin tanpa persiapan kloning. Periksa proses penyalinan dan inisialisasinya. Sebaliknya, hostname yang sama tidak membuktikan bahwa machine-id kedua sistem juga sama.

Kapan machine-id perlu direset?

Kasus utama adalah penggunaan satu citra sistem operasi sebagai dasar beberapa mesin virtual, instans cloud, atau kontainer. Penyalinan disk dapat ikut menyalin /etc/machine-id, sehingga instans yang berbeda memakai identitas sama. Siapkan citra sumber dalam keadaan dimatikan, lalu biarkan setiap hasil kloning memperoleh ID saat boot.

Tidak perlu mereset ID server yang sedang dipakai hanya agar nilainya berubah. Lakukan untuk kebutuhan yang jelas, seperti memperbaiki duplikasi atau membangun citra distribusi. Pengenal yang terlihat di jaringan dapat diturunkan dari machine-id; panduan systemd untuk menyiapkan citra menjelaskan mengapa keadaan identitas dalam templat perlu diperhatikan.

Keadaan berkas dan deteksi boot pertama

Menghapus berkas dan membiarkannya kosong bukan tindakan yang setara. Pilih apakah citra juga harus menjalankan pekerjaan khusus boot pertama. Tabel ini merangkum deteksi bawaan systemd, tanpa penggantian aturan melalui parameter systemd.condition_first_boot=.

Keadaan dalam citra Penetapan ID saat boot Dianggap boot pertama?
Berkas tidak ada Systemd mencoba menetapkan ID. Ya.
Berisi uninitialized Systemd mencoba menetapkan ID. Ya.
Berkas ada tetapi berukuran 0 bita Systemd mencoba menetapkan ID. Tidak.
Berisi ID yang valid Nilai yang ada digunakan. Tidak.

Jika boot pertama terdeteksi, unit dengan ConditionFirstBoot=yes dan pekerjaan inisialisasi terkait dapat dijalankan. Berkas kosong memungkinkan ID ditetapkan tanpa memicu deteksi boot pertama itu. Dalam kondisi hanya baca, berkas yang sudah ada juga diperlukan agar berkas ID sementara dapat dipasang melalui bind mount, yaitu memasang berkas sementara di atas jalur tersebut.

Jika sistem berkas hanya baca dan /etc/machine-id sama sekali tidak ada, systemd mendokumentasikannya sebagai kesalahan. Karena itu, jangan memilih penghapusan hanya karena terlihat lebih sederhana. Periksa bagian aturan boot pertama dan inisialisasi machine-id serta persyaratan pembuat citra.

Prosedur pada citra yang akan dikloning

Contoh berikut mengasumsikan sistem pada citra sudah dimatikan dan sistem berkas akar citra dipasang pada mesin pengelola terpisah di /mnt/image-root. Ganti jalur itu dengan titik pemasangan yang benar. Ini bukan prosedur untuk mengosongkan /etc/machine-id milik server produksi yang sedang berjalan.

  1. Matikan VM sumber dan buat cadangan atau snapshot. Jika salinan akan dijadikan templat, simpan sumber asli agar dapat dipulihkan.
  2. Pasang citra pada sistem pengelola, lalu periksa titik pemasangan dan kedua jalur ID berikut.
findmnt --mountpoint /mnt/image-root
ls -l /mnt/image-root/etc/machine-id /mnt/image-root/var/lib/dbus/machine-id

Jika findmnt tidak menunjukkan titik pemasangan citra yang dimaksud, berhenti dan jangan jalankan perubahan berikutnya. Pastikan pula jalur yang akan ditulis berada di dalam citra. Jika /etc/machine-id atau komponen jalurnya ternyata berupa tautan simbolik yang menuju ke luar akar citra, selesaikan pemeriksaan tata letaknya terlebih dahulu; penulisan melalui tautan dapat mengenai sasaran yang berbeda.

/var/lib/dbus/machine-id dapat berupa tautan simbolik menuju /etc/machine-id atau berkas biasa yang terpisah. D-Bus adalah sistem komunikasi antarproses yang juga memakai identitas mesin. Berkas D-Bus terpisah yang masih berisi ID lama dapat digunakan kembali oleh systemd.

Jika pekerjaan boot pertama juga harus dijalankan

Pada citra yang dapat ditulis dan harus terdeteksi sebagai boot pertama, periksa ulang sasaran pemasangan lalu hapus berkas di dalam citra. Jika berkas memang sudah tidak ada, tidak perlu menghapusnya lagi.

sudo rm -- /mnt/image-root/etc/machine-id

Jika berkas perlu tetap ada, alternatifnya adalah menulis uninitialized diikuti baris baru seperti di bawah. Pilih salah satu cara tersebut sesuai kebutuhan citra, bukan menjalankan semuanya berurutan.

printf 'uninitialized\n' | sudo tee /mnt/image-root/etc/machine-id > /dev/null

Jika jalur D-Bus merupakan berkas biasa terpisah yang menyimpan ID lama, reset jalur itu juga. Hanya sesudah ls -l memastikan bahwa sasaran bukan tautan simbolik, hapus berkas berikut dari citra yang sudah dimatikan:

sudo rm -- /mnt/image-root/var/lib/dbus/machine-id

Jika jalur tersebut adalah tautan simbolik, jangan jalankan perintah penghapusan itu. Periksa sasarannya dan tata letak distribusi. Systemd dapat memakai ID D-Bus yang masih tersimpan ketika /etc/machine-id tidak berisi ID.

Jika hanya perlu ID baru tanpa pekerjaan boot pertama

Biarkan berkas kosong di dalam citra bila unit khusus boot pertama tidak boleh dipicu kembali:

sudo truncate -s 0 -- /mnt/image-root/etc/machine-id

Perintah truncate mempertahankan atau membuat berkas dengan panjang nol; systemd kemudian dapat menetapkan ID tanpa menganggap boot itu sebagai boot pertama. Cara ini juga relevan untuk citra hanya baca, tetapi pembuat citra harus menyiapkannya sebelum citra dijadikan hanya baca. Tetap periksa berkas D-Bus terpisah yang dapat menyebabkan ID lama dipakai kembali.

Setelah perubahan selesai, lepaskan pemasangan citra dengan benar, lalu boot hasil kloning. Periksa di lingkungan pengelolaan tepercaya bahwa tiap instans memperoleh ID berbeda dan menyimpannya sesuai rancangan citra. Jangan memublikasikan nilainya. Jika templat rusak atau hasil tidak sesuai, pulihkan salinan cadangan saat citra tidak berjalan, perbaiki prosedur persiapan, lalu uji ulang pada klon percobaan.

Menjalankan systemd-machine-id-setup saja tidak menjamin ID acak yang baru. Alat itu dapat memakai ID D-Bus yang sudah ada atau nilai lain yang disediakan lingkungan. Urutannya dijelaskan dalam manual systemd-machine-id-setup. Pemeriksaan keunikan setelah boot tetap diperlukan.

Arti dan batas dua perintah yang sering disarankan

Dua perintah di bawah sering disebut sebagai cara mereset machine-id. Contoh ini dibahas untuk menjelaskan efeknya, bukan untuk langsung dijalankan pada server aktif.

sudo truncate -s 0 /etc/machine-id
sudo rm -f /var/lib/dbus/machine-id

Perintah pertama mengubah ukuran /etc/machine-id menjadi 0 bita tanpa menghapus berkasnya. Systemd dapat menetapkan ID pada boot berikutnya, tetapi keadaan kosong tidak memicu deteksi boot pertama. Nilai yang sudah dipakai oleh systemd dan layanan yang sedang berjalan juga tidak langsung diganti hanya karena berkas dikosongkan.

Perintah kedua menghapus jalur ID D-Bus. Jika berupa berkas biasa yang terpisah dan berisi ID lama, penghapusan dapat mencegah pemakaian ulang nilai itu. Jika berupa tautan simbolik, rm -f hanya menghapus tautannya, bukan isi berkas yang ditunjuk. Opsi -f tidak melaporkan kesalahan hanya karena sasaran tidak ada, sehingga keberhasilan perintah bukan bukti bahwa persiapan kedua ID sudah benar.

Periksa hubungan kedua jalur dengan ls -l /etc/machine-id /var/lib/dbus/machine-id. Untuk templat kloning, gunakan prosedur citra yang dimatikan di atas. Menurut urutan inisialisasi systemd, nilai dapat diperoleh dari ID D-Bus, identitas yang disediakan lingkungan virtualisasi atau kontainer, dan sumber lain sebelum akhirnya dibuat secara acak. Mengosongkan satu berkas saja tidak membuktikan bahwa semua klon akan memperoleh nilai unik.

Jika server aktif sudah memiliki ID duplikat

Jangan langsung menghapus atau mengosongkan /etc/machine-id sambil terus menggunakan server produksi. Proses yang berjalan mungkin menyimpan nilai lama; jurnal sistem, jaringan, atau keadaan aplikasi dapat terpengaruh. Tentukan server sumber dan hasil kloning, pilih instans yang akan diperbaiki, lalu rencanakan waktu henti.

Cadangkan data dan layanan yang terdampak, matikan instans yang dipilih, kemudian ubah citranya dari lingkungan terpisah. Sesudah boot, periksa ID yang berbeda, konektivitas jaringan, dan layanan terkait. Jika pekerjaan Anda mencakup seluruh templat VM, identitas lain seperti kunci host SSH, seed acak, dan hostname juga perlu disiapkan sesuai kebutuhan tiap instans.

Panduan Red Hat tentang templat dan kloning VM menjelaskan pilihan virt-sysprep untuk membersihkan keadaan khusus instans. Alat itu dapat mengubah lebih banyak hal daripada machine-id. Tinjau sasaran dan operasi yang dipilih sebelum memakainya; prosedur artikel ini bukan pengganti peninjauan seluruh keadaan templat.

FAQ

Bisakah machine-id dipakai sebagai kata sandi atau token autentikasi?

Tidak. Nilai ini mengenali instalasi, bukan membuktikan identitas pengguna. Hindari mengekspos nilai mentahnya, tetapi jangan merancang autentikasi dengan machine-id sebagai kata sandi.

Apakah machine-id yang sama membuktikan dua sistem identik?

Tidak. Nilainya dapat ikut tersalin ketika citra dikloning. Periksa sistem dan proses distribusi citranya untuk menentukan penyebab duplikasi.

Apakah mengganti hostname dengan hostnamectl mengganti machine-id?

Tidak. Hostname dan machine-id memiliki fungsi serta penyimpanan berbeda. Mengganti nama host tidak dengan sendirinya membuat nilai baru di /etc/machine-id.

Untuk citra kloning, sebaiknya berkas dihapus atau dikosongkan?

Jika pekerjaan khusus boot pertama diperlukan, pilih berkas tidak ada atau keadaan uninitialized sesuai kebutuhan citra. Jika hanya ingin ID ditetapkan tanpa pekerjaan itu, biarkan berkas kosong. Perhatikan aturan hanya baca, parameter boot, ID D-Bus, dan persyaratan alat pembuat citra.