logo NodeSeekbeta

史上最强,支持 Debian 12 raid 0 Ubuntu 24.04(测试中);512MB 内存安装 AlmaLinux/RockyLinux;CentOS 9 Fedora 39 AlpineLinux Kali Linux Windows 重装程序功能更新、bug反馈贴(长期更新)

大家好,我是 leitbogioro,隔壁论坛id为“天权璇玑”,很荣幸加入 nodeseek 论坛,和大家一起交流,成长,进步。

我最近在主力做的一个项目,就是 Linux 一键重装脚本,针对市面各类脚本中支持的 Linux 发行版种类过少,基于 BIOS 或 UEFI 不同主板固件机型的 grub 引导菜单的路径判别、有效性识别、新 menuentry 引导菜单写入乏力,仅支持 IPv4 dhcp 或仅支持 IPv4 静态(我寻思你们开发的时候是跟用 IPv6 的人有仇吗?),完全不支持 IPv6,dhcp 或静态 IPv4 IPv6 网络配置的检测和商家模板错误的网关设置自动修正等等问题进行了深度的改善和优化。

很多欧洲 oneman 小商家,甚至 Hetzner Godaddy 等大厂,由于网管的技术水平极其业余,其模板系统自带的静态网络掩码设置都有致命缺陷,比如 IPv4 设置为 255.255.255.255,IPv6 prefix 设置为 128,导致重启后 Debian installer 等网络安装内核寻找的 IP 地址范围过窄,触发网关不可达(unreachable gateway)报错,如果按原样从原系统内读取,不根据主 IP 和网关 IP 加以对比计算和修正,得出适合的掩码,或者是默认模板基于红帽系,用其他同类脚步重装一定会出现此类问题且不可解决。

作为服务器功能完整实现的至高一环,网络配置方面是我这个脚本着重完善的方面,所有受支持的 Linux 发行版,包括拥有 IPv4 和 IPv6 的双栈机重装后网络能全部自动配好,无需手配(如果是双网卡每张网卡上配置了一种网络,目前 Debian 也支持),纯 IPv6 机器的支持也完全没问题(暂不包含 AlpineLinux/Ubuntu)。

目前项目获得了很多朋友的认可,支持 Debian 9+,包括Debian 12,新版 AlmaLinux,RockyLinux,CentOS,Fedora,AlpineLinux Edge,Ubuntu 20.04 22.04 等系统之间,arm64 和amd64 架构之间永久互装,也支持从甲骨文自带的 Oracle Linux 等类红帽系统重装到脚本支持的任意系统(红帽系内存要求较高,2GB以上),当然也可以安装到 Windows,暂不支持从 Windows 装回 Linux。

目前脚本支持自动检测机器是否运行 CloudFlare Warp 实现的“伪双栈”,并剔除套了 CloudFlare Warp 实现的 IPv4 栈或 IPv6 栈,以实现重装前识别出机器原生具有的网络栈状态,避免重装时配置网络部分写入错误的预期网络栈参数。

github 项目地址如下,欢迎 star:

https://github.com/leitbogioro/Tools

界面演示(图库来自 imgur.com 和 github.com,需要挂梯子全局访问才能正常显示):

连接服务器的桌面终端客户端(terminal)仅推荐从官网下载的 Xshell 或 putty,不要用一些界面极其炫酷,但其支持的密钥交换算法极其有限的,来路不明、奇奇怪怪,甚至破解的终端连接重装后的系统,否则很大概率出现密码错误问题。我脚本所做的工作,仅仅是保证目标设置端口和密码下,重装后能正常连接,涉及改用 ssh 密钥登录等重要操作,能手动设置,请不要依赖一键脚本,也别赖我脚本重装的系统有问题!来路不明的客户端也有可能存在偷偷上传密钥,把你机器当成肉鸡的风险,如果今后 Xshell 等终端软件也出安全问题,我也会广而告之。

甲骨文云开启 IPv6 的方法,以及仅有 IPv4 公网访问的机器,web 面板中手动开启 IPv6 dhcp 6 后,在当前机器开启 IPv6 dhcp 访问的方法:

中文教程:

https://www.google.com/search?q=%E7%94%B2%E9%AA%A8%E6%96%87+%E5%BC%80%E5%90%AF+ipv6+%E8%AE%BF%E9%97%AE+%E6%AD%A5%E9%AA%A4

英文教程:

https://www.google.com/search?q=oracle+cloud+ipv6+public+access+enable

获得网卡名:

[root@instance-20230624-1531 ~]# ip -4 route show default
default via 10.0.0.1 dev ens3
default via 10.0.0.1 dev ens3 proto dhcp src 10.0.0.138 metric 100

当前网卡有如果 dhcp IPv6 访问权限,且当前系统中配置文件中仅规范了 IPv4 网络访问,未规范 IPv6 dhcp 访问时,在系统中开启 dhcp IPv6 访问(不包含 IPv6 静态访问)的命令,需要重启:

