我想对同一目标多次运行 debootstrap 。
我经常在途中无法访问互联网,并且希望离线运行它。
如何在可以访问互联网的情况下运行该流程,然后在没有互联网访问的情况下多次运行该流程?
我愿意使用包装器/替代品,如 multistrap 和缓存选项,如 apt-cacher-ng 或鱿鱼。
关键要求是我可以完全离线运行它。
答案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)
这里需要注意的两件事是脚本使用的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