卧榻之侧,岂容他人鼾睡


众所周知,各大云服务器厂商都会在自己的镜像里内置各种“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,rebootinit 2都用不了。再输入yast.ssh, 打开窗口后直接abort,他就自己重启了。
  • 装完记得打个快照/镜像