dhclient -6 "网卡名 如 ens3"
reboot

下载前记得更新源,安装 wget 组件,以下命令仅对应原系统:

Debian 系(Debian Kali Ubuntu):

apt update
apt update install wget -y

红帽系(CentOS AlmaLinux RockyLinux Fedora 等):

dnf install wget -y

AlpineLinux(需要安装 wget bash 组件,并把系统默认的 shell 从 ash 改成 bash):

apk update
apk install wget bash
sed -i 's/root:\/bin\/ash/root:\/bin\/bash/g' /etc/passwd

下载并运行脚本:

wget --no-check-certificate -qO InstallNET.sh 'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh' && chmod a+x InstallNET.sh

国内机器现在可以从 Gitee 下载:

wget --no-check-certificate -qO InstallNET.sh 'https://gitee.com/mb9e8j2/Tools/raw/master/Linux_reinstall/InstallNET.sh' && chmod a+x InstallNET.sh

快速开始(当且仅当脚本不加 -pwd -port -mirror 等参数时有效,如果加了,必须指定对应系统的发行版版本号!):

不用再输入使用何种架构(-v 选项已被 -version 替代,且两者都已经被弃用),脚本会自动检测架构、实现 Debian 系和 Redhat 系架构名相互智能转换!

Debian 12(支持 9 至 12)

bash InstallNET.sh -debian

Kali rolling(支持 rolling/dev/experimental 三个分支,原则上推荐使用 rolling)

bash InstallNET.sh -kali

Kali 对 ARM64 AMD64 架构的兼容性都 OK,甲骨文 Oracle ARM 机装虽然从原系统重启后安装就黑屏,什么提示都没有,在 VNC 里也无法观测进度并调试,但只要是从面板自带模板或任意其他一键脚本安装的纯净系统中安装过去的,100% 保证能成功,VNC 里看到黑屏别怕,别手欠中途硬重启,不知道 Kali 是什么的,反正你就知道 Kali 是日常、电影电视剧里黑客经常用的,自带很多安全测试工具,贼鸡儿炫酷的一个 Debian 发行版就行。Kali 有三个版本,按激进程度大小排列,分别为 experimental > dev > rolling,普通人不爱折腾的,最好以使用 rolling 为主。

Alpine Linux edge(支持 3.16 至 3.18 和 edge,推荐 edge)

一个超轻量 Linux 发行版,但需要注意的是,Alpine Linux 运行的时候省内存,内存占用仅 80m 左右,但安装时不省,因为它会在内存中完成所有初始化操作,直到最后再全盘写入硬盘,不像 Debian 红帽系启动内核在内存里准备完毕,就开始进行格盘并从镜像源往硬盘上写入文件操作,这就导致安装 Alpine Linux 的内存要求并不低,低于 1GB 内存的机器不要安装,由于 Alpine Linux iPXE 启动文档里仅描述了如何通过 dhcp 或静态从 IPv4 网络启动,所以仅有 IPv6 公网访问的机器也不要安装。双栈机 IPv6 部分会在安装过程中自动配置好。

bash InstallNET.sh -alpine

CentOS 9 stream(支持 7-9)

bash InstallNET.sh -centos

AlmaLinux 9(支持 8-9)

bash InstallNET.sh -alma

RockyLinux 9(支持 8-9)

bash InstallNET.sh -rocky

Fedora 38(支持 37-38)

bash InstallNET.sh -fedora

Ubuntu 22.04(支持 20.04 或 22.04)

bash InstallNET.sh -ubuntu

Windows Server 2022(基于在 AlpineLinux 中介下 dd 实现,支持 BIOS UEFI 不同固件下自动识别对应的 dd 包,支持 Windows 10 Enterprise LTSC, Windows 11 Pro for Workstation 22H2, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019, Windows Server 2022,重装时输入对应系统的数字版本号即可,如果能通过VNC登录系统,可自动进行 IPv4 静态配置和自动扩展系统盘分区,dd 包来自秋水逸冰,再次感谢他的无私奉献)

bash InstallNET.sh -windows

感谢王煎饼的天才想法,找到 AlpineLinux 这么一个奇佳的 dd 中介系统,让我得以有得一手嘚瑟一番:

王煎饼隔壁论坛 id:https://hostloc.com/space-uid-35316.html
王煎饼 github 主页:https://github.com/bin456789/

原理论述起来实在太复杂,感兴趣的客官,请移步我单独一个帖子来了解:

https://www.nodeseek.com/post-9558-1 (实现 Ubuntu 22.04 及以后版本安装的技术原理以及我对“原生网络安装”和“dd 安装”的观点与评价)

