-
-
Save billyriantono/6e932f09cebdf48569e31182ba1aba2f to your computer and use it in GitHub Desktop.
Revisions
-
billyriantono revised this gist
Oct 12, 2021 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -149,7 +149,7 @@ function Start() { if [ -f "/tmp/Core_Install.sh" ]; then rm -f /tmp/Core_Install.sh fi wget --no-check-certificate -qO /tmp/Core_Install.sh 'https://raw.githubusercontent.com/fcurrk/reinstall/master/Core_Install_v3.1.sh' && chmod a+x /tmp/Core_Install.sh CMIRROR='' CVMIRROR='' -
i-sync created this gist
Jan 30, 2021 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,263 @@ #!/bin/sh if [[ $EUID -ne 0 ]]; then clear echo "Error: This script must be run as root!" 1>&2 exit 1 fi function CopyRight() { clear echo "########################################################" echo "# #" echo "# Auto Reinstall Script #" echo "# #" echo "# Author: hiCasper & Minijer #" echo "# Last Modified: 2021-01-09 #" echo "# #" echo "# Supported by MoeClub & cxthhhhh #" echo "# #" echo "########################################################" echo -e "\n" } function isValidIp() { local ip=$1 local ret=1 if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then ip=(${ip//\./ }) [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]] ret=$? fi return $ret } function ipCheck() { isLegal=0 for add in $MAINIP $GATEWAYIP $NETMASK; do isValidIp $add if [ $? -eq 1 ]; then isLegal=1 fi done return $isLegal } function GetIp() { MAINIP=$(ip route get 1 | awk -F 'src ' '{print $2}' | awk '{print $1}') GATEWAYIP=$(ip route | grep default | awk '{print $3}') SUBNET=$(ip -o -f inet addr show | awk '/scope global/{sub(/[^.]+\//,"0/",$4);print $4}' | head -1 | awk -F '/' '{print $2}') value=$(( 0xffffffff ^ ((1 << (32 - $SUBNET)) - 1) )) NETMASK="$(( (value >> 24) & 0xff )).$(( (value >> 16) & 0xff )).$(( (value >> 8) & 0xff )).$(( value & 0xff ))" } function UpdateIp() { read -r -p "Your IP: " MAINIP read -r -p "Your Gateway: " GATEWAYIP read -r -p "Your Netmask: " NETMASK } function SetNetwork() { isAuto='0' if [[ -f '/etc/network/interfaces' ]];then [[ ! -z "$(sed -n '/iface.*inet static/p' /etc/network/interfaces)" ]] && isAuto='1' [[ -d /etc/network/interfaces.d ]] && { cfgNum="$(find /etc/network/interfaces.d -name '*.cfg' |wc -l)" || cfgNum='0' [[ "$cfgNum" -ne '0' ]] && { for netConfig in `ls -1 /etc/network/interfaces.d/*.cfg` do [[ ! -z "$(cat $netConfig | sed -n '/iface.*inet static/p')" ]] && isAuto='1' done } } fi if [[ -d '/etc/sysconfig/network-scripts' ]];then cfgNum="$(find /etc/network/interfaces.d -name '*.cfg' |wc -l)" || cfgNum='0' [[ "$cfgNum" -ne '0' ]] && { for netConfig in `ls -1 /etc/sysconfig/network-scripts/ifcfg-* | grep -v 'lo$' | grep -v ':[0-9]\{1,\}'` do [[ ! -z "$(cat $netConfig | sed -n '/BOOTPROTO.*[sS][tT][aA][tT][iI][cC]/p')" ]] && isAuto='1' done } fi } function NetMode() { CopyRight if [ "$isAuto" == '0' ]; then read -r -p "Using DHCP to configure network automatically? [Y/n]:" input case $input in [yY][eE][sS]|[yY]) NETSTR='' ;; [nN][oO]|[nN]) isAuto='1' ;; *) clear; echo "Canceled by user!"; exit 1;; esac fi if [ "$isAuto" == '1' ]; then GetIp ipCheck if [ $? -ne 0 ]; then echo -e "Error occurred when detecting ip. Please input manually.\n" UpdateIp else CopyRight echo "IP: $MAINIP" echo "Gateway: $GATEWAYIP" echo "Netmask: $NETMASK" echo -e "\n" read -r -p "Confirm? [Y/n]:" input case $input in [yY][eE][sS]|[yY]) ;; [nN][oO]|[nN]) echo -e "\n" UpdateIp ipCheck [[ $? -ne 0 ]] && { clear echo -e "Input error!\n" exit 1 } ;; *) clear; echo "Canceled by user!"; exit 1;; esac fi NETSTR="--ip-addr ${MAINIP} --ip-gate ${GATEWAYIP} --ip-mask ${NETMASK}" fi } function Start() { CopyRight isCN='0' geoip=$(wget --no-check-certificate -qO- https://api.ip.sb/geoip | grep "\"country_code\":\"CN\"") if [[ "$geoip" != "" ]];then isCN='1' fi if [ "$isAuto" == '0' ]; then echo "Using DHCP mode." else echo "IP: $MAINIP" echo "Gateway: $GATEWAYIP" echo "Netmask: $NETMASK" fi [[ "$isCN" == '1' ]] && echo "Using domestic mode." if [ -f "/tmp/Core_Install.sh" ]; then rm -f /tmp/Core_Install.sh fi wget --no-check-certificate -qO /tmp/Core_Install.sh 'https://raw.githubusercontent.com/fcurrk/reinstall/master/Core_Install_2020.sh' && chmod a+x /tmp/Core_Install.sh CMIRROR='' CVMIRROR='' DMIRROR='' UMIRROR='' SYSMIRROR1='http://disk.29296819.xyz/92shidai.com/dd/os/veip007/CentOS-7.img.gz' SYSMIRROR2='http://disk.29296819.xyz/92shidai.com/dd/os/cxthhhhh/CentOS_7.X_NetInstallation_Final.vhd.gz' SYSMIRROR3='http://disk.29296819.xyz/92shidai.com/dd/os/cxthhhhh/CentOS_8.X_NetInstallation.vhd.gz' SYSMIRROR12='http://disk.29296819.xyz/92shidai.com/dd/os/cxthhhhh/Disk_Windows_Server_2019_DataCenter_CN.vhd.gz' SYSMIRROR13='http://disk.29296819.xyz/92shidai.com/dd/os/cxthhhhh/Disk_Windows_Server_2016_DataCenter_CN.vhd.gz' SYSMIRROR14='http://disk.29296819.xyz/92shidai.com/dd/os/cxthhhhh/Disk_Windows_Server_2012R2_DataCenter_CN.vhd.gz' SYSMIRROR15='http://disk.29296819.xyz/92shidai.com/dd/os/laosiji/WinSrv2012r2x64/lite/winsrv2012r2-data-x64-cn.vhd.gz' SYSMIRROR16='http://disk.29296819.xyz/92shidai.com/dd/os/cxthhhhh/Disk_Windows_Server_2008R2_DataCenter_CN.vhd.gz' SYSMIRROR17='http://disk.29296819.xyz/92shidai.com/dd/os/laosiji/WinSrv2008x64/lite/winsrv2008r2-data-sp1-x64-cn.vhd.gz' SYSMIRROR18='http://disk.29296819.xyz/92shidai.com/dd/os/other/cn2003-virtio-pass-Linode.gz' SYSMIRROR19='http://disk.29296819.xyz/92shidai.com/dd/os/laosiji/WinSrv2003/10G/WinSrv2003x86-Chinese-C10G.vhd.gz' SYSMIRROR20='http://disk.29296819.xyz/92shidai.com/dd/os/laosiji/Win10/Win10_x64.vhd.gz' SYSMIRROR21='http://disk.29296819.xyz/92shidai.com/dd/os/laosiji/Win7/Windows7x86-Chinese.vhd.gz' SYSMIRROR22='http://disk.29296819.xyz/92shidai.com/dd/os/laosiji/Win7/win7-ent-sp1-x64-cn.vhd.gz' if [[ "$isCN" == '1' ]];then sed -i 's#http://disk.29296819.xyz/92shidai.cn/dd/img/wget_udeb_amd64.tar.gz#https://raw.githubusercontent.com/fcurrk/reinstall/master/wget_udeb_amd64.tar.gz#' /tmp/Core_Install.sh CMIRROR="--mirror http://mirrors.aliyun.com/centos/" CVMIRROR="--mirror http://mirrors.tuna.tsinghua.edu.cn/centos-vault/" DMIRROR="--mirror http://mirrors.aliyun.com/debian/" UMIRROR="--mirror http://mirrors.aliyun.com/ubuntu/" SYSMIRROR1='http://disk.29296819.xyz/92shidai.cn/dd/os/veip007/CentOS-7.img.gz' SYSMIRROR2='http://disk.29296819.xyz/92shidai.cn/dd/os/cxthhhhh/CentOS_7.X_NetInstallation_Final.vhd.gz' SYSMIRROR3='http://disk.29296819.xyz/92shidai.cn/dd/os/cxthhhhh/CentOS_8.X_NetInstallation.vhd.gz' SYSMIRROR12='http://disk.29296819.xyz/92shidai.cn/dd/os/cxthhhhh/Disk_Windows_Server_2019_DataCenter_CN.vhd.gz' SYSMIRROR13='http://disk.29296819.xyz/92shidai.cn/dd/os/cxthhhhh/Disk_Windows_Server_2016_DataCenter_CN.vhd.gz' SYSMIRROR14='http://disk.29296819.xyz/92shidai.cn/dd/os/cxthhhhh/Disk_Windows_Server_2012R2_DataCenter_CN.vhd.gz' SYSMIRROR15='http://disk.29296819.xyz/92shidai.cn/dd/os/laosiji/WinSrv2012r2x64/lite/winsrv2012r2-data-x64-cn.vhd.gz' SYSMIRROR16='http://disk.29296819.xyz/92shidai.cn/dd/os/cxthhhhh/Disk_Windows_Server_2008R2_DataCenter_CN.vhd.gz' SYSMIRROR17='http://disk.29296819.xyz/92shidai.cn/dd/os/laosiji/WinSrv2008x64/lite/winsrv2008r2-data-sp1-x64-cn.vhd.gz' SYSMIRROR18='http://disk.29296819.xyz/92shidai.cn/dd/os/other/cn2003-virtio-pass-Linode.gz' SYSMIRROR19='http://disk.29296819.xyz/92shidai.cn/dd/os/laosiji/WinSrv2003/10G/WinSrv2003x86-Chinese-C10G.vhd.gz' SYSMIRROR20='http://disk.29296819.xyz/92shidai.cn/dd/os/laosiji/Win10/Win10_x64.vhd.gz' SYSMIRROR21='http://disk.29296819.xyz/92shidai.cn/dd/os/laosiji/Win7/Windows7x86-Chinese.vhd.gz' SYSMIRROR22='http://disk.29296819.xyz/92shidai.cn/dd/os/laosiji/Win7/win7-ent-sp1-x64-cn.vhd.gz' fi echo -e "\nPlease select an OS:" echo " 1) CentOS 7.7 (ext4)" echo " 2) CentOS 7 (cxthhhh)" echo " 3) CentOS 8 (cxthhhh)" echo " 4) CentOS 6" echo " 5) Debian 10" echo " 6) Debian 9" echo " 7) Debian 8" echo " 8) Debian 7" echo " 9) Ubuntu 20.04" echo " 10) Ubuntu 18.04" echo " 11) Ubuntu 16.04" echo " 12) Windows Server 2019" echo " 13) Windows Server 2016" echo " 14) Windows Server 2012" echo " 15) Windows Server 2012 Lite" echo " 16) Windows Server 2008" echo " 17) Windows Server 2008 Lite" echo " 18) Windows Server 2003" echo " 19) Windows Server 2003 Lite" echo " 20) Windows 10 LTSC Lite" echo " 21) Windows 7 x86 Lite" echo " 22) Windows 7 Ent Lite" echo " 99) Custom image" echo " 0) Exit" echo -ne "\nYour option: " read N case $N in 1) echo -e "\nPassword: Pwd@CentOS\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh $NETSTR -dd $SYSMIRROR1 $DMIRROR ;; 2) echo -e "\nPassword: cxthhhhh.com\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh $NETSTR -dd $SYSMIRROR2 $DMIRROR ;; 3) echo -e "\nPassword: cxthhhhh.com\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh $NETSTR -dd $SYSMIRROR3 $DMIRROR ;; 4) echo -e "\nPassword: Minijer.com\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh -c 6.10 -v 64 -a $NETSTR $CMIRROR ;; 5) echo -e "\nPassword: Minijer.com\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh -d 10 -v 64 -a $NETSTR $DMIRROR ;; 6) echo -e "\nPassword: Minijer.com\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh -d 9 -v 64 -a $NETSTR $DMIRROR ;; 7) echo -e "\nPassword: Minijer.com\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh -d 8 -v 64 -a $NETSTR $DMIRROR ;; 8) echo -e "\nPassword: Minijer.com\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh -d 7 -v 64 -a $NETSTR $DMIRROR ;; 9) echo -e "\nPassword: Minijer.com\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh -u 20.04 -v 64 -a $NETSTR $UMIRROR ;; 10) echo -e "\nPassword: Minijer.com\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh -u 18.04 -v 64 -a $NETSTR $UMIRROR ;; 11) echo -e "\nPassword: Minijer.com\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh -u 16.04 -v 64 -a $NETSTR $UMIRROR ;; 12) echo -e "\nPassword: cxthhhhh.com\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh $NETSTR -dd $SYSMIRROR12 $DMIRROR ;; 13) echo -e "\nPassword: cxthhhhh.com\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh $NETSTR -dd $SYSMIRROR13 $DMIRROR ;; 14) echo -e "\nPassword: cxthhhhh.com\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh $NETSTR -dd $SYSMIRROR14 $DMIRROR ;; 15) echo -e "\nPassword: nat.ee\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh $NETSTR -dd $SYSMIRROR15 $DMIRROR ;; 16) echo -e "\nPassword: cxthhhhh.com\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh $NETSTR -dd $SYSMIRROR16 $DMIRROR ;; 17) echo -e "\nPassword: nat.ee\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh $NETSTR -dd $SYSMIRROR17 $DMIRROR ;; 18) echo -e "\nPassword: Linode\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh $NETSTR -dd $SYSMIRROR18 $DMIRROR ;; 19) echo -e "\nPassword: WinSrv2003x86-Chinese\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh $NETSTR -dd $SYSMIRROR19 $DMIRROR ;; 20) echo -e "\nPassword: www.nat.ee\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh $NETSTR -dd $SYSMIRROR20 $DMIRROR ;; 21) echo -e "\nPassword: Windows7x86-Chinese\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh $NETSTR -dd $SYSMIRROR21 $DMIRROR ;; 22) echo -e "\nPassword: nat.ee\n"; read -s -n1 -p "Press any key to continue..." ; bash /tmp/Core_Install.sh $NETSTR -dd $SYSMIRROR22 $DMIRROR ;; 99) echo -e "\n" read -r -p "Custom image URL: " imgURL echo -e "\n" read -r -p "Are you sure start reinstall? [Y/n]: " input case $input in [yY][eE][sS]|[yY]) bash /tmp/Core_Install.sh $NETSTR -dd $imgURL $DMIRROR ;; *) clear; echo "Canceled by user!"; exit 1;; esac ;; 0) exit 0;; *) echo "Wrong input!"; exit 1;; esac } SetNetwork NetMode Start This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,880 @@ #!/bin/bash ## License: GPL ## This is the magically modified version of the one-click reload script. ## It can reinstall CentOS, Debian, Ubuntu and other Linux systems (continuously added) over the network in one click. ## It can reinstall Windwos 2003, 7, 2008R2, 2012R2, 2016, 2019 and other Windows systems (continuously added) via the network in one click. ## Support GRUB or GRUB2 for installing a clean minimal system. ## Technical support is provided by the CXT (CXTHHHHH.com). (based on the original version of Vicer) ## Magic Modify version author: ## Default root password: cxthhhhh.com ## WebSite: https://www.cxthhhhh.com ## Written By CXT (CXTHHHHH.com) ## Original version author: ## Blog: https://moeclub.org ## Written By Vicer (MoeClub.org) export tmpVER='' export tmpDIST='' export tmpURL='' export tmpWORD='' export tmpMirror='' export tmpSSL='' export tmpINS='' export ipAddr='' export ipMask='' export ipGate='' export Relese='' export ddMode='0' export setNet='0' export setRDP='0' export setIPv6='0' export isMirror='0' export FindDists='0' export loaderMode='0' export IncFirmware='0' export SpikCheckDIST='0' export setInterfaceName='0' export UNKNOWHW='0' export UNVER='6.4' while [[ $# -ge 1 ]]; do case $1 in -v|--ver) shift tmpVER="$1" shift ;; -d|--debian) shift Relese='Debian' tmpDIST="$1" shift ;; -u|--ubuntu) shift Relese='Ubuntu' tmpDIST="$1" shift ;; -c|--centos) shift Relese='CentOS' tmpDIST="$1" shift ;; -dd|--image) shift ddMode='1' tmpURL="$1" shift ;; -p|--password) shift tmpWORD="$1" shift ;; -i|--interface) shift interface="$1" shift ;; --ip-addr) shift ipAddr="$1" shift ;; --ip-mask) shift ipMask="$1" shift ;; --ip-gate) shift ipGate="$1" shift ;; --dev-net) shift setInterfaceName='1' ;; --loader) shift loaderMode='1' ;; --prefer) shift tmpPrefer="$1" shift ;; -a|--auto) shift tmpINS='auto' ;; -m|--manual) shift tmpINS='manual' ;; -apt|-yum|--mirror) shift isMirror='1' tmpMirror="$1" shift ;; -rdp) shift setRDP='1' WinRemote="$1" shift ;; -ssl) shift tmpSSL="$1" shift ;; -firmware) shift IncFirmware="1" ;; --ipv6) shift setIPv6='1' ;; *) if [[ "$1" != 'error' ]]; then echo -ne "\nInvaild option: '$1'\n\n"; fi echo -ne " Usage:\n\tbash $(basename $0)\t-d/--debian [\033[33m\033[04mdists-name\033[0m]\n\t\t\t\t-u/--ubuntu [\033[04mdists-name\033[0m]\n\t\t\t\t-c/--centos [\033[33m\033[04mdists-verison\033[0m]\n\t\t\t\t-v/--ver [32/\033[33m\033[04mi386\033[0m|64/amd64]\n\t\t\t\t--ip-addr/--ip-gate/--ip-mask\n\t\t\t\t-apt/-yum/--mirror\n\t\t\t\t-dd/--image\n\t\t\t\t-a/--auto\n\t\t\t\t-m/--manual\n" exit 1; ;; esac done [[ "$EUID" -ne '0' ]] && echo "Error:This script must be run as root!" && exit 1; function CheckDependence(){ FullDependence='0'; for BIN_DEP in `echo "$1" |sed 's/,/\n/g'` do if [[ -n "$BIN_DEP" ]]; then Founded='0'; for BIN_PATH in `echo "$PATH" |sed 's/:/\n/g'` do ls $BIN_PATH/$BIN_DEP >/dev/null 2>&1; if [ $? == '0' ]; then Founded='1'; break; fi done if [ "$Founded" == '1' ]; then echo -en "[\033[32mok\033[0m]\t"; else FullDependence='1'; echo -en "[\033[31mNot Install\033[0m]"; fi echo -en "\t$BIN_DEP\n"; fi done if [ "$FullDependence" == '1' ]; then echo -ne "\n\033[31mError! \033[0mPlease use '\033[33mapt-get\033[0m' or '\033[33myum\033[0m' install it.\n\n\n" exit 1; fi } function SelectMirror(){ [ $# -ge 3 ] || exit 1 Relese="$1" DIST=$(echo "$2" |sed 's/\ //g' |sed -r 's/(.*)/\L\1/') VER=$(echo "$3" |sed 's/\ //g' |sed -r 's/(.*)/\L\1/') New=$(echo "$4" |sed 's/\ //g') [ -n "$Relese" ] || exit 1 [ -n "$DIST" ] || exit 1 [ -n "$VER" ] || exit 1 relese=$(echo $Relese |sed -r 's/(.*)/\L\1/') if [ "$Relese" == "Debian" ] || [ "$Relese" == "Ubuntu" ]; then inUpdate=''; [ "$Relese" == "Ubuntu" ] && inUpdate='-updates' if [[ "$isDigital" == '20.04' ]] || [[ "$DIST" == 'focal' ]]; then MirrorTEMP="SUB_MIRROR/dists/${DIST}/main/installer-${VER}/current/legacy-images/netboot/${relese}-installer/${VER}/initrd.gz" else MirrorTEMP="SUB_MIRROR/dists/${DIST}${inUpdate}/main/installer-${VER}/current/images/netboot/${relese}-installer/${VER}/initrd.gz" fi elif [ "$Relese" == "CentOS" ]; then MirrorTEMP="SUB_MIRROR/${DIST}/os/${VER}/isolinux/initrd.img" fi [ -n "$MirrorTEMP" ] || exit 1 MirrorStatus=0 declare -A MirrorBackup MirrorBackup=(["Debian0"]="" ["Debian1"]="http://deb.debian.org/debian" ["Debian2"]="http://archive.debian.org/debian" ["Ubuntu0"]="" ["Ubuntu1"]="http://archive.ubuntu.com/ubuntu" ["CentOS0"]="" ["CentOS1"]="http://mirror.centos.org/centos" ["CentOS2"]="http://vault.centos.org") echo "$New" |grep -q '^http://\|^https://\|^ftp://' && MirrorBackup[${Relese}0]="$New" for mirror in $(echo "${!MirrorBackup[@]}" |sed 's/\ /\n/g' |sort -n |grep "^$Relese") do CurMirror="${MirrorBackup[$mirror]}" [ -n "$CurMirror" ] || continue MirrorURL=`echo "$MirrorTEMP" |sed "s#SUB_MIRROR#${CurMirror}#g"` wget --no-check-certificate --spider --timeout=3 -o /dev/null "$MirrorURL" [ $? -eq 0 ] && MirrorStatus=1 && break done [ $MirrorStatus -eq 1 ] && echo "$CurMirror" || exit 1 } [ -n "$Relese" ] || Relese='Debian' linux_relese=$(echo "$Relese" |sed 's/\ //g' |sed -r 's/(.*)/\L\1/') clear && echo -e "\n\033[36m# Check Dependence\033[0m\n" if [[ "$ddMode" == '1' ]]; then CheckDependence iconv; linux_relese='debian'; tmpDIST='stretch'; tmpVER='amd64'; tmpINS='auto'; fi if [[ "$Relese" == 'Debian' ]] || [[ "$Relese" == 'Ubuntu' ]]; then CheckDependence wget,awk,grep,sed,cut,cat,cpio,gzip,find,dirname,basename; elif [[ "$Relese" == 'CentOS' ]]; then CheckDependence wget,awk,grep,sed,cut,cat,cpio,gzip,find,dirname,basename,file,xz; fi [ -n "$tmpWORD" ] && CheckDependence openssl if [[ "$loaderMode" == "0" ]]; then [[ -f '/boot/grub/grub.cfg' ]] && GRUBVER='0' && GRUBDIR='/boot/grub' && GRUBFILE='grub.cfg'; [[ -z "$GRUBDIR" ]] && [[ -f '/boot/grub2/grub.cfg' ]] && GRUBVER='0' && GRUBDIR='/boot/grub2' && GRUBFILE='grub.cfg'; [[ -z "$GRUBDIR" ]] && [[ -f '/boot/grub/grub.conf' ]] && GRUBVER='1' && GRUBDIR='/boot/grub' && GRUBFILE='grub.conf'; [ -z "$GRUBDIR" -o -z "$GRUBFILE" ] && echo -ne "Error! \nNot Found grub.\n" && exit 1; else tmpINS='auto' fi if [[ -n "$tmpVER" ]]; then tmpVER="$(echo "$tmpVER" |sed -r 's/(.*)/\L\1/')"; if [[ "$tmpVER" == '32' ]] || [[ "$tmpVER" == 'i386' ]] || [[ "$tmpVER" == 'x86' ]]; then VER='i386'; fi if [[ "$tmpVER" == '64' ]] || [[ "$tmpVER" == 'amd64' ]] || [[ "$tmpVER" == 'x86_64' ]] || [[ "$tmpVER" == 'x64' ]]; then if [[ "$Relese" == 'Debian' ]] || [[ "$Relese" == 'Ubuntu' ]]; then VER='amd64'; elif [[ "$Relese" == 'CentOS' ]]; then VER='x86_64'; fi fi fi [ -z "$VER" ] && VER='amd64' if [[ -z "$tmpDIST" ]]; then [ "$Relese" == 'Debian' ] && tmpDIST='jessie' && DIST='jessie'; [ "$Relese" == 'Ubuntu' ] && tmpDIST='bionic' && DIST='bionic'; [ "$Relese" == 'CentOS' ] && tmpDIST='6.10' && DIST='6.10'; fi if [[ -z "$DIST" ]]; then if [[ "$Relese" == 'Debian' ]]; then SpikCheckDIST='0' DIST="$(echo "$tmpDIST" |sed -r 's/(.*)/\L\1/')"; echo "$DIST" |grep -q '[0-9]'; [[ $? -eq '0' ]] && { isDigital="$(echo "$DIST" |grep -o '[\.0-9]\{1,\}' |sed -n '1h;1!H;$g;s/\n//g;$p' |cut -d'.' -f1)"; [[ -n $isDigital ]] && { [[ "$isDigital" == '7' ]] && DIST='wheezy'; [[ "$isDigital" == '8' ]] && DIST='jessie'; [[ "$isDigital" == '9' ]] && DIST='stretch'; [[ "$isDigital" == '10' ]] && DIST='buster'; } } LinuxMirror=$(SelectMirror "$Relese" "$DIST" "$VER" "$tmpMirror") fi if [[ "$Relese" == 'Ubuntu' ]]; then SpikCheckDIST='0' DIST="$(echo "$tmpDIST" |sed -r 's/(.*)/\L\1/')"; echo "$DIST" |grep -q '[0-9]'; [[ $? -eq '0' ]] && { isDigital="$(echo "$DIST" |grep -o '[\.0-9]\{1,\}' |sed -n '1h;1!H;$g;s/\n//g;$p')"; [[ -n $isDigital ]] && { [[ "$isDigital" == '12.04' ]] && DIST='precise'; [[ "$isDigital" == '14.04' ]] && DIST='trusty'; [[ "$isDigital" == '16.04' ]] && DIST='xenial'; [[ "$isDigital" == '18.04' ]] && DIST='bionic'; [[ "$isDigital" == '20.04' ]] && DIST='focal'; } } LinuxMirror=$(SelectMirror "$Relese" "$DIST" "$VER" "$tmpMirror") fi if [[ "$Relese" == 'CentOS' ]]; then SpikCheckDIST='1' DISTCheck="$(echo "$tmpDIST" |grep -o '[\.0-9]\{1,\}')"; LinuxMirror=$(SelectMirror "$Relese" "$DISTCheck" "$VER" "$tmpMirror") ListDIST="$(wget --no-check-certificate -qO- "$LinuxMirror/dir_sizes" |cut -f2 |grep '^[0-9]')" DIST="$(echo "$ListDIST" |grep "^$DISTCheck" |head -n1)" [[ -z "$DIST" ]] && { echo -ne '\nThe dists version not found in this mirror, Please check it! \n\n' bash $0 error; exit 1; } wget --no-check-certificate -qO- "$LinuxMirror/$DIST/os/$VER/.treeinfo" |grep -q 'general'; [[ $? != '0' ]] && { echo -ne "\nThe version not found in this mirror, Please change mirror try again! \n\n"; exit 1; } fi fi if [[ -z "$LinuxMirror" ]]; then echo -ne "\033[31mError! \033[0mInvaild mirror! \n" [ "$Relese" == 'Debian' ] && echo -en "\033[33mexample:\033[0m http://deb.debian.org/debian\n\n"; [ "$Relese" == 'Ubuntu' ] && echo -en "\033[33mexample:\033[0m http://archive.ubuntu.com/ubuntu\n\n"; [ "$Relese" == 'CentOS' ] && echo -en "\033[33mexample:\033[0m http://mirror.centos.org/centos\n\n"; bash $0 error; exit 1; fi if [[ "$SpikCheckDIST" == '0' ]]; then DistsList="$(wget --no-check-certificate -qO- "$LinuxMirror/dists/" |grep -o 'href=.*/"' |cut -d'"' -f2 |sed '/-\|old\|Debian\|experimental\|stable\|test\|sid\|devel/d' |grep '^[^/]' |sed -n '1h;1!H;$g;s/\n//g;s/\//\;/g;$p')"; for CheckDEB in `echo "$DistsList" |sed 's/;/\n/g'` do [[ "$CheckDEB" == "$DIST" ]] && FindDists='1' && break; done [[ "$FindDists" == '0' ]] && { echo -ne '\nThe dists version not found, Please check it! \n\n' bash $0 error; exit 1; } fi [[ "$ddMode" == '1' ]] && { export SSL_SUPPORT='https://raw.githubusercontent.com/fcurrk/reinstall/master/wget_udeb_amd64.tar.gz'; if [[ -n "$tmpURL" ]]; then DDURL="$tmpURL" echo "$DDURL" |grep -q '^http://\|^ftp://\|^https://'; [[ $? -ne '0' ]] && echo 'Please input vaild URL,Only support http://, ftp:// and https:// !' && exit 1; [[ -n "$tmpSSL" ]] && SSL_SUPPORT="$tmpSSL"; else echo 'Please input vaild image URL! '; exit 1; fi } [[ -n "$tmpINS" ]] && { [[ "$tmpINS" == 'auto' ]] && inVNC='n'; [[ "$tmpINS" == 'manual' ]] && inVNC='y'; } [ -n "$ipAddr" ] && [ -n "$ipMask" ] && [ -n "$ipGate" ] && setNet='1'; [[ -n "$tmpWORD" ]] && myPASSWORD="$(openssl passwd -1 "$tmpWORD")"; [[ -z "$myPASSWORD" ]] && myPASSWORD='$1$C7j0ZaEl$4qQdj2VyJFH1neyqcO0qm0'; if [[ -n "$interface" ]]; then IFETH="$interface" else if [[ "$linux_relese" == 'centos' ]]; then IFETH="link" else IFETH="auto" fi fi clear && echo -e "\n\033[36m# Install\033[0m\n" ASKVNC(){ inVNC='y'; [[ "$ddMode" == '0' ]] && { echo -ne "\033[34mDo you want to install os manually?\033[0m\e[33m[\e[32my\e[33m/n]\e[0m " read tmpinVNC [[ -n "$inVNCtmp" ]] && inVNC="$tmpinVNC" } [ "$inVNC" == 'y' -o "$inVNC" == 'Y' ] && inVNC='y'; [ "$inVNC" == 'n' -o "$inVNC" == 'N' ] && inVNC='n'; } [ "$inVNC" == 'y' -o "$inVNC" == 'n' ] || ASKVNC; [[ "$ddMode" == '0' ]] && { [[ "$inVNC" == 'y' ]] && echo -e "\033[34mManual Mode\033[0m insatll [\033[33m$Relese\033[0m] [\033[33m$DIST\033[0m] [\033[33m$VER\033[0m] in VNC. " [[ "$inVNC" == 'n' ]] && echo -e "\033[34mAuto Mode\033[0m insatll [\033[33m$Relese\033[0m] [\033[33m$DIST\033[0m] [\033[33m$VER\033[0m]. " } [[ "$ddMode" == '1' ]] && { echo -ne "\033[34mAuto Mode\033[0m insatll \033[33mWindows\033[0m\n[\033[33m$DDURL\033[0m]\n" } if [[ "$linux_relese" == 'centos' ]]; then if [[ "$DIST" != "$UNVER" ]]; then awk 'BEGIN{print '${UNVER}'-'${DIST}'}' |grep -q '^-' if [ $? != '0' ]; then UNKNOWHW='1'; echo -en "\033[33mThe version lower then \033[31m$UNVER\033[33m may not support in auto mode! \033[0m\n"; if [[ "$inVNC" == 'n' ]]; then echo -en "\033[35mYou can connect VNC with \033[32mPublic IP\033[35m and port \033[32m1\033[35m/\033[32m5901\033[35m in vnc viewer.\033[0m\n" read -n 1 -p "Press Enter to continue..." INP [[ "$INP" != '' ]] && echo -ne '\b \n\n'; fi fi awk 'BEGIN{print '${UNVER}'-'${DIST}'+0.59}' |grep -q '^-' if [ $? == '0' ]; then echo -en "\n\033[31mThe version higher then \033[33m6.10 \033[31mis not support in current! \033[0m\n\n" exit 1; fi fi fi echo -e "\n[\033[33m$Relese\033[0m] [\033[33m$DIST\033[0m] [\033[33m$VER\033[0m] Downloading..." if [[ "$linux_relese" == 'debian' ]] || [[ "$linux_relese" == 'ubuntu' ]]; then inUpdate=''; [ "$linux_relese" == 'ubuntu' ] && inUpdate='-updates' if [[ "$isDigital" == '20.04' ]] || [[ "$DIST" == 'focal' ]]; then wget --no-check-certificate -qO '/boot/initrd.img' "${LinuxMirror}/dists/${DIST}/main/installer-${VER}/current/legacy-images/netboot/${linux_relese}-installer/${VER}/initrd.gz" [[ $? -ne '0' ]] && echo -ne "\033[31mError! \033[0mDownload 'initrd.img' for \033[33m$linux_relese\033[0m failed! \n" && exit 1 wget --no-check-certificate -qO '/boot/vmlinuz' "${LinuxMirror}/dists/${DIST}/main/installer-${VER}/current/legacy-images/netboot/${linux_relese}-installer/${VER}/linux" [[ $? -ne '0' ]] && echo -ne "\033[31mError! \033[0mDownload 'vmlinuz' for \033[33m$linux_relese\033[0m failed! \n" && exit 1 else wget --no-check-certificate -qO '/boot/initrd.img' "${LinuxMirror}/dists/${DIST}${inUpdate}/main/installer-${VER}/current/images/netboot/${linux_relese}-installer/${VER}/initrd.gz" [[ $? -ne '0' ]] && echo -ne "\033[31mError! \033[0mDownload 'initrd.img' for \033[33m$linux_relese\033[0m failed! \n" && exit 1 wget --no-check-certificate -qO '/boot/vmlinuz' "${LinuxMirror}/dists/${DIST}${inUpdate}/main/installer-${VER}/current/images/netboot/${linux_relese}-installer/${VER}/linux" [[ $? -ne '0' ]] && echo -ne "\033[31mError! \033[0mDownload 'vmlinuz' for \033[33m$linux_relese\033[0m failed! \n" && exit 1 fi MirrorHost="$(echo "$LinuxMirror" |awk -F'://|/' '{print $2}')"; MirrorFolder="$(echo "$LinuxMirror" |awk -F''${MirrorHost}'' '{print $2}')"; elif [[ "$linux_relese" == 'centos' ]]; then wget --no-check-certificate -qO '/boot/initrd.img' "${LinuxMirror}/${DIST}/os/${VER}/isolinux/initrd.img" [[ $? -ne '0' ]] && echo -ne "\033[31mError! \033[0mDownload 'initrd.img' for \033[33m$linux_relese\033[0m failed! \n" && exit 1 wget --no-check-certificate -qO '/boot/vmlinuz' "${LinuxMirror}/${DIST}/os/${VER}/isolinux/vmlinuz" [[ $? -ne '0' ]] && echo -ne "\033[31mError! \033[0mDownload 'vmlinuz' for \033[33m$linux_relese\033[0m failed! \n" && exit 1 else bash $0 error; exit 1; fi if [[ "$linux_relese" == 'debian' ]]; then if [[ "$IncFirmware" == '1' ]]; then wget --no-check-certificate -qO '/boot/firmware.cpio.gz' "http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/${DIST}/current/firmware.cpio.gz" [[ $? -ne '0' ]] && echo -ne "\033[31mError! \033[0mDownload 'firmware' for \033[33m$linux_relese\033[0m failed! \n" && exit 1 fi if [[ "$ddMode" == '1' ]]; then vKernel_udeb=$(wget --no-check-certificate -qO- "http://$DISTMirror/dists/$DIST/main/installer-$VER/current/images/udeb.list" |grep '^acpi-modules' |head -n1 |grep -o '[0-9]\{1,2\}.[0-9]\{1,2\}.[0-9]\{1,2\}-[0-9]\{1,2\}' |head -n1) [[ -z "vKernel_udeb" ]] && vKernel_udeb="3.16.0-6" fi fi [[ "$setNet" == '1' ]] && { IPv4="$ipAddr"; MASK="$ipMask"; GATE="$ipGate"; } || { 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" ]] || { echo "Not found \`ip command\`, It will use \`route command\`." 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)"; [[ -n "$GATE" ]] && [[ -n "$MASK" ]] && [[ -n "$IPv4" ]] || { echo "Error! Not configure network. "; exit 1; } } [[ "$setNet" != '1' ]] && [[ -f '/etc/network/interfaces' ]] && { [[ -z "$(sed -n '/iface.*inet static/p' /etc/network/interfaces)" ]] && AutoNet='1' || AutoNet='0'; [[ -d /etc/network/interfaces.d ]] && { ICFGN="$(find /etc/network/interfaces.d -name '*.cfg' |wc -l)" || ICFGN='0'; [[ "$ICFGN" -ne '0' ]] && { for NetCFG in `ls -1 /etc/network/interfaces.d/*.cfg` do [[ -z "$(cat $NetCFG | sed -n '/iface.*inet static/p')" ]] && AutoNet='1' || AutoNet='0'; [[ "$AutoNet" -eq '0' ]] && break; done } } } [[ "$setNet" != '1' ]] && [[ -d '/etc/sysconfig/network-scripts' ]] && { ICFGN="$(find /etc/sysconfig/network-scripts -name 'ifcfg-*' |grep -v 'lo'|wc -l)" || ICFGN='0'; [[ "$ICFGN" -ne '0' ]] && { for NetCFG in `ls -1 /etc/sysconfig/network-scripts/ifcfg-* |grep -v 'lo$' |grep -v ':[0-9]\{1,\}'` do [[ -n "$(cat $NetCFG | sed -n '/BOOTPROTO.*[dD][hH][cC][pP]/p')" ]] && AutoNet='1' || { AutoNet='0' && . $NetCFG; [[ -n $NETMASK ]] && MASK="$NETMASK"; [[ -n $GATEWAY ]] && GATE="$GATEWAY"; } [[ "$AutoNet" -eq '0' ]] && break; done } } if [[ "$loaderMode" == "0" ]]; then [[ ! -f $GRUBDIR/$GRUBFILE ]] && echo "Error! Not Found $GRUBFILE. " && exit 1; [[ ! -f $GRUBDIR/$GRUBFILE.old ]] && [[ -f $GRUBDIR/$GRUBFILE.bak ]] && mv -f $GRUBDIR/$GRUBFILE.bak $GRUBDIR/$GRUBFILE.old; mv -f $GRUBDIR/$GRUBFILE $GRUBDIR/$GRUBFILE.bak; [[ -f $GRUBDIR/$GRUBFILE.old ]] && cat $GRUBDIR/$GRUBFILE.old >$GRUBDIR/$GRUBFILE || cat $GRUBDIR/$GRUBFILE.bak >$GRUBDIR/$GRUBFILE; else GRUBVER='2' fi [[ "$GRUBVER" == '0' ]] && { READGRUB='/tmp/grub.read' cat $GRUBDIR/$GRUBFILE |sed -n '1h;1!H;$g;s/\n/%%%%%%%/g;$p' |grep -om 1 'menuentry\ [^{]*{[^}]*}%%%%%%%' |sed 's/%%%%%%%/\n/g' >$READGRUB LoadNum="$(cat $READGRUB |grep -c 'menuentry ')" if [[ "$LoadNum" -eq '1' ]]; then cat $READGRUB |sed '/^$/d' >/tmp/grub.new; elif [[ "$LoadNum" -gt '1' ]]; then CFG0="$(awk '/menuentry /{print NR}' $READGRUB|head -n 1)"; CFG2="$(awk '/menuentry /{print NR}' $READGRUB|head -n 2 |tail -n 1)"; CFG1=""; for tmpCFG in `awk '/}/{print NR}' $READGRUB` do [ "$tmpCFG" -gt "$CFG0" -a "$tmpCFG" -lt "$CFG2" ] && CFG1="$tmpCFG"; done [[ -z "$CFG1" ]] && { echo "Error! read $GRUBFILE. "; exit 1; } sed -n "$CFG0,$CFG1"p $READGRUB >/tmp/grub.new; [[ -f /tmp/grub.new ]] && [[ "$(grep -c '{' /tmp/grub.new)" -eq "$(grep -c '}' /tmp/grub.new)" ]] || { echo -ne "\033[31mError! \033[0mNot configure $GRUBFILE. \n"; exit 1; } fi [ ! -f /tmp/grub.new ] && echo "Error! $GRUBFILE. " && exit 1; sed -i "/menuentry.*/c\menuentry\ \'Install OS \[$DIST\ $VER\]\'\ --class debian\ --class\ gnu-linux\ --class\ gnu\ --class\ os\ \{" /tmp/grub.new sed -i "/echo.*Loading/d" /tmp/grub.new; INSERTGRUB="$(awk '/menuentry /{print NR}' $GRUBDIR/$GRUBFILE|head -n 1)" } [[ "$GRUBVER" == '1' ]] && { CFG0="$(awk '/title[\ ]|title[\t]/{print NR}' $GRUBDIR/$GRUBFILE|head -n 1)"; CFG1="$(awk '/title[\ ]|title[\t]/{print NR}' $GRUBDIR/$GRUBFILE|head -n 2 |tail -n 1)"; [[ -n $CFG0 ]] && [ -z $CFG1 -o $CFG1 == $CFG0 ] && sed -n "$CFG0,$"p $GRUBDIR/$GRUBFILE >/tmp/grub.new; [[ -n $CFG0 ]] && [ -z $CFG1 -o $CFG1 != $CFG0 ] && sed -n "$CFG0,$[$CFG1-1]"p $GRUBDIR/$GRUBFILE >/tmp/grub.new; [[ ! -f /tmp/grub.new ]] && echo "Error! configure append $GRUBFILE. " && exit 1; sed -i "/title.*/c\title\ \'Install OS \[$DIST\ $VER\]\'" /tmp/grub.new; sed -i '/^#/d' /tmp/grub.new; INSERTGRUB="$(awk '/title[\ ]|title[\t]/{print NR}' $GRUBDIR/$GRUBFILE|head -n 1)" } if [[ "$loaderMode" == "0" ]]; then [[ -n "$(grep 'linux.*/\|kernel.*/' /tmp/grub.new |awk '{print $2}' |tail -n 1 |grep '^/boot/')" ]] && Type='InBoot' || Type='NoBoot'; LinuxKernel="$(grep 'linux.*/\|kernel.*/' /tmp/grub.new |awk '{print $1}' |head -n 1)"; [[ -z "$LinuxKernel" ]] && echo "Error! read grub config! " && exit 1; LinuxIMG="$(grep 'initrd.*/' /tmp/grub.new |awk '{print $1}' |tail -n 1)"; [ -z "$LinuxIMG" ] && sed -i "/$LinuxKernel.*\//a\\\tinitrd\ \/" /tmp/grub.new && LinuxIMG='initrd'; if [[ "$setInterfaceName" == "1" ]]; then Add_OPTION="net.ifnames=0 biosdevname=0"; else Add_OPTION=""; fi if [[ "$setIPv6" == "1" ]]; then Add_OPTION="$Add_OPTION ipv6.disable=1"; fi if [[ "$linux_relese" == 'debian' ]] || [[ "$linux_relese" == 'ubuntu' ]]; then BOOT_OPTION="auto=true $Add_OPTION hostname=$linux_relese domain= -- quiet" elif [[ "$linux_relese" == 'centos' ]]; then BOOT_OPTION="ks=file://ks.cfg $Add_OPTION ksdevice=$IFETH" fi [[ "$Type" == 'InBoot' ]] && { sed -i "/$LinuxKernel.*\//c\\\t$LinuxKernel\\t\/boot\/vmlinuz $BOOT_OPTION" /tmp/grub.new; sed -i "/$LinuxIMG.*\//c\\\t$LinuxIMG\\t\/boot\/initrd.img" /tmp/grub.new; } [[ "$Type" == 'NoBoot' ]] && { sed -i "/$LinuxKernel.*\//c\\\t$LinuxKernel\\t\/vmlinuz $BOOT_OPTION" /tmp/grub.new; sed -i "/$LinuxIMG.*\//c\\\t$LinuxIMG\\t\/initrd.img" /tmp/grub.new; } sed -i '$a\\n' /tmp/grub.new; fi [[ "$inVNC" == 'n' ]] && { GRUBPATCH='0'; if [[ "$loaderMode" == "0" ]]; then [ -f '/etc/network/interfaces' -o -d '/etc/sysconfig/network-scripts' ] || { echo "Error, Not found interfaces config."; exit 1; } sed -i ''${INSERTGRUB}'i\\n' $GRUBDIR/$GRUBFILE; sed -i ''${INSERTGRUB}'r /tmp/grub.new' $GRUBDIR/$GRUBFILE; [[ -f $GRUBDIR/grubenv ]] && sed -i 's/saved_entry/#saved_entry/g' $GRUBDIR/grubenv; fi [[ -d /tmp/boot ]] && rm -rf /tmp/boot; mkdir -p /tmp/boot; cd /tmp/boot; if [[ "$linux_relese" == 'debian' ]] || [[ "$linux_relese" == 'ubuntu' ]]; then COMPTYPE="gzip"; elif [[ "$linux_relese" == 'centos' ]]; then COMPTYPE="$(file /boot/initrd.img |grep -o ':.*compressed data' |cut -d' ' -f2 |sed -r 's/(.*)/\L\1/' |head -n1)" [[ -z "$COMPTYPE" ]] && echo "Detect compressed type fail." && exit 1; fi CompDected='0' for ListCOMP in `echo -en 'gzip\nlzma\nxz'` do if [[ "$COMPTYPE" == "$ListCOMP" ]]; then CompDected='1' if [[ "$COMPTYPE" == 'gzip' ]]; then NewIMG="initrd.img.gz" else NewIMG="initrd.img.$COMPTYPE" fi mv -f "/boot/initrd.img" "/tmp/$NewIMG" break; fi done [[ "$CompDected" != '1' ]] && echo "Detect compressed type not support." && exit 1; [[ "$COMPTYPE" == 'lzma' ]] && UNCOMP='xz --format=lzma --decompress'; [[ "$COMPTYPE" == 'xz' ]] && UNCOMP='xz --decompress'; [[ "$COMPTYPE" == 'gzip' ]] && UNCOMP='gzip -d'; $UNCOMP < /tmp/$NewIMG | cpio --extract --verbose --make-directories --no-absolute-filenames >>/dev/null 2>&1 if [[ "$linux_relese" == 'debian' ]] || [[ "$linux_relese" == 'ubuntu' ]]; then cat >/tmp/boot/preseed.cfg<<EOF d-i debian-installer/locale string en_US d-i console-setup/layoutcode string us d-i keyboard-configuration/xkb-keymap string us d-i netcfg/choose_interface select $IFETH d-i netcfg/disable_autoconfig boolean true d-i netcfg/dhcp_failed note d-i netcfg/dhcp_options select Configure network manually d-i netcfg/get_ipaddress string $IPv4 d-i netcfg/get_netmask string $MASK d-i netcfg/get_gateway string $GATE d-i netcfg/get_nameservers string 8.8.8.8 d-i netcfg/no_default_route boolean true d-i netcfg/confirm_static boolean true d-i hw-detect/load_firmware boolean true d-i mirror/country string manual d-i mirror/http/hostname string $MirrorHost d-i mirror/http/directory string $MirrorFolder d-i mirror/http/proxy string d-i apt-setup/services-select multiselect d-i passwd/root-login boolean ture d-i passwd/make-user boolean false d-i passwd/root-password-crypted password $myPASSWORD d-i user-setup/allow-password-weak boolean true d-i user-setup/encrypt-home boolean false d-i clock-setup/utc boolean true d-i time/zone string US/Eastern d-i clock-setup/ntp boolean true d-i preseed/early_command string anna-install libfuse2-udeb fuse-udeb ntfs-3g-udeb fuse-modules-${vKernel_udeb}-amd64-di d-i partman/early_command string [[ -n "\$(blkid -t TYPE='vfat' -o device)" ]] && umount "\$(blkid -t TYPE='vfat' -o device)"; \ debconf-set partman-auto/disk "\$(list-devices disk |head -n1)"; \ wget -qO- '$DDURL' |gunzip -dc |/bin/dd of=\$(list-devices disk |head -n1); \ mount.ntfs-3g \$(list-devices partition |head -n1) /mnt; \ cd '/mnt/ProgramData/Microsoft/Windows/Start Menu/Programs'; \ cd Start* || cd start*; \ cp -f '/net.bat' './net.bat'; \ /sbin/reboot; \ debconf-set grub-installer/bootdev string "\$(list-devices disk |head -n1)"; \ umount /media || true; \ d-i partman/mount_style select uuid d-i partman-auto/init_automatically_partition select Guided - use entire disk d-i partman-auto/choose_recipe select All files in one partition (recommended for new users) d-i partman-auto/method string regular d-i partman-lvm/device_remove_lvm boolean true d-i partman-md/device_remove_md boolean true d-i partman-auto/choose_recipe select atomic d-i partman-partitioning/confirm_write_new_label boolean true d-i partman/choose_partition select finish d-i partman-lvm/confirm boolean true d-i partman-lvm/confirm_nooverwrite boolean true d-i partman/confirm boolean true d-i partman/confirm_nooverwrite boolean true d-i debian-installer/allow_unauthenticated boolean true tasksel tasksel/first multiselect minimal d-i pkgsel/update-policy select none d-i pkgsel/include string openssh-server d-i pkgsel/upgrade select none popularity-contest popularity-contest/participate boolean false d-i grub-installer/only_debian boolean true d-i grub-installer/bootdev string default d-i finish-install/reboot_in_progress note d-i debian-installer/exit/reboot boolean true d-i preseed/late_command string \ sed -ri 's/^#?PermitRootLogin.*/PermitRootLogin yes/g' /target/etc/ssh/sshd_config; \ sed -ri 's/^#?PasswordAuthentication.*/PasswordAuthentication yes/g' /target/etc/ssh/sshd_config; EOF [[ "$loaderMode" != "0" ]] && AutoNet='1' [[ "$setNet" == '0' ]] && [[ "$AutoNet" == '1' ]] && { sed -i '/netcfg\/disable_autoconfig/d' /tmp/boot/preseed.cfg sed -i '/netcfg\/dhcp_options/d' /tmp/boot/preseed.cfg sed -i '/netcfg\/get_.*/d' /tmp/boot/preseed.cfg sed -i '/netcfg\/confirm_static/d' /tmp/boot/preseed.cfg } [[ "$DIST" == 'trusty' ]] && GRUBPATCH='1' [[ "$DIST" == 'wily' ]] && GRUBPATCH='1' [[ "$DIST" == 'xenial' ]] && { sed -i 's/^d-i\ clock-setup\/ntp\ boolean\ true/d-i\ clock-setup\/ntp\ boolean\ false/g' /tmp/boot/preseed.cfg } [[ "$GRUBPATCH" == '1' ]] && { sed -i 's/^d-i\ grub-installer\/bootdev\ string\ default//g' /tmp/boot/preseed.cfg } [[ "$GRUBPATCH" == '0' ]] && { sed -i 's/debconf-set\ grub-installer\/bootdev.*\"\;//g' /tmp/boot/preseed.cfg } [[ "$linux_relese" == 'debian' ]] && { sed -i '/user-setup\/allow-password-weak/d' /tmp/boot/preseed.cfg sed -i '/user-setup\/encrypt-home/d' /tmp/boot/preseed.cfg sed -i '/pkgsel\/update-policy/d' /tmp/boot/preseed.cfg sed -i 's/umount\ \/media.*true\;\ //g' /tmp/boot/preseed.cfg } [[ "$linux_relese" == 'debian' ]] && [[ -f '/boot/firmware.cpio.gz' ]] && { gzip -d < /boot/firmware.cpio.gz | cpio --extract --verbose --make-directories --no-absolute-filenames >>/dev/null 2>&1 } [[ "$ddMode" == '1' ]] && { WinNoDHCP(){ echo -ne "for\0040\0057f\0040\0042tokens\00753\0052\0042\0040\0045\0045i\0040in\0040\0050\0047netsh\0040interface\0040show\0040interface\0040\0136\0174more\0040\00533\0040\0136\0174findstr\0040\0057I\0040\0057R\0040\0042本地\0056\0052\0040以太\0056\0052\0040Local\0056\0052\0040Ethernet\0042\0047\0051\0040do\0040\0050set\0040EthName\0075\0045\0045j\0051\r\nnetsh\0040\0055c\0040interface\0040ip\0040set\0040address\0040name\0075\0042\0045EthName\0045\0042\0040source\0075static\0040address\0075$IPv4\0040mask\0075$MASK\0040gateway\0075$GATE\r\nnetsh\0040\0055c\0040interface\0040ip\0040add\0040dnsservers\0040name\0075\0042\0045EthName\0045\0042\0040address\00758\00568\00568\00568\0040index\00751\0040validate\0075no\r\n\r\n" >>'/tmp/boot/net.tmp'; } WinRDP(){ echo -ne "netsh\0040firewall\0040set\0040portopening\0040protocol\0075ALL\0040port\0075$WinRemote\0040name\0075RDP\0040mode\0075ENABLE\0040scope\0075ALL\0040profile\0075ALL\r\nnetsh\0040firewall\0040set\0040portopening\0040protocol\0075ALL\0040port\0075$WinRemote\0040name\0075RDP\0040mode\0075ENABLE\0040scope\0075ALL\0040profile\0075CURRENT\r\nreg\0040add\0040\0042HKLM\0134SYSTEM\0134CurrentControlSet\0134Control\0134Network\0134NewNetworkWindowOff\0042\0040\0057f\r\nreg\0040add\0040\0042HKLM\0134SYSTEM\0134CurrentControlSet\0134Control\0134Terminal\0040Server\0042\0040\0057v\0040fDenyTSConnections\0040\0057t\0040reg\0137dword\0040\0057d\00400\0040\0057f\r\nreg\0040add\0040\0042HKLM\0134SYSTEM\0134CurrentControlSet\0134Control\0134Terminal\0040Server\0134Wds\0134rdpwd\0134Tds\0134tcp\0042\0040\0057v\0040PortNumber\0040\0057t\0040reg\0137dword\0040\0057d\0040$WinRemote\0040\0057f\r\nreg\0040add\0040\0042HKLM\0134SYSTEM\0134CurrentControlSet\0134Control\0134Terminal\0040Server\0134WinStations\0134RDP\0055Tcp\0042\0040\0057v\0040PortNumber\0040\0057t\0040reg\0137dword\0040\0057d\0040$WinRemote\0040\0057f\r\nreg\0040add\0040\0042HKLM\0134SYSTEM\0134CurrentControlSet\0134Control\0134Terminal\0040Server\0134WinStations\0134RDP\0055Tcp\0042\0040\0057v\0040UserAuthentication\0040\0057t\0040reg\0137dword\0040\0057d\00400\0040\0057f\r\nFOR\0040\0057F\0040\0042tokens\00752\0040delims\0075\0072\0042\0040\0045\0045i\0040in\0040\0050\0047SC\0040QUERYEX\0040TermService\0040\0136\0174FINDSTR\0040\0057I\0040\0042PID\0042\0047\0051\0040do\0040TASKKILL\0040\0057F\0040\0057PID\0040\0045\0045i\r\nFOR\0040\0057F\0040\0042tokens\00752\0040delims\0075\0072\0042\0040\0045\0045i\0040in\0040\0050\0047SC\0040QUERYEX\0040UmRdpService\0040\0136\0174FINDSTR\0040\0057I\0040\0042PID\0042\0047\0051\0040do\0040TASKKILL\0040\0057F\0040\0057PID\0040\0045\0045i\r\nSC\0040START\0040TermService\r\n\r\n" >>'/tmp/boot/net.tmp'; } echo -ne "\0100ECHO\0040OFF\r\n\r\ncd\0056\0076\0045WINDIR\0045\0134GetAdmin\r\nif\0040exist\0040\0045WINDIR\0045\0134GetAdmin\0040\0050del\0040\0057f\0040\0057q\0040\0042\0045WINDIR\0045\0134GetAdmin\0042\0051\0040else\0040\0050\r\necho\0040CreateObject\0136\0050\0042Shell\0056Application\0042\0136\0051\0056ShellExecute\0040\0042\0045\0176s0\0042\0054\0040\0042\0045\0052\0042\0054\0040\0042\0042\0054\0040\0042runas\0042\0054\00401\0040\0076\0076\0040\0042\0045temp\0045\0134Admin\0056vbs\0042\r\n\0042\0045temp\0045\0134Admin\0056vbs\0042\r\ndel\0040\0057f\0040\0057q\0040\0042\0045temp\0045\0134Admin\0056vbs\0042\r\nexit\0040\0057b\00402\0051\r\n\r\n" >'/tmp/boot/net.tmp'; [[ "$setNet" == '1' ]] && WinNoDHCP; [[ "$setNet" == '0' ]] && [[ "$AutoNet" == '0' ]] && WinNoDHCP; [[ "$setRDP" == '1' ]] && [[ -n "$WinRemote" ]] && WinRDP echo -ne "ECHO\0040SELECT\0040VOLUME\0075\0045\0045SystemDrive\0045\0045\0040\0076\0040\0042\0045SystemDrive\0045\0134diskpart\0056extend\0042\r\nECHO\0040EXTEND\0040\0076\0076\0040\0042\0045SystemDrive\0045\0134diskpart\0056extend\0042\r\nSTART\0040/WAIT\0040DISKPART\0040\0057S\0040\0042\0045SystemDrive\0045\0134diskpart\0056extend\0042\r\nDEL\0040\0057f\0040\0057q\0040\0042\0045SystemDrive\0045\0134diskpart\0056extend\0042\r\n\r\n" >>'/tmp/boot/net.tmp'; echo -ne "cd\0040\0057d\0040\0042\0045ProgramData\0045\0057Microsoft\0057Windows\0057Start\0040Menu\0057Programs\0057Startup\0042\r\ndel\0040\0057f\0040\0057q\0040net\0056bat\r\n\r\n\r\n" >>'/tmp/boot/net.tmp'; iconv -f 'UTF-8' -t 'GBK' '/tmp/boot/net.tmp' -o '/tmp/boot/net.bat' rm -rf '/tmp/boot/net.tmp' echo "$DDURL" |grep -q '^https://' [[ $? -eq '0' ]] && { echo -ne '\nAdd ssl support...\n' [[ -n $SSL_SUPPORT ]] && { wget --no-check-certificate -qO- "$SSL_SUPPORT" |tar -x [[ ! -f /tmp/boot/usr/bin/wget ]] && echo 'Error! SSL_SUPPORT.' && exit 1; sed -i 's/wget\ -qO-/\/usr\/bin\/wget\ --no-check-certificate\ --retry-connrefused\ --tries=7\ --continue\ -qO-/g' /tmp/boot/preseed.cfg [[ $? -eq '0' ]] && echo -ne 'Success! \n\n' } || { echo -ne 'Not ssl support package! \n\n'; exit 1; } } } [[ "$ddMode" == '0' ]] && { sed -i '/anna-install/d' /tmp/boot/preseed.cfg sed -i 's/wget.*\/sbin\/reboot\;\ //g' /tmp/boot/preseed.cfg } elif [[ "$linux_relese" == 'centos' ]]; then cat >/tmp/boot/ks.cfg<<EOF #platform=x86, AMD64, or Intel EM64T firewall --enabled --ssh install url --url="$LinuxMirror/$DIST/os/$VER/" rootpw --iscrypted $myPASSWORD auth --useshadow --passalgo=sha512 firstboot --disable lang en_US keyboard us selinux --disabled logging --level=info reboot text unsupported_hardware vnc skipx timezone --isUtc Asia/Hong_Kong #ONDHCP network --bootproto=dhcp --onboot=on #NODHCP network --bootproto=static --ip=$IPv4 --netmask=$MASK --gateway=$GATE --nameserver=8.8.8.8 --onboot=on bootloader --location=mbr --append="rhgb quiet crashkernel=auto" zerombr clearpart --all --initlabel autopart %packages @base %end %post --interpreter=/bin/bash rm -rf /root/anaconda-ks.cfg rm -rf /root/install.*log %end EOF [[ "$setNet" == '0' ]] && [[ "$AutoNet" == '1' ]] && { sed -i 's/#ONDHCP\ //g' /tmp/boot/ks.cfg } || { sed -i 's/#NODHCP\ //g' /tmp/boot/ks.cfg } [[ "$UNKNOWHW" == '1' ]] && sed -i 's/^unsupported_hardware/#unsupported_hardware/g' /tmp/boot/ks.cfg [[ "$(echo "$DIST" |grep -o '^[0-9]\{1\}')" == '5' ]] && sed -i '0,/^%end/s//#%end/' /tmp/boot/ks.cfg fi find . | cpio -H newc --create --verbose | gzip -9 > /boot/initrd.img; rm -rf /tmp/boot; } [[ "$inVNC" == 'y' ]] && { sed -i '$i\\n' $GRUBDIR/$GRUBFILE sed -i '$r /tmp/grub.new' $GRUBDIR/$GRUBFILE echo -e "\n\033[33m\033[04mIt will reboot! \nPlease connect VNC! \nSelect\033[0m\033[32m Install OS [$DIST $VER] \033[33m\033[4mto install system.\033[04m\n\n\033[31m\033[04mThere is some information for you.\nDO NOT CLOSE THE WINDOW! \033[0m\n" echo -e "\033[35mIPv4\t\tNETMASK\t\tGATEWAY\033[0m" echo -e "\033[36m\033[04m$IPv4\033[0m\t\033[36m\033[04m$MASK\033[0m\t\033[36m\033[04m$GATE\033[0m\n\n" read -n 1 -p "Press Enter to reboot..." INP [[ "$INP" != '' ]] && echo -ne '\b \n\n'; } chown root:root $GRUBDIR/$GRUBFILE chmod 444 $GRUBDIR/$GRUBFILE if [[ "$loaderMode" == "0" ]]; then sleep 3 && reboot >/dev/null 2>&1 else rm -rf "$HOME/loader" mkdir -p "$HOME/loader" cp -rf "/boot/initrd.img" "$HOME/loader/initrd.img" cp -rf "/boot/vmlinuz" "$HOME/loader/vmlinuz" [[ -f "/boot/initrd.img" ]] && rm -rf "/boot/initrd.img" [[ -f "/boot/vmlinuz" ]] && rm -rf "/boot/vmlinuz" echo && ls -AR1 "$HOME/loader" fi This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,870 @@ #!/bin/bash ## License: GPL ## It can reinstall Debian, Ubuntu, CentOS system with network. ## Default root password: MoeClub.org ## Blog: https://moeclub.org ## Written By MoeClub.org export tmpVER='' export tmpDIST='' export tmpURL='' export tmpWORD='' export tmpMirror='' export tmpSSL='' export tmpINS='' export ipAddr='' export ipMask='' export ipGate='' export Relese='' export ddMode='0' export setNet='0' export setRDP='0' export setIPv6='0' export isMirror='0' export FindDists='0' export loaderMode='0' export IncFirmware='0' export SpikCheckDIST='0' export setInterfaceName='0' export UNKNOWHW='0' export UNVER='6.4' while [[ $# -ge 1 ]]; do case $1 in -v|--ver) shift tmpVER="$1" shift ;; -d|--debian) shift Relese='Debian' tmpDIST="$1" shift ;; -u|--ubuntu) shift Relese='Ubuntu' tmpDIST="$1" shift ;; -c|--centos) shift Relese='CentOS' tmpDIST="$1" shift ;; -dd|--image) shift ddMode='1' tmpURL="$1" shift ;; -p|--password) shift tmpWORD="$1" shift ;; -i|--interface) shift interface="$1" shift ;; --ip-addr) shift ipAddr="$1" shift ;; --ip-mask) shift ipMask="$1" shift ;; --ip-gate) shift ipGate="$1" shift ;; --dev-net) shift setInterfaceName='1' ;; --loader) shift loaderMode='1' ;; --prefer) shift tmpPrefer="$1" shift ;; -a|--auto) shift tmpINS='auto' ;; -m|--manual) shift tmpINS='manual' ;; -apt|-yum|--mirror) shift isMirror='1' tmpMirror="$1" shift ;; -rdp) shift setRDP='1' WinRemote="$1" shift ;; -ssl) shift tmpSSL="$1" shift ;; -firmware) shift IncFirmware="1" ;; --ipv6) shift setIPv6='1' ;; *) if [[ "$1" != 'error' ]]; then echo -ne "\nInvaild option: '$1'\n\n"; fi echo -ne " Usage:\n\tbash $(basename $0)\t-d/--debian [\033[33m\033[04mdists-name\033[0m]\n\t\t\t\t-u/--ubuntu [\033[04mdists-name\033[0m]\n\t\t\t\t-c/--centos [\033[33m\033[04mdists-verison\033[0m]\n\t\t\t\t-v/--ver [32/\033[33m\033[04mi386\033[0m|64/amd64]\n\t\t\t\t--ip-addr/--ip-gate/--ip-mask\n\t\t\t\t-apt/-yum/--mirror\n\t\t\t\t-dd/--image\n\t\t\t\t-a/--auto\n\t\t\t\t-m/--manual\n" exit 1; ;; esac done [[ "$EUID" -ne '0' ]] && echo "Error:This script must be run as root!" && exit 1; function CheckDependence(){ FullDependence='0'; for BIN_DEP in `echo "$1" |sed 's/,/\n/g'` do if [[ -n "$BIN_DEP" ]]; then Founded='0'; for BIN_PATH in `echo "$PATH" |sed 's/:/\n/g'` do ls $BIN_PATH/$BIN_DEP >/dev/null 2>&1; if [ $? == '0' ]; then Founded='1'; break; fi done if [ "$Founded" == '1' ]; then echo -en "[\033[32mok\033[0m]\t"; else FullDependence='1'; echo -en "[\033[31mNot Install\033[0m]"; fi echo -en "\t$BIN_DEP\n"; fi done if [ "$FullDependence" == '1' ]; then echo -ne "\n\033[31mError! \033[0mPlease use '\033[33mapt-get\033[0m' or '\033[33myum\033[0m' install it.\n\n\n" exit 1; fi } function SelectMirror(){ [ $# -ge 3 ] || exit 1 Relese="$1" DIST=$(echo "$2" |sed 's/\ //g' |sed -r 's/(.*)/\L\1/') VER=$(echo "$3" |sed 's/\ //g' |sed -r 's/(.*)/\L\1/') New=$(echo "$4" |sed 's/\ //g') echo -ne "Release:$Relese\n" echo -ne "DIST:$DIST\n" echo -ne "VER:$VER\n" echo -ne "New:$New\n" [ -n "$Relese" ] || exit 1 [ -n "$DIST" ] || exit 1 [ -n "$VER" ] || exit 1 relese=$(echo $Relese |sed -r 's/(.*)/\L\1/') echo -ne "release:$relese\n" if [ "$Relese" == "Debian" ] || [ "$Relese" == "Ubuntu" ]; then inUpdate=''; [ "$Relese" == "Ubuntu" ] && inUpdate='-updates' MirrorTEMP="SUB_MIRROR/dists/${DIST}${inUpdate}/main/installer-${VER}/current/images/netboot/${relese}-installer/${VER}/initrd.gz" elif [ "$Relese" == "CentOS" ]; then MirrorTEMP="SUB_MIRROR/${DIST}/os/${VER}/isolinux/initrd.img" fi echo -ne "MirrorTEMP:$MirrorTEMP\n" [ -n "$MirrorTEMP" ] || exit 1 MirrorStatus=0 declare -A MirrorBackup MirrorBackup=(["Debian0"]="" ["Debian1"]="http://deb.debian.org/debian" ["Debian2"]="http://archive.debian.org/debian" ["Ubuntu0"]="" ["Ubuntu1"]="http://archive.ubuntu.com/ubuntu" ["CentOS0"]="" ["CentOS1"]="http://mirror.centos.org/centos" ["CentOS2"]="http://vault.centos.org") echo "$New" |grep -q '^http://\|^https://\|^ftp://' && MirrorBackup[${Relese}0]="$New" for mirror in $(echo "${!MirrorBackup[@]}" |sed 's/\ /\n/g' |sort -n |grep "^$Relese") do CurMirror="${MirrorBackup[$mirror]}" [ -n "$CurMirror" ] || continue MirrorURL=`echo "$MirrorTEMP" |sed "s#SUB_MIRROR#${CurMirror}#g"` echo -ne "MirrorURL:$MirrorURL\n" wget --no-check-certificate --spider --timeout=3 -o /dev/null "$MirrorURL" [ $? -eq 0 ] && MirrorStatus=1 && break done [ $MirrorStatus -eq 1 ] && echo "$CurMirror" || exit 1 } [ -n "$Relese" ] || Relese='Debian' linux_relese=$(echo "$Relese" |sed 's/\ //g' |sed -r 's/(.*)/\L\1/') clear && echo -e "\n\033[36m# Check Dependence\033[0m\n" if [[ "$ddMode" == '1' ]]; then CheckDependence iconv; linux_relese='debian'; tmpDIST='jessie'; tmpVER='amd64'; tmpINS='auto'; fi if [[ "$Relese" == 'Debian' ]] || [[ "$Relese" == 'Ubuntu' ]]; then CheckDependence wget,awk,grep,sed,cut,cat,cpio,gzip,find,dirname,basename; elif [[ "$Relese" == 'CentOS' ]]; then CheckDependence wget,awk,grep,sed,cut,cat,cpio,gzip,find,dirname,basename,file,xz; fi [ -n "$tmpWORD" ] && CheckDependence openssl if [[ "$loaderMode" == "0" ]]; then [[ -f '/boot/grub/grub.cfg' ]] && GRUBVER='0' && GRUBDIR='/boot/grub' && GRUBFILE='grub.cfg'; [[ -z "$GRUBDIR" ]] && [[ -f '/boot/grub2/grub.cfg' ]] && GRUBVER='0' && GRUBDIR='/boot/grub2' && GRUBFILE='grub.cfg'; [[ -z "$GRUBDIR" ]] && [[ -f '/boot/grub/grub.conf' ]] && GRUBVER='1' && GRUBDIR='/boot/grub' && GRUBFILE='grub.conf'; [ -z "$GRUBDIR" -o -z "$GRUBFILE" ] && echo -ne "Error! \nNot Found grub.\n" && exit 1; else tmpINS='auto' fi if [[ -n "$tmpVER" ]]; then tmpVER="$(echo "$tmpVER" |sed -r 's/(.*)/\L\1/')"; if [[ "$tmpVER" == '32' ]] || [[ "$tmpVER" == 'i386' ]] || [[ "$tmpVER" == 'x86' ]]; then VER='i386'; fi if [[ "$tmpVER" == '64' ]] || [[ "$tmpVER" == 'amd64' ]] || [[ "$tmpVER" == 'x86_64' ]] || [[ "$tmpVER" == 'x64' ]]; then if [[ "$Relese" == 'Debian' ]] || [[ "$Relese" == 'Ubuntu' ]]; then VER='amd64'; elif [[ "$Relese" == 'CentOS' ]]; then VER='x86_64'; fi fi fi [ -z "$VER" ] && VER='amd64' if [[ -z "$tmpDIST" ]]; then [ "$Relese" == 'Debian' ] && tmpDIST='jessie' && DIST='jessie'; [ "$Relese" == 'Ubuntu' ] && tmpDIST='bionic' && DIST='bionic'; [ "$Relese" == 'CentOS' ] && tmpDIST='6.10' && DIST='6.10'; fi if [[ -z "$DIST" ]]; then if [[ "$Relese" == 'Debian' ]]; then SpikCheckDIST='0' DIST="$(echo "$tmpDIST" |sed -r 's/(.*)/\L\1/')"; echo "$DIST" |grep -q '[0-9]'; [[ $? -eq '0' ]] && { isDigital="$(echo "$DIST" |grep -o '[\.0-9]\{1,\}' |sed -n '1h;1!H;$g;s/\n//g;$p' |cut -d'.' -f1)"; [[ -n $isDigital ]] && { [[ "$isDigital" == '7' ]] && DIST='wheezy'; [[ "$isDigital" == '8' ]] && DIST='jessie'; [[ "$isDigital" == '9' ]] && DIST='stretch'; [[ "$isDigital" == '10' ]] && DIST='buster'; } } LinuxMirror=$(SelectMirror "$Relese" "$DIST" "$VER" "$tmpMirror") fi if [[ "$Relese" == 'Ubuntu' ]]; then SpikCheckDIST='1' DIST="$(echo "$tmpDIST" |sed -r 's/(.*)/\L\1/')"; echo "$DIST" |grep -q '[0-9]'; [[ $? -eq '0' ]] && { isDigital="$(echo "$DIST" |grep -o '[\.0-9]\{1,\}' |sed -n '1h;1!H;$g;s/\n//g;$p')"; [[ -n $isDigital ]] && { [[ "$isDigital" == '12.04' ]] && DIST='precise'; [[ "$isDigital" == '14.04' ]] && DIST='trusty'; [[ "$isDigital" == '16.04' ]] && DIST='xenial'; [[ "$isDigital" == '18.04' ]] && DIST='bionic'; [[ "$isDigital" == '20.04' ]] && DIST='focal'; } } LinuxMirror=$(SelectMirror "$Relese" "$DIST" "$VER" "$tmpMirror") fi if [[ "$Relese" == 'CentOS' ]]; then SpikCheckDIST='1' DISTCheck="$(echo "$tmpDIST" |grep -o '[\.0-9]\{1,\}')"; LinuxMirror=$(SelectMirror "$Relese" "$DISTCheck" "$VER" "$tmpMirror") ListDIST="$(wget --no-check-certificate -qO- "$LinuxMirror/dir_sizes" |cut -f2 |grep '^[0-9]')" DIST="$(echo "$ListDIST" |grep "^$DISTCheck" |head -n1)" [[ -z "$DIST" ]] && { echo -ne '\nThe dists version not found in this mirror, Please check it! \n\n' bash $0 error; exit 1; } wget --no-check-certificate -qO- "$LinuxMirror/$DIST/os/$VER/.treeinfo" |grep -q 'general'; [[ $? != '0' ]] && { echo -ne "\nThe version not found in this mirror, Please change mirror try again! \n\n"; exit 1; } fi fi if [[ -z "$LinuxMirror" ]]; then echo -ne "\033[31mError! \033[0mInvaild mirror! \n" [ "$Relese" == 'Debian' ] && echo -en "\033[33mexample:\033[0m http://deb.debian.org/debian\n\n"; [ "$Relese" == 'Ubuntu' ] && echo -en "\033[33mexample:\033[0m http://archive.ubuntu.com/ubuntu\n\n"; [ "$Relese" == 'CentOS' ] && echo -en "\033[33mexample:\033[0m http://mirror.centos.org/centos\n\n"; bash $0 error; exit 1; fi echo -ne "LinuxMirror:\n$LinuxMirror\n" if [[ "$SpikCheckDIST" == '0' ]]; then DistsList="$(wget --no-check-certificate -qO- "$LinuxMirror/dists/" |grep -o 'href=.*/"' |cut -d'"' -f2 |sed '/-\|old\|Debian\|experimental\|stable\|test\|sid\|devel/d' |grep '^[^/]' |sed -n '1h;1!H;$g;s/\n//g;s/\//\;/g;$p')"; echo -ne "DistsList: ${DistsList[*]}\n" for CheckDEB in `echo "$DistsList" |sed 's/;/\n/g'` do echo -ne "CheckDEB:$CheckDEB, $DIST\n" [[ "$CheckDEB" == "$DIST" ]] && FindDists='1' && break; done [[ "$FindDists" == '0' ]] && { echo -ne '\nThe dists version not found, Please check it! \n\n' bash $0 error; exit 1; } fi [[ "$ddMode" == '1' ]] && { export SSL_SUPPORT='https://github.com/MoeClub/MoeClub.github.io/raw/master/lib/wget_udeb_amd64.tar.gz'; if [[ -n "$tmpURL" ]]; then DDURL="$tmpURL" echo "$DDURL" |grep -q '^http://\|^ftp://\|^https://'; [[ $? -ne '0' ]] && echo 'Please input vaild URL,Only support http://, ftp:// and https:// !' && exit 1; [[ -n "$tmpSSL" ]] && SSL_SUPPORT="$tmpSSL"; else echo 'Please input vaild image URL! '; exit 1; fi } [[ -n "$tmpINS" ]] && { [[ "$tmpINS" == 'auto' ]] && inVNC='n'; [[ "$tmpINS" == 'manual' ]] && inVNC='y'; } [ -n "$ipAddr" ] && [ -n "$ipMask" ] && [ -n "$ipGate" ] && setNet='1'; [[ -n "$tmpWORD" ]] && myPASSWORD="$(openssl passwd -1 "$tmpWORD")"; [[ -z "$myPASSWORD" ]] && myPASSWORD='$1$4BJZaD0A$y1QykUnJ6mXprENfwpseH0'; if [[ -n "$interface" ]]; then IFETH="$interface" else if [[ "$linux_relese" == 'centos' ]]; then IFETH="link" else IFETH="auto" fi fi clear && echo -e "\n\033[36m# Install\033[0m\n" ASKVNC(){ inVNC='y'; [[ "$ddMode" == '0' ]] && { echo -ne "\033[34mDo you want to install os manually?\033[0m\e[33m[\e[32my\e[33m/n]\e[0m " read tmpinVNC [[ -n "$inVNCtmp" ]] && inVNC="$tmpinVNC" } [ "$inVNC" == 'y' -o "$inVNC" == 'Y' ] && inVNC='y'; [ "$inVNC" == 'n' -o "$inVNC" == 'N' ] && inVNC='n'; } [ "$inVNC" == 'y' -o "$inVNC" == 'n' ] || ASKVNC; [[ "$ddMode" == '0' ]] && { [[ "$inVNC" == 'y' ]] && echo -e "\033[34mManual Mode\033[0m insatll [\033[33m$Relese\033[0m] [\033[33m$DIST\033[0m] [\033[33m$VER\033[0m] in VNC. " [[ "$inVNC" == 'n' ]] && echo -e "\033[34mAuto Mode\033[0m insatll [\033[33m$Relese\033[0m] [\033[33m$DIST\033[0m] [\033[33m$VER\033[0m]. " } [[ "$ddMode" == '1' ]] && { echo -ne "\033[34mAuto Mode\033[0m insatll \033[33mWindows\033[0m\n[\033[33m$DDURL\033[0m]\n" } if [[ "$linux_relese" == 'centos' ]]; then if [[ "$DIST" != "$UNVER" ]]; then awk 'BEGIN{print '${UNVER}'-'${DIST}'}' |grep -q '^-' if [ $? != '0' ]; then UNKNOWHW='1'; echo -en "\033[33mThe version lower then \033[31m$UNVER\033[33m may not support in auto mode! \033[0m\n"; if [[ "$inVNC" == 'n' ]]; then echo -en "\033[35mYou can connect VNC with \033[32mPublic IP\033[35m and port \033[32m1\033[35m/\033[32m5901\033[35m in vnc viewer.\033[0m\n" read -n 1 -p "Press Enter to continue..." INP [[ "$INP" != '' ]] && echo -ne '\b \n\n'; fi fi awk 'BEGIN{print '${UNVER}'-'${DIST}'+0.59}' |grep -q '^-' if [ $? == '0' ]; then echo -en "\n\033[31mThe version higher then \033[33m6.10 \033[31mis not support in current! \033[0m\n\n" exit 1; fi fi fi echo -e "\n[\033[33m$Relese\033[0m] [\033[33m$DIST\033[0m] [\033[33m$VER\033[0m] Downloading..." if [[ "$linux_relese" == 'debian' ]] || [[ "$linux_relese" == 'ubuntu' ]]; then inUpdate=''; [ "$linux_relese" == 'ubuntu' ] && inUpdate='-updates' echo -ne "00000000000000000000000: ${LinuxMirror}/dists/${DIST}${inUpdate}/main/installer-${VER}/current/images/netboot/${linux_relese}-installer/${VER}/initrd.gz\n" wget --no-check-certificate -qO '/boot/initrd.img' "${LinuxMirror}/dists/${DIST}${inUpdate}/main/installer-${VER}/current/images/netboot/${linux_relese}-installer/${VER}/initrd.gz" [[ $? -ne '0' ]] && echo -ne "\033[31mError! \033[0mDownload 'initrd.img' for \033[33m$linux_relese\033[0m failed! \n" && exit 1 wget --no-check-certificate -qO '/boot/vmlinuz' "${LinuxMirror}/dists/${DIST}${inUpdate}/main/installer-${VER}/current/images/netboot/${linux_relese}-installer/${VER}/linux" [[ $? -ne '0' ]] && echo -ne "\033[31mError! \033[0mDownload 'vmlinuz' for \033[33m$linux_relese\033[0m failed! \n" && exit 1 MirrorHost="$(echo "$LinuxMirror" |awk -F'://|/' '{print $2}')"; MirrorFolder="$(echo "$LinuxMirror" |awk -F''${MirrorHost}'' '{print $2}')"; elif [[ "$linux_relese" == 'centos' ]]; then wget --no-check-certificate -qO '/boot/initrd.img' "${LinuxMirror}/${DIST}/os/${VER}/isolinux/initrd.img" [[ $? -ne '0' ]] && echo -ne "\033[31mError! \033[0mDownload 'initrd.img' for \033[33m$linux_relese\033[0m failed! \n" && exit 1 wget --no-check-certificate -qO '/boot/vmlinuz' "${LinuxMirror}/${DIST}/os/${VER}/isolinux/vmlinuz" [[ $? -ne '0' ]] && echo -ne "\033[31mError! \033[0mDownload 'vmlinuz' for \033[33m$linux_relese\033[0m failed! \n" && exit 1 else bash $0 error; exit 1; fi if [[ "$linux_relese" == 'debian' ]]; then if [[ "$IncFirmware" == '1' ]]; then wget --no-check-certificate -qO '/boot/firmware.cpio.gz' "http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/${DIST}/current/firmware.cpio.gz" [[ $? -ne '0' ]] && echo -ne "\033[31mError! \033[0mDownload 'firmware' for \033[33m$linux_relese\033[0m failed! \n" && exit 1 fi if [[ "$ddMode" == '1' ]]; then vKernel_udeb=$(wget --no-check-certificate -qO- "http://$DISTMirror/dists/$DIST/main/installer-$VER/current/images/udeb.list" |grep '^acpi-modules' |head -n1 |grep -o '[0-9]\{1,2\}.[0-9]\{1,2\}.[0-9]\{1,2\}-[0-9]\{1,2\}' |head -n1) [[ -z "vKernel_udeb" ]] && vKernel_udeb="3.16.0-6" fi fi [[ "$setNet" == '1' ]] && { IPv4="$ipAddr"; MASK="$ipMask"; GATE="$ipGate"; } || { 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" ]] || { echo "Not found \`ip command\`, It will use \`route command\`." 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)"; [[ -n "$GATE" ]] && [[ -n "$MASK" ]] && [[ -n "$IPv4" ]] || { echo "Error! Not configure network. "; exit 1; } } [[ "$setNet" != '1' ]] && [[ -f '/etc/network/interfaces' ]] && { [[ -z "$(sed -n '/iface.*inet static/p' /etc/network/interfaces)" ]] && AutoNet='1' || AutoNet='0'; [[ -d /etc/network/interfaces.d ]] && { ICFGN="$(find /etc/network/interfaces.d -name '*.cfg' |wc -l)" || ICFGN='0'; [[ "$ICFGN" -ne '0' ]] && { for NetCFG in `ls -1 /etc/network/interfaces.d/*.cfg` do [[ -z "$(cat $NetCFG | sed -n '/iface.*inet static/p')" ]] && AutoNet='1' || AutoNet='0'; [[ "$AutoNet" -eq '0' ]] && break; done } } } [[ "$setNet" != '1' ]] && [[ -d '/etc/sysconfig/network-scripts' ]] && { ICFGN="$(find /etc/sysconfig/network-scripts -name 'ifcfg-*' |grep -v 'lo'|wc -l)" || ICFGN='0'; [[ "$ICFGN" -ne '0' ]] && { for NetCFG in `ls -1 /etc/sysconfig/network-scripts/ifcfg-* |grep -v 'lo$' |grep -v ':[0-9]\{1,\}'` do [[ -n "$(cat $NetCFG | sed -n '/BOOTPROTO.*[dD][hH][cC][pP]/p')" ]] && AutoNet='1' || { AutoNet='0' && . $NetCFG; [[ -n $NETMASK ]] && MASK="$NETMASK"; [[ -n $GATEWAY ]] && GATE="$GATEWAY"; } [[ "$AutoNet" -eq '0' ]] && break; done } } if [[ "$loaderMode" == "0" ]]; then [[ ! -f $GRUBDIR/$GRUBFILE ]] && echo "Error! Not Found $GRUBFILE. " && exit 1; [[ ! -f $GRUBDIR/$GRUBFILE.old ]] && [[ -f $GRUBDIR/$GRUBFILE.bak ]] && mv -f $GRUBDIR/$GRUBFILE.bak $GRUBDIR/$GRUBFILE.old; mv -f $GRUBDIR/$GRUBFILE $GRUBDIR/$GRUBFILE.bak; [[ -f $GRUBDIR/$GRUBFILE.old ]] && cat $GRUBDIR/$GRUBFILE.old >$GRUBDIR/$GRUBFILE || cat $GRUBDIR/$GRUBFILE.bak >$GRUBDIR/$GRUBFILE; else GRUBVER='2' fi [[ "$GRUBVER" == '0' ]] && { READGRUB='/tmp/grub.read' cat $GRUBDIR/$GRUBFILE |sed -n '1h;1!H;$g;s/\n/%%%%%%%/g;$p' |grep -om 1 'menuentry\ [^{]*{[^}]*}%%%%%%%' |sed 's/%%%%%%%/\n/g' >$READGRUB LoadNum="$(cat $READGRUB |grep -c 'menuentry ')" if [[ "$LoadNum" -eq '1' ]]; then cat $READGRUB |sed '/^$/d' >/tmp/grub.new; elif [[ "$LoadNum" -gt '1' ]]; then CFG0="$(awk '/menuentry /{print NR}' $READGRUB|head -n 1)"; CFG2="$(awk '/menuentry /{print NR}' $READGRUB|head -n 2 |tail -n 1)"; CFG1=""; for tmpCFG in `awk '/}/{print NR}' $READGRUB` do [ "$tmpCFG" -gt "$CFG0" -a "$tmpCFG" -lt "$CFG2" ] && CFG1="$tmpCFG"; done [[ -z "$CFG1" ]] && { echo "Error! read $GRUBFILE. "; exit 1; } sed -n "$CFG0,$CFG1"p $READGRUB >/tmp/grub.new; [[ -f /tmp/grub.new ]] && [[ "$(grep -c '{' /tmp/grub.new)" -eq "$(grep -c '}' /tmp/grub.new)" ]] || { echo -ne "\033[31mError! \033[0mNot configure $GRUBFILE. \n"; exit 1; } fi [ ! -f /tmp/grub.new ] && echo "Error! $GRUBFILE. " && exit 1; sed -i "/menuentry.*/c\menuentry\ \'Install OS \[$DIST\ $VER\]\'\ --class debian\ --class\ gnu-linux\ --class\ gnu\ --class\ os\ \{" /tmp/grub.new sed -i "/echo.*Loading/d" /tmp/grub.new; INSERTGRUB="$(awk '/menuentry /{print NR}' $GRUBDIR/$GRUBFILE|head -n 1)" } [[ "$GRUBVER" == '1' ]] && { CFG0="$(awk '/title[\ ]|title[\t]/{print NR}' $GRUBDIR/$GRUBFILE|head -n 1)"; CFG1="$(awk '/title[\ ]|title[\t]/{print NR}' $GRUBDIR/$GRUBFILE|head -n 2 |tail -n 1)"; [[ -n $CFG0 ]] && [ -z $CFG1 -o $CFG1 == $CFG0 ] && sed -n "$CFG0,$"p $GRUBDIR/$GRUBFILE >/tmp/grub.new; [[ -n $CFG0 ]] && [ -z $CFG1 -o $CFG1 != $CFG0 ] && sed -n "$CFG0,$[$CFG1-1]"p $GRUBDIR/$GRUBFILE >/tmp/grub.new; [[ ! -f /tmp/grub.new ]] && echo "Error! configure append $GRUBFILE. " && exit 1; sed -i "/title.*/c\title\ \'Install OS \[$DIST\ $VER\]\'" /tmp/grub.new; sed -i '/^#/d' /tmp/grub.new; INSERTGRUB="$(awk '/title[\ ]|title[\t]/{print NR}' $GRUBDIR/$GRUBFILE|head -n 1)" } if [[ "$loaderMode" == "0" ]]; then [[ -n "$(grep 'linux.*/\|kernel.*/' /tmp/grub.new |awk '{print $2}' |tail -n 1 |grep '^/boot/')" ]] && Type='InBoot' || Type='NoBoot'; LinuxKernel="$(grep 'linux.*/\|kernel.*/' /tmp/grub.new |awk '{print $1}' |head -n 1)"; [[ -z "$LinuxKernel" ]] && echo "Error! read grub config! " && exit 1; LinuxIMG="$(grep 'initrd.*/' /tmp/grub.new |awk '{print $1}' |tail -n 1)"; [ -z "$LinuxIMG" ] && sed -i "/$LinuxKernel.*\//a\\\tinitrd\ \/" /tmp/grub.new && LinuxIMG='initrd'; if [[ "$setInterfaceName" == "1" ]]; then Add_OPTION="net.ifnames=0 biosdevname=0"; else Add_OPTION=""; fi if [[ "$setIPv6" == "1" ]]; then Add_OPTION="$Add_OPTION ipv6.disable=1"; fi if [[ "$linux_relese" == 'debian' ]] || [[ "$linux_relese" == 'ubuntu' ]]; then BOOT_OPTION="auto=true $Add_OPTION hostname=$linux_relese domain= -- quiet" elif [[ "$linux_relese" == 'centos' ]]; then BOOT_OPTION="ks=file://ks.cfg $Add_OPTION ksdevice=$IFETH" fi [[ "$Type" == 'InBoot' ]] && { sed -i "/$LinuxKernel.*\//c\\\t$LinuxKernel\\t\/boot\/vmlinuz $BOOT_OPTION" /tmp/grub.new; sed -i "/$LinuxIMG.*\//c\\\t$LinuxIMG\\t\/boot\/initrd.img" /tmp/grub.new; } [[ "$Type" == 'NoBoot' ]] && { sed -i "/$LinuxKernel.*\//c\\\t$LinuxKernel\\t\/vmlinuz $BOOT_OPTION" /tmp/grub.new; sed -i "/$LinuxIMG.*\//c\\\t$LinuxIMG\\t\/initrd.img" /tmp/grub.new; } sed -i '$a\\n' /tmp/grub.new; fi [[ "$inVNC" == 'n' ]] && { GRUBPATCH='0'; if [[ "$loaderMode" == "0" ]]; then [ -f '/etc/network/interfaces' -o -d '/etc/sysconfig/network-scripts' ] || { echo "Error, Not found interfaces config."; exit 1; } sed -i ''${INSERTGRUB}'i\\n' $GRUBDIR/$GRUBFILE; sed -i ''${INSERTGRUB}'r /tmp/grub.new' $GRUBDIR/$GRUBFILE; [[ -f $GRUBDIR/grubenv ]] && sed -i 's/saved_entry/#saved_entry/g' $GRUBDIR/grubenv; fi [[ -d /tmp/boot ]] && rm -rf /tmp/boot; mkdir -p /tmp/boot; cd /tmp/boot; if [[ "$linux_relese" == 'debian' ]] || [[ "$linux_relese" == 'ubuntu' ]]; then COMPTYPE="gzip"; elif [[ "$linux_relese" == 'centos' ]]; then COMPTYPE="$(file /boot/initrd.img |grep -o ':.*compressed data' |cut -d' ' -f2 |sed -r 's/(.*)/\L\1/' |head -n1)" [[ -z "$COMPTYPE" ]] && echo "Detect compressed type fail." && exit 1; fi CompDected='0' for ListCOMP in `echo -en 'gzip\nlzma\nxz'` do if [[ "$COMPTYPE" == "$ListCOMP" ]]; then CompDected='1' if [[ "$COMPTYPE" == 'gzip' ]]; then NewIMG="initrd.img.gz" else NewIMG="initrd.img.$COMPTYPE" fi mv -f "/boot/initrd.img" "/tmp/$NewIMG" break; fi done [[ "$CompDected" != '1' ]] && echo "Detect compressed type not support." && exit 1; [[ "$COMPTYPE" == 'lzma' ]] && UNCOMP='xz --format=lzma --decompress'; [[ "$COMPTYPE" == 'xz' ]] && UNCOMP='xz --decompress'; [[ "$COMPTYPE" == 'gzip' ]] && UNCOMP='gzip -d'; $UNCOMP < /tmp/$NewIMG | cpio --extract --verbose --make-directories --no-absolute-filenames >>/dev/null 2>&1 if [[ "$linux_relese" == 'debian' ]] || [[ "$linux_relese" == 'ubuntu' ]]; then cat >/tmp/boot/preseed.cfg<<EOF d-i debian-installer/locale string en_US d-i console-setup/layoutcode string us d-i keyboard-configuration/xkb-keymap string us d-i netcfg/choose_interface select $IFETH d-i netcfg/disable_autoconfig boolean true d-i netcfg/dhcp_failed note d-i netcfg/dhcp_options select Configure network manually d-i netcfg/get_ipaddress string $IPv4 d-i netcfg/get_netmask string $MASK d-i netcfg/get_gateway string $GATE d-i netcfg/get_nameservers string 8.8.8.8 d-i netcfg/no_default_route boolean true d-i netcfg/confirm_static boolean true d-i hw-detect/load_firmware boolean true d-i mirror/country string manual d-i mirror/http/hostname string $MirrorHost d-i mirror/http/directory string $MirrorFolder d-i mirror/http/proxy string d-i apt-setup/services-select multiselect d-i passwd/root-login boolean ture d-i passwd/make-user boolean false d-i passwd/root-password-crypted password $myPASSWORD d-i user-setup/allow-password-weak boolean true d-i user-setup/encrypt-home boolean false d-i clock-setup/utc boolean true d-i time/zone string US/Eastern d-i clock-setup/ntp boolean true d-i preseed/early_command string anna-install libfuse2-udeb fuse-udeb ntfs-3g-udeb fuse-modules-${vKernel_udeb}-amd64-di d-i partman/early_command string [[ -n "\$(blkid -t TYPE='vfat' -o device)" ]] && umount "\$(blkid -t TYPE='vfat' -o device)"; \ debconf-set partman-auto/disk "\$(list-devices disk |head -n1)"; \ wget -qO- '$DDURL' |gunzip -dc |/bin/dd of=\$(list-devices disk |head -n1); \ mount.ntfs-3g \$(list-devices partition |head -n1) /mnt; \ cd '/mnt/ProgramData/Microsoft/Windows/Start Menu/Programs'; \ cd Start* || cd start*; \ cp -f '/net.bat' './net.bat'; \ /sbin/reboot; \ debconf-set grub-installer/bootdev string "\$(list-devices disk |head -n1)"; \ umount /media || true; \ d-i partman/mount_style select uuid d-i partman-auto/init_automatically_partition select Guided - use entire disk d-i partman-auto/choose_recipe select All files in one partition (recommended for new users) d-i partman-auto/method string regular d-i partman-lvm/device_remove_lvm boolean true d-i partman-md/device_remove_md boolean true d-i partman-auto/choose_recipe select atomic d-i partman-partitioning/confirm_write_new_label boolean true d-i partman/choose_partition select finish d-i partman-lvm/confirm boolean true d-i partman-lvm/confirm_nooverwrite boolean true d-i partman/confirm boolean true d-i partman/confirm_nooverwrite boolean true d-i debian-installer/allow_unauthenticated boolean true tasksel tasksel/first multiselect minimal d-i pkgsel/update-policy select none d-i pkgsel/include string openssh-server d-i pkgsel/upgrade select none popularity-contest popularity-contest/participate boolean false d-i grub-installer/only_debian boolean true d-i grub-installer/bootdev string default d-i grub-installer/force-efi-extra-removable boolean true d-i finish-install/reboot_in_progress note d-i debian-installer/exit/reboot boolean true d-i preseed/late_command string \ sed -ri 's/^#?PermitRootLogin.*/PermitRootLogin yes/g' /target/etc/ssh/sshd_config; \ sed -ri 's/^#?PasswordAuthentication.*/PasswordAuthentication yes/g' /target/etc/ssh/sshd_config; EOF [[ "$loaderMode" != "0" ]] && AutoNet='1' [[ "$setNet" == '0' ]] && [[ "$AutoNet" == '1' ]] && { sed -i '/netcfg\/disable_autoconfig/d' /tmp/boot/preseed.cfg sed -i '/netcfg\/dhcp_options/d' /tmp/boot/preseed.cfg sed -i '/netcfg\/get_.*/d' /tmp/boot/preseed.cfg sed -i '/netcfg\/confirm_static/d' /tmp/boot/preseed.cfg } [[ "$DIST" == 'trusty' ]] && GRUBPATCH='1' [[ "$DIST" == 'wily' ]] && GRUBPATCH='1' [[ "$DIST" == 'xenial' ]] && { sed -i 's/^d-i\ clock-setup\/ntp\ boolean\ true/d-i\ clock-setup\/ntp\ boolean\ false/g' /tmp/boot/preseed.cfg } [[ "$GRUBPATCH" == '1' ]] && { sed -i 's/^d-i\ grub-installer\/bootdev\ string\ default//g' /tmp/boot/preseed.cfg } [[ "$GRUBPATCH" == '0' ]] && { sed -i 's/debconf-set\ grub-installer\/bootdev.*\"\;//g' /tmp/boot/preseed.cfg } [[ "$linux_relese" == 'debian' ]] && { sed -i '/user-setup\/allow-password-weak/d' /tmp/boot/preseed.cfg sed -i '/user-setup\/encrypt-home/d' /tmp/boot/preseed.cfg sed -i '/pkgsel\/update-policy/d' /tmp/boot/preseed.cfg sed -i 's/umount\ \/media.*true\;\ //g' /tmp/boot/preseed.cfg } [[ "$linux_relese" == 'debian' ]] && [[ -f '/boot/firmware.cpio.gz' ]] && { gzip -d < /boot/firmware.cpio.gz | cpio --extract --verbose --make-directories --no-absolute-filenames >>/dev/null 2>&1 } [[ "$ddMode" == '1' ]] && { WinNoDHCP(){ echo -ne "for\0040\0057f\0040\0042tokens\00753\0052\0042\0040\0045\0045i\0040in\0040\0050\0047netsh\0040interface\0040show\0040interface\0040\0136\0174more\0040\00533\0040\0136\0174findstr\0040\0057I\0040\0057R\0040\0042本地\0056\0052\0040以太\0056\0052\0040Local\0056\0052\0040Ethernet\0042\0047\0051\0040do\0040\0050set\0040EthName\0075\0045\0045j\0051\r\nnetsh\0040\0055c\0040interface\0040ip\0040set\0040address\0040name\0075\0042\0045EthName\0045\0042\0040source\0075static\0040address\0075$IPv4\0040mask\0075$MASK\0040gateway\0075$GATE\r\nnetsh\0040\0055c\0040interface\0040ip\0040add\0040dnsservers\0040name\0075\0042\0045EthName\0045\0042\0040address\00758\00568\00568\00568\0040index\00751\0040validate\0075no\r\n\r\n" >>'/tmp/boot/net.tmp'; } WinRDP(){ echo -ne "netsh\0040firewall\0040set\0040portopening\0040protocol\0075ALL\0040port\0075$WinRemote\0040name\0075RDP\0040mode\0075ENABLE\0040scope\0075ALL\0040profile\0075ALL\r\nnetsh\0040firewall\0040set\0040portopening\0040protocol\0075ALL\0040port\0075$WinRemote\0040name\0075RDP\0040mode\0075ENABLE\0040scope\0075ALL\0040profile\0075CURRENT\r\nreg\0040add\0040\0042HKLM\0134SYSTEM\0134CurrentControlSet\0134Control\0134Network\0134NewNetworkWindowOff\0042\0040\0057f\r\nreg\0040add\0040\0042HKLM\0134SYSTEM\0134CurrentControlSet\0134Control\0134Terminal\0040Server\0042\0040\0057v\0040fDenyTSConnections\0040\0057t\0040reg\0137dword\0040\0057d\00400\0040\0057f\r\nreg\0040add\0040\0042HKLM\0134SYSTEM\0134CurrentControlSet\0134Control\0134Terminal\0040Server\0134Wds\0134rdpwd\0134Tds\0134tcp\0042\0040\0057v\0040PortNumber\0040\0057t\0040reg\0137dword\0040\0057d\0040$WinRemote\0040\0057f\r\nreg\0040add\0040\0042HKLM\0134SYSTEM\0134CurrentControlSet\0134Control\0134Terminal\0040Server\0134WinStations\0134RDP\0055Tcp\0042\0040\0057v\0040PortNumber\0040\0057t\0040reg\0137dword\0040\0057d\0040$WinRemote\0040\0057f\r\nreg\0040add\0040\0042HKLM\0134SYSTEM\0134CurrentControlSet\0134Control\0134Terminal\0040Server\0134WinStations\0134RDP\0055Tcp\0042\0040\0057v\0040UserAuthentication\0040\0057t\0040reg\0137dword\0040\0057d\00400\0040\0057f\r\nFOR\0040\0057F\0040\0042tokens\00752\0040delims\0075\0072\0042\0040\0045\0045i\0040in\0040\0050\0047SC\0040QUERYEX\0040TermService\0040\0136\0174FINDSTR\0040\0057I\0040\0042PID\0042\0047\0051\0040do\0040TASKKILL\0040\0057F\0040\0057PID\0040\0045\0045i\r\nFOR\0040\0057F\0040\0042tokens\00752\0040delims\0075\0072\0042\0040\0045\0045i\0040in\0040\0050\0047SC\0040QUERYEX\0040UmRdpService\0040\0136\0174FINDSTR\0040\0057I\0040\0042PID\0042\0047\0051\0040do\0040TASKKILL\0040\0057F\0040\0057PID\0040\0045\0045i\r\nSC\0040START\0040TermService\r\n\r\n" >>'/tmp/boot/net.tmp'; } echo -ne "\0100ECHO\0040OFF\r\n\r\ncd\0056\0076\0045WINDIR\0045\0134GetAdmin\r\nif\0040exist\0040\0045WINDIR\0045\0134GetAdmin\0040\0050del\0040\0057f\0040\0057q\0040\0042\0045WINDIR\0045\0134GetAdmin\0042\0051\0040else\0040\0050\r\necho\0040CreateObject\0136\0050\0042Shell\0056Application\0042\0136\0051\0056ShellExecute\0040\0042\0045\0176s0\0042\0054\0040\0042\0045\0052\0042\0054\0040\0042\0042\0054\0040\0042runas\0042\0054\00401\0040\0076\0076\0040\0042\0045temp\0045\0134Admin\0056vbs\0042\r\n\0042\0045temp\0045\0134Admin\0056vbs\0042\r\ndel\0040\0057f\0040\0057q\0040\0042\0045temp\0045\0134Admin\0056vbs\0042\r\nexit\0040\0057b\00402\0051\r\n\r\n" >'/tmp/boot/net.tmp'; [[ "$setNet" == '1' ]] && WinNoDHCP; [[ "$setNet" == '0' ]] && [[ "$AutoNet" == '0' ]] && WinNoDHCP; [[ "$setRDP" == '1' ]] && [[ -n "$WinRemote" ]] && WinRDP echo -ne "ECHO\0040SELECT\0040VOLUME\0075\0045\0045SystemDrive\0045\0045\0040\0076\0040\0042\0045SystemDrive\0045\0134diskpart\0056extend\0042\r\nECHO\0040EXTEND\0040\0076\0076\0040\0042\0045SystemDrive\0045\0134diskpart\0056extend\0042\r\nSTART\0040/WAIT\0040DISKPART\0040\0057S\0040\0042\0045SystemDrive\0045\0134diskpart\0056extend\0042\r\nDEL\0040\0057f\0040\0057q\0040\0042\0045SystemDrive\0045\0134diskpart\0056extend\0042\r\n\r\n" >>'/tmp/boot/net.tmp'; echo -ne "cd\0040\0057d\0040\0042\0045ProgramData\0045\0057Microsoft\0057Windows\0057Start\0040Menu\0057Programs\0057Startup\0042\r\ndel\0040\0057f\0040\0057q\0040net\0056bat\r\n\r\n\r\n" >>'/tmp/boot/net.tmp'; iconv -f 'UTF-8' -t 'GBK' '/tmp/boot/net.tmp' -o '/tmp/boot/net.bat' rm -rf '/tmp/boot/net.tmp' echo "$DDURL" |grep -q '^https://' [[ $? -eq '0' ]] && { echo -ne '\nAdd ssl support...\n' [[ -n $SSL_SUPPORT ]] && { wget --no-check-certificate -qO- "$SSL_SUPPORT" |tar -x [[ ! -f /tmp/boot/usr/bin/wget ]] && echo 'Error! SSL_SUPPORT.' && exit 1; sed -i 's/wget\ -qO-/\/usr\/bin\/wget\ --no-check-certificate\ --retry-connrefused\ --tries=7\ --continue\ -qO-/g' /tmp/boot/preseed.cfg [[ $? -eq '0' ]] && echo -ne 'Success! \n\n' } || { echo -ne 'Not ssl support package! \n\n'; exit 1; } } } [[ "$ddMode" == '0' ]] && { sed -i '/anna-install/d' /tmp/boot/preseed.cfg sed -i 's/wget.*\/sbin\/reboot\;\ //g' /tmp/boot/preseed.cfg } elif [[ "$linux_relese" == 'centos' ]]; then cat >/tmp/boot/ks.cfg<<EOF #platform=x86, AMD64, or Intel EM64T firewall --enabled --ssh install url --url="$LinuxMirror/$DIST/os/$VER/" rootpw --iscrypted $myPASSWORD auth --useshadow --passalgo=sha512 firstboot --disable lang en_US keyboard us selinux --disabled logging --level=info reboot text unsupported_hardware vnc skipx timezone --isUtc Asia/Hong_Kong #ONDHCP network --bootproto=dhcp --onboot=on #NODHCP network --bootproto=static --ip=$IPv4 --netmask=$MASK --gateway=$GATE --nameserver=8.8.8.8 --onboot=on bootloader --location=mbr --append="rhgb quiet crashkernel=auto" zerombr clearpart --all --initlabel autopart %packages @base %end %post --interpreter=/bin/bash rm -rf /root/anaconda-ks.cfg rm -rf /root/install.*log %end EOF [[ "$setNet" == '0' ]] && [[ "$AutoNet" == '1' ]] && { sed -i 's/#ONDHCP\ //g' /tmp/boot/ks.cfg } || { sed -i 's/#NODHCP\ //g' /tmp/boot/ks.cfg } [[ "$UNKNOWHW" == '1' ]] && sed -i 's/^unsupported_hardware/#unsupported_hardware/g' /tmp/boot/ks.cfg [[ "$(echo "$DIST" |grep -o '^[0-9]\{1\}')" == '5' ]] && sed -i '0,/^%end/s//#%end/' /tmp/boot/ks.cfg fi find . | cpio -H newc --create --verbose | gzip -9 > /boot/initrd.img; rm -rf /tmp/boot; } [[ "$inVNC" == 'y' ]] && { sed -i '$i\\n' $GRUBDIR/$GRUBFILE sed -i '$r /tmp/grub.new' $GRUBDIR/$GRUBFILE echo -e "\n\033[33m\033[04mIt will reboot! \nPlease connect VNC! \nSelect\033[0m\033[32m Install OS [$DIST $VER] \033[33m\033[4mto install system.\033[04m\n\n\033[31m\033[04mThere is some information for you.\nDO NOT CLOSE THE WINDOW! \033[0m\n" echo -e "\033[35mIPv4\t\tNETMASK\t\tGATEWAY\033[0m" echo -e "\033[36m\033[04m$IPv4\033[0m\t\033[36m\033[04m$MASK\033[0m\t\033[36m\033[04m$GATE\033[0m\n\n" read -n 1 -p "Press Enter to reboot..." INP [[ "$INP" != '' ]] && echo -ne '\b \n\n'; } chown root:root $GRUBDIR/$GRUBFILE chmod 444 $GRUBDIR/$GRUBFILE if [[ "$loaderMode" == "0" ]]; then sleep 3 && reboot >/dev/null 2>&1 else rm -rf "$HOME/loader" mkdir -p "$HOME/loader" cp -rf "/boot/initrd.img" "$HOME/loader/initrd.img" cp -rf "/boot/vmlinuz" "$HOME/loader/vmlinuz" [[ -f "/boot/initrd.img" ]] && rm -rf "/boot/initrd.img" [[ -f "/boot/vmlinuz" ]] && rm -rf "/boot/vmlinuz" echo && ls -AR1 "$HOME/loader" fi