项目地址,欢迎 star:
https://github.com/leitbogioro/Tools
最近更新内容,太长不看版:
- Debian 原版太素净了,于是预置大量常用组件,支持文件彩色显示;
- 定制了一个漂亮的 Debian 欢迎画面;
- 首家支持 Vultr 2.5 刀单栈 IPv6 机器(仅限 DHCP,其他纯 IPv6 VPS 应该也可,欢迎测试上报);
- 首家支持双栈(IPv4 IPv6 公网 IP 皆有)机型(自动完成 IPv4/6 配置,不用在新系统里手工改,仅限 Debian、DHCP);
- 市面上绝大部分 VPS 都支持 DHCP,包括甲骨文,系统是否支持 DHCP,安装前脚本会自动判断逻辑。但用过我的旧版,或者萌咖的,或者其他魔改萌咖版脚本重装成 Debian/Ubuntu 的机型,系统网络配置一定是静态分配的,这是源头萌咖脚本逻辑判断不够完善。
- 符合以上条件,如果要用我的新脚本重装,读取网络配置肯定会出问题,请一定把网络配置改成正确的。如果有 DHCP,要么请手动改回去,要么用面板重装功能重装一个附带正确网络配置的系统。
- 甲骨文机器无面板重装功能,所以你如果既不想删机,又想重装,可以放心大胆地把网络配置改成 DHCP,例如 Debian,把:/etc/network/interfaces 里内容改成“iface inet 机器网卡名称 dhcp”(IPv4)和“iface inet6 机器网卡名称 dhcp”(IPv6),重启后再运行新的重装脚本。
————————————-我是分隔线————————————-
技术细节版:
经过广泛测试,我发现萌咖的脚本安装 Debian 类(Debian/Ubuntu)系统时,preseed 文件制定的“d-i”(Debian install)的网络配置流程有大问题,它是强制读取当前系统 IPv4 地址、子网掩码、网关,并指定一个 DNS 服务器(默认“8.8.8.8”),并且把这些配置硬塞给新安装系统的网络配置中。
以往大家用的都是 IPv4 单栈机型,这样配置没什么问题,直到随着 IPv6 普及,单栈 IPv6,双栈机型的大量出现,这种配置的缺陷就慢慢体现出来了:
1. “d=i”手动指定网络参数配置,只能写入一种,要么 IPv4,要么 IPv6,不能混搭,给同一参数指定多项配置的话,要么无效,要么下一条配置顶掉了上一条,对于双栈机,此过程如果要同时写入 IPv4 和 IPv6 配置是无意义的;
2. “d-i” DHCP 默认优先用 IPv4 连接网络源安装,如果 IPv4 有网;
3. 对于单栈 IPv6 机器,“d-i” DHCP 可以正确获取 IPv6 配置并完成安装,系统安装结束后,网卡里会自动配置 IPv4(仅限内网)和 IPv6。
基于这些事实和相关实验,我们可以得到以下结论:
1. 纯 IPv6 单栈机强制给 IPv4 参数,必然会安装失败,因为给机器的是 IPv4 配置,虽然原系统里有,但 IPv4 的路由是无法连接网络的,在此过程中系统无法获得 IPv6 配置并连接网络,不能成功连接到相关源,后续安装更无从谈起。
2. 纯 IPv6 单栈机强制给 IPv6 参数,虽然可以通过校验网络连接部分,但因为缺少内网 IPv4 配置,导致一些内部路由转发出现问题,使连接源下载组件的时候,频繁报错,需要连接 VNC 手动确认,不但丢失了全自动安装效果,还会导致安装后 ssh 无法连接机器。
3. 双栈机型安装时仅配置了 IPv4,如果要支持 IPv6,需要在重装后进入系统手动配置一下。
4. 现在绝大部分 VPS 商家由于面临多机器管理,给每台机器镜像里单独定制静态分配 IP 从成本和管理便利性来说都会造成更多麻烦,所以 VPS 支持 DHCP 是大势所趋,不必纠结于必须手动配置网络。
所以,我在脚本程序中加入了完善的逻辑判断,确保可以顺利读出当前主流 Linux 发行版,比如红帽系的 CentOS/AmalLinux/Rockey/Vzlinux,Debian 系的 Debian/Ubuntu 中的网络配置方式,如果是 DHCP,“d-i”流程自动跳过强制写入 IPv4 配置流程。这一前提,必须是原系统网络配置正确,不能原来是动态的,被改成静态的,反之亦然。
对于 Debian 双栈 DHCP 机型如何确保安装后,首次 ssh 连接机器后,就能发现 IPv4 和 IPv6 都已经配置好了,既然安装前网络阶段只能配置完成 IPv4,那么 IPv6 只能放在后续 preseed 流程中,我的方法是获得当前系统网卡硬件名称,后续在 Debian 网络配置文件里写入开启 IPv6 的 DHCP 配置参数。
如果你的 VPS 仅支持静态网络参数配置,也不要担心,确保你当前系统网络配置是完全正确的情况下,脚本逻辑有完善的逻辑判断,确认你的机器不是 DHCP,从而返回手动配置 IPv4 流程,让你的机器能重装后正确连接网络。
从 Ubuntu 18.04 以后,系统引入了一个叫 netplan 的组件来管理网络连接参数,netplan 的配置文件是 yaml 语法,靠不同长度的缩进来区分不同网卡的参数从属项,语法跟 interfaces 完全不一样,preseed 阶段写入是真的麻烦,所以双栈机 Ubuntu 系统 IPv6 的 DHCP 配置文件写入不想搞了。
再次提醒一下,Ubuntu 22.04 虽然支持全新的,叫“Cloud-init”的网络重装方式,是由 Ubuntu 母公司 Canonical 开发的,但这种方式对机器硬件性能要求很高,CPU 支持虚拟化是必须项,否则安装过程中 qemu 程序就会启动失败。
这一点对一般的 VPS 而言是真的难顶,虽然他们的母机 CPU 必然支持虚拟化的,但经过虚拟化后的客户机 CPU 想再有虚拟化支持可就不一定了,经过观察,目前搬瓦工、Virmach、Racknerd、Cloudcone 等绝大部分廉价 Linux VPS CPU 都是不支持虚拟化的,Vultr、DigitalOcean、Linode 等廉价套餐也不支持,硬件配置高的机型也不一定支持,特性是一样的。现在确认 CPU 支持虚拟化的,只有甲骨文、独服等等了。
虽然我可以制作一个无人值守安装镜像,通过 dd 来实现支持,但这和 Linux 网络重装的理念就相去甚远了,系统核心文件来自官方权威的源才让人放心,私人打包的靠不靠谱两说,问题是我自己还要维护一个直链下载站,时间和成本都是难题。
所以 Ubuntu 22.04 今后还能不能搞,你自己也应该有答案了,Cloud-init 清理低端人口,适用范围太窄,是 Ubuntu 自己断了这条路的,不让低价值 MJJ 用新的纯净版 Ubuntu 了,我也没办法。所以:
F*ck the canonical!
一些小缺陷:
DHCP 和网络配置逻辑对多网卡的识别不佳,有多网卡且各网卡都需要静态配置网络参数的机器,建议安装前禁用掉其他不常用网卡,仅保留默认常用主网卡,安装完系统后再启用其他网卡完成配置。