私はいくつかの理由で(またはdebootstrap
を使わずに)手動でrootfsを構築していますが、multistrap
詳しくは説明しません。
「圧縮解除された」状態で、必要な deb を rootfs で抽出しています (カスタムdpkg
および . 後でシステムに chroot して各パッケージをトポロジー順に実行する予定です。--instdir
--admindir
dpkg --configure <packagename>
Priority: required
Debianを新規インストールするには、2つの必須()パッケージが必要ですlibc6
。ここ)とlibgcc1
(ここ)。どちらもお互いに厳しい要件を持っています。
dpkg --configure <packagename>
したがって、他のパッケージがまだ構成される必要がある「アンパッケージング」状態にあると文句を言うため、あるパッケージで実行することはできません。
二重ロック。これは意味があります。
どうやってこれができますか?標準のUbuntu / DebianインストーラISOはこの問題をどのように処理しますか?
これまで実行してみるdpkg --configure -a
と、すべてのパッケージを正しく構成するようですが、どうするのかよく分からず、パッケージ構成のために選択するトポロジーの順序も正しくありません。
理想的には、各パッケージに対してpreinstスクリプトを実行してから、そのパッケージを個別に構成する2段階のスクリプトが必要です。このような。
# Optional, if the preinst exists for the package.
DPKG_MAINTSCRIPT_NAME=preinst DPKG_MAINTSCRIPT_ARCH=amd64 DPKG_MAINTSCRIPT_PACKAGE=apt /var/lib/dpkg/info/<packagename>.preinst install
# Required, for every package.
dpkg --configure <packagename>
# ...repeated for each package, in topological order.
この問題のdebootstrap
回避multistrap
策は、dpkg
構成に使用されないことです。 preinst / postinstを手動で実行して/var/lib/dpkg/status
データベースを更新しますが、各スクリプトには説明しない固有の問題があります。
答え1
Debian システムの起動は Debian ポリシーの範囲外です。これらのメカニズムは、現在パッケージに含まれていないすべての暗黙的な情報(必須:はい、パッケージ間の依存関係)を含めるためにさまざまなブートストラップにコーディングされています。これはすべての新しいブートローダでこれらすべてを複製する必要があるため問題になり、疑わしい必須パッケージセットを変更するとこれらの仮定が壊れる可能性があるため脆弱です。
私たちはこの問題を改善するために努力していますhttps://wiki.debian.org/Teams/Dpkg/Spec/InstallBootstrap。インベントリツールをインポートし、パッケージメタデータとともにできるだけ多くのツールを削除しようとするmmdebtrapを確認することをお勧めします。したがって、これは上記の提案のPoC実装です。
mmdebtrapを使用することをお勧めします。ただし、これがオプションではなく、まだブートストラップを再実装する場合は、これらの暗黙の詳細について既存のさまざまなブートストラップソースを確認することをお勧めします。