GNU/Linux >> Belajar Linux >  >> Linux

Melacak dan Memperbaiki Bug Penginstal

Beberapa waktu lalu, bug dengan instalasi terenkripsi LVM di Kali Linux 1.0.4 dilaporkan di pelacak bug kami. Bug ini adalah prioritas tinggi di TODO kami karena pemasangan terenkripsi adalah fitur penting dalam industri kami, jadi kami ingin menghancurkan bug ini secepatnya. Artikel ini akan menjelaskan proses debugging, mengidentifikasi, dan memperbaiki bug ini di Kali, dan akhirnya di Debian juga.

Bug itu sendiri aneh; menginstal Kali dengan opsi "LVM Encrypted" akan menghasilkan boot yang gagal setelah instalasi selesai:

Solusi yang disarankan dalam laporan bug menunjukkan bahwa /etc/crypttab file itu kosong. Dengan me-remount partisi terenkripsi secara manual, mengisinya kembali dengan parameter yang diperlukan, dan kemudian memperbarui initramfs, mesin akan berhasil melakukan booting ke partisi terenkripsi lagi. Sangat menjengkelkan dan jauh dari praktis.

Sekarang dengan masalah yang didefinisikan dengan baik, solusinya tampak sederhana. Mungkin ada yang salah dengan cara /etc/crypttab akan diperbarui selama proses instalasi. Langkah kami selanjutnya adalah menyelidiki skrip yang bertanggung jawab atas pembaruan ini dan melihat apakah ada bug dalam proses pembaruan file. Tetapi bagaimana Anda menemukan skrip yang tepat yang bertanggung jawab untuk pembaruan ini dan bagaimana kami bisa mengetahui paket apa yang ada di dalamnya?

Untuk menyelamatkan kami datang DebianInstaller. Dengan menggunakan set skrip ini, kami memeriksa seluruh pohon sumber DebianInstaller. Ini akan memungkinkan kami untuk mencari skrip yang memengaruhi /etc/crypttab dengan lebih mudah.

[email protected]:~# svn co svn://anonscm.debian.org/svn/d-i/trunk debian-installer
[email protected]:~# cd debian-installer
[email protected]:~/debian-installer# scripts/git-setup
[email protected]:~/debian-installer# mr -p checkout

Setelah semua repositori diperiksa, kita cukup mengambil file apa pun yang merujuk ke /etc/crypttab file sebagai berikut:

[email protected]:~/debian-installer# grep -r '/etc/crypttab' * |grep -v ^manual
...
packages/partman-crypto/finish.d/crypto_config:# dm-crypt: creates /etc/crypttab entries
packages/partman-crypto/finish.d/crypto_config: echo "$target $source $keyfile $opts" >> /target/etc/crypttab
...
[email protected]:~/debian-installer#

Kami melihat di atas bahwa itu adalah “crypto_config ” skrip yang menulis ke /etc/crypttab , yang terletak di partman-crypto paket.

Idealnya, kami ingin men-debug skrip ini dan melihat di mana masalahnya, tetapi bagaimana Anda melakukannya di media instalasi langsung? Jawabannya relatif sederhana - kami hanya perlu membuka prompt perintah selama proses instalasi. Triknya adalah dengan memanggil shell debug kami (dengan menekan CTRL+ALT+F2) selama tahap penginstalan yang tepat - dalam kasus kami, kami perlu menginterupsi penginstal sebelum crypto_config skrip dijalankan tetapi setelah partman-crypto udeb telah diinstal, jadi awal dari proses partisi akan menjadi tempat yang bagus. Kami melanjutkan untuk mengedit /lib/partman/finish.d/55_crypto_config dan menambahkan “set -x ” di awal skrip:

Kami kemudian membiarkan penginstal melakukan tugasnya dan sesaat sebelum penginstalan selesai, kami mengintip /var/log/syslog di cangkang lain. Yang mengejutkan kami, kami melihat bahwa /etc/crypttab file *telah* diperbarui, bertentangan dengan keyakinan awal kami, seperti yang dapat dilihat di syslog instalasi. WTH .

Aug 28 21:57:42 main-menu[954]: (process:9810): crypttab_add_entry
Aug 28 21:57:42 main-menu[954]: (process:9810): /dev/sda5
Aug 28 21:57:42 main-menu[954]: (process:9810): /var/lib/partman/devices/=dev=sda/256901120-160041009151
Aug 28 21:57:42 main-menu[954]: (process:9810): /dev/mapper/sda5_crypt
...
Aug 28 21:57:42 main-menu[954]: (process:9810): echo
Aug 28 21:57:42 main-menu[954]: (process:9810): sda5_crypt UUID=6250dbca-648b-4848-9132-cfa900ab5874 none luks

