在 VPS 上安装 openSUSE

“卧榻之侧,岂容他人鼾睡”


众所周知,各大云服务器厂商都会在自己的镜像里内置各种 “Agent”,一般来说,这些 Agent 都是起到一个监控运行,帮你重置密码的作用。但有句古话说的好:卧榻之侧,岂容他人鼾睡,所以,给 VPS 更换自己喜欢的系统成为了一个势在必行的操作。这里就简单介绍一下怎么在 VPS 上安装 openSUSE(Legacy Grub)。

相比于 GitHub 上的 VPS2Arch, 其他发行版的镜像就没有说有这种一键式的脚本了,所以我们要借助 netboot.xyz 的帮助。netboot.xyz 是一个可以通过 Bios/Grub 启动的 PXE 引导工具。你可以在其中选择你需要的系统镜像引导并安装,这就大大降低了从给 VPS 换系统的难度,要不然就只能自己做镜像 dd 进 VPS 的盘了。

准备工作

  • 需要有
    • 一台可以 VNC 的 VPS(Centos 系统)
    • 相应系统的国内镜像源 (建议选择你 VPS 运营商的镜像源)
    • 白天时间,晚上除非你不想睡觉了
  • 需要查看
    • /sys/firmware/efi/是否存在 (确定是否是 UEFI 启动)

开始

  • 首先调节 Grub 菜单的超时时间

    sed -i "/GRUB_TIMEOUT/cGRUB_TIMEOUT=60" /etc/default/grub
    
  • 重启,打开 vnc,在菜单界面按 c 进入命令行

    ls  # 查看驱动器
    set root=(<ls 显示出来的结果>) # 选定硬盘 一般格式为 (hdX,msdosX) 或者 (hdX,gptX)
    ls / # 查看磁盘目录确定你的/boot 目录所在分区
    
  • 重启,进系统,开始处理启动项

    • 先处理需要加载的项

      cd /boot
      wget https://boot.netboot.xyz/ipxe/netboot.xyz.lkrn
      
    • 编写用于加载项的 initrd 文件,名字无所谓

      ## 首先
      vi /boot/netboot.initrd
      
      ## 然后输入
      
      #! ipxe
      imgfree
      dhcp
      chain --autofree https://boot.netboot.xyz
      
      ## 保存退出
      
    • 处理 Grub 菜单

      vi /etc/grub.d/40_custom
      
      ## 输入如下
      menuentry 'netboot' {
      set root='hd0,msdos1'  ## 这里写之前找到的/boot 所在的分区
      Linux16 /boot/netboot.xyz.lkrn
      initrd16 /boot/netboot.initrd
      }
      
      ## 保存退出
      
  • 重新生成 grub 文件

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

    妥了,下一步整起

安装系统

如果你是国外的 vps,直接选择 Installer 下面的发行版就行了,这里着重讲述下 openSUSE。因为 openSUSE 的 repo 问题比较特殊,所以需要额外处理一下。


实际上,netboot.xyz 在你选择 installer 后,下一步是去 Web 上拉对应的 iPXE 脚本。iPXE 脚本中定义了软件源与参数。由于 d.o.o 的自身的问题和国内网络环境的问题,走官方提供的脚本肯定死路一条。幸好 netboot.xyz 还提供了 iPXE Shell,得以让我们可以手动引导安装。

  • 安装步骤
    • 在 grub 菜单中选择 netboot,进入然后选择 iPXE Shell

    • 一条一回车,输入以下内容,安装选用了 openSUSE 官方 wiki 描述的远程安装方式 (SSH 安装)

      # 如果你要安装 TW,输入
      set dir tumbleweed/repo/oss
      # 如果你要安装 leap,输入
      set opensuse_base_dir distribution/leap
      set version 15.3 # 这里写你想装的版本
      set dir ${opensuse_base_dir}/${version}/repo/oss
      
      ##### 以下为通用内容 #####
      set netsetup netsetup=dhcp
      set opensuse_mirror http://opentuna.cn/opensuse
      
      imgfree
      kernel ${opensuse_mirror}/${dir}/boot/x86_64/loader/linux
      
      initrd ${opensuse_mirror}/${dir}/boot/x86_64/loader/initrd
      
      imgargs linux ${netsetup} install=${opensuse_mirror}/${dir} initrd=initrd noapic useSSH=1 SSHpassword="pa33w0rd"  ## 密码随便,如果启动的时候 kernel panic,去掉 noapic 再试一次
      boot
      
    • 在输入了 boot 回车之后,安装程序就会开始引导了,在引导完成后,会提示你连接,那么就打开你本机的终端 (kde/gnome 的随你便),然后:

      ssh -X root@ 你的 ip 地址
      yast.ssh
      

      然后 YaST 就会启动,熟悉的安装界面就出来了,装就完事

  • 这么装界面会有点卡
  • 安装的时候别手闲选启用 online repo
  • 尽量选择一个你不会重启,不会关机,不会断网的时间,虽然安装只有 2G 但是还是很慢,怎么说也得有个 1 小时 +(我睡着了,我也不知道)
  • 如果你发现他装完后,VNC 上还是处在一个提示让你链接 SSH 的地方,不要慌,你这会什么shutdown, poweroff, reboot, init 2都用不了。在你 ssh 链接的窗口再输入 yast.ssh, 打开窗口后直接 abort,他就自己重启了。
  • 装完记得打个快照/镜像
7赞

不错,准备把 Oracle VPS 重装成 openSUSE

感谢,成功在腾讯轻量云上实现了。不过里面的 Linux、Linux16 应该是小写

感谢指正!已修改!

666 :+1: :+1: :+1:

mark 前几天趁着腾讯云活动买了 3 年的轻量应用服务器,可选系统里没有蜥蜴,就用的 ubuntu20.04,等有时间了换过来

巧了,我也买了三年的,这回正在折腾重装呢

哭了,选 netboot 发现无法加载内核才发现 Linux 要小写

tuna 源好像有问题,换成 utsc 的了

没什么问题,这个教程时间比较久了,USTC 和 TUNA 源的压力比较大,如果觉得慢可以换 BFSU 的源