云服务器/VPS 安装Arch Linux (二)

适用于: 内存512MB以上的机器

我将使用一台512MB内存的机器进行演示,也是预装了Debian系统

预装其他系统也可以,我更推荐Debian

前言

从上一篇文章可以知道,整个过程中主要用到的就是airootfs文件,它一般是.sfs格式的.

我们先看看官方ISO镜像中airootfs.sfs文件的大小:

1

793MB的airootfs.sfs复制到2GB的内存中,完全没问题,可是对于内存低于1GB的机器,强行把793MB的airootfs.sfs文件复制到内存中进程会被kill掉。所以我就想,airootfs.sfs文件的大小再小些不就可以复制进内存了吗?于是我用archiso工具自制了ISO镜像,将整个镜像大小控制到400MB左右(镜像不断更新中),其中airootfs.sfs才318MB,现在就可以复制进512MB的内存中了.

2

所以第二种方法的核心步骤就是自制ISO镜像了,你可以根据官方的文档来构建,但我更推荐直接用我自制的(能帮你省不少时间):

archlinux-sitao-x86_64.iso

准备工作

1. 确定启动方式:传统BIOS还是UEFI?

1
ls /sys/firmware/efi 

如果提示No such file or directory就是传统BIOS启动,否则就是UEFI

我这台机器是传统BIOS启动

2. 确定当前系统的根分区

使用 df -hT命令查看

3

可以看到根分区是 /dev/sda1,即第一个硬盘的第二个分区,在grub中表示为(hd0,1)

3.确定是DHCP还是静态IP

执行 ip addr查看网卡

如果活动网卡有dynamic字眼说明是DHCP,否则是静态IP

如果是静态IP,把ip地址,子网掩码以及网关记下来

我这台机器是静态IP

使用自制ISO镜像

将你构建好的镜像拷贝到需要安装arch linux机的器上,或者直接下载我自制的archlinux的ISO镜像文件(推荐)

使用ssh工具连接你的VPS

1
2
mkdir /iso && cd /iso
wget https://dl.sitao.org/archiso/archlinux-sitao-x86_64.iso

配置GRUB

接下来,为了能够从ISO启动,我们需要编辑GRUB配置.

/etc/grub.d/40_custom文件中添加Arch Linux启动条目(根据你的情况修改,不能照搬):

1
2
3
4
5
6
7
8
9
10
cat << EOF >> /etc/grub.d/40_custom
menuentry "Arch Linux Sitao ISO" {
set root=(hd0,1)
set isofile="/iso/archlinux-sitao-x86_64.iso"
loopback loop \$isofile
echo "Starting \$isofile..."
linux (loop)/arch/boot/x86_64/vmlinuz-linux archisobasedir=arch img_dev=/dev/sda1 img_loop=\$isofile copytoram=y copytoram_size=350M cow_spacesize=100M
initrd (loop)/arch/boot/x86_64/initramfs-linux.img
}
EOF

copytoram=y这个选项是非常必要的,其作用是将airootfs文件(初始的根文件系统)复制到内存中运行,这样才能给硬盘重新分区和格式化!想了解更多启动参数请查阅: README.bootparams

copytoram_size=300M:设置300M的tmpfs,存放296MB的airootfs.sfs

cow_spacesize=100MCowCopy on Write。它使用内存来获得额外的空间,可以设置小一点,我这里是100MB

更新GRUB配置

如果是Debian或者Ubuntu系统,执行 update-grub

其他系统: grub-mkconfig -o /boot/grub/grub.cfg

VNC控制台操作

在你的VPS商家官网的控制面板找到VNC控制台并打开,先等VNC窗口加载出来

VNC窗口加载出来后,然后 reboot重启机器,接着立即在VNC窗口里按键盘上下箭头,会看到GRUB的菜单

按键盘向下箭头选择我们自定义配置的”Arch Linux Sitao ISO”,回车启动

4

稍等一会后会看到:

5

6

接下来我们可以开始安装arch linux了

我自制的镜像默认root密码为taoge233

可以 passwd修改密码,输入一个能记住的密码就好

商家提供的VNC窗口敲命令不太舒服,接下来用ssh工具以root用户和刚才修改的密码登陆机器

注意,如果你发现这时候ping不通机器,多半是因为你的机器用静态ip,需要在VNC里手动配置一下网卡

1
vim /etc/systemd/network/20-ethernet.network

输入以下内容

1
2
3
4
5
6
7
8
9
10
[Match]
Name=en*
Name=eth*

[Link]
RequiredForOnline=routable