除了 Ubuntu 和 Windows,其余发行版 Linux 均支持自选镜像源,脚本内部仅内置官方后备,且能够区分国内或是国外机器,国内机器重装时必要联网获取的配置文件也能连接到我项目的 gitee.com 镜像,确保国内机器晚高峰重装时不会卡住,或是遭受 github.com 被大墙的阻断。

其他脚本支持重装到的 Linux 系统均支持原生指定全球各地镜像源的方式安装,如果不指定源,脚本会区分国外国内自动为国内 VPS 切换到国内源,避免连接缓慢,如果要手动指定源,输入系统和对应版本后,加参数“-mirror”,如:

bash InstallNET.sh -debian 12 -mirror "http://ftp.riken.jp/Linux/debian/debian/"

Debian 全世界各国家、地区源列表:

https://www.debian.org/mirror/list.html

Kali 全世界各国家、地区源列表:

https://http.kali.org/README.mirrorlist

Kali 官方源 https://http.kali.org/ 因为不支持纯 IPv6 访问,所以脚本中默认国外源选用的是美国勃克利学院 https://mirrors.ocf.berkeley.edu/kali/ 的,学术机构,中立放心,同时支持 IPv4 IPv6 访问,带宽大,下载质量良好。

CentOS 7 和 8-stream,全世界各国家、地区源列表:

https://www.centos.org/download/mirrors/

CentOS 9-stream 及以后全世界各国家、地区源列表:

https://admin.fedoraproject.org/mirrormanager/mirrors/CentOS

AlmaLinux 全世界各国家、地区源列表:

https://mirrors.almalinux.org/

RockyLinux 全世界各国家、地区源列表:

https://mirrors.rockylinux.org/mirrormanager/mirrors

Fedora 全世界各国家、地区源列表:

https://admin.fedoraproject.org/mirrormanager/mirrors/Fedora

默认密码如下:

LeitboGi0ro

由于 AlpineLinux 和 Ubuntu 采用明文(未经 openssl 加密过的密文,仅本地变量传输,不会传到其他地方,放心)传递密码参数到配置文件,附加特殊符号可能会导致 sed 处理时出错,所以 AlpineLinux 和 Ubuntu 默认密码统一为 LeitboGi0ro 且暂不支持修改。

密码若要自定义,可添加 -pwd '密码内容' 修改,密码字段建议前后使用单英文引号(' ')括起来,以免 shell 将双英文引号(" ")中带特殊字符的密码当做命令传递,造成错误,不要设置的过长过复杂,例:

-pwd 'xiaoming'

