支持 Debian 12 raid 0 Ubuntu 24.04(测试中);512MB 内存安装 AlmaLinux/RockyLinux;CentOS 9 Fedora 39 AlpineLinux

vpszz2024-03-30142

lisa_画板 1.jpg

大家好,我是 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:

为方便拥有多盘独服的朋友,支持新安装 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 连接,造成过长的连接等待。

注释掉,该选项适用于除 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

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


本文链接:https://vpszz.com/post/67.html

网友评论