自定义Fedora Toolbox镜像
图源:LINO - 崩壊3rd繫体字版6周年 108386100
Toolbox 可看做是Podman的Wrapper,力求将容器与主机的操作系统(Host OS)无缝集成。与Toolbox类似的工具还有Distrobox。它们在牺牲一些容器安全性(端口控制、资源控制、文件的独立性等)的情况下可以做到:
- 用户穿透:在容器中使用与当前Host user一样的user与home目录;
 - 设备穿透:直接使用Host的
/dev、/media等; - 网络穿透:直接使用Host网络,获得与主机一致的网络体验;
 - 服务穿透:通过直接使用Host的
/run/user/<uid>和/tmp以及关键服务的Socket,实现在容器中访问主机的显示服务(X11/Wayland)、网络服务(Avahi)、D-Bus、systemd journal等; 
因此,Toolbox可以用来:
- **作为不可变系统的软件安装方式之一。**如Fedora Silverblue、Fedora CoreOS等不可变系统中均预装Toolbox,另一些不可变系统中可能预装Distrobox;
 - 使用其他发行版的镜像,在当前发行版中无缝运行针对其他发行版制作的程序。如在Fedora下运行只提供Ubuntu deb包的GUI程序;
 - 在没有Host的root权限时创造一个假root环境。如非privileged的Toolbox容器同样可以使用
sudo dnf install安装软件;- 需要镜像中预装sudo,并支持
sudo、wheel组获取root权限,且支持NOPASSWD选项; 
 - 需要镜像中预装sudo,并支持
 - 使用不同版本的镜像实现**“旧程序运行在新系统上”或“新程序运行在旧系统上”**,或对程序进行兼容性测试;
 - 可以通过对镜像进行自定义,实现快速且一致的开发环境搭建;
 
创建自己的Toolbox镜像
符合OCI标准的容器镜像均可被Toolbox使用。换言之,依照通常的Docker镜像构建方法就可以构建自己的Toolbox镜像。
Fedora社区持续维护着Fedora的Toolbox镜像构建文件 container/fedora-toolbox,GitHub上也有社区维护的各主流发行版的Toolbox镜像 toolbx-images/images。
以Fedora的Toolbox镜像为例,以下是官方给出的Dockerfile示例:
1  | # 使用fedora:37,而不是fedora-toolbox:37  | 
同时还需要三个额外的文件 ensure-files、extra-packages和missing-docs。
想增加或删减Toolbox中的镜像,可直接修改extra-packages文件,修改时尽量保证每行只有一个软件包的包名。也可以仿照上述Dockerfile的[C]节,在不修改extra-packages文件时使用自定义文件;
仿写:
1  | COPY added-packages /  | 
added-packages例子:
1  | nodejs  | 
给Toolbox镜像增加中文支持
可以通过修改LANG变量、重新生成语言文件、安装中文字体等方法使Toolbox内的命令行/GUI程序支持并默认显示中文。
- 添加语言文件:在上述Dockerfile示例的
[B]节前添加如下内容 
1  | # 中文语言  | 
- 安装字体和输入法:在上述Dockerfile示例的
[C]节或[D]节前添加如下内容 
1  | 
  | 
- 设置
LANG环境变量:在上述Dockerfile示例的最后添加如下内容 
1  | # 设置环境变量  | 
使用Toolbox镜像
以自定义镜像的tag为a.com/fedora-toolbox-customized:37为例:
- 通过
podman拉取自定义镜像 
1  | podman pull a.com/fedora-toolbox-customized:37  | 
- 使用
toolbox创建容器 
1  | # 容器名可以随意指定  | 
- 进入容器环境或执行容器内特定程序
 
1  | # 当主机只有一个Toolbox容器时,会直接进入该容器  | 
删除Toolbox容器和镜像
1  | # 需要退出所有正在使用Toolbox Shell/命令行程序/GUI程序的窗口  | 
自定义Fedora Toolbox镜像
https://www.zhouweitong.site/2023/09/14/fedora-toolbox-custom-image/
