谷姐:我们都是谷歌迷
We are all Google fans

【意见征集】一键重装支持访客时区 静态双栈 网卡重定向-天权璇玑

Rate this post

项目地址:https://github.com/leitbogioro/Tools

最近更新及使用方法:https://hostloc.com/forum.php?mod=viewthread&tid=1094336

另外,你支持新安装的系统中,默认将网卡名重定向吗?小投票的内容如果看不懂,参见本帖第三节:8. 自动识别网卡是否被重定向。投票结果会影响到后续开发,请慎重选择。

最近更新:

1. 完善判断网络类型策略

Ubuntu 的网络配置文件固定在 /etc/netplan 里,处理起来好预测,但 Debian 的网络配置文件有时候会被放在 /run/network 目录中,redhat 系出现了 7 8 系列一套,即 network scripts,9 系列一套,即 NetworkManager 一套的配置,每套会存在于标准的 /etc 目录里,也会存在于 /run 目录里,还有的在 /user/lib 里,甚至特别地,对于 GCP,它故意隐藏了 redhat 8 9 系的网络配置文件,不但用单引号把文件名括起来,还给文件名添加空格(影响到 awk 按列获取),比如 'Wire Line 1.nmconnection' 导致 bash 内置的各种命令,都无**确读取到文件名,因为单引号是一种强引用,任何对单引号的读取如果原文件附带的单引号本身不加转义,导致前后两个单引号读取出来的结果为空,导致定位具体文件名错误。所以脚本转换了读取策略,定位到配置文件所在父目录,用 grep 遍历方式查找带有静态网络配置的特征关键字是否在这个目录即可。反正确定 ip,网关,子网掩码的方法依赖于系统自带的 ip 命令,不需要读取具体的网络配置文件。读取网络配置文件的目的仅仅是为了确认系统网络配置是动态还是静态的,这会影响到重启后自动应答文件该选择哪种方式引导安装程序配置网络。

2. 支持 redhat 系静态双栈配置

Redhat 系自动应答文件,kickstart 里,允许给一个网卡添加 ipv4 地址,子网掩码的基础上,再添加--ipv6=1ad8::::857b/128 这种格式,即包含了一个 ipv6 地址和它斜杠后的子网掩码,也支持单独添加一条 ipv6 网关,即 --ipv6gate=,加上--nameserver= 可以添加多条 DNS 服务器,用英文逗号隔开即可,这样在自动应答文件可以统一配置的情况下,我就不用像 Debian 那样,因为自动应答文件里指定 IP 地址等参数前缀是一样的,不支持给单网卡添加多个不同参数,同样前缀指令新的会覆盖旧的,不能共存。支持 ipv6 的配置还得放到系统安装完成后,后续自定命令执行阶段,强写到 /etc/network/interfaces 里,也不用纠结 Redhat 系 7 8 9 不同的网络配置文件目录,不同的写入语法这些问题。再加上如果是双栈动态,Redhat 系会双栈自动配好,不用再像 Debian 那样,给网络配置文件里单独给目标网卡写一条开启 dhcp 的命令,这个机能说实话蛮不错的,Debian 应该好好学学。

3. 优化进入低内存模式策略

机器如果安装的是 Debian 11,内存小于 768M,会让机器自动进入低内存模式,如果是 Debian 10,阈值是512M,照这个趋势下去,我真怕哪天小内存机器也不能愉快的网络重装 Debian 了。Redhat 系早就成了吞内存巨兽。

4. 经测试,内存不足 1.5G 的机器安装 centos 7会卡死,即最小化镜像无法完整下载到内存中,这个问题只能通过加内存,或用外部驱动器来加载引导才能解决。内存不够的机器安装会终止。

5. Debian 系默认 GPT 分区,以适应未来 3TB 以上硬盘需求,Redhat 系默认是这个,不用修改。

6. 访客时区自动设置

缺省情况下,如果我们给脚本的时区一个固定值,比如:Asia/Shanghai,即可满足绝大部分国人的需求,但本着国际主义精神,该脚本面向的是全世界用户,包括我的 github 项目文档就是用纯英文写的,为了适应全世界各地用户的时区,我添加了根据访问该 VPS 用户的 IP 地址,确定其时区的功能,该功能通过 https://ipgeolocation.io/ 提供的 API 完成。

如果你不想被 API 追踪,或想手动设置时区,也可以添加 -timezone 参数,如:-timezone "Asia/Shanghai" 来完成设置,如果输入的格式不对,或者不在当前系统内置的时区列表内,比如“Asia\Osaka”,脚本仍提供了一个缺省值:"Asia/Tokyo"。

