Distrobox
在终端内使用任何 Linux 发行版。
软件包包名:distrobox
发行商: openSUSE
开发者: 89luca89
许可证: GPL-v3
网站: https://github.com/89luca89/distrobox
简介
Distrobox 环境基于 OCI 镜像。该镜像用于创建一个容器,通过提供对用户主目录、Wayland 和 X11 套接字、网络、可移动设备(如 USB 记忆棒)、systemd 日志、SSH 代理、D-Bus、ulimits、/dev 和 udev 数据库等资源的访问,与操作系统的其余部分无缝集成。
Distrobox 实现了 toolbox 引入的相同概念,但使用 POSIX sh 以简化的方式实现,旨在实现更广泛的兼容性。
Distrobox 出现的原因:
- 为了在不可变操作系统上提供可变环境,例如 Endless OS、Fedora Silverblue、OpenSUSE MicroOS 或 SteamOS3;
- 为 sudoless 设置提供本地特权环境(例如,公司提供的笔记本电脑、安全原因等……);
- 为了将稳定的基础系统(例如 Debian Stable、Ubuntu LTS、RedHat)与前沿的开发或游戏环境(例如 Arch、OpenSUSE Tumbleweed 或带有最新 Mesa 的 Fedora)混合搭配;
- 为了利用 docker/podman 的大量精选发行版映像来管理多个环境。
Distrobox 的目标:
Distrobox 项目旨在将任意发行版用户空间引入其他支持 podman 或 docker 的任意发行版。它是用 POSIX sh 编写的,以便尽可能可移植,并且不存在依赖性和 glibc 版本兼容性问题。
请参阅此处以获取支持的容器管理器和最低支持版本的列表。
它还旨在尽快进入容器。
常用命令
distrobox-assemble #根据配置文件创建和销毁容器 distrobox-create #创建容器 distrobox-enter #进入容器 distrobox-ephemeral #创建一个临时容器,退出 shell 时销毁它 distrobox-list #列出使用 distrobox 创建的容器 distrobox-rm #删除使用 distrobox 创建的容器 distrobox-stop #停止使用 distrobox 创建的正在运行的容器 distrobox-upgrade #一次性升级一个或多个使用 distrobox 创建的正在运行的容器 distrobox-generate-entry #在应用程序列表中创建已创建容器的条目 distrobox-init #容器的入口点(不能手动使用) distrobox-export #用于将应用程序和服务从容器导出到主机 distrobox-host-exec #在容器内部从主机运行命令/程序
它还包括一个小包装器,用于使用 distrobox COMMAND
启动命令,而不是调用单个文件。
请在此处查看使用文档并查看一些有关如何使用它的便捷提示
安装
对于 tumbleweed 用户:
sudo zypper in distrobox
Leap 用户请查阅 distrobox 页面查找适用于当前系统的社区软件包或者参考开发者记录的其他安装办法。
快速开始
新建一个 distrobox:
distrobox create -n test
进入新建的 distrobox:
distrobox enter test
添加一个不同的发行版,例如 Ubuntu 20.04:
distrobox create -i ubuntu:20.04
在 distrobox 中执行命令:
distrobox enter test -- command-to-execute
列出正在运行的 distrobox:
distrobox list
停止正在运行的 distrobox:
distrobox stop test
删除 distrobox:
distrobox rm test
您可以在此处查看更多高级用法,并在此处查看有用提示的完整列表。
配置 Distrobox
配置文件可以放置在以下路径中,以下列表从最不重要到最重要进行排序:
- /usr/share/distrobox/distrobox.conf
- /usr/etc/distrobox/distrobox.conf
- /etc/distrobox/distrobox.conf
- ${HOME}/.config/distrobox/distrobox.conf
- ${HOME}/.distroboxrc
您可以指定内部 distrobox 配置和 distrobox 特定的环境变量。
配置文件示例:
container_always_pull="1" container_generate_entry=0 container_manager="docker" container_image_default="registry.opensuse.org/opensuse/toolbox:latest" container_name_default="test-name-1" container_user_custom_home="$HOME/.local/share/container-home-test" container_init_hook="~/.local/distrobox/a_custom_default_init_hook.sh" container_pre_init_hook="~/a_custom_default_pre_init_hook.sh" container_manager_additional_flags="--env-file /path/to/file --custom-flag" container_additional_volumes="/example:/example1 /example2:/example3:ro" non_interactive="1" skip_workdir="0" PATH="$PATH:/path/to/custom/podman"
或者,可以使用 ENV 变量指定首选项:
DBX_CONTAINER_ALWAYS_PULL DBX_CONTAINER_CUSTOM_HOME DBX_CONTAINER_IMAGE DBX_CONTAINER_MANAGER DBX_CONTAINER_NAME DBX_CONTAINER_ENTRY DBX_NON_INTERACTIVE DBX_SKIP_WORKDIR