[Network]
Address=ip地址/子网掩码网络号位数
Gateway=网关

:wq 保存退出

1
systemctl restart systemd-networkd #重新加载网络

安装过程

硬盘分区并格式化

使用 fdisk工具进行分区,这里将分三个区

1
fdisk /dev/sda

如果是UEFI模式,按g创建gpt分区标签; 如果是传统BIOS模式,按o创建dos分区标签;剩下的步骤都一样

如果你机器内存也是512MB,那么此刻的内存资源是非常紧张的,必须启动swap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Command (m for help): o
Created a new DOS (MBR) disklabel with disk identifier 0xf3173a57.

Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-10485759, default 10485759): +100MB

Created a new partition 1 of type 'Linux' and of size 95 MiB.
Partition #1 contains a ext4 signature.

Do you want to remove the signature? [Y]es/[N]o: Y

The signature will be removed by a write command.

Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (196608-10485759, default 196608):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (196608-10485759, default 10485759): +512MB

Created a new partition 2 of type 'Linux' and of size 488 MiB.

Command (m for help): n
Partition type
p primary (2 primary, 0 extended, 2 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (3,4, default 3): 3
First sector (1196032-10485759, default 1196032):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1196032-10485759, default 10485759):

Created a new partition 3 of type 'Linux' and of size 4.4 GiB.

按p输出分区结果,按w保存分区信息

7

/dev/sda1是引导分区, /dev/sda2是swap, /dev/sda3是根分区

[其实在传统BIOS启动模式下 划分根分区就够了。这里我还是按UEFI启动来划分了,仅供参考]

按q退出fdisk

格式化分区

1
2
3
4
mkfs.fat -F32 /dev/sda1
mkfs.ext4 /dev/sda3
mkswap /dev/sda2
swapon /dev/sda2

/dev/sda1是引导分区,必须是fat格式

/dev/sda3是将来系统的根分区

/dev/sda2则是swap分区,缓解内存压力

挂载根分区,准备开始正式安装

1
mount /dev/sda3 /mnt

配置镜像源

1
vim /etc/pacman.d/mirrorlist

选择一个合适的镜像源即可

初始化 Pacman 密钥:

1
2
pacman-key --init 
pacman-key --populate archlinux

同步软件包数据库并安装基础系统

1
2
pacman -Sy
pacstrap /mnt base linux

生成文件系统表

1
genfstab -U /mnt > /mnt/etc/fstab

切换到新系统的根目录

1
arch-chroot /mnt

配置 DNS

1
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

安装常用软件包

1
pacman -S vim openssh grub bash-completion htop curl wget

SSH服务开机自启

1
systemctl enable sshd

设置时区和硬件时钟

1
2
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc

配置主机名和 hosts 文件

1
echo "archlinux" > /etc/hostname
1
2
3
4
5
cat << EOF > /etc/hosts
127.0.0.1 localhost
::1 localhost
127.0.1.1 archlinux.localdomain archlinux
EOF

配置 GRUB 引导加载程序(最重要)

根据 BIOS 或 UEFI 配置 GRUB

传统BIOS

1
2
grub-install /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

UEFI

1
2
3
4
pacman -S efibootmgr
mkdir /boot/efi && mount /dev/sda1 /boot/efi
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg

网络配置

根据实际情况配置:

DHCP 配置

1
2
3
4
5
6
7
8
9
10
11
cat << EOF > /etc/systemd/network/20-ethernet.network
[Match]
Name=en*
Name=eth*

[Link]
RequiredForOnline=routable

[Network]
DHCP=ipv4
EOF

静态 IP 配置

1
2
3
4
5
6
7
8
9
10
11
12
cat << EOF > /etc/systemd/network/20-ethernet.network
[Match]
Name=en*
Name=eth*

[Link]
RequiredForOnline=routable

[Network]
Address=ip地址/子网掩码网络号位数
Gateway=网关
EOF

网络服务开机自启

1
systemctl enable systemd-networkd

passwd设置root用户密码

确保每次启动时 DNS 配置正确(个人喜好)

1
echo "echo 'nameserver 8.8.8.8' > /etc/resolv.conf" >> /etc/profile

至此,Arch Linux 安装和基本配置已完成

exit退出arch-chroot环境

reboot -f重启系统后就能够正常启动!

8

期间阅读的文档:

https://wiki.archlinuxcn.org/wiki/Archiso

https://github.com/archlinux/archiso/blob/master/docs/README.profile.rst

https://gitlab.archlinux.org/archlinux/mkinitcpio/mkinitcpio-archiso/blob/master/docs/README.bootparams