在 Oracle 免费 VPS 上安装 Archlinux
本文最后更新于 2022年7月15日 凌晨
今天的故事是,在 甲骨文 (Oracle) 提供的免费 VPS 上安装 Archlinux。我很早以前就白嫖了两台 VPS, 配置为 1C1G+50G +480Mbps. 默认提供的系统不含 Archlinux.
很久以前,我成功在腾讯云上使用 vps2arch 成功装上了 Archlinux。但是,在 Oracle 上面一直失败,后来我请 小太阳 bigfootACA 帮我安装了一台。
另一台上面有运行自建的服务,所以一直没有用。直到现在把服务迁移出来了,才考虑也装上 Archlinux,另一个原因是看到群友在讨论在 Oracle VPS 上安装 Arch 这件事情。 但是,现在不好意思再次麻烦人家了。自己动手,丰衣足食。
更新:本文已经过时,唯一的价值在于连接 VNC,请参考 重新在 Oracle VPS 上安装 archlinux。
参考资料
群友发的两篇博客
- Clansty 的 在阿里云服务器上安装 Arch Linux
- Cpt. Huntsman 的 给VPS安装Arch Linux
- viseator 的 以官方Wiki的方式安装ArchLinux 或者说官方 Wiki
- 68811377 的知乎文章 为Oracle Cloud永久免费VPS重装系统
前期探索
最开始的时候,我是按照 Cpt. Huntsman 的文章走的,可是,没办法,没有 pivot_root 命令,于是放弃。
后面转到 Clansty 的方案,她的方案我尝试了很多遍,虽然有些小坑,但是有一次,我本来已经装好了,结果被我作没了(进 /etc/shadow 把自建用户那行删了,自建用户再也登不上,而 root 又没改密码,导致再也连不上了。
后面就直接终止 VPS, 重新建立实例,中间出现了几次妖蛾子,有时候创建出来的实例我根本就登不上去。有时候创建实例卡在初始化那里。也有一次,本来都快装好 Arch 了,结果 grub-install 命令没搞对(照抄的 Clansty 的,但是我的是 UEFI 引导)。也尝试过知乎文章那样,用控制台连接,然后通过网络启动的方式安装,结果直接一个 kernel panic.
最终是结合了 Clansty 的方案与知乎的文章的控制台连接。最终的结果如图所示,反复创建删除了好几次。

安装过程
选择镜像
创建实例的时候选择的镜像为 Ubuntu 20.04 , 选 Ubuntu minimal 也可以 (这个不带 Vim)。

在 添加 SSH 密钥 的地方,如果你不知道什么是 ssh 密钥 请选择默认选项并点击 保存私有密钥 然后放到 ~/.ssh/id_rsa 并且执行
1 | |
然后点击创建。如果你知道 ssh 密钥,按你自己的喜好操作即可。
连接服务器
创建好之后,选择刚刚创建好的实例

找到 IP 地址(打码的部分)与用户名 (ubuntu)
你可以在终端通过如下命令连接到你的服务器:(把 123.123.123.123 换成你服务器的 IP)
1 | |
现在我们已经知道怎样连接服务器了。
连上去之后,输入
1 | |
给两个用户都设置一个密码(每个密码都要输两遍)。以便我们能够在VNC 里面登录。
连接 VNC
这一部分参考的知乎的文章。
你需要:
- 一台闲置(Idle)的,跟 Oracle 免费机完全没有关联的 VPS (简称 I 机)
- 一个临时生成的ssh公钥与私钥文件(ssh2)
- 装好一个 VNC 客户端,我用的
remmina与它的 vnc 插件libvncserver
生成 ssh key:
用I机当做跳板,在内部创建与F机控制台通信的ssh隧道,远程登录I机,输入以下命令,生成ssh2:
1ssh-keygen -b 4096一路回车,生成成功,然后导出公钥
1cat ~/.ssh/id_rsa.pub将其保留在记事本上,后面要用。
在实例的详细信息下方找到 资源>控制台连接,创建一个本地连接。将刚刚复制到记事本的公钥粘贴进去,完成创建(我已经创建好了,所以无法再创建)。

找到刚刚创建好的控制台连接,最右边点击三个点,选择复制 Linux/Mac 的 VNC 连接 (我是 Linux 系统嘛,反正复制 VNC 就对了)。

复制出来的命令像这样(这里抄的知乎的,不敢把我自己的放出来),注意这里相对于复制出来的有更改,
localhost:5900 改成了 0.0.0.0:32647, 这是出于安全的原因。
由于 openssh 8.8 开始弃用了 ssh-rsa,我们重新开启它,在 I 机与 oracle vps 上面分别创建 ~/.ssh/config, 写入如下内容
1 | |
最终我们的命令变成了
1 | |
在 I机(中转机)上面执行上述命令,可能需要输入 yes. (参考知乎)。执行后,只出现一个不会退出的光标,而无其他报错,就说明运行成功了。
装好 remmina 与它的vnc 插件后,在本地打开终端,执行下面的命令(英文界面,中文界面是方框),

输入你的中转机(I机) 的 IP 地址,和端口,回车。如图上为 234.234.234.234:32647.
连接上之后会有这样一个黑框框(我这个已经装好 了)。通过VNC 我们可以监测到 VPS 的状态,即使 ssh 登录不上了,我们还可以通过 VNC 界面查看原因。
输入用户名 root, 密码点击

输入用户名 root, 将 root 的密码复制到剪贴板,然后按照下图的方式输入

准备好了之后,我们可以正式开始安装 Archlinux 了。
安装 Archlinux
首先,登录要安装 Archlinux 的服务器。这里是 Oracle 免费 VPS ubuntu 20.04.
这一部分基本抄袭的 Clansty 的内容。
下载 RootFS
首先呢我们得有一个 Arch 的 RootFS,也就是一个基本的包括 Arch Linux 根目录下所有文件的文件夹,一会儿要 chroot 进去。为了使用 chroot 这个功能,直接在 Arch 的下载页面找一个离服务器比较近的镜像源,复制里面 archlinux-bootstrap 开头的 tar.gz 包的地址,下载到服务器的 /tmp 文件夹。其实这个时候可以 cd到 /tmp 里面把不相关的文件都删掉了。
注:由于我的服务器IP 是日本的,所以我选择了日本的服务器
1 | |
然后自然是要解包这个文件,顺便看看里面都有些啥
1 | |
结果就像
1 | |
这里面就像一个装好了的 Linux 的根目录一样,所以说是 RootFS 嘛
进入 chroot 环境
如果使用的是 ubuntu minimal (不带 vim),先安装 vim
1 | |
听说需要用 mount --bind 把 RootFS 解包的目录自己与自己链接起来,不然 pacman 会装不了软件。至于要是不知么做会发生什么,咱也没试过,妳们可以自行尝试。
1 | |
别急,由于这个 RootFS 包是最简安装,你看它只有 140MB 是吧,它里面甚至连个文本编辑器都没有。所以咱需要在 chroot 之前编辑一下镜像源的文件,启用自己喜欢的镜像源,这样 pacman 才能正常安装系统。我的 IP 是日本,我就直接使用日本的镜像源了。虽然 zhullyb 说国外一律用 CloudFlare 的镜像源<但是在安装的时候用这个会出错,可以装好了之后替换成这个。选择镜像源的方式就是删除该行前面的注释(#)。vim 使用教程见 菜鸟教程,会插入 (i), 退出即可。
1 | |
好啦,现在可以正式进入 chroot 环境啦。不过呢用普通的 chroot 进去之后 /dev 之类的目录会是空的,不可以正常安装系统。要使用 Arch 镜像中的 arch-chroot 脚本,这个脚本会自动执行一些 mount 命令,把设备啊之类的都映射到 chroot 容器里面,咱就可以正常安装系统啦。
1 | |
在 chroot 环境中给机器安装 Arch Linux
首先初始化 pacman 的密钥(读作 ”蜜月“ 哦),pacman 就能正常使用啦
1 | |
现在我们已经进入属于 Arch 的世界了,不会再想念原先的 Linux 发行版了。所以现在应该把原先发行版的文件消灭掉。由于我们现在运行的环境就在原先的分区上,所以直接格式化肯定是不行的。需要把原先的分区挂载到现在的系统中,然后把属于原系统的文件删删删
在Oracle中,系统分区是 /dev/sda1。
注:我们可以在 VPS 上执行如下命令查看有哪些分区哦
1 | |
可以看到 系统分区是 /dev/sda1, boot 分区是 /dev/sda15,在 ubuntu里面运行 lsblk 的时候是不会显示 /boot 的,只会显示
1 | |
的字样,但是我们同样要意识到这个106M 的分区应该是 boot.
现在我们开始挂载分区到系统中啦。
首先看看你的系统引导方式是 BIOS 还是 UEFI, 这取决于我们是否需要挂载 boot 分区。参考 Viseator
1 | |
输入命令并回车执行后,如果提示
1 | |
表明你是以BIOS方式引导,否则为以EFI方式引导。
然后挂载分区,执行下面的命令,挂载 sda1 (替换为你的分区)
1 | |
UEFI 引导的还要将 sda15 (替换为你的分区)挂载到 boot
1 | |
由于 Linux 系统中“一切皆文件”,像 /dev /proc /run /sys 这些目录都是存储到硬件的映射的,所以不能删。同时,我们工作的目录在 /tmp 下,swapfile (如果有)是我们正在使用的 swap。咱们用 rm -rf 命令,把其余的文件都清除干净。
1 | |
删不掉的就算啦,等它在那里就是了。
之后就正是进入安装 pacstrap 环节啦
像正常安装 Arch Linux 一样使用 pacstrap 向目标挂载点安装系统底层的软件包,并生成 fstab 挂载配置文件,注意,这里用 cloudflare 源会出错。
1 | |
这时候系统安装就已经完成了。
进入新系统
再通过 arch-chroot 切换到安装好的系统目录下,进入最后的系统配置和必备程序包的安装
1 | |
注意,要是在 chroot 的时候发生与
/etc/resolv.conf挂载相关的问题,可以先执行
1
2
3umount /etc/resolv.conf
arch-chroot /mnt
echo 'nameserver 223.5.5.5' > /etc/resolv.conf否则可能会无法解析 IP。如果上面
chroot时没有出现问题可以跳过这个
首先将时区设置为北京时间
1 | |
在 /etc/hostname 中设置主机名,
1 | |
设置你的主机名,如 newarch,然后修改 /etc/hosts
1 | |
添加如下内容。注意,第三行需要修改为你自己的 IP,并将 newarch 修改为你刚刚设置的主机名。
1 | |
开启一下必要的服务,这样重启之后就有网并且能通过 SSH 连上啦.(这里可能会失败,重启后没有网)
1 | |
还需要给自己创建一个用户,Arch Linux 默认禁止以 root 身份远程登录。-m 的意思是为用户创建自己的主目录,wheel 是默认能执行 sudo 命令的用户组,
(将 sukanka 替换为你的用户名)
1 | |
然后切换到新创建的用户 (将 sukanka 替换为你的用户名),并且添加自己的公钥,这样重启之后就能直接公钥登录 SSH 啦
1 | |
回到 root 用户,保险起见,给 root 以及自己的用户设置好密码,这样要是无法公钥登录还能以密码登录
1 | |
编辑 sudo 配置文件,取消 %wheel ALL=(ALL) NOPASSWD: ALL 这一行的注释
1 | |
最后创建引导文件,准备重启啦
如果你是 BIOS 引导
1 | |
如果是 UEFI 引导
1 | |
差不多了,进控制台重启服务器。
同时,我们连接上 VNC, 查看服务器的状态与启动的过程。
确保服务器启动成功之后,尝试在本地通过 ssh 连接服务器。密码连接方式如下
1 | |
其中 sukanka@123.123.123.123 是 用户名@IP , ~/.ssh/oracle 是你在
vim authorized_keys # 添加你的公钥,你可以在本地机器上面生成一个。
添加的公钥对应的私钥。将它们替换为你自己的信息。
如果登录失败,尝试使用密码登录,并根据提示输入密码。
1 | |
如果这个也没有任何反应,说明服务器没有连上网。
进入 VNC, 输入用户名,密码(注意密码没有回显)

登录上去之后,执行
1 | |
查看 dhcpcd 跟 sshd 的状态,正常两者都应该有显示 Active: **active (running)**,否则就是两者没能成功启动。
因此我们需要重新让他们自启动‘
1 | |
然后再次运行
1 | |
看看两者的状态,都已经成功运行起来啦。
我们可以从本地通过 ssh 连接服务器了。