另外,我通过 ping 谷歌和推特的连通性来确认机器是在中国大陆境内还是境外,如果是境内,跳过使用 API,直接给上海时区,正好覆盖到绝大部分生活在国内的国人,操作国内机器的需求。

考虑到中国大陆的 VPS 购买需要实名制,一个从未来过中国大陆的外国人无法完成购买,所以曾经来过,或在中国大陆生活过,拥有正式身份(包括临时的),拥有购买中国大陆 VPS 能力,且目前正生活在非东八区时区以外的这一部分人的数量极少,所以不在自动时区设置功能所照顾的范围内,如果你正好是这一部分人,请根据自己所生活的地区,手动设置正确的时区。

如果你使用的是代理连接机器,那么很抱歉,本脚本不是电脑病毒或者贞子,无法从终端逃逸到你当前运行的实体机上,查询你的物理网卡外网 IP 地址并完成正确的时区设置,只能按你用哪个 IP 连接到的这台机器设置当地时区,包括代理服务器。这种情况下,你也需要手动设置正确的时区。

7. 双栈静态网络支持

针对各位坛友 VPS 极为特殊的疑难杂症,比如双栈(同时拥有 IPv4 和 IPv6 地址)且都是静态地址配置的机器,做出了优化,由于系统安装程序只能完成一个网卡的单栈(IPv4)配置,所以支持静态 IPv6 的实现,即获取用户当前系统 IPv6 配置并写入到新系统里的步骤,放到 preseed 后续流程中,双栈动态 DHCP 机器当然也 ok,此特性仅限 Debian。

出现这个案例的机器,最初是坛友@坏坏 向我汇报的,他的机器来自荷兰的一个 oneman 小商家,结果实验做到一半,机器失联了,后来一直连不上了。于是我就用甲骨文的双栈机继续验证,强写静态双栈配置,然后重装,实验后发现新功能可用。

再次提醒,脚本判断是静态还是 dhcp 的策略是优先静态,即读出系统中某一个栈的网络配置如果是静态,那么双栈都按静态配置,这点在某些 IPv4 是动态,ipv6 是静态配置的机器上经过实验得到了验证,即此时应当双栈静态配置,新系统中网络才能完美配好,如果要强行指定静态或动态,你可以在脚本命令最后,加上“--network "static/manual" 或 --network "dhcp/auto" ”参数。

实验机器:甲骨文 Oracle ARM 2 OCPU 12 GB 双栈机,区域:澳大利亚悉尼。


强写静态 IPv4 和 IPv6 配置的网络配置


preseed 内系统安装阶段写入了正确的 IPv4 配置


preseed 内后续执行阶段写入了正确的 IPv6 配置


再次进入系统后,网络配置是正确的,不要在意网卡名为什么换了这些细节,详情在第8节,压力测试顺便一块儿做了

Redhat 系列由于版本 7 和 8 的网络配置在 /etc/sysconfig/network-scripts/ 里,9 的网络配置在 /etc/NetworkManager/system-connections/ 里,不同目录里网络配置文件的格式完全不同,处理起来实在麻烦,所以双栈机静态地址配置IPv6放在 kickstart 自动应答文件里统一完成,DHCP 可双栈自动配置好。

8. 自动识别网卡是否被重定向

部分商家的部分系统模板,如搬瓦工的 Ubuntu 22.04 amd64,默认会在 /etc/default/grub 这个文件的 “ GRUB_CMDLINE_LINUX="" ”项目中,插入:"net.ifnames=0 biosdevname=0" 值,包括坛友@坏坏 的机器,这个参数是通过 grub 或 grub2 引导 Linux 内核时,强制所有网卡的名称重定向为统一的 eth0,eth1……这样的,而不再是网卡本身的物理名称,比如 ens18,ens3,enp0s3,等等。

这么做比较方便网络管理员用脚本对一个大局域网里数十台,乃至上万的计算机的网络配置进行统一管理,因为网卡名称都统一了,不会因为网卡制造商名称不同而不同,坏处是一旦新安装系统里,未指定附带这个值,那么原系统里获取的比如“eth0”的网卡名称,以及与它有关的网络配置,在新系统内就无效了。

所以,我在脚本里默认对网卡重定向的机器做了优化,如果什么都不指定,脚本会自动检测当前系统是否将网卡名称重定向了,如果是,新安装的系统内继承这个配置,并且由于我们知道这样做,默认第一个网卡名必然是“eth0”,所以属于网卡“eth0”的,预先写好的网络配置内容仍然有效。如果没有做这个设置,那么我们在当前系统获得的网卡名称就是真实的,属于该网卡名称下的网络配置对新系统也有效。

