给服务器系统换成archlinux
由于个人喜欢用archlinux,于是决定把服务器也整成archlinux,本文参考于https://nyac.at/posts/cloud-server-arch-linux,复制到这里防止找不到,侵删
下载 RootFS
首先呢我们得有一个 Arch 的 RootFS,也就是一个基本的包括 Arch Linux 根目录下所有文件的文件夹,一会儿要 chroot 进去。为了使用 chroot 这个功能
直接在 Arch 的下载页面 找一个离服务器比较近的镜像源,复制里面 archlinux-bootstrap 开头的 tar.gz 包的地址,下载到服务器的 /tmp 文件夹。其实这个时候可以 cd 到 /tmp 里面把不相关的文件都删掉了
1 | cd /tmp |
然后自然是要解包这个文件,顺便看看里面都有些啥
1 | tar -xzf arch* |
1 | bin boot dev etc home lib lib64 mnt opt proc README root run sbin srv sys tmp usr var |
这里面就像一个装好了的 Linux 的根目录一样,所以说是 RootFS 嘛
进入 chroot 环境
听说需要用 mount --bind
把 RootFS 解包的目录自己与自己链接起来,不然 pacman 会装不了软件。至于要是不知么做会发生什么,咱也没试过,妳们可以自行尝试
1 | mount --bind /tmp/root.x86_64 /tmp/root.x86_64 |
别急,由于这个 RootFS 包是最简安装,你看它只有 140MB 是吧,它里面甚至连个文本编辑器都没有。所以咱需要在 chroot 之前编辑一下镜像源的文件,启用自己喜欢的镜像源,这样 pacman 才能正常安装系统
1 | vim /tmp/root.x86_64/etc/pacman.d/mirrorlist |
好啦,现在可以正式进入 chroot 环境啦。不过呢用普通的 chroot 进去之后 /dev
之类的目录会是空的,不可以正常安装系统。要使用 Arch 镜像中的 arch-chroot
脚本,这个脚本会自动执行一些 mount 命令,把设备啊之类的都映射到 chroot 容器里面,咱就可以正常安装系统啦
1 | /tmp/root.x86_64/bin/arch-chroot /tmp/root.x86_64/ |
在 chroot 环境中给机器安装 Arch Linux
首先初始化 pacman 的密钥,pacman 就能正常使用啦
1 | pacman-key --init |
现在我们已经进入属于 Arch 的世界了,不会再想念原先的 Linux 发行版了。所以现在应该把原先发行版的文件消灭掉。由于我们现在运行的环境就在原先的分区上,所以直接格式化肯定是不行的。需要把原先的分区挂载到现在的系统中,然后把属于原系统的文件删删删
执行lsblk看一下分区
1 | lsblk |
1 | mount /dev/sda2 /mnt |
由于 Linux 系统中“一切皆文件”,像 /dev /proc /run /sys
这些目录都是存储到硬件的映射的,所以不能删。同时,我们工作的目录在 /tmp
下,swapfile
(如果有)是我们正在使用的 swap。咱们用 rm -rf
命令,把其余的文件都清除干净
像正常安装 Arch Linux 一样使用 pacstrap
向目标挂载点安装系统底层的软件包,并生成 fstab 挂载配置文件
1 | pacstrap /mnt base base-devel linux linux-headers linux-firmware vim dhcpcd openssh grub |
这时候系统安装就已经完成了
进入新系统
再通过 arch-chroot 切换到安装好的系统目录下,进入最后的系统配置和必备程序包的安装
1 | arch-chroot /mnt |
注意,要是在 chroot 的时候发生与 /etc/resolv.conf 挂载相关的问题,可以先执行
1 | umount /etc/resolv.conf |
然后再 chroot,进去之后执行
1 | echo 'nameserver 1.1.1.1' > /etc/resolv.conf |
否则可能会无法解析 IP。如果上面 chroot 时没有出现问题可以跳过这个
首先将时区设置为服务器地区的时间,如北京时间
1 | ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime |
开启一下必要的服务,这样重启之后就有网并且能通过 SSH 连上啦
1 | systemctl enable dhcpcd |
还需要给自己创建一个用户,Arch Linux 默认禁止以 root 身份远程登录。-m 的意思是为用户创建自己的主目录,wheel 是默认能执行 sudo 命令的用户组,可以更改sshd配置或者在root用户下添加ssh公钥登录root用户,具体可以google一下
1 | useradd username -m -G wheel |
回到 root 用户,保险起见,给 root 以及自己的用户设置好密码,这样要是无法公钥登录还能以密码登录
1 | passwd root |
编辑 sudo 配置文件,取消 %wheel ALL=(ALL) NOPASSWD: ALL 这一行的注释
1 | visudo |
最后创建引导文件,准备重启啦
1 | grub-install --target=i386-pc /dev/sda1 |
差不多了,进控制台重启服务器
重启啦
重启回来了,sudo 一下看看是否一切正常,正常的话咱就进 /etc/shadow 删除密码了,只保留私钥登录
启用一下网络时间同步
1 | timedatectl set-ntp true |
然后,就没有然后啦