CelestialCosmic / themeblog

blog articles by Celestial_Cosmic,source code by chanshiyucx
1 stars 0 forks source link

archlinux 安装记录 #4

Open CelestialCosmic opened 3 years ago

CelestialCosmic commented 3 years ago

​ 记一次为云主机安装 archlinux

​ archlinux 具有滚动更新的特性,因此文章具有时效性,仅作为一个安装参考,或者碰到问题时可能可行的解决方式,请勿生搬硬套。

​ 自动脚本早已有大量现成的,但我依旧建议新手去尝试这个过程,通过这个过程,可以对 archlinux 有一个初步了解,也对计算机运行的基础有一定的认知。

起源

​ 其实本来就有一台位于日本东京的云主机,也是跑着自己装的 archlinux。不过它的丢包和卡顿令人难以接受,尽管在一段时间后还算是能用,最高能跑到 4.5 MB/s ,但是不影响在终端使用 ssh 时那三步一卡程度的卡顿,有一天在频道看到 vultr 在瑞典斯德哥尔摩开了新的机房,于是抱着试一试的心态去试一试。

​ 开了个最便宜的机子,熟练地改完密码然后 ssh 登入,近乎本地的速度!下课回来做完了自己的事情,马上打开终端开始安装。

安装过程一

​ 我推荐看 Y7n05h 写的安装指南,本篇只是个记录,会记录我操作中说一些和他所述过程中不同的地方。

进入 livecd 环境

​ 刚刚登入时有这个东西,如果这东西不消失就说明安装没有成功

To install Arch Linux follow the installation guide:
https://wiki.archlinux.org/index.php/Installation_guide

For Wi-Fi, authenticate to the wireless network using the iwctl utility.
For mobile broadband (WWAN) modems, connect with the mmcli utility.
Ethernet, WLAN and WWAN interfaces using DHCP should work automatically.

After connecting to the internet, the installation guide can be accessed
via the convenience script Installation_guide.

​ 没错,里面提到了一个安装指引,戳这里过去。

为硬盘分区

​ 首先用 lsblk指令检查硬盘的挂载,显示硬盘是vda

NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0   7:0    0 638.7M  1 loop /run/archiso/airootfs
sr0    11:0    1 774.3M  0 rom  /run/archiso/bootmnt
vda   254:0    0    25G  0 disk

​ 我使用了fdisk /dev/vda来分区

