[Share Experiences] 在UOSv20中使用distrobox部署deepin25子系统
Tofloor
poster avatar
MeGusta
deepin
2025-06-20 23:35
Author

办公室的台式机使用的是UOSv20,据统信官方所说,对UOSv20会有一段比较长时间的支持。同时,有时候会在deepin25下捣鼓一些东西,于是想到,如果能在UOSv20环境下,跟deepin23/25一样,使用distrobox来部署子系统,岂不美哉?

经过一些尝试,过程分享如下:

了解到distrobox也可以使用docker作为后端,而且distrobox程序只是一些脚本,并不会受系统组件的影响。

也尝试过安装podman,但是podman需要的依赖会与一些重要的组件冲突,为安全起见,就不搞了。

一、更新docker

UOSv20环境下的 docker-ce版本比较旧,不足以支持 distrobox的功能,我们来使用 debian10版本的 docker仓库来更新:

如果网络环境不好,可以下载这个缓存:

docker-buster-amd64-20250620.zip

docker-buster-arm64-20250620.zip

mkdir -p docker-buster
cd docker-buster
# 从docker仓库的buster目录下载所需deb
wget https://download.docker.com/linux/debian/dists/buster/pool/stable/amd64/containerd.io_1.6.31-1_amd64.deb
wget https://download.docker.com/linux/debian/dists/buster/pool/stable/amd64/docker-buildx-plugin_0.14.1-1~debian.10~buster_amd64.deb
wget https://download.docker.com/linux/debian/dists/buster/pool/stable/amd64/docker-ce-cli_26.1.4-1~debian.10~buster_amd64.deb
wget https://download.docker.com/linux/debian/dists/buster/pool/stable/amd64/docker-ce-rootless-extras_26.1.4-1~debian.10~buster_amd64.deb
wget https://download.docker.com/linux/debian/dists/buster/pool/stable/amd64/docker-ce_26.1.4-1~debian.10~buster_amd64.deb
wget https://download.docker.com/linux/debian/dists/buster/pool/stable/amd64/docker-compose-plugin_2.27.1-1~debian.10~buster_amd64.deb
wget https://download.docker.com/linux/debian/dists/buster/pool/stable/amd64/docker-scan-plugin_0.9.0~debian-buster_amd64.deb
# 从podman的kubic仓库下载新版本的slirp4netns,后面distrobox会需要
wget https://ftp.lysator.liu.se/pub/opensuse/repositories/devel%3A/kubic%3A/libcontainers%3A/stable/Debian_10/amd64/slirp4netns_1.1.8-4_amd64.deb

sudo apt install ./*.deb
# 将当前用户加入到docker组中
sudo usermod -aG docker $USER
# 将docker守护程序设置为开机启动
sudo systemctl enable docker

二、安装distrobox

缓存文件:distrobox-1.8.1.2.zip

# 自动安装
curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/install | sudo bash

# 如果不放心的话,可以手动检查代码之后再安装,本质上是一些bash脚本,并没有实际的编译过程
git clone https://github.com/89luca89/distrobox
cd distrobox
sudo make install

三、部署deepin25子系统

参照这个帖子:在deepin25环境中创建无磐石的deepin25子系统

只不过部署脚本调整成docker的版本:

#!/bin/bash

set -e

export DISTROBOX_USE_DOCKER=true

# 检查 distrobox 是否已安装
if ! command -v distrobox &> /dev/null; then
    echo "错误: 未检测到 distrobox,请安装后再运行此脚本。"
    exit 1
fi

CONTAINER_NAME="beige"
CUSTOM_TAG="deepin:beige"

# 获取脚本所在的目录
SCRIPT_DIR=$(dirname "$(realpath "$0")")

# 判断系统架构
arch=$(uname -m)
case "$arch" in
    x86_64)
        OSARCH="amd64"
        ;;
    aarch64)
        OSARCH="arm64"
        ;;
    *)
        echo "不支持的系统构架:$arch,仅支持 amd64 或 arm64"
        exit 1
        ;;
esac

echo "当前系统构架为:$OSARCH"

TARBALL="$SCRIPT_DIR/deepin-docker-rootfs-${OSARCH}.tar.gz"

# 导入 rootfs 到 docker 镜像
echo "导入 rootfs 到镜像..."
docker import "$TARBALL" "$CUSTOM_TAG"

# 创建 Distrobox 容器
echo "创建 Distrobox 容器..."
distrobox create \
  --name "$CONTAINER_NAME" \
  --image "$CUSTOM_TAG" \
  --volume /data:/data \
  --hostname "$CONTAINER_NAME" 

# 初始化容器(第一次进入会自动设置环境)
echo "初始化容器..."
distrobox enter "$CONTAINER_NAME" -- bash -c "exit"

# 安装玲珑环境
#echo "安装 linglong环境..."
distrobox enter "$CONTAINER_NAME" -- bash -c "
  sudo apt update 
"
#  &&  sudo apt install -y wget apt-file fuse-overlayfs linglong-bin linglong-box linglong-builder

echo "✅ 操作完成"
echo " 执行该命令以进入子系统:  distrobox enter $CONTAINER_NAME"

五、注意事项

不知什么原因,子系统部署之后,没有自动处理用户名绑定,会有两个错误提示:

问题1.当前用户名xxx没有在passwd文件中找到。

问题2.使用sudo时,当前用户名xxx不在sudoers文件中

解决方法:使用 docker exec进入到容器中,创建用户,设置密码,并将用户加入到 sudo组中:

# 进入容器,创建用户,设置密码,以用户名gisadmin为例
docker exec -it beige bash
useradd gisadmin
passwd
# 将gisadmin加入到sudo组中
usermod -aG sudo gisadmin

另外,还有一些小问题,例如 mount: /etc/localtime: special device /usr/share/zoneinfo/Asia/Beijing does not exist.

无伤大雅,应该可以通过修改目录映射来解决。

截图_选择区域_20250620234459.png

Reply Favorite View the author
All Replies

No replies yet