]> glassweightruler.freedombox.rocks Git - Ventoy.git/blob - LiveCD/VTOY/ventoy/ventoy.sh
keep up with 1.0.67 (#1464)
[Ventoy.git] / LiveCD / VTOY / ventoy / ventoy.sh
1 #!/bin/sh
2
3 info() {
4 echo -e "\033[32m$*\033[0m"
5 }
6
7 warn() {
8 echo -e "\033[33m$*\033[0m"
9 }
10
11 err() {
12 echo -e "\033[31m$*\033[0m"
13 }
14
15 get_disk_size() {
16 sec=$(cat /sys/block/$1/size)
17 /ventoy/disksize $sec
18 }
19
20 enum_disk() {
21 id=1
22 rm -f /device.list
23 ls /sys/block/ | egrep 'd[a-z]|nvme|mmc|nbd' | while read dev; do
24 if ! [ -b /dev/$dev ]; then
25 continue
26 fi
27
28 size=$(get_disk_size $dev)
29 model=$(parted -s /dev/$dev p 2>/dev/null | grep Model | sed 's/Model: \(.*\)/\1/')
30 printf " <%d> %-4s %3s GB %s\r\n" $id "$dev" "$size" "$model" >> /device.list
31 id=$(expr $id + 1)
32 done
33 }
34
35 select_disk() {
36
37 echo "" > /dev/console
38 echo "" > /dev/console
39
40 if [ -f /device.list ]; then
41 lines=$(cat /device.list | wc -l)
42 cat /device.list > /dev/console
43 else
44 echo -e "\033[31m !!! NO device detected !!!\033[0m" > /dev/console
45 lines=0
46 fi
47
48 echo "" > /dev/console
49 echo " <a> Refresh device list <b> Reboot <c> Enter shell" > /dev/console
50 echo "" > /dev/console
51
52 while true; do
53
54 if [ $lines -gt 0 ]; then
55 read -p "Please select the disk to operator [1-$lines] " Answer
56 else
57 read -p "Please choose your operation [a-c] " Answer
58 fi
59
60 if [ "$Answer" = "shell" ]; then
61 echo 8888; return
62 elif [ "$Answer" = "c" ] || [ "$Answer" = "C" ]; then
63 echo 8888; return
64 fi
65
66 if [ "$Answer" = "a" ] || [ "$Answer" = "A" ]; then
67 echo 0; return
68 elif [ "$Answer" = "b" ] || [ "$Answer" = "B" ]; then
69 read -p "Do you really want to reboot? (y/n) " Ask
70 if [ "$Ask" = "y" ] || [ "$Ask" = "Y" ]; then
71 reboot
72 else
73 continue
74 fi
75 fi
76
77 if [ -n "$Answer" ]; then
78 if echo $Answer | grep -q "^[1-9][0-9]*$"; then
79 if [ $Answer -gt 0 ] && [ $Answer -le $lines ]; then
80 echo $Answer
81 return
82 fi
83 fi
84 fi
85 done
86 }
87
88 get_dev_ventoy_ver() {
89 if ! [ -b /dev/${1}2 ]; then
90 echo "NO"; return
91 fi
92
93 mount -t vfat -o ro /dev/${1}2 /ventoy/mnt >/dev/null 2>/dev/null
94 if [ -e /ventoy/mnt/ventoy ] && [ -f /ventoy/mnt/grub/grub.cfg ]; then
95 if grep -q 'set.*VENTOY_VERSION=' /ventoy/mnt/grub/grub.cfg; then
96 grep 'set.*VENTOY_VERSION=' /ventoy/mnt/grub/grub.cfg | awk -F'"' '{print $2}'
97 else
98 echo 'NO'
99 fi
100
101 umount /ventoy/mnt
102 return
103 fi
104
105 echo "NO"
106 }
107
108 ventoy_configuration() {
109 while true; do
110
111 if [ -f /preserve.txt ]; then
112 SPACE=$(cat /preserve.txt)
113 else
114 SPACE=0
115 fi
116
117 if [ -f /secureboot.txt ]; then
118 SECURE=$(cat /secureboot.txt)
119 else
120 SECURE=Disable
121 fi
122
123 if [ -f /partstyle.txt ]; then
124 STYLE=$(cat /partstyle.txt)
125 else
126 STYLE=MBR
127 fi
128
129 echo ""
130 echo -e " <1> Preserve space (only for install) \033[32m[${SPACE}MB]\033[0m"
131 echo -e " <2> Secure boot support \033[32m[$SECURE]\033[0m"
132 echo -e " <3> Partition style (only for install) \033[32m[$STYLE]\033[0m"
133 echo " <0> Back to previous menu"
134 echo ""
135
136 while true; do
137 read -p "Please choose your operation: " Answer
138 if echo $Answer | grep -q "^[0-3]$"; then
139 break
140 fi
141 done
142
143 if [ "$Answer" = "0" ]; then
144 break
145 elif [ "$Answer" = "1" ]; then
146 while true; do
147 read -p "Please input the preserve space in MB: " Answer
148 if echo $Answer | grep -q "^[0-9][0-9]*$"; then
149 echo $Answer > /preserve.txt
150 break
151 fi
152 done
153 elif [ "$Answer" = "2" ]; then
154 if [ "$SECURE" = "Disable" ]; then
155 echo "Enable" > /secureboot.txt
156 else
157 echo "Disable" > /secureboot.txt
158 fi
159 else
160 if [ "$STYLE" = "GPT" ]; then
161 echo "MBR" > /partstyle.txt
162 else
163 echo "GPT" > /partstyle.txt
164 fi
165 fi
166 done
167 }
168
169 cd /
170 VTPATH=$(ls -1 | grep ventoy-)
171 VTVER=${VTPATH#*-}
172
173 cd $VTPATH
174
175 clear
176
177 echo ""
178 info "**************************************************"
179 vline=$(printf "* Ventoy LiveCD %6s *\r\n" "$VTVER")
180 info "$vline"
181 info "**************************************************"
182 echo ""
183 info "Scanning devices ......"
184 sleep 5
185
186 enum_disk
187
188 while true; do
189 sel=$(select_disk)
190
191 if [ $sel -eq 8888 ]; then
192 break
193 elif [ $sel -eq 0 ]; then
194 enum_disk
195 continue
196 fi
197
198 DEV=$(sed -n "${sel}p" /device.list | awk '{print $2}')
199 DevVtVer=$(get_dev_ventoy_ver $DEV)
200
201
202 if [ "$DevVtVer" = "NO" ]; then
203
204 while true; do
205 echo ""
206 echo " <1> Install Ventoy to $DEV"
207 echo " <2> Set Configuration"
208 echo " <0> Back to previous menu"
209 echo ""
210
211 while true; do
212 read -p "Please choose your operation: " Answer
213 if echo $Answer | grep -q "^[0-2]$"; then
214 break;
215 fi
216 done
217
218 if [ "$Answer" = "0" ]; then
219 break
220 elif [ "$Answer" = "2" ]; then
221 ventoy_configuration
222 else
223
224 opt=""
225 if [ -f /preserve.txt ]; then
226 opt="$opt -r $(cat /preserve.txt)"
227 fi
228
229 if [ -f /secureboot.txt ] && grep -q "Enable" /secureboot.txt; then
230 opt="$opt -s"
231 fi
232
233 if [ -f /partstyle.txt ] && grep -q "GPT" /partstyle.txt; then
234 opt="$opt -g"
235 fi
236
237 info "Ventoy2Disk.sh $opt -i /dev/$DEV"
238 sh Ventoy2Disk.sh $opt -i /dev/$DEV
239 sync
240 break
241 fi
242 done
243 else
244 info "Ventoy $DevVtVer detected in the device $DEV"
245
246 while true; do
247 echo ""
248 echo " <1> Update Ventoy in $DEV from $DevVtVer ==> $VTVER"
249 echo " <2> Re-install Ventoy to $DEV"
250 echo " <3> Set Configuration"
251 echo " <0> Back to previous menu"
252 echo ""
253
254 while true; do
255 read -p "Please choose your operation: " Answer
256 if echo $Answer | grep -q "^[0-3]$"; then
257 break;
258 fi
259 done
260
261 if [ "$Answer" = "0" ]; then
262 break
263 elif [ "$Answer" = "1" ]; then
264 opt=""
265 if [ -f /secureboot.txt ] && grep -q "Enable" /secureboot.txt; then
266 opt="$opt -s"
267 fi
268
269 info "Ventoy2Disk.sh $opt -u /dev/$DEV"
270 sh Ventoy2Disk.sh $opt -u /dev/$DEV
271 sync
272 break
273 elif [ "$Answer" = "2" ]; then
274 opt=""
275 if [ -f /preserve.txt ]; then
276 opt="$opt -r $(cat /preserve.txt)"
277 fi
278
279 if [ -f /secureboot.txt ] && grep -q "Enable" /secureboot.txt; then
280 opt="$opt -s"
281 fi
282
283 if [ -f /partstyle.txt ] && grep -q "GPT" /partstyle.txt; then
284 opt="$opt -g"
285 fi
286
287 info "Ventoy2Disk.sh $opt -I /dev/$DEV"
288 sh Ventoy2Disk.sh $opt -I /dev/$DEV
289 sync
290 break
291 else
292 ventoy_configuration
293 fi
294 done
295 fi
296 done
297
298