debootstrap

Install

sudo apt install debootstrap

Use

sudo debootstrap --arch [平台] [发行版本代号] [目录]
sudo debootstrap --arch amd64 buster ./
# 此句收尾代表成功
# I: Base system installed successfully.

当前环境中 debootstrap 支持的发行版本可以在 /usr/share/debootstrap/scripts 查看,补充两个版本代号信息相关的链接有兴趣可以了解一下,版本代号网上都可以查到。

应用场景

构建一个编译环境

amd64架构debian10案例

# 创建环境进入
mkdir buster&cd buster
sudo debootstrap --arch amd64 buster ./
sudo chroot .

# 修改云源
echo deb http://mirrors.ustc.edu.cn/debian buster main > /etc/apt/sources.list
echo deb-src http://mirrors.ustc.edu.cn/debian buster main >> /etc/apt/sources.list
apt-get update

# 部分版本是没有装编译工具包的
apt-get install dpkg-dev
apt-get install debhelper

# 下载编译源码
cd /tmp
apt-get source redis
apt-get build-dep redis
cd redis.x.x
dpkg-buildpackage
find ../*.deb

从软件源构建一个系统的基础镜像

sudo debootstrap --no-check-gpg uranus/dc80 rootfs https://education-packages.chinauos.com/desktop-education sid
# 需要确保当前路径下 不存在 rootfs 目录 或者只有 空的 rootfs 目录。
sudo du --human-readable --summarize rootfs
391M    rootfs/

# 我这里省略了下面的步骤
# sudo mount --bind /dev     rootfs/dev
# sudo mount --bind /dev/pts rootfs/dev/pts
# sudo mount --bind /proc    rootfs/proc
# sudo mount --bind /sys     rootfs/sys


sudo chroot rootfs/

apt-get remove --allow-remove-essential e2fsprogs e2fslibs nano pinentry-curses whiptail kmod iptables iproute2 dmidecode
apt-get clean
find /var/lib/apt/lists/ -maxdepth 2 -type f -delete
exit

# 因为先前没有挂载,所以我也不用做这个步骤
# sudo umount rootfs/dev/pts
# sudo umount rootfs/dev
# sudo umount rootfs/proc
# sudo umount rootfs/sys

sudo du --human-readable --summarize rootfs
203M    rootfs/

sudo rm rootfs/var/log/bootstrap.log
sudo rm -rf rootfs/var/log/*
sudo rm rootfs/var/log/apt/*

sudo du --human-readable --summarize rootfs
203M    rootfs/

sudo su
tar -C rootfs/ -c . | docker import -
docker tag 259ce466a72d3d4c35c203d7912b7067ef4b1f85c1fdcc27aa1a0d0cd7afe4a9 registry.linakesi.com/uos-edu-desktop:loongarch64
  • 测试使用
docker run --rm -it registry.linakesi.com/uos-edu-desktop:loongarch64 bash
apt install git
# 测试成功
# 后续使用中如果有问题,考虑从 apt-get remove 操作中找原因,比如我发现执行 remove 时有 deepin-keyring 包被卸载。