最近买了几个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,有点出乎意料:
最新评论
5211314
能不能教我 一点不会