如何离线运行debootstrap?

如何离线运行debootstrap?

我想对同一目标多次运行 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

相关内容