同じターゲットに対してdebootstrapを複数回実行したいと思います。
インターネット接続なしで移動することが多く、オフラインで実行したいと思います。
インターネットアクセスでプロセスを実行し、インターネットアクセスなしでプロセスを複数回実行するにはどうすればよいですか?
私はマルチストラップなどのラッパー/代替を使用し、apt-cacher-ngやsquidなどのキャッシュオプションを使用するために開いています。
重要な要件は、完全にオフラインで実行できることです。
答え1
同じ構成でLinuxを複数回インストールするには、インストール時にシステムを--foreign
最初に起動するオプションを使用してください。たとえば、次のコマンドはUbuntu zestyを "deboot"ディレクトリとして起動します。
sudo debootstrap --foreign zesty deboot
その後、起動ディレクトリを参照として保持してsecond-stage
再利用し、そのオプションを使用するたびに新しい作業ディレクトリにコピーできます。
mkdir work
cd work
sudo cp -r ../deboot .
sudo DEBOOTSTRAP_DIR=deboot/debootstrap/ debootstrap --second-stage --second-stage-target $(readlink -f deboot)
ここで注目すべき2つのことは、スクリプトが使用するDEBOOTSTRAP_DIR
環境変数(よく文書化されていない)とオプションにフルパスが必要であることdebootstrap
です。second-stage-target
--make-tarball=[file]
別のオプションは、パッケージをダウンロードできるパラメータを使用することです。その後、--unpack-tarball=[file]
そのパッケージをターゲットディレクトリに配置するために使用できます。
他のソースまたは共有フォルダのキャッシュを再利用するには、apt-proxy または cp -a packages /var/cache/apt/archives/ を使用します。しかし、debootstrap
まだ接続しようとしているので、完全にオフラインではありません。InRelease
リモートリポジトリからファイルをインポートしてインターネットを使用してください。
メモ:このソリューションはdebootstrap v1.0.105(2018-07-01)以前のバージョンでのみ機能します。。内部環境変数をオーバーライドするため、debootstrapが "/usr/share/debootstrap/functions"ライブラリ(2007年にコミットを最初にインポートした後にdebootstrapの一部であった関数定義セット)を取得するのを防ぎます。v1.0.106(2018-07-05)以降、「Detect_container」関数が呼び出されます。このライブラリで定義されています。これにより、debootstrapが "/usr/sbin/debootstrap: 54: /usr/sbin/debootstrap: detector_container: not find"で失敗します。
答え2
squid-deb-proxyをそのまま使用してオフラインで実行できます(ファイルを含むInRelease
)。ただし、debootstrapをオフラインで実行するには、オンラインの場合でも少し変更する必要があります。
squid-deb-proxy.confファイルを変更する必要があるので、コピーを作成してプロジェクトに入れます。
confファイルには絶対パスがあるため、/etc
システム/var
から分離するには相対パスで変更する必要があります。
オンラインでプロキシを引き続き使用するには、それをconfファイルに追加する必要があります。
#Use cached values when offline
offline_mode on
その後、次のように起動できます。
mkdir -p squid/var/log/squid-deb-proxy
mkdir -p squid/var/run/
echo "Starting an instance of squid using the working dir for caches and logs instead of the system dirs"
squid -Nf squid/squid-deb-proxy.conf
それから始める前にdebootstrap
#Use a caching proxy to save bandwidth
export http_proxy=http://127.0.0.1:8000