如何離線執行 debootstrap?
我想為同一個目標多次執行 debootstrap。
我經常在沒有網際網路訪問的情況下執行它,並且想離線執行它。
如何通過網際網路訪問執行該過程,然後在沒有網際網路訪問的情況下執行多次?
我願意使用包裝器/替代品,如 multistrap 和記憶體選項,如 apt-cacher-ng 或 squid。
關鍵要求是我可以完全離線執行它。
您可以按原樣使用 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
如果您想多次使用相同的配置安裝 Linux,請
--foreign
在安裝時先使用該選項啟動系統。例如,以下引導 Ubuntu zesty 進入目錄“deboot”sudo debootstrap --foreign zesty deboot
然後,您可以保留 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)
這裡要注意的兩件事是腳本使用的
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: detect_container: not found”。