文章

【转载】Debian/Ubuntu/CentOS 网络安装/重装系统/纯净安装 一键脚本

  编辑于:2023-12-11
文章目录

背景

适用于由GRUB引导的CentOS,Ubuntu,Debian系统.
使用官方发行版去掉模板预装的软件.
同时也可以解决内核版本与软件不兼容的问题。
只要有root权限,还您一个纯净的系统。

相关需求

注意

全自动安装默认root密码:Vicer,安装完成后请立即更改密码.
能够全自动重装Debian/Ubuntu/CentOS等系统.
同时提供dd安装镜像功能,例如: 全自动无救援dd安装windows系统
全自动安装CentOS时默认提供VNC功能,可使用VNC Viewer查看进度,
VNC端口1或者5901,可自行尝试连接.(成功后VNC功能会消失.)
目前CentOS系统只支持任意版本重装为 CentOS 6.9 及以下版本.
特别注意:OpenVZ构架不适用.

依赖包

#二进制文件    Debian/Ubuntu    RedHat/CentOS
iconv         [libc-bin]       [glibc-common]
xz            [xz-utils]       [xz]
awk           [gawk]           [gawk]
sed           [sed]            [sed]
file          [file]           [file]
grep          [grep]           [grep]
openssl       [openssl]        [openssl]
cpio          [cpio]           [cpio]
gzip          [gzip]           [gzip]
cat,cut..     [coreutils]      [coreutils]

确保安装了所需软件

#Debian/Ubuntu:
apt-get install -y xz-utils openssl gawk file
 
#RedHat/CentOS:
yum install -y xz openssl gawk file

如果出现了错误,请运行

#Debian/Ubuntu:
apt-get update
 
#RedHat/CentOS:
yum update

使用

一键下载并使用

wget --no-check-certificate -qO InstallNET.sh 'https://moeclub.org/attachment/LinuxShell/InstallNET.sh' && chmod a+x InstallNET.sh

moeclub的脚本可能在部分机器上不能正常运行,此时可以尝试qiushui的脚本

wget --no-check-certificate -qO InstallNET.sh 'qiu.sh/dd' && chmod a+x InstallNET.sh

以上脚本均不可用时,可尝试:https://github.com/leitbogioro/Tools
Usage:

Usage:
        bash InstallNET.sh      -d/--debian [dist-name]
                                -u/--ubuntu [dist-name]
                                -c/--centos [dist-version]
                                -v/--ver [32/i386|64/amd64]
                                --ip-addr/--ip-gate/--ip-mask
                                -apt/-yum/--mirror
                                -dd/--image
                                -a/-m
 
# dist-name: 发行版本代号
# dist-version: 发行版本号
# -apt/-yum/--mirror : 使用定义镜像
# -a/-m : 询问是否能进入VNC自行操作. -a 为不提示(一般用于全自动安装), -m 为提示.

补充:安装好debian9以后,会因为缺少一些CA证书导致wget部分可信网站文件出错,可以使用apt-get install ca-certificates来解决。

使用示例:

#使用默认镜像全自动安装
bash InstallNET.sh -d 8 -v 64 -a
 
#使用自定义镜像全自动安装
bash InstallNET.sh -c 6.9 -v 64 -a --mirror 'http://mirror.centos.org/centos'
 
 
# 以下示例中,将X.X.X.X替换为自己的网络参数.
# --ip-addr :IP Address/IP地址
# --ip-gate :Gateway   /网关
# --ip-mask :Netmask   /子网掩码
 
#使用自定义镜像自定义网络参数全自动安装
#bash InstallNET.sh -u 16.04 -v 64 -a --ip-addr x.x.x.x --ip-gate x.x.x.x --ip-mask x.x.x.x --mirror 'http://archive.ubuntu.com/ubuntu'
 
#使用自定义网络参数全自动dd方式安装
#bash InstallNET.sh --ip-addr x.x.x.x --ip-gate x.x.x.x --ip-mask x.x.x.x -dd 'https://moeclub.org/get-win7embx86-auto'
 
#使用自定义网络参数全自动dd方式安装存储在谷歌网盘中的镜像
#bash InstallNET.sh --ip-addr x.x.x.x --ip-gate x.x.x.x --ip-mask x.x.x.x -dd "$(echo "https://drive.google.com/open?id=0B8SvBXZ3I5QMcUduTMJEanRkMzQ" |xargs -n1 bash <(wget --no-check-certificate -qO- 'https://moeclub.org/get-gdlink'))"

一些提示:

在dd安装系统镜像时:

