blob: 158be0b9e227e85beffa936df9d57684f4921805 (
plain)
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
164
165
166
167
168
169
170
171
172
173
174
175
|
# Copyright (C) 2016-2018 Iru Cai <mytbk920423@gmail.com>
# SPDX-License-Identifier: GPL-3.0-or-later
checksum_verify() {
local _hashtool _hashsum _cksum
if [ -n "$SHA512" ]; then
_hashtool=sha512sum
_hashsum=$SHA512
elif [ -n "$SHA256" ]; then
_hashtool=sha256sum
_hashsum=$SHA256
elif [ -n "$SHA1" ]; then
_hashtool=sha1sum
_hashsum=$SHA1
elif [ -n "$VERIFY" ]; then
"$VERIFY" && return 0
else
fatalerror "Cannot find the SHA256, SHA1, or MD5 checksum of $ISOFILE"
fi
_cksum=$("$_hashtool" "$ISOPATH/$ISOFILE" | cut -d' ' -f1)
if [[ $_cksum == $_hashsum ]]; then
msg "$ISOFILE ok."
else
msg "$ISOFILE checksum bad!" && return 1
fi
}
set_distro() {
_distrobase="distro/$(cut -d'/' -f1 <<< "$1")"
source "$_distrobase/distroinfo"
}
# process_isoinfo <iso, e.g. mint/64/xfce>
# loads $DISTRONAME $ISONAME $ISOFILE $ISOURL
process_isoinfo() {
unset MD5 SHA1 SHA256 SHA512
set_distro "$1"
source "distro/$1/isoinfo"
ISOFILE="$(basename $ISOURL)"
}
process_distro() {
source "distro/$1/install.sh"
# FIXME
# As a workaround, now we set $ISOFILE before using this function.
# Maybe we have a better solution for this.
ISOMNT="/media/$ISOFILE"
}
gen_grubcfg() {
local entry allentries
allentries=("distro/$1/entry"*)
if [ ${#allentries[@]} -gt 1 ]; then
echo "submenu '$ISONAME' {"
fi
for entry in "${allentries[@]}"
do
UUID="$UUID" ISOFILE="$ISOFILE" ./mkgrubcfg.sh "$entry"
done
if [ ${#allentries[@]} -gt 1 ]; then
echo '}'
fi
}
gen_syslinux() {
local entry allentries count name
allentries=("distro/$1/entry"*)
name=$(echo $1|sed 's/\//_/g')
count=0
for entry in "${allentries[@]}"
do
UUID="$UUID" ISOFILE="$ISOFILE" LABEL="$name$count" \
./mksyslinux.sh "$entry"
count=$(($count+1))
done
}
download_iso() {
mkdir -p "$ISOPATH"
for url in ${mirrorlist[@]}
do
wget -c -O "$ISOPATH/$ISOFILE" "$url/$ISOURL"
if checksum_verify; then
return 0
else
# checksum bad, may be due to a bad partial download
# so remove the file and try again
rm -f "$ISOPATH/$ISOFILE"
wget -O "$ISOPATH/$ISOFILE" "$url/$ISOURL"
checksum_verify && return 0
rm -f "$ISOPATH/$ISOFILE" # then try next mirror
fi
done
fatalerror "Fail to download $ISOFILE!"
}
mount_iso() {
if findmnt "$ISOMNT" > /dev/null
then
umount_iso
fi
udevil mount "$ISOPATH/$ISOFILE" "$ISOMNT"
}
umount_iso() {
udevil umount "$ISOMNT"
}
getuuid() {
lsblk -n -o UUID "$1"
}
getdiskbypart() {
# util-linux may have bug when using -s --raw
# so it needs some work around
local _devlist
local _type
_devlist=($(lsblk -s --raw -o NAME -n "$1"))
for i in "${_devlist[@]}"
do
_type=$(lsblk -o TYPE -n "/dev/$i" | head -n1)
if [[ "$_type" == "disk" ]]; then
echo $i
fi
done
}
as-root() {
echo as-root "$*"
if [ "$UID" == 0 ]; then
"$@"
elif type -p sudo > /dev/null; then
sudo "$@"
elif type -p su > /dev/null; then
su -c "$*"
fi
}
syslinux_header() {
cat << EOF
UI menu.c32
MENU TITLE Live USB
MENU COLOR border 30;44 #40ffffff #a0000000 std
MENU COLOR title 1;36;44 #9033ccff #a0000000 std
MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all
MENU COLOR unsel 37;44 #50ffffff #a0000000 std
MENU COLOR help 37;40 #c0ffffff #a0000000 std
MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std
MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std
MENU COLOR msg07 37;40 #90ffffff #a0000000 std
MENU COLOR tabmsg 31;40 #30ffffff #00000000 std
EOF
}
grubcfg_header() {
echo '# The live USB grub.cfg file'
if [ -z "$TXTMODE" ]; then
cat << 'EOF'
if [ ${grub_platform} == efi ]; then
insmod all_video
insmod font
if loadfont /grub/fonts/unicode.pf2; then
insmod gfxterm
set gfxmode=auto
set gfxpayload=keep
terminal_output gfxterm
fi
fi
EOF
fi
}
|