欢迎光临
我们一直在努力

VPS重装Debian12 bookworm

最近买了几个vps,包括有rcp、w3d、kurun的几台,这几家的debian11系统都不怎么“纯净”,都用了cloud-init这货。。我个人非常烦这个东西。。

而且不知道为啥w3d和kurun的机子启动后loopback没有ip地址,就是没有127.0.0.1的环回地址,我真是醉了,导致我配nginx的时候启动报错:99: Cannot assign requested address。

当时搜了下找到个解决办法:https://stackoverflow.com/questions/3191509/nginx-error-99-cannot-assign-requested-address

按里面说的配置了内核参数:net.ipv4.ip_nonlocal_bind = 1,确实nginx能启动了,但后面我就觉得不对劲了,我nginx监听127.0.0.1怎么会是nonlocalip,这说明配置这个内核参数是治标不治本,根本原因不在这。。然后我ip a看了下网卡接口的配置,就发现了lo没有ip地址。。。

虽然可以自己手动加上去:ip addr add 127.0.0.1/8 dev lo,并且后续我发现直接重启也能好,但就觉着这系统用着怪怪的。。所以干脆直接网络重装下好了。。

以前也写过很多篇网络重装debian的文章了,不过都是重装的debian10或者11,今天这篇文章记录下重装12的过程。

其实步骤都大同小异,我们知道debian12实际上还没有正式发布,但是没有正式发布不代表它不能用,因为debian这个系统实际上有3个releases:stable、testing、unstable。

其中stable就是目前的debian11,代号bullseye,而testing就是目前还未正式发布的debian12,代号bookworm,至于unstable,只有一个代号sid,因为它是滚动发行的。

debian开发过程中软件包传递的流程:unstable → testing → stable。相比较之下,testing和stable各有优缺点。

testing最大的优点就是可以用到更多新版本的软件包,比如stable上的nginx版本是1.18,而testing上的nginx版本是1.22。

缺点也很明显,毕竟是测试,系统可能会出现一些不稳定的问题,同时有关推送安全方面的更新会比stable慢。

安装debiantesting(当前代号:bookworm)有多种方法。

你可以从当前的stable版本升级到testing。意思就是你可以用我之前vps重装debian11的文章先重装一个debian11,然后再从debian11升级到testing。

或者就是今天这篇文章要介绍的:直接安装testing。我们需要用到网络安装映像,打开这个页面获取:https://www.debian.org/devel/debian-installer/

这里有一个大坑,如果我们像以前安装stable版本那样选择initrd.gz和linux肯定是用这两个:

https://deb.debian.org/debian/dists/testing/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz
https://deb.debian.org/debian/dists/testing/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux

又或者是这两个:

https://deb.debian.org/debian/dists/bookworm/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz
https://deb.debian.org/debian/dists/bookworm/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux

但实际上这些都不能正常安装,在安装程序运行的过程中会报错No kernel modules were found:

这个问题我也搜了下,发现早在10多年前就一直存在,普遍的解决办法是使用每周构建的快照或者每日构建的快照来安装。但是每周快照debian官方又没有提供网络安装映像,所以这里我们只能用每日快照来安装:

https://d-i.debian.org/daily-images/amd64/daily/netboot/debian-installer/amd64/initrd.gz
https://d-i.debian.org/daily-images/amd64/daily/netboot/debian-installer/amd64/linux

找到正确能用的initrd.gz和linux后,剩下的步骤就和之前没什么差别了。下载initrd.gz和linux到boot目录:

cd /boot
curl -L https://d-i.debian.org/daily-images/amd64/daily/netboot/debian-installer/amd64/initrd.gz -o initrd.gz
curl -L https://d-i.debian.org/daily-images/amd64/daily/netboot/debian-installer/amd64/linux -o linux

解压initrd.gz:

gunzip initrd.gz

新建preseed配置文件:

nano preseed.cfg

写入如下配置,需要改动的位置写了注释,仅适用于bios引导:

d-i debian-installer/locale string en_US

d-i keyboard-configuration/xkb-keymap select us

