AI图鉴

AI图鉴首页 › AI 资讯 › 系统喷泉容器的旋风巡演

系统喷泉容器的旋风巡演

来源:Hacker News · 发布时间:10-24 · 由 AI图鉴每小时自动聚合

文章 URL: https://quantum5.ca/2025/03/22/whirlwind-tour-of-systemd-nspawn-containers/ 互联网档案馆的存檔,存档日期2013-12-02. 评论 URL:https://news.ycombinator.com/robject?id=50214983 点:25

系统喷泉容器的旋风巡演

在上一年的更新中,我谈到隔离我自办的LLMs

在 Ollama 中运行,并在 Open WebUI 中运行

并答应在博客上发表关于此事的文章。 然而,虽然

写博客文章

不小心变成了一个完整的博客文章。 这是真实的

(原始内容存档于2018-09-30). Point on systemd-nspawn.

基本上,systemd-nspawn是一个轻量级的Linux命名空间

容器技术,与Docker不异。 区别在于

主要是图像管理——而不是描述如何用

Docker 文件并分发预建的、只读的图像

正在运行的软件,系统d-nspawn通常使用可写字根

文件系统,功能更类似于虚拟机。 为了你们

记得使用chroot在不同的 Linux 运行软件

distro,也可以描述为类固醇上的chroot.

我认为在以下情况下,系统喷发特别有用:

- 当您想要运行一些软件,并在一定程度上与VPS隔离时,您无法创建完整的虚拟机,因为嵌入式虚拟化无法使用1;

- 当你需要共享硬件,例如GPU(这就是我运行的原因)

系统d-nspawn中的LLMs;

- 当你不希望虚拟化的间接费用时;

- 当您想要直接访问主机系统上的一些文件时,不需要

诉诸于virtiofs;

- 当你通常使用 Docker 时,详情请见脚注转文。

我将在这篇文章中

(a) 集装箱及其在某些常见情况下如何使用。

更新(2025-05-19):添加了更安全的阿尔卑斯山集装箱制造指令和一些关于设置阿尔卑斯Linux集装箱的更多指导。

从头开始

同所有容器一样,Systemd-nspawn需要一个单独的根f

目录。 因为没有图像管理器来为您构建图像

您需要使用传统的 Unix 方法来创建芯片。 没错

毕竟

在类固醇上。

对于系统喷发,典型的公约是将这些根置于

/var/lib/机器/[hostname],其中主机名是容器的。 对于

我将使用操作系统的名称作为主机名。

每个Linux distro都有自己创造新根的方法,我用Debian测试这些,但是你没有理由不能通过替换等效的软件包来做这些事情。 我可能会更深入地了解Debian

德比安家族的圈套

debootstrap在博客上多次出现

做一些疯狂的事情,比如从救援系统手动安装Debian.

对于基于Debian的Ditros,如Ubuntu或Debian本身,这是使用的工具

以创建根。

在基于Debian的OS上,用sudo apt安装debootstrap安装。 也许

或者你可以从Debian那里下载

仓库:

美元卷曲-L https://salsa.debian.org/installer-team/debootstrap/-/archive/master/debootstrap-master.tar.gz 焦油 xz 号

...

cd 脱钩主机/

./ 拆解陷阱

一:用法:[选择]. " 套装 " " 目标 " [ " 印象 " [ " 说明 " ]

...

不论您如何安装脱落陷阱,让我们在其中创建根

/var/lib/机器/设备:

sudo debootstrap - 包含=系统化、dbus、当地、bash-完成、curl书虫/var/lib/机器/debian

一:可以执行目标架构

一:获取释放

...

一:基地系统成功安装。

在这里,我们已经安装了书虫,但可以随意用这个代替

最新的Debian发行。 为了避免愚蠢的问题,我确保系统化

安装了dbus 和 locals 以避免奇怪的警告

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}这样我就不会讨厌我的生活 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}用手打命令

卷起来,以后再下载其中一些需要一点

我们一旦进入容器

安装带有 dnf 的 RHEL 衍生工具

首先,如果您在另一个Destro上,例如Debian上安装 dnf 和 rpm:

