-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathinstall.sh
More file actions
executable file
·200 lines (156 loc) · 6.06 KB
/
install.sh
File metadata and controls
executable file
·200 lines (156 loc) · 6.06 KB
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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
#!/usr/bin/env bash
set -e
if [ "$1" == clean ]; then rm -rf {part-*.sh,variant.sh}; fi
[ "x$LESSBIAN_GITHUB_URL" == x ] &&\
export LESSBIAN_GITHUB_URL='https://raw.githubusercontent.com/romandobra/lessbian/main'
[ "x$LESSBIAN_BASE_URL" == x ] &&\
export LESSBIAN_BASE_URL='https://github.com/romandobra/lessbian/releases/download'
get_file(){
if [ -f $1 ]; then
cat $1
else
wget -O - "$LESSBIAN_GITHUB_URL/$1" 2> >(grep ERROR >&2 && echo "$LESSBIAN_GITHUB_URL/$1" >&2 && exit_script)
fi
}
exit_script(){
{
echo "---- $1"
( set -o posix; set ) | grep LESSBIAN
} >&2
exit
}
run_in_chroot(){
local script="$LESSBIAN_MOUNT_TARGET/chroot_script.sh"
{
echo "#!/usr/bin/env bash"
echo
# echo "set -e"
echo "echo LESSBIAN install.sh: $1"
echo "export DEBIAN_FRONTEND=noninteractive"
# echo "err_trap() { read -p '$1 Line \$1'; }"
# echo "trap 'err_trap \$LINENO' ERR"
cat -
echo 'apt-get -yqq autoremove && apt-get -yqq clean'
} > $script
chmod +x $script
echo Mounting dev, proc, sys
mount -t proc none $LESSBIAN_MOUNT_TARGET/proc
mount -o bind /dev $LESSBIAN_MOUNT_TARGET/dev
mount -o bind /sys $LESSBIAN_MOUNT_TARGET/sys
chroot $LESSBIAN_MOUNT_TARGET /chroot_script.sh
echo Unmounting dev, proc, sys
umount $LESSBIAN_MOUNT_TARGET/proc || sleep 10 && umount -lf $LESSBIAN_MOUNT_TARGET/proc || true
umount $LESSBIAN_MOUNT_TARGET/dev || sleep 10 && umount -lf $LESSBIAN_MOUNT_TARGET/dev || true
umount $LESSBIAN_MOUNT_TARGET/sys || sleep 10 && umount -lf $LESSBIAN_MOUNT_TARGET/sys || true
rm -rf $script
}
build_base(){
[ "x$1" == x ] && exit_script "Usage: build_base NOX|X [y]"
[ "x$LESSBIAN_MOUNT_TARGET == x" ]\
|| [ -d $LESSBIAN_MOUNT_TARGET ]\
|| exit_script "Bad mount target '$LESSBIAN_MOUNT_TARGET'"
( debootstrap --help; wget --help; chroot --help ) > /dev/null
# --variant=minbase
debootstrap --arch=amd64 $LESSBIAN_DEBIAN_RELEASE $LESSBIAN_MOUNT_TARGET http://ftp.us.debian.org/debian/
run_in_chroot "_step1" < <(get_file base/_step1.sh)
get_file debian-releases/$LESSBIAN_DEBIAN_RELEASE-sources.list > $LESSBIAN_MOUNT_TARGET/etc/apt/sources.list
run_in_chroot "_step2" < <(get_file base/_step2.sh)
run_in_chroot "${LESSBIAN_DEBIAN_RELEASE}-NOX" < <(get_file base/NOX.sh)
[ "x$2" == "xy" ] &&\
{ DIR=$(pwd); cd $LESSBIAN_MOUNT_TARGET && tar czf $DIR/NOX.tar.gz . && cd $DIR; }
if [ "x$1" == xX ]; then
run_in_chroot "${LESSBIAN_DEBIAN_RELEASE}-X" < <(get_file base/X.sh)
[ "x$2" == "xy" ] &&\
{ DIR=$(pwd); cd $LESSBIAN_MOUNT_TARGET && tar czf $DIR/X.tar.gz . && cd $DIR; }
fi
[ "x$2" == "xy" ] && rm -rf $LESSBIAN_MOUNT_TARGET/*
echo "Base built" >&2
}
export -f get_file exit_script build_base run_in_chroot
if [ "x$LESSBIAN_DEBIAN_RELEASE" == x ]; then
IFS=$'\n' read -d '' -r -a releases < <(get_file debian-releases/_list && printf '\0')
for (( i=0; i<${#releases[@]}; i++ )); do
printf "%2s %s\n" "$i" "${releases[$i]}"
done
read -p "Debian release [0]: " release
export LESSBIAN_DEBIAN_RELEASE=${releases[${release:-0}]}
fi
if [ ! "x$LESSBIAN_JUST_BASE" == x ]; then
build_base X y
exit_script
fi
(debootstrap --help; grub-install --help; wget --help; chroot --help) > /dev/null
if [ ! -f variant.sh ]; then
if [ "x$LESSBIAN_VARIANT" == x ]; then
IFS=$'\n' read -d '' -r -a variants < <(get_file variants/_list | cut -d'.' -f1 && printf '\0')
for (( i=0; i<${#variants[@]}; i++ )); do
printf "%2s %s\n" "$i" "${variants[$i]}"
done
read -p "Choose variant [0]: " variant
export LESSBIAN_VARIANT=${variants[${variant:-0}]}
fi
echo "LESSBIAN_DEBIAN_RELEASE=$LESSBIAN_DEBIAN_RELEASE" >> variant.sh
echo "LESSBIAN_VARIANT=$LESSBIAN_VARIANT" >> variant.sh
get_file "variants/${LESSBIAN_VARIANT}.sh" >> variant.sh
fi
source variant.sh
export LESSBIAN_BASE=$BASE
export LESSBIAN_VARIANT_PARTS=$PARTS
IFS=' ' read -d '' -r -a LESSBIAN_PARTS < <(echo -n $LESSBIAN_VARIANT_PARTS && printf '\0')
for (( i=0; i<${#LESSBIAN_PARTS[@]}; i++ )); do
file_name="part-$(printf '%02d' ${i})0-${LESSBIAN_PARTS[$i]}.sh"
if [ ! -f "$file_name" ]; then
get_file "parts/${LESSBIAN_PARTS[$i]}.sh" > "$file_name"
fi
done
unset LESSBIAN_PARTS
if [ "x$LESSBIAN_SKIP_REVIEW" == x ]; then
read -p "Review part-* files if needed and press Enter to continue: "
fi
if [ "x$LESSBIAN_INSTALL_DEV" == x ]; then
lsblk | grep part
read -p "Device to install to (You have to set the boot flag manually): /dev/" dev
[ "x$dev" == x ] || [ ! -e "/dev/$dev" ] && exit_script "Bad install device '$LESSBIAN_INSTALL_DEV'"
export LESSBIAN_INSTALL_DEV="/dev/$dev"
fi
if [ "x$LESSBIAN_MOUNT_TARGET" == x ]; then
read -p "Mount target [/mnt]: " LESSBIAN_MOUNT_TARGET
export LESSBIAN_MOUNT_TARGET=${LESSBIAN_MOUNT_TARGET:-/mnt}
fi
if [ "x$LESSBIAN_HOSTNAME" == x ]; then
current_hostname=$(hostname)
read -p "Host name [$current_hostname]: " LESSBIAN_HOSTNAME
export LESSBIAN_HOSTNAME=${LESSBIAN_HOSTNAME:-$current_hostname}
fi
mkdir -p $LESSBIAN_MOUNT_TARGET
mount $LESSBIAN_INSTALL_DEV $LESSBIAN_MOUNT_TARGET
if [ "x$LESSBIAN_BASE_FRESH" == xy ]; then
build_base $LESSBIAN_BASE
else
base_file=base-${LESSBIAN_BASE}.tar.gz
if [ ! -f $base_file ]; then
read -p "Base file not found. Input anything to build a fresh base or nothing to download: " get_base
if [ "x$get_base" == x ]; then
wget $LESSBIAN_BASE_URL/$LESSBIAN_DEBIAN_RELEASE/$base_file 2> >(\
grep ERROR && echo "$LESSBIAN_BASE_URL/$LESSBIAN_DEBIAN_RELEASE/$base_file" && exit_script \
)
cat $base_file | tar xzf - -C $LESSBIAN_MOUNT_TARGET
else
build_base $LESSBIAN_BASE
fi
fi
fi
for i in part-*.sh; do
cat $i | run_in_chroot "$i"
done
echo "echo '$LESSBIAN_HOSTNAME' > /etc/hostname
echo 127.0.1.1 '$LESSBIAN_HOSTNAME' >> /etc/hosts
apt-get -yqq install grub2
#grub-mkconfig -o /boot/grub/grub.cfg
update-grub" | run_in_chroot "_step3"
grub-install --root-directory=$LESSBIAN_MOUNT_TARGET ${LESSBIAN_INSTALL_DEV%[0-9]}
{
( set -o posix; set ) | grep LESSBIAN
} >> $LESSBIAN_MOUNT_TARGET/etc/lessbian.env
umount $LESSBIAN_MOUNT_TARGET
exit_script