Kimsufi KS-4 在 Rescue 模式下安装 Ubuntu 18.04

这两天 KS-4 搞特价,4T 硬盘只要 9o,是公网保种机的绝佳配置,于是买买买。下机以后发现默认的系统模板沙雕了,/ 分区不能使用 SoftRaid0 方式挂载,虽然可以曲线救国把 /root 分一大块出来做 R0,但是我不喜欢这种分区方式,于是就想办法重装这个系统。

一开始我测试了 Airium 修改的 Vicer 重装脚本,这个脚本可以把 iKoula 的机器重装成 Raid0,然而不知道为什么一重装就 SSH 不通,遂放弃。在考察了 KS 的后台分区以后,发现 / 分区只能做成 Raid1,并且无法在上面配置 LVM,看来走官方模板的路子是走不通了。于是就剩下一个方法,在 Rescue 模式下手动安装系统。

KS 的机器在 Rescue 下安装系统主要有两个方法,一是使用 dd 安装 Windows,这不是我想要的,而且我也没有 Ubuntu 的 dd 镜像;二是下载系统镜像的 iso 安装包,使用 QEMU 将硬盘挂载以后在虚拟环境中完成安装。奈何 N2800 这个 CPU 过于古老,没有 VT-x 指令集,因而无法运行 QEMU,只好另辟蹊径。

在寻找如何在 Linux 下安装一个 ISO 文件的过程中,偶然发现了 Debian 系的 debootstrap 脚本,这个脚本可以在任何 Linux 环境下安装 Debian 系的 Linux。作为 Debian 的下游,Ubuntu 也有这个脚本,在一些文档的帮助下,我感觉这条路是可行的。

从一个比较 high-level 的角度来看,使用 debootstrap 安装系统需要如下几步:

  • 备份原系统的网络配置(不然等下 SSH 连不上)
  • 硬盘分区,配置 SoftwareRAID
  • 挂载硬盘
  • 在挂载文件夹下运行 debootstrap
  • chroot 进入新系统
  • 在 debootstrap 完成的基础系统中完成硬盘挂载、SSH、网络和引导的配置
  • 将启动方式还原为 local disk,重启

接下来是详细的步骤

备份网络配置

由于我要安装的是 Ubuntu 18.04,因此知道 OVH 的网络配置的最佳方法就是用官方模板装一遍,然后把配置弄出来。在安装之后,发现 OVH 并没使用 netplan,也没有使用之前的 ifupdown 文件,而是直接写了 systemd-networkd 的配置文件。需要备份的是这两个文件:

  • /etc/systemd/network/50-default.network
  • /etc/systemd/network/50-public-interface.link

文件名可能不同,但是基本就是在这个目录下。对于老版本的系统,备份 /etc/network/interfaces。

硬盘分区

理想的分区情况是这样的,两块盘 /dev/sda 和 /dev/sdb,分一个 512M 的区做 R1 挂载在 /boot,剩下的挂载在 /,swap 这里不考虑,装好了以后写一个文件作为 swap 是很方便的事情。

分区使用命令 fdisk,比如 fdisk /dev/sda,之后进入命令行交互环境。一个典型的配置情况如下:

root@rescue:/mnt# fdisk /dev/sda

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xc1d78def.

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-3907029167, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-3907029167, default 3907029167): +512M

Created a new partition 1 of type 'Linux' and of size 512 MiB.

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):
First sector (1050624-3907029167, default 1050624):
Last sector, +sectors or +size{K,M,G,T,P} (1050624-3907029167, default 3907029167):

Created a new partition 2 of type 'Linux' and of size 1.8 TiB.

按 n 增加分区,然后输入 p 作为 primary 分区,然后指定大小,默认是全部,因此第一个分区输入 +512M,第二个保持默认就好。

之后用 fdisk -l 可以看到当前的分区情况:

root@rescue:/mnt# fdisk -l /dev/sda

Disk /dev/sda: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc1d78def