​ 这是我位于日本东京的设备的分区

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0     11:0    1 1024M  0 rom  
vda    254:0    0   25G  0 disk 
|-vda1 254:1    0    1G  0 part 
`-vda2 254:2    0   24G  0 part /

​ 因此我也会采用相同的方式对这台设备进行分区:

Command (m for help): n
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-52428799, default 2048): 2048
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-52428799, default 52428799): +1G

​ 这样就创建了一个 1G 的分区用于开 swap 。

​ 为了方便,下一个分区直接拿来当家目录,只要输入n然后一路按 enter 就行

Created a new partition 2 of type 'Linux' and of size 24 GiB.

​ 然后转换分区表类型(这一步很重要!)

安装过程二

设置分区表

​ 分区表类型可以通过t指令列出来

00 Empty            24 NEC DOS          81 Minix / old Lin  bf Solaris        
01 FAT12            27 Hidden NTFS Win  82 Linux swap / So  c1 DRDOS/sec (FAT-
02 XENIX root       39 Plan 9           83 Linux            c4 DRDOS/sec (FAT-
03 XENIX usr        3c PartitionMagic   84 OS/2 hidden or   c6 DRDOS/sec (FAT-
04 FAT16 <32M       40 Venix 80286      85 Linux extended   c7 Syrinx         
05 Extended         41 PPC PReP Boot    86 NTFS volume set  da Non-FS data    
06 FAT16            42 SFS              87 NTFS volume set  db CP/M / CTOS / .
07 HPFS/NTFS/exFAT  4d QNX4.x           88 Linux plaintext  de Dell Utility   
08 AIX              4e QNX4.x 2nd part  8e Linux LVM        df BootIt         
09 AIX bootable     4f QNX4.x 3rd part  93 Amoeba           e1 DOS access     
0a OS/2 Boot Manag  50 OnTrack DM       94 Amoeba BBT       e3 DOS R/O        
0b W95 FAT32        51 OnTrack DM6 Aux  9f BSD/OS           e4 SpeedStor      
0c W95 FAT32 (LBA)  52 CP/M             a0 IBM Thinkpad hi  ea Linux extended 
0e W95 FAT16 (LBA)  53 OnTrack DM6 Aux  a5 FreeBSD          eb BeOS fs        
0f W95 Ext'd (LBA)  54 OnTrackDM6       a6 OpenBSD          ee GPT            
10 OPUS             55 EZ-Drive         a7 NeXTSTEP         ef EFI (FAT-12/16/
11 Hidden FAT12     56 Golden Bow       a8 Darwin UFS       f0 Linux/PA-RISC b
12 Compaq diagnost  5c Priam Edisk      a9 NetBSD           f1 SpeedStor      
14 Hidden FAT16 <3  61 SpeedStor        ab Darwin boot      f4 SpeedStor      
16 Hidden FAT16     63 GNU HURD or Sys  af HFS / HFS+       f2 DOS secondary  
17 Hidden HPFS/NTF  64 Novell Netware   b7 BSDI fs          fb VMware VMFS    
18 AST SmartSleep   65 Novell Netware   b8 BSDI swap        fc VMware VMKCORE 
1b Hidden W95 FAT3  70 DiskSecure Mult  bb Boot Wizard hid  fd Linux raid auto
1c Hidden W95 FAT3  75 PC/IX            bc Acronis FAT32 L  fe LANstep        
1e Hidden W95 FAT1  80 Old Minix        be Solaris boot     ff BBT

​ 之前提到过,第一个分区用于做 swap ,所以输入1指定第一个分区后输入82

Changed type of partition 'Linux' to 'Linux swap / Solaris'.

​ 第二个分区上 NTFS ,然后格式化文件系统为 EXT4 ,这是我在第一次独立装 archlinux 时用大量时间换来的教训

​ 输入2指定第二个分区后输入7

Changed type of partition 'Linux' to 'HPFS/NTFS/exFAT'.

​ 最后输入a,指定2,使第二个分区能启动。

The bootable flag on partition 2 is enabled now.

​ 至此,分区就完毕了,在输入w完成修改后格式化分区。

格式化分区

​ 开启 swap 并格式化第一个分区为 swap 分区

swapon
mkswap /dev/vda1

​ 完成后显示如下内容,当然, UUID 肯定不一样

Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=d188d29e-1cfe-45f8-9582-4d8086388861

​ 然后格式化第二个分区为 ext4 分区

mkfs.ext4 /dev/vda2

​ 完成后显示如下内容

mke2fs 1.46.2 (28-Feb-2021)
Discarding device blocks: done                            
Creating filesystem with 6291200 4k blocks and 1572864 inodes
Filesystem UUID: f68e6d31-9ad7-44d6-8dfa-e7114e4e428a
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

​ 至此,格式化完毕,可以开始挂载了

安装过程三

挂载分区

​ 挂载主分区

mount /dev/vda2 /mnt

​ 然后挂载 swap 分区

swapon /dev /dev/vda1

​ 显示了一些错误:

swapon: /dev: insecure permissions 0755, 0600 suggested.
swapon: /dev: read swap header failed

​ 暂时不管,如果现在重启,再次登入 ssh 会发现密钥变化了然后不给你登入,比如像下面那样:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

​ 去.ssh文件夹把这个 IP 的对应内容清理掉就行,或者关掉严格模式。

​ 之后lsblk -f显示的长这个样

NAME  FSTYPE FSVER LABEL       UUID                                 FSAVAIL FSUSE% MOUNTPOINT
loop0 squash 4.0                                                          0   100% /run/archi
sr0   iso966 Jolie ARCH_202106 2021-06-01-16-48-49-00                     0   100% /run/archi
vda                                                                                
├─vda1
│     swap   1                 d188d29e-1cfe-45f8-9582-4d8086388861                [SWAP]
└─vda2
      ext4   1.0               f68e6d31-9ad7-44d6-8dfa-e7114e4e428a   22.2G     0% /mnt

安装过程四

安装基础组件

​ 更新软件列表

pacman -Syy

​ 在chroot前安装基础组件(nano是编辑器,可以选别的比如 vim 神教

pacstrap /mnt base base-devel linux linux-firmware linux-headers nano

速度大概是东京那台机子的几倍吧

chroot 并安装引导

​ 生成 fstab ,然后 chroot 完成剩余的操作:

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

​ 本地化就罢了,现在安装引导用的组件

pacman -S grub  efibootmgr dosfstools

​ 然后安装 grub (注意是 vda ,不是特定的分区

grub-install --target=i386-pc --force /dev/vda

​ 服务器是 BIOS 启动的设备的用这条指令,如果是 EFI 或者 UEFI 的设备使用的参数是有区别的

​ 没有什么意外地成功了,当年这里卡了我两个星期

Installing for i386-pc platform.
Installation finished. No error reported.

​ 现在创建 grub 引导配置

grub-mkconfig -o /boot/grub/grub.cfg

​ 运行输出如下:

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
Found fallback initrd image(s) in /boot:  initramfs-linux-fallback.img
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
done

理论上现在已经可以用了,不过不急,还有一些杂项需要配置。

安装过程五

设置用户

​ 现在可以创建一个用户了

useradd -m -G wheel user

​ 修改 user 的密码

passwd user

​ 现在我们有了一个叫 “user” 的帐号,并且他有了密码。但是这个用户是一个在wheel用户组里的普通用户,我们需要使用管理员的能力,因此我们需要修改使用 sudo 的权限

​ 输入指令:

EDITOR=nano visudo

​ 找到如下两行:

## Uncomment to allow members of group wheel to execute any command
# %wheel ALL=(ALL) ALL

​ 改成这个样子:

## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL

​ 保存退出

​ 离安装完成不远了!

安装过程六

预安装 ssh

​ livecd 里面自带 ssh ,但是不意味着安装好的设备有,我们需要安装 ssh

pacman -S openssh

​ 如果是普通用户则需要 sudo 的前缀

​ 如果安装完毕了,理论上现在重启后已经可以进入已经安装好的 archlinux ,如果没有移除介质的话依旧会显示开头安装介质的那一段话。

​ ctrl + D 退出

​ 在服务器提供商处弹出介质后重启(在提供商的管理面板处重启)

​ 在服务商提供的控制台等待“奇迹”的发生

​ 如果进入了 grub 的紧急模式,那就说明安装失败了,把安装介质装回去看看吧,怎么补救在最后面

终端配置

这里改名了哦,因为我们用的不是 livecd ,而是真真正正的 archlinux 了!

​ 这里有一些小内容需要使用人家提供的终端来完成

​ 此时我们面前的,是一个黑漆漆的终端:

Arch Linux 5.14.5-arch1-1 (tty1)

archlinux login: 

​ 输入用户名和密码后我们就已普通用户身份登入这台 archlinux 设备了

​ 现在不能使用 ssh ,因为网络配置文件是空的(准确来说现在这台设备连ping指令都无法回应),ssh 服务也没有开启,这些需要花一些时间来配置,此处只记录我所使用的方式:

开启 ssh 服务

先把 ssh 服务开了

sudo systemctl enable sshd
sudo systemctl start sshd

这里是我们在 archlinux 中第一次使用 sudo 指令,所以有一个君子协定:

We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility

我就不翻译了,输密码就是了

ip addr

输入后出现了一些内容,当然,我隐去了不少

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
......
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
......

重点就是enp1s0,在其他设备上也可能是别的名字,现在创建与名字对应的文件:

sudo nano ./enp1s0.network

没错,没有这个文件!按着这个方式写:

[Match]
Name=

[Network]
Address=
Gateway=
DNS=
DNS=

Name 写上面提到的 enp1s0 如果是别的就写对应的;Address 是带子网掩码形式的 IP 地址,服务商会提供,也可以自己算,计算方式就是 IP 子网掩码点分二进制的 1 的数量。(不懂的重修计算机网络);Gateway 由服务商提供,一般为默认网关,而默认网关也是可以自己算的;DNS 必须填入至少一个,具体哪个不作限制。

写完文件之后保存退出,随后输入如下指令:

sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd
sudo systemctl enable systemd-resolved
sudo systemctl start systemd-resolved

现在,我们就可以在自己设备的终端上登入了

ssh -p22 user@IPaddress

这样的操作每次登入都是需要密码的,可以设置免密登入

免密登入

我手里已经有密钥了,在本地终端中直接输入指令上传公钥文件

scp /home/user/.ssh/id_ed25519.pub user@IPaddress:/home/user

两个用户名需要相同,否则不被承认

ssh-copy-id -i /home/user/id_ed25519.pub user@IPaddress

输入密码后公钥即被安装

现在只要登入了这个用户,直接在终端中输入 ssh + IP 即可免密登入

ssh IPaddress

现在,这台设备就算彻底配置完毕了!

安装失败时的补救

重新将 livecd 挂载,随后重启

重启后重新挂载分区

mount /dev/vda2 /mnt

重新生成 fstab

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

优先补救主分区,swap 分区可以先不挂载,然后 chroot 。

arch-chroot /mnt

重新安装 grub

grub-install --target=i386-pc --force /dev/vda

重新生成引导配置

grub-mkconfig -o /boot/grub/grub.cfg

再次移除 livecd 后重启,如果依旧不能成功,还应当检查硬盘分区的分区表类型,但是如果是分区表类型错误的话......几乎和推倒重来没有太大区别了。

参考依据

Y7n05h的博客

archwiki安装指引

archwiki有关grub的内容

archwiki有关网络的内容