$ sudo apt 安装 dnf rpm

...

设置dnf(4.14.0-3+deb12u1).

设置 rpm( 4.1.8. 0+dfsg-1+deb12u1)...

...

美元 sudo mkdir -p/var/lib/rpm

$ sudo rpm --initdb

然后,我们做了一个费多拉41chroot作为一个例子:

美元 sudo mkdir -p/var/lib/机器/fedora/etc/dnf

美元 sudo tee/var/lib/机器/fedora/etc/dnf/dnf.conf >/dev/null

[菲多拉]

名称=Fedora $leaver - $basech

metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch (中文(中国大陆) ).

gpgkey=https://getfedora.org/static/fedora.gpg 页面存档备份,存于互联网档案馆。

[更新]

名称=Fedora $relever - $basearch - 更新

metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-发布-f$releaserver&arch=$basearch (中文(中国大陆) ).

gpgkey=https://getfedora.org/static/fedora.gpg 页面存档备份,存于互联网档案馆。

$ sudo dnf -- releasever=41 -- best -- setopt=install weak deps=False --repo=fedora --repo=updates --installroot=/var/lib/机器/fedora 安装 dnf Fedora-release glibc glibc-langpack-en Produtect iputils 较少 ncurses passwd systemwd system-networkd system-solved util-linuxvim-default-editor

...

交易摘要

================================================================================

安装137套软件包

下载总数:62 M

安装大小:206 M

这样可以吗 [y/N]: y

...

完毕!

安装高山 Linux 与高山- nspawn- install

阿尔卑斯 Linux因其轻量级而常见于Docker图像中,因此I.

我想我还是试着创造一个高山Linux芯片常规工具

这种事情是高山青蛙公司但它的默认行为

对我们来说很可怕例如:

- 如果当前目录在/home内部,它将它绑在芯片中

基于“兼容性原因”的配置,无需任何警告。 我差点

运行 rm -rf 时不慎删除了整个主目录

鸡。..

- 它把/dev,/proc,和/sys也挂进芯片。 就/dev而言,任何随后试图将容器磨成一团以利用

UID 隔离也会将主机系统上的所有设备都磨掉

导致一场灾难,幸运的是,它可以通过重启来修复。

之后可以运行一个疯狂的乌山命令来清理之后

阿尔卑斯-chroot-install,例如:

在读 -r 路径时挂载 grep / var/ lib/ 机器/ 阿尔卑斯语 {} cut - d' - f3\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

然而,我认为这是一个滴答的定时炸弹,等待着有人的脸上爆炸。

于是,我伪造了剧本并创建了阿尔卑斯-nspawn -install。

我的版本删除了所有疯狂的“地貌” 高山-chroot-install

系统化- nspawn 不合理,例如正在安装的 chroot 帮助脚本

qemu 支持等 2,同时安装一个更正常的列表

默认的软件包。 你可以像这样使用:

$get https://raw.githubusercontent.com/quantum5/alpine-nspawn-install/refs/heads/master/alpine-nspawn-install 互联网档案馆的存檔,存档日期2013-03-02.

...

2025-05-19 22:23:27(47.6 MB/s) - " 阿尔卑斯-nspawn-install " 省下 [15897/15897]

Sudo bashing alpine-nspawn-install - d/var/lib/机器/高山

...

---

阿尔卑斯山集装箱安装完成。

现在让我们看看阿尔卑斯山是否保持其声誉:

sudo du -sh/var/lib/机器/德比安

338M/var/lib/机器/设备

Sudo du -sh/var/lib/机器/食品

507M/var/lib/机器/粮食

Sudo du -sh/var/lib/机器/阿尔卑斯山

16M/var/lib/机器/高山

这的确令人印象深刻,阿尔卑斯山是一个较小的面积级

比其他两个,而费朵拉相当膨胀的包列表I

已经安装。 我不是Fedora的用户并且复制了软件包列表

因此我不确定是否是。

因为我已经安装了气泡,这是

肯定比Dnf所说的要大所以我看了一眼

在 /var/cache/dnf 下创建了260个米B。

