Skip to content

云服务器安装 Arch Linux

服务器需要支持 VNC 连接,且服务器正在使用任意 Linux 操作系统,本文以 Ubuntu 18 为例

  1. 腾讯云:远程连接 - VNC 连接
  2. 阿里云:远程连接 - 救援模式,如果按键盘没反应,点击一次上方的“复制命令”

1. 准备工作

下载系统镜像,改名为 archlinux.iso 并放在根目录,有条件从内网下载

  • 腾讯云内网
sh
wget mirrors.tencentyun.com/archlinux/iso/latest/archlinux-x86_64.iso -O /archlinux.iso
  • 阿里云内网
sh
wget mirrors.cloud.aliyuncs.com/archlinux/iso/latest/archlinux-x86_64.iso -O /archlinux.iso

编辑 /boot/grub/grub.cfg,关闭自动选择启动项,并设置 30s 的等待时间

sh
cat << 'EOL' >> /etc/default/grub
GRUB_TIMEOUT=30
GRUB_TIMEOUT_STYLE=mune
EOL

update-grub

添加引导,其中的 /dev/vda1 为 archlinux.iso 文件所在的硬盘分区

sh
cat << 'EOL' >> /boot/grub/grub.cfg
menuentry 'Arch Linux LiveCD' {
    set isofile=/archlinux.iso
    set imgdevpath=/dev/vda1
    loopback lo0 $isofile
    linux (lo0)/arch/boot/x86_64/vmlinuz-linux img_dev=$imgdevpath img_loop=$isofile
    initrd (lo0)/arch/boot/x86_64/initramfs-linux.img
}
EOL

2. 启动镜像环境

打开 VNC 界面,输入 reboot 重启系统,在开机的引导界面选择最后一项 ”Arch Linux LiveCD“

等待 LiveCD 系统启动结束

3. 连接镜像环境

VNC 界面毕竟不够友好,建议直接用本地终端 ssh 连接服务器,先在 VNC 界面临时设置 root 密码为 passwd

sh
echo "root:passwd" | chpasswd

本地终端 ssh 连接,其中的 ip 就是服务器的 IP 地址

sh
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt root@ip

输入刚刚设置的密码 passwd

3.5. Warning

现在反悔还来得及,直接重启就行。以下操作极为危险,请先理解自己到底在干什么!

4. 清空数据

格式化硬盘,再挂载到 /mnt

sh
mkfs.ext4 /dev/vda1

mount /dev/vda1 /mnt

如果格式化硬盘失败了,尝试重设硬盘挂载权限,再挂载到 /mnt,手动删除数据

sh
mount -o rw,remount /dev/vda1
mount /dev/vda1 /mnt

rm -rf /mnt/*

输入 fdisk -l 命令查看硬盘分区表格式,本文需要确保使用 dos/mbr,而不是 gpt

输入 dd if=/dev/zero of=/dev/vda bs=512K count=1 命令可擦除硬盘分区表信息

5. 正式安装

关闭自动换源服务

sh
systemctl stop reflector

手动换源,有条件使用内网源

  • 腾讯云内网
sh
echo 'Server = http://mirrors.tencentyun.com/archlinux/$repo/os/$arch' > /etc/pacman.d/mirrorlist
  • 阿里云内网
sh
echo 'Server = http://mirrors.cloud.aliyuncs.com/archlinux/$repo/os/$arch' > /etc/pacman.d/mirrorlist

安装基本软件包、内核、开机引导、远程连接,生成磁盘信息标识

sh
pacstrap /mnt base linux-lts grub openssh

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

指定 nameserver 信息,有条件使用内网地址

  • 腾讯云内网
sh
echo nameserver 183.60.82.98 > /mnt/etc/resolv.conf
  • 阿里云内网
sh
echo nameserver 100.100.2.136 > /mnt/etc/resolv.conf

进入 chroot 环境

sh
arch-chroot /mnt

使用 ip addr 命令查看网卡名称,此处示例为 ens5

配置时区,语言环境,网络连接信息,Name 值为刚刚查看的网卡 ens5

sh
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

echo zh_CN.UTF-8 UTF-8 > /etc/locale.gen
locale-gen

echo pcs > /etc/hostname

cat << EOL > /etc/systemd/network/20-wired.network
[Match]
Name=ens5
[Network]
DHCP=ipv4
EOL

配置远程连接,此处设为必须使用密钥登陆,如果需要允许密码登录将 PasswordAuthentication 改为 yes

sh
cat << EOL > /etc/ssh/sshd_config.d/10-vps.conf
PermitRootLogin yes
PasswordAuthentication no
ClientAliveInterval 3600
PrintLastLog no
AddressFamily inet
UsePAM no
EOL

cat << EOL > /root/.ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPNwSU4IuTcE1fEkfooybSCM6gpChn7okmtBgblK1Bkx
EOL

设置 root 密码,自行修改,此处假设为 passwd

sh
echo "root:passwd" | chpasswd

配置自启动的基础系统服务和开机引导

sh
systemctl enable sshd systemd-networkd
grub-install --target=i386-pc /dev/vda
grub-mkconfig -o /boot/grub/grub.cfg

退出 chroot,重启

sh
exit

reboot

6. 其他

sh
fallocate -l 1G /boot/swapfile
chmod 600 /boot/swapfile
mkswap /boot/swapfile
swapon /boot/swapfile
echo '/boot/swapfile none swap defaults 0 0' >> /etc/fstab

pacman -S --noconfirm fish less
chsh -s /usr/bin/fish
mkdir -p /root/.config/fish/conf.d
cat << EOL > /root/.config/fish/conf.d/custom.fish
set fish_greeting
set LANG zh_CN.UTF-8
EOL

pacman -S --noconfirm nano
ln -sf /bin/nano /usr/local/bin/vim
cat << 'EOL' > /root/.nanorc
include "/usr/share/nano/*.nanorc"
set linenumbers
set tabstospaces
set constantshow
set tabsize 4
EOL

pacman -S --noconfirm fastfetch tree wget unzip lsof
mkdir -p /root/d