为了给那些喜欢追求新鲜感和刺激感,勇于挑战自我的朋友们,提供更加 exciting 的选择,我还添加了两个参数,一个是 --adapter "真实的物理网卡名",另一个是 --netdevice-unite(该参数不需要指定值)。这两个参数不建议混用,因为它们的作用几乎是相反的:

--adapter 的作用是,如果你的原系统网卡名重定向了,当且仅当你知道这台机器网卡正确的物理名称是什么,并且要在新系统里关闭网卡重定向功能是才需要指配,为什么要告诉脚本物理网卡的真实名称?因为 Linux 内核网卡重定向功能对真实网卡名进行了完全隐藏,我在系统里找半天也无法找到,既然在当前系统内无法找到,那就只能你手动指配。注意,如果指配错误,会直接影响到重启后安装程序自动配置 IPv4 网络,以及后续 IPv6 网络配置文件的写入正确性。

正如其名,--netdevice-unite 的作用恰好反过来,即如果你当前系统网卡并没有被重定向,但想要在待安装的新系统里进行重定向,那么你可以指配这个参数,无论在哪个商家,哪个配置的机器上安装,在新系统里,网卡名称会被统一成 eth0 eth1……等,但代价是新系统里不再记录真实网卡的名字,在使用这个参数时,你应该提前记好这台机器本来真实网卡的名字是什么,以备以后重装时,不再需要网卡重定向了之后还原配置。


动态网卡未重定向网络配置


动态网卡重定向网络配置

静态网卡重定向网络配置第2节里有。


网卡未重定向时,grub 自定义配置文件:/etc/default/grub


网卡重定向时,grub 自定义配置文件,目录同上

如果想在当前系统手动修改网卡重定向,或取消网卡重定向怎么办?

打开文件,寻找到“ GRUB_CMDLINE_LINUX="" ”项目,针对“net.ifnames=0 biosdevname=0”,加入表示重定向网卡名称,删除表示还原网卡真实名称。

    vim /etc/default/grub

刷新 grub 配置才能生效,grub1 或 grub2 命令不同,根据实际情况自己选择:

    grub-mkconfig
    grub2-mkconfig

当然,说了这么复杂,你只需要记住,相信脚本的自动判断能力,指派的东西越多,出错的概率越大,the less is more。

另外,以上这些,自己怎么折腾都行,不要在正式的生产环境中操作,尤其是涉及到修改内核加载参数的操作,谁也无法承担生产环境中出错带来的不可逆的后果,你应当对你自己的行为负责。

热议
2楼 0.0 3天前

太牛逼了

3楼 zdszf 3天前

太牛逼了 支持archlinux

4楼 3351239779 3天前

顶一下
你的帖子,让我重新在loc看到了光

5楼 鸡不择食 3天前

5k 不来了?

6楼 东风破 3天前

价值几K的脚本

7楼 她说是晒黑的 前天00:15

好,支持大佬的技术贴,阴阳怪退散

8楼 沙龙 前天02:06

大佬牛皮。

/**
* 人死后会成为什么?夜空中的一座孤岛。——《一封孤岛的信》
*
* Link https://greasyfork.org/zh-CN/scripts/396933-hostloc-zsbd
*/

9楼 腾讯云6折购 前天13:40

什么时候支持archlinux

10楼 天权璇玑 前天13:52

什么时候支持archlinux

不常用啊,很多商家后面板都没有

12楼 genexis 前天14:14

可以用来DDwindows吗

13楼 HOH 前天14:15

5k 不来了?

5k换号而已

14楼 腾讯云6折购 前天14:38

不常用啊,很多商家后面板都没有

https://github.com/felixonmars/vps2arch

15楼 腾讯云6折购 前天14:40

给我打钱,我会好好研究下的

支付宝到帐 一亿元

16楼 腾讯云6折购 前天14:46

大佬有个问题反馈一下,我原系统选择centos7.9用你的脚本dd debian11 会提示grub错误 用秋水修改的萌咖的脚本 就可以正常dd成功。试了两台机器都是这样的,秋水就是修改了centos7 dd时候出现grub错误的问题。建议大佬有时间可以看一下秋水的脚本:https://github.com/teddysun/across/blob/master/InstallNET.sh

17楼 htazq 前天14:59

帮顶一下,支持

18楼 天权璇玑 前天18:13

