Seperti yang mungkin Anda ketahui, secara default ketika Anda menginstal paket pada sistem berbasis Debian atau Ubuntu, jika paket tersebut berisi layanan, layanan itu umumnya akan diaktifkan dan mulai secara otomatis ketika Anda menginstal paket.
Ini masalah bagi saya.
Saya menemukan diri saya perlu mengelola template untuk membuat kontainer LXC. Ada beberapa wadah, masing-masing sesuai dengan rilis Debian atau Ubuntu. (Ada juga wadah berbasis Red Hat, tetapi mereka tidak relevan di sini.)
/var/lib/libvirt/filesystems/debian6_template
/var/lib/libvirt/filesystems/debian7_template
/var/lib/libvirt/filesystems/ubuntu1004_template
/var/lib/libvirt/filesystems/ubuntu1204_template
Kadang-kadang saya akan menemukan bahwa template memiliki paket yang hilang atau memerlukan beberapa perubahan lainnya, jadi saya akan chroot ke dalamnya untuk menginstal paket. Sayangnya ketika saya melakukan itu, saya berakhir dengan beberapa salinan dari layanan paket berjalan!
Sebagai contoh, saya menemukan template tidak memiliki daemon syslog, jadi saya menginstalnya:
for template in /var/lib/libvirt/filesystems/{debian,ubuntu}*_template; do
chroot $template apt-get install rsyslog
done
Dan segera berakhir dengan empat salinan rsyslog berjalan. Belum lagi dua salinan exim4. Ups!
Saya membaca di suatu tempat (meskipun saya tidak dapat menemukannya lagi sekarang) bahwa itu seharusnya tidak memulai layanan ketika berjalan di chroot, tetapi itu jelas tidak terjadi di sini.
Satu panggilan hack jahat yang berpotensi untuk mengganti sementara berbagai perintah yang benar-benar memulai layanan, seperti start-stop-daemon
dan initctl
, meskipun ini jauh lebih banyak pekerjaan daripada yang saya ingin lakukan. Jika saya tidak punya pilihan lain, ...
Solusi ideal di sini adalah sistem berbasis Debian untuk berhenti melakukan omong kosong ini, tetapi gagal itu, mungkin opsi baris perintah yang tidak jelas atau tidak terdokumentasi untuk apt-get
?
Jika tidak jelas, saya benar-benar ingin menyimpan apa pun yang terkait dengan mengelola template di luar template, jika memungkinkan.
sumber
Anda dapat melakukan:
Saya belum mengujinya dengan chroot, tetapi harus berhasil. Pada awalnya ia menetapkan variabel lingkungan RUNLEVEL, sehingga proses yang diprakarsai oleh apt-get tidak akan memulai layanan apa pun, karena mereka akan "berpikir" sistem berjalan dalam mode tunggal. Karena lingkungan dimodifikasi dengan cara yang dapat memengaruhi perintah di masa mendatang, maka diperlukan untuk keluar dari shell ketika lingkungan yang diubah tidak lagi diperlukan, ini dilakukan dengan keluar dari perintah di akhir. Ada mungkin beberapa paket (jarang?) Yang tidak akan menginstal dengan benar dalam mode tunggal (tapi AFAIK ini seharusnya tidak menjadi masalah dalam banyak kasus).
sumber
export RUNLEVEL=1
bagian penting di sini? Apa sebenarnya penyebabnya terjadi?rsyslog
kebetulan ada salah satu paket "langka" yang meledak sepenuhnya ketika mencoba menginstal cara ini. Ini mungkin masih berguna, jadi Anda dapat tetap mengikuti :)