整合型Archlinux安裝Script - 3.arch.sh說明
這整個系列,都因為archinstall這個工具的出現而整個廢掉,留這些主要還是一個紀念
使用前
-
先確認用LiveCD開起來的系統有網路
-
用
host raw.githubusercontent.com確認是否可以連上script,不行的話請設定/etc/hosts或DNS設定 -
Script的直接位置如下:
-
可以手動設定網路(若網路沒有DCHP可以跑的話)
#利用ip指令設定網路連線
ip address add $YOUR_IP/24 dev $your_dev
ip route add default $Gateway_IP dev $your_dev
Script內容
Script內容說明
基本定義
#!/bin/sh
#Parmeter Pre-Define
#Color for warning
COLOR_W='\e[35m'
#Color for description
COLOR1='\e[94m'
COLOR2='\e[32m'
# Color for Highlight package
COLOR_H1='\e[96m'
COLOR_H2='\e[34m'
NC='\e[0m'
這個script default只有顯示顏色是寫死的,可以參考Script語法說明裡面的說明修改顏色,或是自己修改的時候增加變數設定
*Update 2021/06/15 修改為四色,同Manjaro script
警示標語
#Notice before use
echo -e "${COLOR_W}=====================Warning=======================\n${NC}"
echo -e "${COLOR_W}= Kiwi's Arch linux Auto install script Ver.1.1 =\n${NC}"
echo -e "${COLOR_W}= This Script for Kiwi private use. =\n${NC}"
echo -e "${COLOR_W}= If you have any issue on usage, =\n${NC}"
echo -e "${COLOR_W}= Please DON'T Feedback to Kiwi =\n${NC}"
echo -e "${COLOR_W}= And you should take your own responsibility =\n${NC}"
echo -e "${COLOR_W}===================================================\n${NC}"
同Manjaro script加上警示標語,並且加上版號管控
設定時區
#start ntp
echo -e "${COLOR1}Starting NTP Service${NC}"
timedatectl set-ntp true
echo -e "${COLOR2}NTP Setup Completed${NC}"
設定Mirror list
#Modify Mirrorlist to setting country
echo -n "${COLOR1}Please Select the country you want to set for mirror list\n${NC}${COLOR_H1}C)China\nT)Taiwan\n*)whatever..I don't care\n${NC}"
while :
do
read COUNTRY
case $COUNTRY in
C)
echo -e "${COLOR2}Set China${NC}"
sed -i '/Score/{/China/!{n;s/^/#/}}' /etc/pacman.d/mirrorlist
break
;;
T)
echo -e "${COLOR2}SetTaiwan${NC}"
sed -i '/Score/{/Taiwan/!{n;s/^/#/}}' /etc/pacman.d/mirrorlist
break
;;
*)
echo -e "${COLOR2}Keep original Setting${NC}"
break
;;
esac
done
echo -e "${COLOR2}Completed${NC}"
由於Archlinux內建沒有pacman-mirrors指令可以使用,所以只能採用官方的方式用sed去處理/etc/pacman.d/mirrorlist達到設定mirror list的內容
後面加上的pacman -Syyu主要是用來更新mirror list的使用所下的指令
*Update 2021/06/15 選項全數加上顏色tag增加目視辨識度
Fdisk & Mount
#Fdisk
echo -e "${COLOR1}Partition your HDD please create sda1 for Data and sda2 for Swap.${NC}"
fdisk /dev/sda
echo -e "${COLOR2}Partition Setup Completed${NC}"
#Format
echo -e "${COLOR1}Format /dev/sda1 as EXT4 format${NC}"
mkfs.ext4 /dev/sda1
echo -e "${COLOR2}EXT4 formatting Completed${NC}"
echo -e "${COLOR1}Format /dev/sda2 as Linux Swap${NC}"
mkswap /dev/sda2
echo -e "${COLOR2}Swap Formatting Completed${NC}"
echo -e "${COLOR1}Mount /dev/sda1 to /mnt${NC}"
mount /dev/sda1 /mnt
echo -e "${COLOR2}Completed${NC}"
echo -e "${COLOR1}Mount Swap${NC}"
swapon /dev/sda2
echo -e "${COLOR2}Completed${NC}"
這裡是為什麼這個script無法成為萬用script的主要原因之一,因為這裡的format部份寫死了HDD分割後的定義與mount,使其失去彈性
加以因為所有使用這個script的場合都是在VMware ESXi下安裝Archlinux guest的關係,所以採用簡單的fdisk取代其他類型分割軟體,也是在這裡等於限死了後面的grub得安裝在MBR內而非現在流行的UFEI
script中採用最常見但是效率不是最好的ext4格式作為這個archlinux的系統格式,喜歡的話可以自己改成自己喜歡的方式進行
安裝
#Install
echo -e "${COLOR1}Starting Install Archlinux into /mnt${NC}"
echo -e "${COLOR1}Please select your CPU vendor and Linux Kernel you want:\n${NC}${COLOR_H1}1)Intel+Linux\n2)Intel+Linux-LTS\n3)Amd+Linux\n4)Amd+Linux-LTS\n5)Linux-LTS Kernel\n*)Whatever, Normal Linux Kernel is good enough to me\n${NC}"
while :
do
read CPU
case $CPU in
1)
echo -e "${COLOR2}Linux Kernel+Intel${NC}"
pacman -Syyu
pacstrap /mnt base linux linux-firmware vim zsh curl netctl intel-ucode grub dnsutils open-vm-tools vim net-tools openssh
break
;;
2)
echo -e "${COLOR2}Linux-LTS Kernel+Intel${NC}"
pacman -Syyu
pacstrap /mnt base linux-lts linux-firmware vim zsh curl netctl intel-ucode grub dnsutils open-vm-tools vim net-tools openssh
break
;;
3)
echo -e "${COLOR2}Linux Kernel+Amd${NC}"
pacman -Syyu
pacstrap /mnt base linux linux-firmware vim zsh curl netctl amd-ucode grub dnsutils open-vm-tools vim net-tools openssh
break
;;
4)
echo -e "${COLOR2}Linux-LTS Kernel+Amd${NC}"
pacman -Syyu
pacstrap /mnt base linux-lts linux-firmware vim zsh curl netctl amd-ucode grub dnsutils open-vm-tools vim net-tools openssh
break
;;
5)
echo -e "${COLOR2}Linux-LTS Kernel${NC}"
pacman -Syyu
pacstrap /mnt base linux-lts linux-firmware vim zsh curl netctl grub dnsutils open-vm-tools vim net-tools openssh
break
;;
*)
echo -e "${COLOR2}Linux Kernel${NC}"
pacman -Syyu
pacstrap /mnt base linux linux-firmware vim zsh curl netctl grub dnsutils open-vm-tools vim net-tools openssh
break
;;
esac
done
echo -e "${COLOR2}Completed${NC}"
因為這個安裝動作是在Live CD的系統內替HDD安裝package,所以不能用pacman指令只能用pacstrap指令package安裝到指定的位置去
pacstrap /<location> package1 package2 ....
我們可以利用這個指令把本來要到archchroot內才安裝的程式中的共用部份直接放在這裡直接跑就好了,目前還沒實驗過全部的程式都放在這個地方跑,但是應該部會影響systemd的運作
替新系統建立fstab
#fstab
echo -e "${COLOR1}Starting Gernerate fstab${NC}"
genfstab -U -p /mnt >> /mnt/etc/fstab
echo -e "${COLOR2}Completed${NC}"
因為Archlinux沒有一個所謂的安裝程式會在HDD分割後自動建立fstab到新系統內,所以會使用genfstab指令建立後直接送到HDD內的*/etc/*內
Copy zsh的設定到新系統
#Copy Zsh
echo -e "${COLOR1}Starting Copy ZSH setting file to new Archlinux${NC}"
cp -Rv /etc/zsh /mnt/etc/
echo -e "${COLOR2}Completed${NC}"
因為我個人蠻喜歡Arch linux Live CD裡面預設的zshrc設定風格,所以就乾脆在安裝的時候會自動copy設定檔,以後所有透過這個安裝的Arch linux就可以有統一個shell sytle.
選擇fetch哪一個安裝script並且進入arch-root
echo -n "${COLOR1}Please select which type you want${NC}${COLOR_H1}\na)Simple Server\nb)Nextcloud Server\nc)V2Ray Server\nd)V2Ray Gateway\n*)I'm the best! let me do by my own!!\n${NC}"
while :
do
read SCRIPT
case $SCRIPT in
a)
echo -e "${COLOR2}Simple Arch Linux${NC}"
arch-chroot /mnt /bin/zsh <(curl -L -s https://Kiwi0093.github.io/script/simple_arch.sh)
break
;;
b)
echo -e "${COLOR2}Nextcloud Server${NC}"
arch-chroot /mnt /bin/zsh <(curl -L -s https://Kiwi0093.github.io/script/nextc_arch.sh)
break
;;
c)
echo -e "${COLOR2}V2Ray Server${NC}"
arch-chroot /mnt /bin/zsh <(curl -L -s https://Kiwi0093.github.io/script/arch_v2ray.sh)
break
;;
d)
echo -e "${COLOR2}V2Ray Gateway${NC}"
arch-chroot /mnt /bin/zsh <(curl -L -s https://Kiwi0093.github.io/script/arch_v2ray_gate.sh)
break
;;
*)
echo -e "${COLOR2}Yes! you're the chosen one!${NC}"
arch-root /mnt /bin/zsh
break
;;
esac
done
由於Arch linux的安裝邏輯是
先在Live CD的OS內對HDD進行處理,然後把透過網路把新的archlinux的系統裝進HDD內,然後chroot到新的系統內,利用新的系統的東西,進行初步的設定與啟動設定等動作,最後再完全退出重開改以HDD進行開機這樣算是完成了一個新的系統的安裝
所以做成選項自動在進入arch-chroot後執行該跑得script,或是空的進入arch-chroot後讓人自己處理
*Update 2021/06/15 刪除Kiwi's Private Router選項,因為用不到了
進入Arch-chroot與離開後自動重開機
echo -e "${COLOR2}Finished Installation, will reboot, Good luck${NC}"
# Reboot
echo -e "${COLOR2}Rebooting...${NC}"
reboot
完整內容
#!/bin/sh
#Parmeter Pre-Define
#Color for warning
COLOR_W='\e[35m'
#Color for description
COLOR1='\e[94m'
COLOR2='\e[32m'
# Color for Highlight package
COLOR_H1='\e[96m'
COLOR_H2='\e[34m'
NC='\e[0m'
#Notice before use
echo -e "${COLOR_W}=====================Warning=======================\n${NC}"
echo -e "${COLOR_W}= Kiwi's Arch linux Auto install script Ver.1.1 =\n${NC}"
echo -e "${COLOR_W}= This Script for Kiwi private use. =\n${NC}"
echo -e "${COLOR_W}= If you have any issue on usage, =\n${NC}"
echo -e "${COLOR_W}= Please DON'T Feedback to Kiwi =\n${NC}"
echo -e "${COLOR_W}= And you should take your own responsibility =\n${NC}"
echo -e "${COLOR_W}===================================================\n${NC}"
#start ntp
echo -e "${COLOR1}Starting NTP Service${NC}"
timedatectl set-ntp true
echo -e "${COLOR2}NTP Setup Completed${NC}"
#Modify Mirrorlist to setting country
echo -n "${COLOR1}Please Select the country you want to set for mirror list\n${NC}${COLOR_H1}C)China\nT)Taiwan\n*)whatever..I don't care\n${NC}"
while :
do
read COUNTRY
case $COUNTRY in
C)
echo -e "${COLOR2}Set China${NC}"
sed -i '/Score/{/China/!{n;s/^/#/}}' /etc/pacman.d/mirrorlist
break
;;
T)
echo -e "${COLOR2}SetTaiwan${NC}"
sed -i '/Score/{/Taiwan/!{n;s/^/#/}}' /etc/pacman.d/mirrorlist
break
;;
*)
echo -e "${COLOR2}Keep original Setting${NC}"
break
;;
esac
done
echo -e "${COLOR2}Completed${NC}"
#Fdisk
echo -e "${COLOR1}Partition your HDD please create sda1 for Data and sda2 for Swap.${NC}"
fdisk /dev/sda
echo -e "${COLOR2}Partition Setup Completed${NC}"
#Format
echo -e "${COLOR1}Format /dev/sda1 as EXT4 format${NC}"
mkfs.ext4 /dev/sda1
echo -e "${COLOR2}EXT4 formatting Completed${NC}"
echo -e "${COLOR1}Format /dev/sda2 as Linux Swap${NC}"
mkswap /dev/sda2
echo -e "${COLOR2}Swap Formatting Completed${NC}"
echo -e "${COLOR1}Mount /dev/sda1 to /mnt${NC}"
mount /dev/sda1 /mnt
echo -e "${COLOR2}Completed${NC}"
echo -e "${COLOR1}Mount Swap${NC}"
swapon /dev/sda2
echo -e "${COLOR2}Completed${NC}"
#Install
echo -e "${COLOR1}Starting Install Archlinux into /mnt${NC}"
echo -e "${COLOR1}Please select your CPU vendor and Linux Kernel you want:\n${NC}${COLOR_H1}1)Intel+Linux\n2)Intel+Linux-LTS\n3)Amd+Linux\n4)Amd+Linux-LTS\n5)Linux-LTS Kernel\n*)Whatever, Normal Linux Kernel is good enough to me\n${NC}"
while :
do
read CPU
case $CPU in
1)
echo -e "${COLOR2}Linux Kernel+Intel${NC}"
pacman -Syyu
pacstrap /mnt base linux linux-firmware vim zsh curl netctl intel-ucode grub dnsutils open-vm-tools vim net-tools openssh
break
;;
2)
echo -e "${COLOR2}Linux-LTS Kernel+Intel${NC}"
pacman -Syyu
pacstrap /mnt base linux-lts linux-firmware vim zsh curl netctl intel-ucode grub dnsutils open-vm-tools vim net-tools openssh
break
;;
3)
echo -e "${COLOR2}Linux Kernel+Amd${NC}"
pacman -Syyu
pacstrap /mnt base linux linux-firmware vim zsh curl netctl amd-ucode grub dnsutils open-vm-tools vim net-tools openssh
break
;;
4)
echo -e "${COLOR2}Linux-LTS Kernel+Amd${NC}"
pacman -Syyu
pacstrap /mnt base linux-lts linux-firmware vim zsh curl netctl amd-ucode grub dnsutils open-vm-tools vim net-tools openssh
break
;;
5)
echo -e "${COLOR2}Linux-LTS Kernel${NC}"
pacman -Syyu
pacstrap /mnt base linux-lts linux-firmware vim zsh curl netctl grub dnsutils open-vm-tools vim net-tools openssh
break
;;
*)
echo -e "${COLOR2}Linux Kernel${NC}"
pacman -Syyu
pacstrap /mnt base linux linux-firmware vim zsh curl netctl grub dnsutils open-vm-tools vim net-tools openssh
break
;;
esac
done
echo -e "${COLOR2}Completed${NC}"
#fstab
echo "${COLOR1}Starting Gernerate fstab${NC}"
genfstab -U -p /mnt >> /mnt/etc/fstab
echo -e "${COLOR2}Completed${NC}"
#Copy Zsh
echo "${COLOR1}Starting Copy ZSH setting file to new Archlinux${NC}"
cp -Rv /etc/zsh /mnt/etc/
echo -e "${COLOR2}Completed${NC}"
echo -n "${COLOR1}Please select which type you want${NC}${COLOR_H1}\na)Simple Server\nb)Nextcloud Server\nc)V2Ray Server\nd)V2Ray Gateway\n*)I'm the best! let me do by my own!!\n${NC}"
while :
do
read SCRIPT
case $SCRIPT in
a)
echo -e "${COLOR2}Simple Arch Linux${NC}"
arch-chroot /mnt /bin/zsh <(curl -L -s https://Kiwi0093.github.io/script/simple_arch.sh)
break
;;
b)
echo -e "${COLOR2}Nextcloud Server${NC}"
arch-chroot /mnt /bin/zsh <(curl -L -s https://Kiwi0093.github.io/script/nextc_arch.sh)
break
;;
c)
echo -e "${COLOR2}V2Ray Server${NC}"
arch-chroot /mnt /bin/zsh <(curl -L -s https://Kiwi0093.github.io/script/arch_v2ray.sh)
break
;;
d)
echo -e "${COLOR2}V2Ray Gateway${NC}"
arch-chroot /mnt /bin/zsh <(curl -L -s https://Kiwi0093.github.io/script/arch_v2ray_gate.sh)
break
;;
*)
echo -e "${COLOR2}Yes! you're the chosen one!${NC}"
arch-root /mnt /bin/zsh
break
;;
esac
done
echo -e "${COLOR2}Finished Installation, will reboot, Good luck${NC}"
# Reboot
echo -e "${COLOR2}Rebooting...${NC}"
reboot