在 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
一路回车,生成成功,然后导出公钥
1
cat ~/.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
3
umount /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 连接服务器了。