也是为了让Debian更愉快地体验,消除“bloat”的结果为305 MiB,这个数目略小。

初始启动装置为系统化- nspawn

首先,安装系统d-nspawn与sudo apt安装系统化容器或

您的双份数。

然后,您可以通过运行以下命令在容器中获取根壳:

$ sudo systemd-nspawn - D /var/lib/机器/[名]-M [名]- 私人用户=选 - 私人用户-所有=chown

每一个论点都这样做:

- D( -- directory) 指定根的目录;

-M(-机器)指定机器名称,它也被设定为

容器内的主机名;

- -- 私人用户=选取范围

65536 UID和GID来自主机系统上一个未使用的块,从a开始

524288和18789826563之间的65536倍数。 备选案文

选项包括 " 是 ",选择从拥有的 UID 开始的区域

和 rootfs 的 GID( 必须是 65536 的倍数);否,它禁用 UID

命名间隔;整数,用于启动65536块的UID;或

格式 a:b 的字符串,其中 是开始的 UID 和数量

指定容器的UID;最后

- -- -- 私人用户 -- -- 所有权= -- -- 改变根茎的所有权。

未来靴子上 -- -- 私人用户=是

继续使用相同的UID和GID。

以Debian为例:

$ sudo systemd-nspawn - D/var/lib/机器/debian-M-debian - 私人用户=ick-私人用户-所有=chown

在/var/lib/机器/debian上注入容器。

按 ^] 1 以内3次杀死容器。

选定用户命名空间基础 17663262272 及范围 65536.

root@debian:~#

我们在新创建的Debian集装箱里。 注意,这只是一个

当然,没有

输入进程甚至。

Debian 特定设置提示

如果您要使用 root shell 大量的时间,想要自动完成以避免输入整个命令:

root@debian:~# cp /etc/skel/.bashrc .

root@debian:~# . ~/.bashrc

如果你只是使用容器运行一个应用程序,它可以得到

非常乏味地管理你自己的用户然后Sudo,所以我选择做

管理作为根,并有功能的.bashrc 工作令人惊奇。 这是

技术上不是最好的做法,但我基本上从来没有运行命令单

不需要根的应用程序容器,所以没有真实性

差别。

debootstrap还将主机主机名复制到/etc/hostname. 让我们决定

说明:

root@debian: ~# 主机名 >/etc/hostname

回到集装箱里

如果您出于某种原因离开了根壳,您可以回去做:

Sudo系统d-nspawn - D/var/lib/机器/debian-M-私人用户=是

在/var/lib/机器/debian上注入容器。

按 ^] 1 以内3次杀死容器。

选定用户命名空间基础 17663262272 及范围 65536.

root@debian:~#

准备容器

这样运行容器不是长期的解决办法。 你可能想设置它在背景中正常运行。 然而,这就留下了如何进入集装箱的问题。 如果您使用基于系统的Dentro,您有一些选项:

- 如果你想从主机进入容器,你不需要

当您看到如何直接使用外壳时

马特克特尔您也可:

- 设置一个带有 passwd 的根密码,这样您可以从终端登录:root@ debian: QQ passwd

新密码:

重新输入新密码:

passwd:密码成功更新

- 安装 Opensh- server 并设置 SSH 密钥以远程连接( 您也会使用)

需要建立网络联系

连接:root@debian:\\\ pt 安装 opensh- server

...

创建了符号链接/etc/systemd/sshd.service/lib/systemd/system/ssh.service.

创建了符号链接/etc/systemd/system/multi-user.goal.wants/sh.service/lib/systemd/system/ssh.service.

处理触发器

本文由 AI图鉴自动抓取并翻译,版权归原作者所有;如需查看原文请点下方链接。

相关 AI 工具

相关免费羊毛

同源资讯

阅读原文(quantum5.ca)

标题、摘要与正文均来自该信源的公开页面,版权归原作者所有;本站自动聚合与翻译,仅作出处跳转。

← 返回 AI 资讯列表AI工具图鉴首页

返回 AI图鉴首页 · 提交工具 · 商务合作 · 关于本站 · 590 款 AI 工具分类导航 · 每日 AI 热门项目与动态