Device     Boot   Start        End    Sectors  Size Id Type
/dev/sda1          2048    1050623    1048576  512M 83 Linux
/dev/sda2       1050624 3907029167 3905978544  1.8T 83 Linux

/dev/sdb 如法炮制即可。

创建 RAID 设备

使用命令 mdadm,先删除之前所有创建的 md,之后再创建新的,命令如下:

mdadm --stop /dev/mdX
mdadm --remove /dev/mdX
mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sda1 /dev/sdb1
mdadm --create --verbose /dev/md1 --level=stripe  --raid-devices=2 /dev/sda2 /dev/sdb2

前两行多运行几遍直到所有的都被删除,之后创建 /dev/md0 RAID1 作为 /boot,/dev/md1 RAID0 作为 /。

使用 lsblk 可以看到当前的分区情况:

root@rescue:/mnt# lsblk
NAME    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sdb       8:16   0   1.8T  0 disk
├─sdb2    8:18   0   1.8T  0 part
│ └─md1   9:1    0   3.7T  0 raid0
└─sdb1    8:17   0   512M  0 part
  └─md0   9:0    0 511.4M  0 raid1
sda       8:0    0   1.8T  0 disk
├─sda2    8:2    0   1.8T  0 part
│ └─md1   9:1    0   3.7T  0 raid0
└─sda1    8:1    0   512M  0 part
  └─md0   9:0    0 511.4M  0 raid1

然后格式化成 ext4 文件系统:

mkfs.ext4 /dev/md0
mkfs.ext4 /dev/md1

安装 debootstrap

这里下载 Ubuntu 的 debootstrap 脚本,应该会获得一个类似于 debootstrap_1.0.112ubuntu1_all.deb 的 deb 文件,使用 ar 释放后再解压至根目录下。ar 后会看到一个 data.tar.gz,释放到根目录下。

ar -x debootstrap_1.0.112ubuntu1_all.deb
cd /
zcat /pat/to/data.tar.gz|tar xv

运行 debootstrap

接下来才是重头戏,挂载之前分好区的硬盘并安装系统。我们假定 /dev/md1 挂载在 /mnt/ubuntu 下,然后对 /mnt/ubuntu 运行 debootstrap 安装系统。

mkdir /mnt/ubuntu
mount /dev/md1 /mnt/ubuntu
debootstrap --arch amd64 bionic /mnt/ubuntu http://fr.archive.ubuntu.com/ubuntu/

debootstrap 的命令中,要求安装 amd64 架构的 Ubuntu bionic,也就是 18.04,系统在 /mnt/ubuntu 下,需要的包从 http://fr.archive.ubuntu.com/ubuntu/ 获得。

稍等一会儿, 看到 I: Base system installed successfully. 就安装完成了。

chroot 准备

debootstrap 完成以后,在 /mnt/ubuntu 下就可以看到熟悉的 Linux 根目录结构了,然后我们做一些准备以方便 chroot 运行。

mount /dev/md0 /mnt/ubuntu/boot
mount --bind /dev /mnt/ubuntu/dev
mount --bind /dev/pts /mnt/ubuntu/dev/pts
mount -t proc proc /mnt/ubuntu/proc
mount -t sysfs sys /mnt/ubuntu/sys

第一行是将 /dev/md0 挂载在 /boot 下,这是和我们的分区意图相一致,2 3 两行是将当前系统的 /dev 映射进去,方便之后配置 fstab 文件,4 5 两行是将 proc 和 sysfs 挂载进去,方便配置时进行交互。

之后 chroot 进入新的环境:

LANG=C.UTF-8 chroot /mnt/ubuntu /bin/bash
locale-gen en_US.UTF-8
export TERM=xterm-color

如果进去以后报错 “bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)” 则运行第二行,如果不报错就不用管了,第三行是为了 Terminal 好看点。

系统配置

首先配置一下软件包的源,编辑 /etc/apt/sources.list 写入如下几行:

