文章

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

  最近更新时间:2019-02-17
文章目录

背景

适用于由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
    
  • 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)

ubuntu18.10

Vicer大佬还没有更新脚本,只需要添加一行代码即可使本脚本支持ubuntu18.10。
[[ "$isDigital" == '18.04' ]] && DIST='bionic';后面添加

[[ "$isDigital" == '18.10' ]] && DIST='cosmic';

即可。
咨询了一下大佬 只需要在安装的时候使用-u cosmic即可安装18.10,无须添加此行代码。
安装ubuntu18.10可能需要手动设定网卡参数。

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/

发表评论