在你的机器上全新安装,如果你有VNC,可以看到全部过程.
在dd安装镜像的过程中,不会走进度条(进度条一直显示为0%).完成后将会自动重启.
分区界面标题一般显示为: “Starting up the partitioner“
使用谷歌网盘中储存的镜像: [无限制大小] 获取谷歌网盘文件临时直接下载链接

在全自动安装CentOS时:

如果看到 “Starting graphical installation” 或者类似表达,则表示正在安装.
正常情况下只需要耐心等待安装完成即可.
如果需要查看进度,使用VNC Viewer(或者其他VNC连接工具)
连接提示中的IP地址:端口进行连接.(端口一般为1或者5901)

腾讯云

腾讯云需要卸载一些自带的组件以方便DD

systemctl stop tat_agent
systemctl disable tat_agent
rm -rf /etc/systemd/system/tat_agent.service
rm -fr /usr/local/qcloud 
 
ps -A | grep agent
# 检查看是否还有腾讯云组件
# kill 这个进程 

某些服务商或者某些系统可能需要手动设置网卡参数

DEFAULTNET="$(ip route show |grep -o 'default via [0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.*' |head -n1 |sed 's/proto.*\|onlink.*//g' |awk '{print $NF}')"
[ -n "$DEFAULTNET" ] && IPSUB="$(ip addr |grep ''${DEFAULTNET}'' |grep 'global' |grep 'brd' |head -n1 |grep -o '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}/[0-9]\{1,2\}')"
IPv4="$(echo -n "$IPSUB" |cut -d'/' -f1)"
NETSUB="$(echo -n "$IPSUB" |grep -o '/[0-9]\{1,2\}')"
GATE="$(ip route show |grep -o 'default via [0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}' |head -n1 |grep -o '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}')"
[ -n "$NETSUB" ] && MASK="$(echo -n '128.0.0.0/1,192.0.0.0/2,224.0.0.0/3,240.0.0.0/4,248.0.0.0/5,252.0.0.0/6,254.0.0.0/7,255.0.0.0/8,255.128.0.0/9,255.192.0.0/10,255.224.0.0/11,255.240.0.0/12,255.248.0.0/13,255.252.0.0/14,255.254.0.0/15,255.255.0.0/16,255.255.128.0/17,255.255.192.0/18,255.255.224.0/19,255.255.240.0/20,255.255.248.0/21,255.255.252.0/22,255.255.254.0/23,255.255.255.0/24,255.255.255.128/25,255.255.255.192/26,255.255.255.224/27,255.255.255.240/28,255.255.255.248/29,255.255.255.252/30,255.255.255.254/31,255.255.255.255/32' |grep -o '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}'${NETSUB}'' |cut -d'/' -f1)"
[ -n "$GATE" ] && [ -n "$MASK" ] && [ -n "$IPv4" ] || {
ipNum() {
  local IFS='.'
  read ip1 ip2 ip3 ip4 <<<"$1"
  echo $((ip1*(1<<24)+ip2*(1<<16)+ip3*(1<<8)+ip4))
}
SelectMax(){
ii=0
for IPITEM in `route -n |awk -v OUT=$1 '{print $OUT}' |grep '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}'`
  do
    NumTMP="$(ipNum $IPITEM)"
    eval "arrayNum[$ii]='$NumTMP,$IPITEM'"
    ii=$[$ii+1]
  done
echo ${arrayNum[@]} |sed 's/\s/\n/g' |sort -n -k 1 -t ',' |tail -n1 |cut -d',' -f2
}
[[ -z $IPv4 ]] && IPv4="$(ifconfig |grep 'Bcast' |head -n1 |grep -o '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}' |head -n1)"
[[ -z $GATE ]] && GATE="$(SelectMax 2)"
[[ -z $MASK ]] && MASK="$(SelectMax 3)"
}
PubIPv4="$(wget -qO- checkip.amazonaws.com)"
[ -n "$IPv4" ] && [ -n "$PubIPv4" ] && {
[ "$IPv4" != "$PubIPv4" ] && IPv4="$(echo "$IPv4; $PubIPv4")"
}
[ -n "$GATE" ] && [ -n "$MASK" ] && [ -n "$IPv4" ] && {
echo -e "IPv4:\t3[33m$IPv43[0m\nMASK:\t3[33m$MASK3[0m\nGATE:\t3[33m$GATE3[0m"
} || {
echo "Error! Not found network config. "
}

可以用这段代码来获取相关的参数。

预览

源代码有很多需要转义的符号,这里就不直接贴出代码了,我把它放在了GITHUB.COM上面。
https://github.com/zorzcc/sh/blob/master/rep/InstallNET.sh

原文链接:https://moeclub.org/2018/04/03/603/
参考链接:https://sleele.com/2021/08/26/dd-install-debian11/

发表回复