deb http://fr.archive.ubuntu.com/ubuntu bionic main restricted
deb http://fr.archive.ubuntu.com/ubuntu bionic universe
deb http://fr.archive.ubuntu.com/ubuntu bionic multiverse
deb http://fr.archive.ubuntu.com/ubuntu bionic-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ bionic-security main restricted
deb http://security.ubuntu.com/ubuntu/ bionic-security universe
deb http://security.ubuntu.com/ubuntu/ bionic-security multiverse

并且 apt update。完成后先安装 mdadm 和 lvm2,方便之后挂载。

apt-get install mdadm lvm2

编辑 /etc/fstab 写入挂载方式:

# file system    mount point   type    options                  dump pass
/dev/md0        /boot   ext4    defaults        0       2
/dev/md1        /       ext4    defaults        0       1

运行 mount -a 自动挂载,此时使用 df 命令应该可以看到正确的硬盘占用了。

运行 passwd 命令配置 root 用户密码,如果需要加用户,此时使用 adduser 即可。

之后安装内核和 OpenSSH Server:

apt-get install openssh-server linux-generic linux-tools-generic

正常情况下,在安装时会弹出 grub 的配置窗口,选择将 GRUB 安装在 /dev/sda 和 /dev/sdb,如果没有询问的话,安装完成以后运行如下两行:

grub-install /dev/sda
grub-install /dev/sdb

之后写回最开始备份的网络配置文件,并且启动相关服务:

vi /etc/systemd/network/50-default.network
vi /etc/systemd/network/50-public-interface.link

systemctl enable systemd-networkd
systemctl enable systemd-resolved

注意如果只有 root 用户的话,去 /etc/ssh/sshd_config 中修改 PermitRootLogin 为 yes,不然可能无法登录。

这时候就安装完成了,去 KS 后台用本地硬盘重启即可。在登录后记得配置 Public Key,然后将 PermitRootLogin 改为 PermitRootLogin prohibit-password。

最后在安装好的系统中使用 df 和 lsblk 命令查看分区情况:

root@rescue:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            1.9G     0  1.9G   0% /dev
tmpfs           393M  676K  393M   1% /run
/dev/md1        3.6T  1.3G  3.4T   1% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/md0        488M   73M  386M  16% /boot
tmpfs           393M     0  393M   0% /run/user/0
root@rescue:~# lsblk
NAME    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda       8:0    0   1.8T  0 disk
|-sda1    8:1    0   512M  0 part
| `-md0   9:0    0 511.4M  0 raid1 /boot
`-sda2    8:2    0   1.8T  0 part
  `-md1   9:1    0   3.7T  0 raid0 /
sdb       8:16   0   1.8T  0 disk
|-sdb1    8:17   0   512M  0 part
| `-md0   9:0    0 511.4M  0 raid1 /boot
`-sdb2    8:18   0   1.8T  0 part
  `-md1   9:1    0   3.7T  0 raid0 /

参考资料

系统安装相关:

https://www.codejam.info/2015/12/installing-nixos-on-a-kimsufi.html
https://help.ubuntu.com/community/Installation/MinimalCD
https://www.pozzo-balbi.com/help/Remote_install_OS_-_Qemu
https://help.ubuntu.com/community/Installation/FromLinux
https://help.ubuntu.com/lts/installation-guide/powerpc/apds04.html
http://ports.ubuntu.com/ubuntu-ports/pool/main/d/debootstrap/

分区相关:

https://wiki.archlinux.org/index.php/Fdisk_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
https://raid.wiki.kernel.org/index.php/RAID_setup#Create_RAID_device
https://wiki.archlinux.org/index.php/Fstab_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

配置相关:

https://help.ubuntu.com/community/Installation/SoftwareRAID
https://wiki.archlinux.org/index.php/systemd-networkd#Basic_usage
https://unix.stackexchange.com/questions/158400/etc-shadow-how-to-generate-6-s-encrypted-password

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注