VPS 仅通过 ssh 重装系统
部分 VPS 提供商只有少数几个系统可选,不能引导自己需要的镜像,有的甚至内置监测程序,有数据泄漏的隐患。本文以从 CentOS 7 重装到 Debian 11 为例,提供一种只通过 ssh 操作安装系统的方式。
适用条件:
- VPS使用KVM等完全虚拟化技术 (查看虚拟化类型:
systemd-detect-virt
) - 系统使用BIOS+GRUB引导,即
/sys/firmware/efi/
目录不存在/boot/grub/
目录或/boot/grub2/
目录存在
- 服务器能够连接网络,用户具有root权限
概述
- 下载
linux
(内核二进制文件)和initrd.gz
(ramdisk image),在initrd.gz
中添加自动安装配置文件; - 将这两个文件存放到合适位置,例如
/boot/images/
目录 - 修改Grub配置并重启,Grub将两个文件加载到内存,安装程序自动格式化硬盘并从网络下载其他组件进行安装
参考:硬盘安装程序从 Linux 引导使用 GRUB–www.debian.org
文件下载
在netboot安装程序目录下载linux
和initrd.gz
文件。以amd64架构为例:点此查看
自动安装配置
解压initrd.gz
:
1 | gzip -d initrd.gz |
新建并编辑preseed.cfg
文件:
1 | vim preseed.cfg |
参考:预置文件的内容(bullseye)–www.debian.org
预置文件完整示例:点此下载
预置文件内容:
设置语言和键盘
1 | d-i debian-installer/locale string en_US |
网络设置
可参考原系统的设置:
ip addr
cat /etc/sysconfig/network-scripts/ifcfg-[网卡名]
(CentOS)cat /etc/network/interfaces
(Debian)
1 | # 自动选择网卡 |
镜像源设置
选择距离服务器近的镜像站,Debian镜像站列表:https://www.debian.org/mirror/list
1 | d-i mirror/country string manual |
创建用户
1 | # 仅创建root用户 |
设置时区
1 | d-i clock-setup/utc boolean true |
磁盘分区
/dev/vda
是硬盘设备名,使用lsblk
查看,如果是/dev/sda
等请修改
1 | # 使用lvm |
软件安装
1 | # apt相关设置 |
Grub安装
bootdev
按照实际情况修改
1 | # grub安装 |
ssh允许root登录
1 | d-i preseed/late_command string in-target sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config |
包含到initrd
参见:Adding a Preseed File to the Initrd–wiki.debian.org
1 | echo preseed.cfg | cpio -H newc -o -A -F initrd |
重新压缩initrd:
1 | gzip initrd |
mkdir /boot/images/
将新的initrd.gz
和linux
移动到/boot/images/
目录下
修改grub配置
在/etc/grub.d/41_custom
中的EOF
之前添加:
1 | menuentry 'Debian11 install' { |
注意set root=()
设置为/boot
所在的分区,
vda1是(hd0,msdos1)
,vda2是(hd0,msdos2)
,vdb1是(hd1,msdos1)
,以此类推
如果/boot
单独在一个分区,那么后两行的路径就从/images/
开始
此时41_custom
应当类似这样:
1 | !/bin/sh |
更新Grub配置(CentOS 7):
1 | grub2-mkconfig -o /boot/grub2/grub.cfg |
(注:Debian用update-grub
命令)
修改默认启动项:
首先查看启动项顺序(CentOS 7):
1 | grep -E '^menuentry|^submenu' /boot/grub2/grub.cfg | cut -d "'" -f 2 |
或者(Debian):
1 | grep -E '^menuentry|^submenu' /boot/grub/grub.cfg | cut -d "'" -f 2 |
查看刚才添加的Debian11 install
排第几位,从0开始,也就是说,如果它在第三行,那么它就对应2
然后修改默认启动项配置:
1 | vim /etc/default/grub |
修改GRUB_DEFAULT=2
(按照查看的顺序)
再次更新Grub配置(CentOS 7):
1 | grub2-mkconfig -o /boot/grub2/grub.cfg |
(注:Debian用update-grub
命令)
重启
重启vps,等待安装完成即可
ssh登录:用户名root
,密码是preseed.txt
中自己设置的密码
查看新系统版本:lsb_release -a