d-i netcfg/choose_interface select auto
d-i netcfg/disable_autoconfig boolean true
d-i netcfg/dhcp_failed note
d-i netcfg/dhcp_options select Configure network manually
d-i netcfg/get_ipaddress string xx.xx.xx.xx // 机器的ip地址
d-i netcfg/get_netmask string xx.xx.xx.xx // 子网掩码
d-i netcfg/get_gateway string xx.xx.xx.xx // 网关地址
d-i netcfg/get_nameservers string 8.8.8.8
d-i netcfg/confirm_static boolean true

d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain
d-i netcfg/hostname string imlala

d-i mirror/country string manual
d-i mirror/http/hostname string deb.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string

d-i passwd/root-login boolean true
d-i passwd/make-user boolean false
d-i passwd/root-password password imlala // 设置你的root密码
d-i passwd/root-password-again password imlala // 再次输入一遍你的root密码

d-i clock-setup/utc boolean true
d-i time/zone string Asia/Shanghai
d-i clock-setup/ntp boolean false

d-i partman-auto/disk string /dev/vda // 对应你机器硬盘的设备名,使用lsblk命令查看
d-i partman-auto/method string regular
d-i partman-auto/choose_recipe select atomic

d-i partman-md/device_remove_md boolean true
d-i partman-lvm/device_remove_lvm boolean true

d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true

d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
d-i apt-setup/cdrom/set-first boolean false
d-i apt-setup/cdrom/set-next boolean false   
d-i apt-setup/cdrom/set-failed boolean false

tasksel tasksel/first multiselect standard

d-i pkgsel/include string openssh-server
d-i pkgsel/upgrade select none

popularity-contest popularity-contest/participate boolean false

d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
d-i grub-installer/bootdev string default

d-i finish-install/reboot_in_progress note

d-i preseed/late_command string in-target sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config

如果你的机器支持dhcp,可以删除以下配置实现自动分配ip:

d-i netcfg/disable_autoconfig boolean true
d-i netcfg/dhcp_failed note
d-i netcfg/dhcp_options select Configure network manually
d-i netcfg/get_ipaddress string xx.xx.xx.xx // 机器的ip地址
d-i netcfg/get_netmask string xx.xx.xx.xx // 子网掩码
d-i netcfg/get_gateway string xx.xx.xx.xx // 网关地址
d-i netcfg/get_nameservers string 8.8.8.8
d-i netcfg/confirm_static boolean true

把preseed文件内嵌到initrd:

echo preseed.cfg | cpio -H newc -o -A -F initrd

重新压缩initrd:

gzip initrd

使用如下命令找到对应硬盘的uuid:

blkid

例如我这台机器目前的分区情况,我们刚才把initrd.gz和linux下载到了/boot目录下,/boot在我这台机器上是没有单独分区的,所以我们只需要根分区的uuid即可,那么对应我这台机器的根分区的uuid是364c772d-7874-4188-99ca-b43297c37e50:

新建grub2菜单:

nano /etc/grub.d/40_custom

写入如下配置,记得用你的uuid替换掉下面的配置:

menuentry 'debian install' {
    search --no-floppy --fs-uuid --set=root 364c772d-7874-4188-99ca-b43297c37e50
    linux /boot/linux 
    initrd /boot/initrd.gz
}

更新grub2并配置下一次重启使用刚才新建的菜单来引导:

update-grub
grub-reboot "debian install"

重启机器:

systemctl reboot

一般3-5分钟就重装好了。经测试,w3d、kurun、linode均可重装成功,rcp由于我的ip被扬了,并且rcp提供的debian系统模板也没啥问题就懒得试了。

另外补充一点内容,即便w3d你在购买的时候选用的是vpc网络也是一样可以重装的,preseed里面直接配置你的vpc内网ip即可。

linode的话在重装完成后是无法引导的,需要在后台进行一些配置修改,首先找到这个页面点编辑:

将Boot Settings里面的选项改为DirectDisk:

重启一下就行了。

之前在w3d的小鸡上跑了个yabs,没想到竟然还开了vm-x,有点出乎意料:

赞(0)
未经允许不得转载:拆东墙 » VPS重装Debian12 bookworm

评论 抢沙发

登录

找回密码

注册