重新在 Oracle VPS 上安装 archlinux
本文最后更新于 2022年7月23日 晚上
故事背景
故事的背景其实有点惨,我之前的 oracle vps 在小太阳的帮助下装上了 archlinux, 而且平稳运行了大概两年的样子吧,后来我还把 matrix 部署在上面了。可是某一天更新了系统之后,它挂了!
ssh 也无法连上, vnc 也连不上(这其实是因为 openssh
更新了),于是我又只能把 matrix 服务器转回国内。但是,从昨天开始,我matrix 开始看不了图片了,就算服务器挂梯子也不行,始终看不了图片(享受 IRC 待遇)。这可不行啊,得想办法把 matrix 再搬到国外,因此又想起了那台停机几个月的 vps。
这里插一句,如果要装成 NixOS 的话,非常方便,似乎有对应的 Could-init 文件,在初始化 vps 的时候添加进去就好了。但是 archlinux 没有。
补充另一个方法: Kars Wang 的 gist,这个方法不需要操作 UEFI shell 也能够实现重新分区,看起来咱走了弯路。
踩坑经历
这里大家看看就好,我只说哪些做法是不推荐的。
- 首先,我自己的文章:在 Oracle 免费 VPS 上安装 Archlinux 肯定是不推荐了。但是可以看一看,有些基础的操作(比如开机器、连 VNC)还是值得一看的,但是具体步骤不能照搬。
- 然后是 Clansty 的文章:在阿里云服务器上安装 Arch Linux ,如果你只有一台机器,那可以看这个,但是你有多台机器的话,我也不推荐你用 bootstrap 安装。
- 最后是 Netboot 的方式:如果你的服务器内存高于 2GiB(实际上好像高于1.5GiB 就可以), 那就直接用 Netboot 吧, 别看我的文章了。Netboot 我推荐两种安装方式,一种是 netboot.xyz;另一种是 archlinux 官方的 netboot, 在 https://archlinux.org/releng/netboot/ 下载 ipxe-arch.efi,放到服务器的
/boot/EFI/rescue
下面,然后连上 VNC,将服务器重启,在 UEFI 里面选择 IPXE 启动即可,或者找到下载的 efi 启动。
推荐的安装过程
如果你的 VPS 像我一样,只有 1GiB 的 RAM, 无法用 netboot 安装 archlinux, vps 提供商又不被 vps2arch 所支持,然后你又想完整地安装 archlinux (包括对硬盘重新分区,oracle 的 EFI 太小了,只有 106M)。 那么你应该看看我这一篇文章。
本文假定,你还有一台可用的 oracle 的 VPS,并且已经装上了 archlinux, 能够正常使用。(如果你另一台 vps 不是 archlinux, 那也没关系,你可以看 在阿里云服务器上安装 Arch Linux ,把某些操作对应的替换过来就可以了。
事前准备
首先按照 在 Oracle 免费 VPS 上安装 Archlinux 做好 连接服务器 与 连接 VNC.
现在,我们已经有一台 archlinux 服务器 (或者其他服务器,即前文的 I 机),和一台 Ubuntu 20.04 的新开的机器(你开的什么就是什么)。
然后我们将 ubuntu 20.04 的机器关机,在甲骨文的面板上将它的引导卷分离下来,注意这是要新装 archlinux 的机器,注意左下角 资源> 引导卷,然后点右边的三个点,分离引导卷。
聪明的你可能猜到我们要干什么了,没错,我们要把它挂载到另一台服务器上面,然后装好 archlinux 再挂载回来!
在 oracle 的网页面板上打开另一台服务器( archlinux, I机) ,找到对应的位置,附加上块存储卷,注意位置在 资源 > 附加的块存储卷
等一会等到附加完毕之后,找到右边的三个点...
点击,选择 iSCSI 命令和信息,展开 Linux, 会给你 连接(三条)和断开连接(两条)的命令,保存好。我这里就不截图出来了。
然后通过 ssh 连上 I 机,进去之后复制那三条命令,就可添加上硬盘。如果你在这里遇到了错误,请参考 Open-iSCSI,简单来说,你应该先安装
open-iscsi
软件包,然后启动对应的服务(并将它加入开机自启)
1 |
|
然后再重新运行连接的三条命令,应该就可以了。
成功之后会有类似下面这样的输出,敏感信息用 xxxx
替代了。
1 |
|
然后我们看一下 目前的硬盘
1 |
|
输出的结果大致上像这样
1 |
|
右边的 /
与 /boot
就是我们目前正在用的硬盘的分区,注意到 /boot
只有 106M,连两个内核都装不下,而 sdb
(注意你的可能不是 sdb
)就是我们新挂载上的硬盘,我们要将 archlinux 装到这个硬盘里面。
开始安装
分区
首先,我们将 sdb
重新分区
1 |
|
输出如下
1 |
|
输入 d
, 删除分区,我输入了两次,把两个分区都删了。
1 |
|
然后重新创建分区,输入 n
,然后提示输入大小的时候输入 +512M
1 |
|
然后再次输入 n
一路回车创建我们的第二个分区
1 |
|
然后输入 p
看一下我们的分区
1 |
|
好像 sdb1
的类型不太对,我们给它改一下,输入 t
, 然后输入1
(分区编号), 再输入1
(分区类型)
1 |
|
可以看到分区类型已经成功改为 EFI
了。最后 输入 w
保存。(我就不输入了,我都已经装好了,保存了我装好的系统就没了)。
pacstrap
这一步其实是参考的 以官方Wiki的方式安装ArchLinux,但是我把重要的内容都抄过来了,大家没必要点进去(嘿嘿)。
然后我们将硬盘挂载到对应文件夹
1 |
|
没有报错的话,我们就挂载好啦。由于我们是境外服务器嘛,没必要改镜像,我们直接用 pacstrap
安装一些必要的包进去。
1 |
|
然后生成 fstab
1 |
|
然后我们要 看一下 fstab
对不对(其实这里生成的 fstab
不对哦)
1 |
|
结果如下,注意:**你看到的跟我的不一样!**你的应该是写的 /dev/sdb
之类的,你需要自己把他们改成 UUID
这样的,具体的 UUID
里面有。
1 |
|
注意到我们还多了个 /swapfile
所以我们也必须要创建一个 swapfile
或者你可以把那行注释掉。
chroot
然后我们可以 chroot
进去了
1 |
|
先设置时区
1 |
|
装一些必要的包,过程中一路确认就好
1 |
|
设置下 locale
,在里面启用 en_US.UTF-8 UTF-8
就行了,服务器上不需要中文。
1 |
|
然后执行
1 |
|
然后打开locale.conf
1 |
|
在文件里面第一行写入
1 |
|
保存退出。
现在开始设置主机名
1 |
|
在第一行输入你设置的主机名,假设是 myhostname
,保存并退出。
编辑/etc/hosts
文件:
1 |
|
在文件末尾添加(将myhostname
替换成你自己设定的主机名),实际上这里还应该将你的服务器的公网IP 也映射到 localhost
但是不做也无所谓。
1 |
|
保存并退出。
现在开始输入 passwd
设置root
的密码,注意密码需要输入两遍,不会有回显。
然后我们安装 ucode
, intel 的就输入 intel-ucode
(Oracle 好像是 AMD 的,那就换成 amd-ucode
)
1 |
|
然后我们安装 grub
1 |
|
部署 grub
并生成配置文件
1 |
|
注意:如果你前面的 fstab
里面有 /swapfile
,
请创建 swapfile
不然启动会失败,这里我创建 2G
1 |
|
修改权限并初始化,然后启动它。
1 |
|
如果你已经是一个老手,你可以在这里就设置好你的用户,配置好 sudo
, 同时不要忘记将你的 ssh 公钥写入到你用户的 authorized_keys
配置用户
我们首先创建一个用户,请将 username
替换为你的用户名。
1 |
|
然后为它设置一个密码
1 |
|
再为它配置 sudo
1 |
|
找到
1 |
|
去掉前面的 #
, 然后保存退出,这样我们的用户不需要密码就能使用 sudo
了。
退出 chroot
我们的系统差不多要安装好了,下面退出 chroot
,并卸载硬盘。
1 |
|
如果提示
1 |
|
我们就使用 下面的命令卸载。
1 |
|
然后我们还要把硬盘卸载下去,因为要挂载回另外一台机器上了。
最后我们找到这台机器附加的块存储卷,找到 iSCSI 命令和信息, 复制其中的 断开连接 命令,并输入,应该会提示
1 |
|
然后我们直接分离块存储卷。
给新机器 (ubuntu 20.04,但是快要是 arch 了) 附加引导卷,在对应机器页面的 资源> 引导卷 下面。
配置 UEFI
首先我们先连上 VNC,请参见 事前准备,在我们在 I 机上面装好 tmux
, 并运行 tmux
粘贴中转 vnc 的 命令进去,然后按 ctrl+b
再按 d
分离 tmux
,免得我们 ssh 断开后中转也自动断开了。注意,如果这里 VNC 连接断了,请重新连接,并检查中转服务是不是也断了,中转服务也断了请重新连接中转服务。
然后我们在本地用 remmia
连上 VNC。注意 VNC 的画面,同时给 新机器开机,在 VNC 那里疯狂按 F2
来进入 UEFI
页面。
进入到 UEFI 之后画面大概像这样,里面有 Boot manager, 但是好像什么都干不了。也有 Boot Maintainance Manager,能够干一些事情。
比如 Boot Maintainance Manger 里面能够改 Boot order, 但是实际上没有用。这里就不展示了。
我们选择 Boot Manger,再选择 EFI Internal Shell, 回车进入 shell.
注意: 此处开始不能用 ctrl+v
粘贴了,但是 remmia 有自带的将剪贴板逐字发送到 VNC 的功能,扳手🔧图标就是
我们输入如下命令查看现有的启动项。
1 |
|
这是我的启动项,第一个已经被改成 archlinux 了,你的第一个应该是 UEFI ORACLE BlockVolume
. 而且你没有 Option: 04
.
然后我们添加一个 grub 启动项,序号为4
,命名为 archlinux
1 |
|
然后我们将它移动到编号为 0的位置
1 |
|
你可能以为这就管用了,其实并没有,真正管用的是下一步。
我们删除掉 ORACLE
的启动项,它现在编号应该为 4
。
1 |
|
然后我们输入 exit
退出 shell. 回到 Boot Maintainance Manager > Boot Options > Change Boot Order
可以看到,我们的 archlinux
启动项变成了第一位!
然后我们回到 UEFI 主页面,选择 Continue,就看到熟悉的 grub
啦
进去了之后登录 root
帐号,然后我们要启动 dhcpcd
与 sshd
服务
1 |
|
然后就可以尝试通过 ssh
连接到服务器了。本文到这里也就完结了。
最后附上一张 neofetch
结果。
1 |
|