在ArchLinux使用Systemd-nspawn安装Debian(Systemd-boot引导)

准备工作:
ArchLinux的机器
新的硬盘(分区)
GPT分区表


开始

1、安装debootstrap

执行pacman命令安装

1
pacman -Sy --needed --noconfirm debootstrap

debootstrap

2、创建安装分区

创建新的分区,用于安装系统

1
fdisk /dev/xxx

EFI分区可与ArchLinux原有EFI分区共用
安装分区因人而异,我为了简单,此处只创建一个分区用于整个系统文件的存放
创建分区

3、格式化分区

将刚创建的分区进行格式化
这里我以xfs文件系统为例子,其他文件系统详情请看文件系统介绍

1
mkfs.xfs /dev/xxx

格式化分区

4、挂载到本地

先创建用于挂载的目录

1
mkdir -p /containers/debian

挂载硬盘到刚创建的文件夹

1
mount -t xfs /dev/xxx /containers/debian

最后检查硬盘是否正确挂载

1
df -Th

挂载分区

5、拉取系统文件

这里我选择 bullseye 版本
其他版本可在 这里 查看

执行以下命令拉取系统

1
debootstrap --include=systemd-container --components=main,universe bullseye /containers/debian https://mirrors.bfsu.edu.cn/debian

拉取镜像
如下图结果即为成功
成功拉取镜像

6、初始化root密码

执行

1
2
3
systemd-nspawn -D /containers/debian
passwd root
logout

如图
设置root密码
尝试进入系统

1
systemd-nspawn -b -D /containers/debian

进入系统
如图输入密码成功然后关机即可
尝试登陆

7、挂载boot分区

将ArchLinux的boot绑定于debian中

1
mount -o bind /boot /containers/debian/boot

挂载boot分区

8、安装内核

开机

1
systemd-nspawn -b -D /containers/debian

查找最新的linux内核和headers

1
2
apt search linux-image-
apt search linux-headers

查找linux-image
查找linux-headers
安装
此处我选择我所能查到的最新 linux-image-5.10.0-10-amd64linux-headers-5.10.0-10-amd64

1
apt install -y linux-headers-5.10.0-10-amd64 linux-image-5.10.0-10-amd64

因为我已经安装,不想重复安装,所以就直接放安装完内核的图
内核存放位置
圈起来的部分即为安装完成的内核和内核模块

9、安装桌面

安装tasksel用于自动安装桌面

1
apt install aptitude tasksel

安装tasksel
输入 tasksel 回车开始安装桌面
复选框上下移动,空格选择,tab键可切换至ok,ok处回车开始安装
我这里举例gnome桌面,顺便安装ssh服务用于远程连接
安装gnome和ssh
选择键盘,第一个即可
选择美式键盘
结束后打开 /etc/pam.d/gdm-password
将图中圈起来的行加上#号注释
注销参数
/etc.pam.d/gdm-autologin里也一样
将开机设置为图形界面

1
systemctl set-default graphical.target

设置开机以图形启动

10、新建用户

输入useradd命令创建普通用户,这里用户名以sakunia为例

1
useradd -m -s /bin/bash -c sakunia sakunia

设置密码

1
passwd sakunia

创建用户和设置密码

11、配置fstab

现在可以输入 shutdown -h now 进行关机了
然后退回archlinux
安装arch-install-scripts(我们需要使用其中的genfstab工具)

1
pacman -Sy --needed --noconfirm arch-install-scripts

安装arch-install-scripts
卸载/containers/debian/boot,运行genfstab生成/etc/fstab文件用于开机挂载硬盘

1
2
umount /containers/debian/boot
genfstab -U /containers/debian > /containers/debian/etc/fstab

生成/etc/fstab
lsblk查看boot分区路径,用blkid查看efi分区uuid

1
2
lsblk
blkid /dev/sdb1

记下efi分区的uuid
查看efi分区UUID
使用vim打开/containers/debian/etc/fstab

1
vim /containers/debian/etc/fstab

在最后输入

1
UUID=7400-E9F1      	/boot     	vfat      	rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro	0 2

上面的uuid替换为你刚查找到的efi分区的uuid
如图
使EFI分区开机自动挂载

12、添加systemd-boot引导项

打开你的systemd-boot配置文件夹,我的在/boot/loader/entries

1
cd /boot/loader/entries

新建一份debian的引导配置文件
编写内容如图,关系如下

1
2
3
4
5
6
title    标题
linux /vmlinuz-5.10.0-10-amd64
initrd /initrd.img-5.10.0-10-amd64
initrd /config-5.10.0-10-amd64
initrd /System.map-5.10.0-10-amd64
options root=PARTUUID="xxx" rw


partuuid通过blkid查看,查看你根目录挂载的硬盘分区的partuuid

1
blkid /dev/xxx

填入如图圈起部分数据即可
根目录PARTUUID

安装工作完成,重启验证

输入bootctl list能找到引导项即可重启验证了
查看是否加载
重启得到如下界面即可
重启查看是否存在引导项
进入登陆界面

结束