前因

由于我经常需要用到 Linux 就不可避免的要经常需要安装各种 Linux 实在是非常耗费时间的事情,装系统可能不下于百次了。

每次装系统都要花费许多时间,于是我就考虑能不能写一个脚本让其自动化安装,以节约时间。

虽然现在安装 Linux 非常方便,尤其是带有良好的安装界面,基本上只要点击下一步就能够装好。

但是我的需求是不需要带有 GUI 的,毕竟在虚拟机上使用 GUI 体验并不是非常好。

选择发行版

最早开始我使用的是 Ubuntu 然后是 CentOS 其中 Ubuntu 用的比较多,服务器用 CentOS 比较多。那时候安装没现在这么方便,加上是新手安装起来还是非常费劲的。

然后又了解到了 Mint ,这是一个长期在桌面发行版排第一的系统,使用起来非常不错,也一度成为我的首选。直到2年前我接触到了 Manjaro 然后就选定了以后就用它了。

于是我到现在一直个人使用都是首选 Manjaro ,期间也使用过 Deepin 在国内要使用微信、QQ等软件,用 Deepin 是非常方便的。但是我还是选择了 Arch 系的 Manjaro ,选择这个的原因是安装软件实在是太方便了,软件仓库有非常丰富的软件,包括QQ、微信等。常见的 DDE(深度桌面) 都有社区版本,虽然我们可以自己编译来解决安装软件的问题,但是编译一个软件需要安装各种编译环境,还需要花费太多时间在这上面,到不如直接用现成的,可以把节约的时间花到更重要的事情上。而且有时候事情还非常紧急,这时候有一个非常快速方便安装的方法那就能省下很多时间,进而快速解决问题。

我现在的需求就是一个不需要 GUI Linux ,所以就选择了 ArchLinux

分区方案

看一下脚本中的分区方案

挂载点 大小
/boot 512M
swap 2G
// 10G
/home 10G

这是我的分区方案,可以根据自己的需要进行更改

完整脚本

 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
timedatectl set-ntp true

fdisk /dev/sda <<EOF
n
p
1

+512M
n
p
2

+2G
n
p
3

+10G
n
p

+10G
w
EOF

mkfs.vfat -F32 /dev/sda1
mkswap /dev/sda2
swapon /dev/sda2
mkfs.ext4 /dev/sda3
mkfs.ext4 /dev/sda4

mount /dev/sda3 /mnt
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot
mkdir /mnt/home
mount /dev/sda4 /mnt/home

pacman -Syy

pacstrap /mnt base linux linux-firmware vim git

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

arch-chroot /mnt <<EOFARCH
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc

sed -i 's/^#en_US.UTF-8/en_US.UTF-8/' /etc/locale.gen
sed -i 's/^#zh_CN.UTF-8/zh_CN.UTF-8/' /etc/locale.gen
locale-gen

echo "LANG=en_US.UTF-8" >> /etc/locale.conf

cat>>/etc/hosts<<EOF
127.0.0.1	     test
::1	    	test
127.0.1.1	     test.localdomain	   test
EOF

pacman -S --noconfirm dhcp wpa_supplicant dialog networkmanager zsh sudo
systemctl enable NetworkManager

passwd<<EOF
test
test
EOF

useradd -m -G wheel -s /bin/zsh test

passwd test<<EOF
test
test
EOF


pacman -S --noconfirm grub
grub-install /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

EOFARCH

前面都是一下安装指令,后面的就是一些配置,包括新建账号、 zsh 的配置,最后就是安装 GRUB 来进行引导。这是很关键的一步,这边如果出错了,基本上连系统都进不去。

后记

这里还省略了很多步骤,比如下载镜像,制做启动盘之类的。不过由于我是在虚拟机中安装的所以并需要这一步。

有了这上面的脚本,你需要做的就是下载镜像,然后执行这个文件。我是通过 scp 把文件发送到安装系统中,然后执行的,当然你也可以从网络上直接下载,然后执行也是一样的。

执行后你就需要等待一段时间,网速快的话就十几分钟,慢的话也要半个小时。

这个脚本在 Parallels Desktop 和 VirtualBox 中测试有效。

为什么不使用 Docker

Docker 适合做容器,我可能需要多个开发环境,如果都跑一个容器那也是非常麻烦。