少し前に、Kali Linux 1.0.4 での LVM 暗号化インストールのバグがバグ トラッカーで報告されました。暗号化されたインストールは業界で重要な機能であるため、このバグは TODO で優先度が高く、このバグをできるだけ早く鎮圧したいと考えていました。この記事では、このバグを Kali で、そして最終的には Debian でデバッグ、特定、修正するプロセスについて説明します。
バグ自体は奇妙でした。 「LVM暗号化」オプションを使用してKaliをインストールすると、インストールが完了すると起動に失敗します:
バグ レポートで提案されている回避策は、/etc/crypttab ファイルが空でした。暗号化されたパーティションを手動で再マウントし、必要なパラメーターを再入力してから initramfs を更新すると、マシンは暗号化されたパーティションで正常に再起動されます。間違いなく煩わしく、実用的ではありません。
問題が明確に定義されたので、解決策は簡単に見えました。 /etc/crypttab の方法に問題がある可能性があります インストールプロセス中に更新されます。次のステップは、この更新を担当するスクリプトを調査し、ファイル更新プロセスにバグがないかどうかを確認することでした。しかし、この更新を担当する正確なスクリプトをどのように見つけ、それがどのパッケージに含まれているかをどのように突き止めることができますか?
DebianInstaller が私たちを助けてくれます。この一連のスクリプトを使用して、DebianInstaller ソース ツリー全体をチェックアウトしました。これにより、/etc/crypttab に影響を与えるスクリプトを検索できます。
[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
すべてのリポジトリをチェックアウトしたら、/etc/crypttab を参照するすべてのファイルを簡単に検索できます。 ファイルは次のとおりです:
[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#
上記で、「crypto_config」であることがわかります 」 /etc/crypttab に書き込むスクリプト partman-crypto にあります。 パッケージ。
理想的には、このスクリプトをデバッグして問題の場所を確認したいと考えていますが、ライブ インストール メディアでこれを行うにはどうすればよいでしょうか?答えは比較的簡単です。インストール プロセス中にコマンド プロンプトを開くだけでした。トリックは、インストールの適切な段階で (CTRL+ALT+F2 を押して) デバッグ シェルを呼び出すことです。この場合、crypto_config の前にインストーラーを中断する必要がありました。 スクリプトが実行されましたが、partman-crypto の後 udeb がインストールされているので、パーティショニング プロセスの開始点は適切な場所です。 /lib/partman/finish.d/55_crypto_config の編集に進みました 「set -x」を追加 」スクリプトの開始時:
次に、インストーラーに任せて、インストールが完了する直前に、/var/log/syslog を確認しました。 別のシェルで。驚いたことに、/etc/crypttab インストールの syslog に見られるように、私たちの最初の信念に反して、ファイルが更新されていました。 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
これが私たちが頭をかき始めたところです。このファイルの書き込みに問題がなかった場合 (予想どおり)、空の /etc/crypttab があったのはなぜですか? インストール後のファイル?おそらく問題は partman-crypto にはありませんでした 結局のところ、ライブビルドの方法で ISOを生成しますか? Kali mini インストール ISO (live-build でビルドされていない) を使用してこの理論をテストしたところ、そのインストール メディアを使用すると、LVM 暗号化インストールが正常に機能することがわかりました。
live-installer は tar を使用することがわかっています ライブ ファイルシステム全体をマウントされた /target にコピーする ディレクトリであり、ファイルシステムが空であると想定しています。これは、partman によって作成されたばかりであるため、ほとんどの場合当てはまります。これは、既存のファイルがライブ画像にもある場合、上書きされる可能性があることを意味します。これは /etc/crypttab で発生していました。
さらに調べてみると、問題は live-installer にあることが判明しました 、それによって生成された /etc/crypttab を上書きします . live-installer には、すでに /etc/fstab を上書きしないためのいくつかの規定があります。 、そのルールを一般化して /etc/crypttab を含めるだけの問題です ファイルも:
$ 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"
上記のパッチにより問題が修正され、暗号化された LVM のインストールが完了し、正常に起動できるようになりました。私たちが遭遇するすべての Debian バグと同様に、私たちが構築しているディストリビューションを改善するためにパッチを Debian に送り返します。このインストーラーのバグの修正は、来週の次のポイント リリース (1.0.5) で公開されます。 live-build を使用して独自の ISO イメージを生成する人々 固定パッケージを自動的に受け取ります。