Di sinilah kami mulai menggaruk-garuk kepala. Jika masalahnya bukan pada penulisan file ini (seperti yang kami harapkan), lalu mengapa ada /etc/crypttab yang kosong file setelah instalasi? Mungkin masalahnya bukan di partman-crypto bagaimanapun juga, tetapi dalam cara live-build menghasilkan ISO kami? Kami menguji teori kami ini dengan menggunakan ISO penginstalan Kali mini (tidak dibuat melalui live-build) dan melihat bahwa penginstalan terenkripsi LVM bekerja dengan baik saat menggunakan media penginstalan tersebut.

Kami tahu bahwa penginstal langsung menggunakan tar untuk menyalin seluruh sistem file langsung ke /target mounted yang terpasang direktori dan mengasumsikan bahwa sistem file kosong, yang sebagian besar benar karena baru saja dibuat oleh partman. Ini berarti bahwa file yang sudah ada sebelumnya dapat ditimpa jika file tersebut juga ada di gambar langsung, yang terjadi pada /etc/crypttab dalam hal ini.

Pemeriksaan lebih lanjut mengungkapkan bahwa masalahnya ada di live-installer , yang menimpa /etc/crypttab . yang dihasilkan . Pemasang langsung sudah memiliki beberapa ketentuan untuk tidak menimpa /etc/fstab , jadi ini hanya masalah menggeneralisasi aturan itu dan menyertakan /etc/crypttab file juga:

$ diff --git a/debian/live-installer.postinst b/debian/live-installer.postinst
index 9a39d8d..bc40b84 100644 (file)
--- a/debian/live-installer.postinst
+++ b/debian/live-installer.postinst
@@ -8,6 +8,8 @@ db_capb backup
# Architecture and OS detection
ARCH=`udpkg --print-architecture`
OS=`udpkg --print-os`
+# Files that must not be overwritten by copy of live system
+FILES_TO_PRESERVE="/etc/fstab /etc/crypttab"

NEWLINE="
"
@@ -34,11 +36,12 @@ install_live_system () {
# symlinks there.
rmdir /target/var/lock /target/var/run 2>/dev/null || true

- # Backup pre-existing /etc/fstab as it will be overwritten by the
- # copy of the live system
- if [ -e /target/etc/fstab ] && [ ! -e /target/etc/fstab.live-installer ]; then
- mv /target/etc/fstab /target/etc/fstab.live-installer
- fi
+ # Backup files that should not be overwritten by the copy
+ for f in $FILES_TO_PRESERVE; do
+ if [ -e /target$f ] && [ ! -e /target/${f}.live-installer ]; then
+ mv /target$f /target${f}.live-installer
+ fi
+ done

for place in $PLACES; do
[ ! -e $place ] && continue
@@ -83,10 +86,12 @@ install_live_system () {
eval ${SUPPORT}_teardown
done

- # Restore the fstab file created by d-i
- if [ -e /target/etc/fstab.live-installer ]; then
- mv /target/etc/fstab.live-installer /target/etc/fstab
- fi
+ # Restore important configuration files
+ for f in $FILES_TO_PRESERVE; do
+ if [ -e /target${f}.live-installer ]; then
+ mv /target${f}.live-installer /target$f
+ fi
+ done

if [ ${PLACE_FOUND} -eq 0 ]; then
error "Could not find any live images"

Patch di atas memperbaiki masalah bagi kami, memungkinkan pemasangan LVM terenkripsi untuk diselesaikan dan boot dengan sukses. Seperti halnya bug Debian yang kami temui, kami mengirim patch kembali ke Debian untuk meningkatkan distribusi yang kami bangun. Perbaikan untuk bug penginstal ini akan keluar dalam rilis poin kami berikutnya (1.0.5) minggu depan. Orang-orang menghasilkan gambar ISO mereka sendiri melalui live-build akan secara otomatis menerima paket tetap.


Linux
  1. Gelandangan dan muat ulang - default:Peringatan:Waktu koneksi habis. Mencoba lagi...

  2. Apa perbedaan antara procfs dan sysfs?

  3. Linux:Bagaimana cara mengetahui di mana suatu proses dimulai dan bagaimana proses itu dimulai?

  1. Bagaimana saya membuang OS lama saya dan beralih ke Linux

  2. 10 Fakta Menarik dan Menyenangkan Tentang Linux

  3. 5 Perangkat Lunak Produktivitas Gratis dan Sumber Terbuka Terbaik

  1. 5 Perangkat Lunak Pelacakan Panggilan Gratis dan Sumber Terbuka Teratas

  2. 7 Perangkat Lunak Onboarding Gratis dan Sumber Terbuka Terbaik

  3. Sejarah API:GitLab Runner dan Podman