大佬有个问题反馈一下,我原系统选择centos7.9用你的脚本dd debian11 会提示grub错误 用秋水修改的萌咖的脚 ...

什么商家的机器?我在甲骨文原版 OracleLinux 7.9 测试过重装 Debian 没问题,重装到原版 CentOS 7.9 重装 Debian 也没问题

19楼 腾讯云6折购 前天18:18

什么商家的机器?我在甲骨文原版 OracleLinux 7.9 测试过重装 Debian 没问题,重装到原版 CentOS 7.9 重 ...

https://digitalvirt.com/

20楼 GFRACK 前天18:23

希望大佬支持efi启动

22楼 天权璇玑 前天20:09

可以用来DDwindows吗

DD功能参见原贴:
https://github.com/leitbogioro/Tools
How to install Windows?

23楼 tomcb 前天21:13

网卡名称这个很好,习惯统一使用eth0这个

24楼 wugg 昨天19:46

牛批

25楼 天权璇玑 6小时前

https://digitalvirt.com/

给实机测试

26楼 天权璇玑 6小时前

给实机测试

我想起来了,GCP可能也是这么做的,所以给原系统写grub引导无用

27楼 天权璇玑 6小时前

我想起来了,GCP可能也是这么做的,所以给原系统写grub引导无用

其他机子也有用NVME的,为什么硬盘名字能正常识别呢?

28楼 ecs 6小时前

@**璇玑 你是不是台湾人,看你大篇文字的严谨样,像极了我之前认识的一个搞游戏开发的朋友,,他也是台湾的。。。

好像台湾人都较行文详细。

29楼 天权璇玑 6小时前

@**璇玑 你是不是台湾人,看你大篇文字的严谨样,像极了我之前认识的一个搞游戏开发的朋友,,他也是台湾的 ...

不是,台湾人习惯用繁体,而且部分电脑名词和大陆也有区别

30楼 ecs 6小时前

不是,台湾人习惯用繁体,而且部分电脑名词和大陆也有区别

debianinstaller中的那个netcfg你需要patch它的c源码,才能修复那个网关和ip不同域的问题。
还有很多独服,根本不认fat32的只认ext2的grub分区。

总之,很多问题,dd的水实际上很深,我都懒得去发现更多,给你一些参考。

32楼 ecs 6小时前

不是,台湾人习惯用繁体,而且部分电脑名词和大陆也有区别

你试着给dd增加一些更酷的功能试试,,很有趣的挑战

33楼 今晚不吃饭 6小时前

技术贴我顶

34楼 天权璇玑 6小时前

还比如,自动扩盘,实际上分区可以错位,让grub的efi,boot分区放在最后而不是第一位,数据区可以显示为第 ...

再听下去我都要疯了,能应付主流情况就行了,很多偏门的情况,无法都照顾到

35楼 天权璇玑 6小时前

你试着给dd增加一些更酷的功能试试,,很有趣的挑战

你要有想法,可以把代码提交过来,合并进去,有些坑不是以我个人能力能解决的,除非我自己必须得应对

36楼 天权璇玑 6小时前

你试着给dd增加一些更酷的功能试试,,很有趣的挑战

看你研究这个经验也蛮多的,有什么好的想法,分享出来,大家受益

37楼 ecs 6小时前

看你研究这个经验也蛮多的,有什么好的想法,分享出来,大家受益

怎么会还有这个劲头。。。我现在只想出一些小鸡。

38楼 天权璇玑 5小时前

怎么会还有这个劲头。。。我现在只想出一些小鸡。

折腾的尽头是养老

39楼 渣渣灰 5小时前

raid0最新测试进展,之前朋友联系我,说raid0重装之后,2个盘只显示1个 另一个盘容量没有叠加到 “/” 如下图 有空排查下

40楼 腾讯云6折购 4小时前

给实机测试

发私信了给你了 大佬

42楼 渣渣灰 2小时前

对,这个是老问题,原因是Debian11不认旧版的分区方法,装Debian10是可以认到所有盘的,这个问题暂时比较 ...

好的 那就先用着先10再手动11

申明:本文内容由网友收集分享,仅供学习参考使用。如文中内容侵犯到您的利益,请在文章下方留言,本站会第一时间进行处理。

未经谷姐允许不得转载:谷姐靓号网 » 【意见征集】一键重装支持访客时区 静态双栈 网卡重定向-天权璇玑
分享到: 生成海报

热门文章

评论 抢沙发

评论前必须登录!

立即登录   注册

买Google Voice认准【谷姐靓号网】

Google Voice靓号列表Google Voice自助购买
切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活