特别的是,如果密码中带有英文单引号('),请一定在该单引号前加 ''' 做转义,也就是说,以下转义过的字符才和一个单引号等价:

'\''

也就是说,以上符号才等于实际密码中的 ' 符号,比如你密码要设置为:'xiaoming',那么如下输入才是正确的:

-pwd ''\''xiaoming'\'''

如果使用的是默认密码,安装后请立即修改!

默认 ssh 端口随原系统,比如你机器原系统 ssh 为 65432,新装好的系统端口号也为 65432,亦可添加 -port "端口号" 修改,支持全系受支持的 Linux 系统,范围“1-65535”,如果给错或无法确定原系统端口,后备值为:

22

例:

-port "12345"

如果想要强制双网动态配置,请输入:

bash InstallNET.sh -debian 12 --network "dhcp"

如果想要强制双网静态配置,请输入:

bash InstallNET.sh -debian 12 --network "static"

目前支持如果有双网卡,每张网卡上带一个 IPv4 或 IPv6 的静态配置,新安装系统中这两张网卡的网络配置都能够自动配好,仅限 Debian/Kali:

20

为方便拥有多盘独服的朋友,支持新安装 Debian/Kali/CentOS/AlmaLinux/RockyLinux/Fedora 系统中组建软raid,输入 -raid "方法(支持:0 1 5 6 10)" 即可,请根据自己需求选择对应的 raid 方法。

raid 0, 1 至少需要双盘;

raid 5 至少需要三盘;

raid 6, 10 至少需要四盘。

组建 raid 的硬盘原则上每盘容量应当相等,否则系统总容量会被 raid 中最小容量硬盘所限制,任何硬盘型号、控制器(无论是 vda sda nvme0n1 hda 等)即可,只要容量相等,数量足够,都能成功组建对应的 raid 阵列且没有空间被浪费。

bash InstallNET.sh -debian 12 -raid "0"

-setdisk "硬盘名或 all",支持将系统安装到某块硬盘上,如 vdb sdc 等,输入纯硬盘名即可;也可以设置成“all”,除了将系统安装在默认第一块可读写硬盘中,也可以将其他硬盘空间擦除。此参数和 -raid 冲突,请不要两者都给。

bash InstallNET.sh -debian 12 -setdisk "all"

bash InstallNET.sh -debian 12 -setdisk "vda"

如果想要纯手动模式安装,比如用于调试等,请输入(要求必须能用 VNC 访问机器),不支持 AlpineLinux Ubuntu:

bash InstallNET.sh -debian 12 --allbymyself

如果想要使用 netbootxyz 纯手动模式安装其受支持的系统,比如 Archlinux 等,请输入(不推荐,要求必须能用 VNC 访问机器,仅 x86_64 AMD64 架构,BIOS 固件机器使用,甲骨文 UEFI 固件机器用 netbootxyz 启动,请参考此教程:https://zhuanlan.zhihu.com/p/97527349):

bash InstallNET.sh -netbootxyz

现在开启了一个参数,--setipv6 "0 ",指定强制关闭系统安装时加载 IPv6 模块,设置为 0 就是关闭,指定其他值或不指定为加载 IPv6 模块。不管机器实际是否有 IPv6 网络,只要设置 --setipv6 "0",新系统里 IPv6 模块就会被彻底禁用,无法访问 IPv6 网络,请按照实际情况选择,对部分 Racknerd 和 Virmach 等商家的纯 IPv4 机器有效,因为这些商家的纯 IPv4 机器也会被 dhcp 分配到一个公共 IPv6 地址,且 DNS 解析外部网站域名,会强制返回它们的 IPv6 地址,然而机器没有 IPv6 网络,导致 ping wget curl 等网络连接工具会因持续试图连接 IPv6 地址而失败,强制新系统里不加载 IPv6 模块可解决此问题。但这样会导致 Nginx 里带加载 IPv6 网络的模块失败导致启动失败,请自行到 /etc/nginx/nginx.conf 目录里把

# listen [::]:80 default_server;

Racknerd Virmach 纯 IPv4 机型安装时不指定 --setipv6 "0" 的后果,wget 总是优先连接 IPv6,当失败数次后才使用 IPv4 连接,造成过长的连接等待。

21

注释掉,该选项适用于除 AlpineLinux 以外的全部 Linux 发行版

bash InstallNET.sh -debian 12 --setipv6 "0"

现开启了一个参数:--nomemcheck ,输入后即跳过内存容量检测,你可以在任何内存的机器上尝试安装目标系统,即使能在当前系统成功下载并打包网络安装启动内核,但不保证重启后能安装成功。

bash InstallNET.sh -debian 12 --nomemcheck

如何使用本脚本从 Linux dd 到 Windows?

  1. 任意基于 KVM QEMU 或 XEN 的机器,不管机器原系统是 Debian 系还是 Redhat 系,grub 引导菜单都能成功写入并重启后被启动:

bash InstallNET.sh -dd 'DD 镜像链接'

  1. 某些支持多种启动方式,如救援模式,正常模式等的独服,如 Kimsufi 等:

将启动模式转换为救援模式,从邮箱里获取登陆账户密码,进入救援模式临时系统,执行:

wget -O- 'DD 镜像链接' | xzcat | dd of=/dev/sda

等待 dd 镜像下载并解压好,将启动模式改为正常模式,输入重启命令,等待被 dd 的 Windows 系统初始化完成。

reboot

感谢秋水逸冰先生的无私付出,辛苦制作了一批成熟的 Windows 系列 dd 镜像并提供直链,从临时中转的 Debian 12 格盘后,dd 的镜像来源,连接详情,硬件需求均基于秋水逸冰先生的 dd 镜像。

秋水逸冰博客:https://teddysun.com/
秋水逸冰 github:https://github.com/teddysun/

用户名: Administrator
密码: Teddysun.com
RDC(远程桌面) 端口: 5900
网络: 必须具备 IPv4 DHCP
CPU: 仅限 AMD64 架构,至少单核,双核以上更佳
硬盘: 至少 20GB,推荐 50GB 及以上,固态硬盘更佳
内存: 至少 2GB , 8GB 以上更佳

Windows dd 包来源:

BIOS 主板固件,MBR 分区

Windows 11 Pro for Workstations 22H2

简中: https://dl.lamp.sh/vhd/zh-cn_windows11_22h2.xz
英语: https://dl.lamp.sh/vhd/en-us_windows11_22h2.xz
日语: https://dl.lamp.sh/vhd/ja-jp_windows11_22h2.xz

Windows Server 2022 Datacenter

简中: https://dl.lamp.sh/vhd/zh-cn_win2022.xz
英语: https://dl.lamp.sh/vhd/en-us_win2022.xz
日语: https://dl.lamp.sh/vhd/ja-jp_win2022.xz

Windows 10 Enterprise LTSC

简中: https://dl.lamp.sh/vhd/zh-cn_windows10_ltsc.xz
英语: https://dl.lamp.sh/vhd/en-us_windows10_ltsc.xz
日语: https://dl.lamp.sh/vhd/ja-jp_windows10_ltsc.xz

Windows Server 2012 R2 Datacenter

简中: https://dl.lamp.sh/vhd/cn_win2012r2.xz
英语: https://dl.lamp.sh/vhd/en_win2012r2.xz
日语: https://dl.lamp.sh/vhd/ja_win2012r2.xz

UEFI 主板固件,GPT 分区

Windows 11 Pro for Workstations 22H2

简中: https://dl.lamp.sh/vhd/zh-cn_windows11_22h2_uefi.xz
英语: https://dl.lamp.sh/vhd/en-us_windows11_22h2_uefi.xz
日语: https://dl.lamp.sh/vhd/ja-jp_windows11_22h2_uefi.xz

Windows Server 2022 Datacenter

简中: https://dl.lamp.sh/vhd/zh-cn_win2022_uefi.xz
英语: https://dl.lamp.sh/vhd/en-us_win2022_uefi.xz
日语: https://dl.lamp.sh/vhd/ja-jp_win2022_uefi.xz

Windows 10 Enterprise LTSC

简中: https://dl.lamp.sh/vhd/zh-cn_win10_ltsc_uefi.xz
英语: https://dl.lamp.sh/vhd/en-us_win10_ltsc_uefi.xz
日语: https://dl.lamp.sh/vhd/ja-jp_win10_ltsc_uefi.xz

Windows Server 2012 R2 Datacenter

简中: https://dl.lamp.sh/vhd/cn_win2012r2_uefi.xz
英语: https://dl.lamp.sh/vhd/en_win2012r2_uefi.xz
日语: https://dl.lamp.sh/vhd/ja_win2012r2_uefi.xz

有任何问题,都可以在该帖里向我提出,该帖会长期更新,我在力所能及的范围之内都会想办法解决,感谢支持,再次感谢所有爱技术、爱折腾的人们!

  • 由于原贴无法修改,通过回复的方式介绍一下最近更新:

    1. 设置 swap 文件系统

    默认不带 swap ,需要的话可以装好系统自己加,768 MB 以下机型因为完全不给 swap 会导致安装崩溃,所以还是会至少分配 512 MB,原生安装的红帽系也至少需要 512 MB swap ,可以指定 -swap "数字,以 MB 为单位" 预置,比如 -swap "1024" ,提前设置 1GB swap 。

    bash InstallNET.sh -swap "1024"
    

    UEFI 固件强制 gpt 分区,BIOS 固件 2TB 以下硬盘默认 mbr 分区,如果想在 BIOS 环境强制 gpt 分区,可指定 -partition "gpt" 。

    bash InstallNET.sh -partition "gpt"
    

    文件系统方面,Debian/Kali 默认 ext4 ,CentOS/AlmaLinux/RockyLinux/Fedora 默认 xfs 且不可更改。如果想在 Debian/Kali 上使用 xfs ,可以指定:

    bash InstallNET.sh -filesystem "xfs"
    
    1. 支持 Ubuntu 24.04 测试版,不建议在生产环境中使用
    bash InstallNET.sh -ubuntu 24.04
    
    1. 为 Debian 11 及以上,Kali 安装时开启 BBR ,网络优化

    Debian/Kali 专属,输入 --bbr 安装好后让内核启动时写入以下参数,包含开启 BBR ,网络优化,经测试效果提升明显,尤其是对于 VPS 的上传,不适用于 Debian 10 及更早版本:

    bash InstallNET.sh --bbr
    
    net.core.default_qdisc = fq
    net.ipv4.tcp_congestion_control = bbr
    net.ipv4.tcp_rmem = 8192 262144 536870912
    net.ipv4.tcp_wmem = 4096 16384 536870912
    net.ipv4.tcp_adv_win_scale = -2
    net.ipv4.tcp_collapse_max_bytes = 6291456
    net.ipv4.tcp_notsent_lowat = 131072
    net.ipv4.ip_local_port_range = 1024 65535
    net.core.rmem_max = 536870912
    net.core.wmem_max = 536870912
    net.core.somaxconn = 32768
    net.core.netdev_max_backlog = 32768
    net.ipv4.tcp_max_tw_buckets = 65536
    net.ipv4.tcp_abort_on_overflow = 1
    net.ipv4.tcp_slow_start_after_idle = 0
    net.ipv4.tcp_timestamps = 1
    net.ipv4.tcp_syncookies = 0
    net.ipv4.tcp_syn_retries = 3
    net.ipv4.tcp_synack_retries = 3
    net.ipv4.tcp_max_syn_backlog = 32768
    net.ipv4.tcp_fin_timeout = 15
    net.ipv4.tcp_keepalive_intvl = 3
    net.ipv4.tcp_keepalive_probes = 5
    net.ipv4.tcp_keepalive_time = 600
    net.ipv4.tcp_retries1 = 3
    net.ipv4.tcp_retries2 = 5
    net.ipv4.tcp_no_metrics_save = 1
    net.ipv4.ip_forward = 1
    fs.file-max = 104857600
    fs.inotify.max_user_instances = 8192
    fs.nr_open = 1048576
    

    其他系统把以上内容复制到以下文件并保存:

    vim /etc/sysctl.conf
    

    使配置生效:

    sysctl -p
    

    优化可能不适合所有环境下,有问题反馈。

  • @zybep #11 如果已经用之前版本装好了,不想再重装,你可以手工修改以去掉那个硕大logo:

    vim /etc/update-motd.d/00-header

    把从34行起,以下内容删掉,保存并退出文件即可:

    figlet `cat /etc/issue | cut -d " " -f1`

    printf "\n"

  • @leitbogioro #103 发布于6/17/2023, 8:10:09 AM
    @Not-Oles #100 Hey bro, although I haven't the raid 0 machine, so the partition recipe of preseed may not work perfectly, could you provide the server for me so that I can solve this problem?

    I should have mentioned that right now there is an extra 100GB /altroot partition.

    root@fsn ~ # cat /etc/fstab
    proc /proc proc defaults 0 0
    # /dev/md/0
    UUID=66B9-DD36 /boot/efi vfat umask=0077 0 1
    # /dev/md/1
    UUID=835697c8-a909-4fea-a043-fc9b33337aa6 none swap sw 0 0
    # /dev/md/2
    UUID=c555366f-c1ba-4952-8433-d55160605f97 /boot ext3 defaults 0 0
    # /dev/md/3
    UUID=59643e31-deb0-446d-9b47-195ba8c981bd /altroot ext4 defaults 0 0
    # /dev/md/4
    UUID=1094aa0e-bec1-4d43-bd28-b16efa8517bb / ext4 defaults 0 0
    root@fsn ~ # 
    

    I would like to be able quickly and easily, such as with your script, to install Alpine and Fedora Rawhide, neither of which are provided by Hetzner's installimage,

    If you give me your ed25519 ssh public key, I can install it in /root/.ssh/authorized_keys. Then you can try adjusting your script.

    Hopefully I could have the server back in a couple of days, approximately.

    We could set things up differently. Please let me know what you need.

    Thanks for your nice work on the script! You benefit the entire Low End!

    Tom

  • @Just纱世里 #204

    就拿IPv6举例,我目前的做法是将主ip和网关同样扩展成全写格式(排除::这样的缩写,补全0000等),然后将它们的网段做比较,IPv6部分一共有8段,用冒号隔开,从A类开始,一直到A:B:C:D:E:F:G:H这样的,比如说两者从A就不一样,就给掩码1,除非网关是fe80这样的内网地址,那掩码就给64,如果主ip和网关A和B类相同,掩码给16,以此类推,直到给到112,以下是代码实现:

    function ipv6SubnetCertificate() {
    # If the IP and gateway are in the same IPv6 A class, not in the same IPv6 B class, the prefix of netmask should less equal than "16",
    # transfer to whole IPv6 subnet address is ffff:0000:0000:0000:0000:0000:0000:0000.
    # The range of 2603:c020:8:a19b::ffff:e6da/16 is 2603:0000:0000:0000:0000:0000:0000:0000 - 2603:ffff:ffff:ffff:ffff:ffff:ffff:ffff, the gateway 2603:... can be included.
      [[ `echo $1 | cut -d':' -f 1` == `echo $2 | cut -d':' -f 1` ]] && tmpIp6Mask="16"
    # If the IP and gateway are in the same IPv6 A B class, not in the same IPv6 C class, the prefix of netmask should less equal than "32",
    # transfer to whole IPv6 subnet address is ffff:ffff:0000:0000:0000:0000:0000:0000.
    # The range of 2603:c020:8:a19b::ffff:e6da/32 is 2603:c020:0000:0000:0000:0000:0000:0000 - 2603:c020:ffff:ffff:ffff:ffff:ffff:ffff, the gateway 2603:... can be included.
      [[ `echo $1 | cut -d':' -f 1,2` == `echo $2 | cut -d':' -f 1,2` ]] && tmpIp6Mask="32"
    # If the IP and gateway are in the same IPv6 A B C class, not in the same IPv6 D class, the prefix of netmask should less equal than "48",
    # transfer to whole IPv6 subnet address is ffff:ffff:ffff:0000:0000:0000:0000:0000.
    # The range of 2603:c020:8:a19b::ffff:e6da/48 is 2603:c020:0008:0000:0000:0000:0000:0000 - 2603:c020:0008:ffff:ffff:ffff:ffff:ffff, the gateway 2603:... can be included.
      [[ `echo $1 | cut -d':' -f 1,2,3` == `echo $2 | cut -d':' -f 1,2,3` ]] && tmpIp6Mask="48"
    # If the IP and gateway are in the same IPv6 A B C D class, not in the same IPv6 E class, the prefix of netmask should less equal than "64",
    # transfer to whole IPv6 subnet address is ffff:ffff:ffff:ffff:0000:0000:0000:0000.
    # The range of 2603:c020:8:a19b::ffff:e6da/64 is 2603:c020:0008:a19b:0000:0000:0000:0000 - 2603:c020:0008:a19b:ffff:ffff:ffff:ffff, the gateway 2603:... can be included.
      [[ `echo $1 | cut -d':' -f 1,2,3,4` == `echo $2 | cut -d':' -f 1,2,3,4` ]] && tmpIp6Mask="64"
    # If the IP and gateway are in the same IPv6 A B C D E class, not in the same IPv6 F class, the prefix of netmask should less equal than "80",
    # transfer to whole IPv6 subnet address is ffff:ffff:ffff:ffff:ffff:0000:0000:0000.
    # The range of 2603:c020:8:a19b::ffff:e6da/80 is 2603:c020:0008:a19b:0000:0000:0000:0000 - 2603:c020:0008:a19b:0000:ffff:ffff:ffff, the gateway 2603:... can be included.
      [[ `echo $1 | cut -d':' -f 1,2,3,4,5` == `echo $2 | cut -d':' -f 1,2,3,4,5` ]] && tmpIp6Mask="80"
    # If the IP and gateway are in the same IPv6 A B C D E F class, not in the same IPv6 G class, the prefix of netmask should less equal than "96",
    # transfer to whole IPv6 subnet address is ffff:ffff:ffff:ffff:ffff:ffff:0000:0000.
    # The range of 2603:c020:8:a19b::ffff:e6da/96 is 2603:c020:0008:a19b:0000:0000:0000:0000 - 2603:c020:0008:a19b:0000:0000:ffff:ffff, the gateway 2603:... can be included.
      [[ `echo $1 | cut -d':' -f 1,2,3,4,5,6` == `echo $2 | cut -d':' -f 1,2,3,4,5,6` ]] && tmpIp6Mask="96"
    # If the IP and gateway are in the same IPv6 A B C D E F G class, not in the same IPv6 H class, the prefix of netmask should less equal than "112",
    # transfer to whole IPv6 subnet address is ffff:ffff:ffff:ffff:ffff:ffff:ffff:0000.
    # The range of 2603:c020:8:a19b::ffff:e6da/112 is 2603:c020:0008:a19b:0000:0000:ffff:0000 - 2603:c020:0008:a19b:0000:0000:ffff:ffff, the gateway 2603:c020:0008:a19b:0000:0000:0000:ffff can't be included.
      [[ `echo $1 | cut -d':' -f 1,2,3,4,5,6,7` == `echo $2 | cut -d':' -f 1,2,3,4,5,6,7` ]] && tmpIp6Mask="112"
    }
    

    当然,这个掩码是一个临时值,仅用于能通过Debian installer安装阶段的合法性校验,至于正式系统中的掩码,我还是倾向于遵从主机商默认模板系统中的设定,原样是什么就还原回什么,不妄自修改,包括IPv4部分也一样:

    ReplaceActualIpPrefix="$1 sed -ri \"s/address $ipAddr\/$ipPrefix/address $ipAddr\/$actualIp4Prefix/g\" /etc/network/interfaces; $1 sed -ri \"s/netmask $ip6Mask/netmask $actualIp6Prefix/g\" /etc/network/interfaces;"
    
  • @Just纱世里 #204

    Debian安装程序有个致命的缺陷,就是它在给定静态配置网络时,会对主ip和掩码做一个范围计算,如果侦测到网关ip不在这个范围内,就会报unreachable gateway,我被这个问题折磨得死去活来。然而如果你在一台安装好的Debian上修改/etc/network/interfaces文件,违背以上原则,网络也是能正常运作的,这种不一致性很让人头疼。

    掩码你知道的,v4范围是1-32,v6是1-128,它们都可以通过计算,得出对应的全写ip格式。

    它规定了一台计算机应该和哪些计算机当做内网通信,除了这个范围之外的ip当做外网通信,这个值本应该由网管做一个合理的设置,不能给太大,否则内网范围过窄,一些本来应该当内网通信的机器会被当做外网处理,导致访问出错,反之亦然,也不能给太小,否则内网范围过大,导致一些公网的机器无法访问。但很多小厂网管很糊涂,不知道该设多少,范围也不一定对,但你不按他们的来,自己去试,猜,又能得到哪个是对的?

    红帽系annaconda安装程序相比之下就很智能,不管你掩码给的对不对,只要ip和网关正确(商家模板系统里这两个值必须给对,否则联不了网,会被用户投诉),网络都能正常配置。

    所以为了通过Debian安装程序的网络检测,我决定引入以上谈到的算法,v4部分也是一样,如果发现目标机器采用的是公网ip和本地网关地址这种组合,就必须根据公网ip和对应的掩码来计算出对应的ip地址范围,尝试把该范围内的第一个ip当做网关(如果目标机器掩码为32,那么网关极大概率就是机器ip自身),如果你按萌咖等脚本那样公网ip和本地网关那样给,Debian极大概率安装时死亡红框(网关不可达),而且Debian还有一个坑,就是纯v6静态机器配置v6时,掩码必须转换成全写,给1-128这种的就报错。

    v6公网ip加fe80这种本地网关,掩码之所以给64而非1,是因为我观察了大量这类机型的默认网关都是64,且这样配置能通过Debian的网络检查,才得出的经验。

    比如有些大厂,digitalocean给的v4网关是20,但我脚本v4安装阶段支持的掩码档位只有1 8 16 24,所以这时候就应该在系统快安装完阶段,把掩码16给改回来,避免错误的掩码设置造成跟某些网段中主机通信丢失。

  • @Just纱世里 #206 这玩意要算的,很复杂,原则上来说正确的掩码就应该能从商家模板系统里被正确读出来,但事实远没你想象的那么好。比如我给你提供最典型的两个例子,首先是Akile家的纯ipv6机器:

    root@800-2023051710313146:~# cat /etc/network/interfaces.d/50-cloud-init
    # This file is generated from information provided by the datasource.  Changes
    # to it will not persist across an instance reboot.  To disable cloud-init's
    # network configuration capabilities, write a file
    # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
    # network: {config: disabled}
    auto lo
    iface lo inet loopback
        dns-nameservers 168.95.1.1 168.95.192.1 2001:B000:168::1 2001:B000:168::2
        dns-search 800-2023051710313146
    
    auto eth0
    iface eth0 inet6 static
        address 2001:A630:A42D:5D3B::FFFF:166/128
        gateway 2001:A630:A42D:5D3B::FFFF
    

    主ip和网关显然A B C D E F范围都是相同的,但掩码却给了范围最窄的128,此时很明显可以看出,内网通信范围仅包含主ip本身,网关并不能被包含在内,这种情况下Debian安装必出现死亡红框(网关不可达),所以我联系了他们技术,让他们改了一下,把掩码设置成64,问题才得到解决。

    按我脚本计算,这种案例下的掩码只要给96,就能顺利通过Debian安装程序的检测,即使他们技术不改,掩码还是128,我目前的版本也能在Debian主系统装完,后续安装late command部分用sed把那个临时的96掩码给改回128。

    IPv4的问题也是同理,这是tk-hosting家的一台机器的ipv4部分网络配置:

    root@vps2416605:~# cat /etc/network/interfaces
    # This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5).
    source /etc/network/interfaces.d/*
    # The loopback network interface
    auto lo
    iface lo inet loopback
    # The primary network interface
    auto ens3
    iface ens3 inet static
    	address 89.163.208.5
    	netmask 255.255.255.0
    	broadcast +
    	up ip -f inet route add 169.254.0.1 dev ens3
    	up ip -f inet route add default via 169.254.0.1 dev ens3
    

    ipv4是公网,掩码似乎也很标准(255.255.255.0 转换成简写就是24),但网关是一个dhcp配置失败后系统给分配的默认ip,你直接拿这三样填到Debian安装程序里,也必然死亡红框。

    后来查到他们web面板后台的真实网关应该是89.163.208.1,所以我脚本加入了一个处理这种情况的方法,一旦主ip是公网,网关是内网ip,就会根据主ip 89.163.208.5和掩码255.255.255.0,计算出机器当内网通信的范围应该是89.163.208.1 - 89.163.208.254,然后把89.163.208.1尝试当做网关。

    同理,godaddy的一些机型的自带模板系统中的ipv4掩码甚至窄到到了32(255.255.255.255),即通信范围仅包含主ip本身,网关同样也是169.254.0.1,你直接拿这套配置写到Debian安装文件里,安装时必然弹红框,那台机器是别人的,还未成功通过测试就被回收了,我只能推测这种情况下,真实网关只能是机器本身。

    以上这些毛病在安装红帽系的时候完全不会有,但红帽系安装内存要求太高,几百m内存的机器只能装Debian,所以这个头疼的问题必须要解决。

  • 有个建议,能不能把logo去掉,很占显示面积

  • 前排支持

  • @zybep #1 可以,是个好主意,但系统运行状态显示可以保留

  • 感觉你的脚本重装后内存占用要比萌咖的大些,是否考虑精简一些组件,比如ssh登录之后提示的系统信息啥的

  • @AdachiSakura #4 最近更新的版本已经大幅缩减了预置组件,仅保留ssh连接时显示系统状态所需的组件,其他为了减少占用,全都砍掉了

  • 支持技术贴!

  • 强!

  • 支持。

  • 支持大佬 xhj003

  • @AdachiSakura #4 Debian Kali 红帽系底包选的都是minimal,Ubuntu 选用的是官方发布的cloud-images制作,确保初始状态下占用是最少的

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有15257位seeker

🎉欢迎新用户🎉