GNU/Linux >> Znalost Linux >  >> Linux

Sledování a oprava instalační chyby

Před malou chvílí byla v našem nástroji pro sledování chyb hlášena chyba s instalací šifrovanou LVM v Kali Linuxu 1.0.4. Tato chyba měla v našem TODO vysokou prioritu, protože šifrované instalace jsou důležitou funkcí v našem odvětví, takže jsme chtěli tuto chybu co nejdříve odstranit. Tento článek popíše proces ladění, identifikace a opravy této chyby v Kali a nakonec také v Debianu.

Chyba sama o sobě byla zvláštní; instalace Kali pomocí možnosti „LVM Encrypted“ by po dokončení instalace vedla k selhání spouštění:

Řešení navržené ve zprávě o chybě naznačilo, že /etc/crypttab soubor byl prázdný. Ručním opětovným připojením šifrovaného oddílu, opětovným naplněním požadovaných parametrů a následnou aktualizací initramfs by počítač znovu úspěšně nabootoval do šifrovaného oddílu. Nejvíce rozhodně otravné a zdaleka ne praktické.

Nyní s dobře definovaným problémem se řešení zdálo jednoduché. Pravděpodobně bylo něco špatně se způsobem /etc/crypttab se aktualizuje během procesu instalace. Naším dalším krokem bylo prozkoumat skripty, které jsou zodpovědné za tuto aktualizaci, a zjistit, zda se v procesu aktualizace souboru nevyskytují nějaké chyby. Ale jak byste našli přesný skript zodpovědný za tuto aktualizaci a jak bychom mohli zjistit, v jakém balíčku je uložen?

K naší záchraně přichází DebianInstaller. Pomocí této sady skriptů jsme prověřili celý zdrojový strom DebianInstalleru. To nám umožní hledat skripty, které ovlivňují /etc/crypttab s mnohem větší lehkostí.

[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

Jakmile byly zkontrolovány všechny repozitáře, mohli jsme jednoduše vyhledat všechny soubory, které odkazují na /etc/crypttab soubor takto:

[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#

Výše vidíme, že je to „crypto_config ” skript, který zapisuje do /etc/crypttab , který se nachází v partman-crypto balíček.

V ideálním případě bychom chtěli tento skript odladit a zjistit, kde je problém, ale jak byste to udělali na živém instalačním médiu? Odpověď je poměrně jednoduchá – během procesu instalace jsme prostě museli otevřít příkazový řádek. Trik je vyvolat náš ladicí shell (stisknutím CTRL+ALT+F2) během správné fáze instalace – v našem případě jsme potřebovali přerušit instalační program před crypto_config skript byl spuštěn, ale po partman-crypto udeb byl nainstalován, takže začátek procesu rozdělování by byl dobrým místem. Pokračovali jsme v úpravě /lib/partman/finish.d/55_crypto_config a přidal „set -x ” na začátku skriptu:

Poté jsme nechali instalátor, aby udělal svou věc, a těsně před dokončením instalace jsme se podívali na /var/log/syslog v jiné skořápce. K našemu překvapení jsme viděli, že /etc/crypttab soubor *byl* aktualizován, na rozdíl od našeho původního přesvědčení, jak je vidět v systémovém protokolu instalace. 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

Tady jsme se začali drbat na hlavě. Pokud problém nebyl v zápisu tohoto souboru (jak jsme očekávali), proč tam byl prázdný /etc/crypttab soubor po instalaci? Možná problém nebyl v partman-crypto koneckonců, ale v tom, jak živě stavět generuje naše ISO? Tuto naši teorii jsme otestovali pomocí Kali mini instalační ISO (nevybudované pomocí live-build) a všimli jsme si, že šifrované instalace LVM fungovaly při použití tohoto instalačního média dobře.

Víme, že živý instalační program používá tar zkopírujte celý živý souborový systém do připojeného /target adresář a předpokládá, že souborové systémy jsou prázdné, což je většinou pravda, protože je právě vytvořil partman. To znamená, že jakýkoli již existující soubor může být přepsán, pokud je také v živém obrazu, což se dělo v /etc/crypttab v tomto případě.

Další zkoumání odhalilo, že problém byl v živém instalačním programu , čímž přepíše vygenerovaný /etc/crypttab . Živý instalační program již obsahuje některá opatření, aby nepřepsal /etc/fstab , takže jde jen o zobecnění tohoto pravidla a zahrnutí /etc/crypttab soubor také:

$ 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"

Výše uvedená oprava problém vyřešila a umožnila dokončení a úspěšné spuštění šifrovaných instalací LVM. Stejně jako u všech chyb Debianu, na které narazíme, posíláme záplaty zpět do Debianu, abychom zlepšili distribuci, na které stavíme. Oprava této instalační chyby vyjde příští týden v našem dalším vydání (1.0.5). Lidé, kteří generují své vlastní obrazy ISO pomocí živého sestavení automaticky obdrží pevný balíček.


Linux
  1. Tomcat 9 a Eclipse Neon – byla specifikována neznámá verze Tomcat?

  2. Vagrant up and reload - default:Warning:Connection timeout. Opakuji pokus...

  3. Linux:Jak zjistit, kde byl proces spuštěn a jak byl spuštěn?

  1. Jak jsem zahodil svůj starý OS a skočil do Linuxu

  2. 10 zajímavých a zábavných faktů o Linuxu

  3. Nejlepších 5 bezplatných a open-source produktivního softwaru

  1. Nejlepších 7 bezplatných a open-source onboarding softwaru

  2. Kariéra systémového správce:korelace mezi mentory a úspěchem

  3. Historie API:GitLab Runner a Podman