整合型Archlinux安裝Script - 3.arch.sh說明

使用前

  • 先確認用LiveCD開起來的系統有網路

  • host raw.githubusercontent.com確認是否可以連上script,不行的話請設定/etc/hosts或DNS設定

  • Script的直接位置如下:

    https://Kiwi0093.github.io/script/Arch/arch.sh

  • 可以手動設定網路(若網路沒有DCHP可以跑的話)

1
2
3
#利用ip指令設定網路連線
ip address add $YOUR_IP/24 dev $your_dev
ip route add default $Gateway_IP dev $your_dev

Script內容

Script內容說明

基本定義

1
2
3
4
5
6
7
8
9
10
11
#!/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

警示標語

1
2
3
4
5
6
7
8
#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加上警示標語,並且加上版號管控

設定時區

1
2
3
4
#start ntp
echo -e "${COLOR1}Starting NTP Service${NC}"
timedatectl set-ntp true
echo -e "${COLOR2}NTP Setup Completed${NC}"

設定Mirror list

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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的系統格式,喜歡的話可以自己改成自己喜歡的方式進行

安裝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#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

1
2
3
4
#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的設定到新系統

1
2
3
4
#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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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與離開後自動重開機

1
2
3
4
5
echo -e "${COLOR2}Finished Installation, will reboot, Good luck${NC}"

# Reboot
echo -e "${COLOR2}Rebooting...${NC}"
reboot

完整內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#!/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