-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeb64-installer
More file actions
173 lines (151 loc) · 4.39 KB
/
deb64-installer
File metadata and controls
173 lines (151 loc) · 4.39 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
#!/bin/bash
main() {
if [ $(whoami) != "root" ]; then
echo "Ohne Root-Rechte geht's nicht!"
exit 1
fi
DEB64=$(whiptail --inputbox "\nWie soll der Debian-Client heißen?" 9 40 "debian-stretch-64" 3>&1 1>&2 2>&3)
if [ -z DEB64 ]; then
echo "Eingabe abgebrochen. Also wird das Programm beendet."
exit 1
fi
DEB_KEYRING_REPO="http://http.us.debian.org/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2017.5_all.deb"
DEB_REPO="http://deb.debian.org/debian/"
KERNEL_INFO_REPO="https://api.github.com/repos/sakaki-/bcmrpi3-kernel-bis/releases/latest"
DTBS32_DIR="/boot/r32-dtbs"
DTBS64_DIR="/boot/r64-dtbs"
DTB_SELECT="/boot/*dtb"
MACHINES_DIR="/var/lib/machines"
CMD_NAME=$DEB64
CMD_URI="/usr/local/bin/"
RASPI_CONF="/boot/config.txt"
GPU_MEM=128
update_gpu_mem
update_dtoverlay
secure_kernel32
upgrade_kernel
secure_kernel64
install_debian64
create_autostart_client
asking_cmd_name
create_starter_run
create_starter_shell
echo "Installation abgeschlossen! Neustart steht an."
if ( whiptail --yesno "\nRaspbian jetzt neu starten?" 9 40 ); then
reboot
fi
}
asking_cmd_name() {
CMD_NAME=$(whiptail --inputbox "\nMöchtest du diesen Befehlbezeichnung beibehalten?" 9 40 "$DEB64" 3>&1 1>&2 2>&3)
if [ -z CMD_NAME ]; then
echo "Du hast die Frage unterbrochen. Befehl wird auf $DEB64 gesetzt."
CMD_NAME=$DEB64
fi
CMD_URI+=$DEB64
}
create_autostart_client() {
mkdir -pv /etc/systemd/nspawn
echo "[Exec]
PrivateUsers=no
Capability=CAP_NET_ADMIN
[Files]
Bind=/home/$SUDO_USER
Bind=/run/user:/run/host-user/
Bind=/etc/resolv.conf
[Network]
Private=no
VirtualEthernet=no" >> /etc/systemd/nspawn/$DEB64.nspawn
}
create_starter_run() {
cat > $CMD_URI-run << EOF
#!/bin/bash
# Run the specified application, with any arguments, in the 64-bit Debian container,
# using the host OS' X-Server. Also includes a QT fixup for apps that requires QT-libs.
systemd-run \\
--setenv=QT_AUTO_SCREEN_SCALE_FACTOR=0 \\
--setenv=DISPLAY="\${DISPLAY}" \\
--uid=1000 --gid=1000 \\
--machine=$DEB64 \\
"\${@}"
EOF
chmod +x $CMD_URI-run
}
create_starter_shell() {
cat > $CMD_URI-shell << EOF
#!/bin/bash
# Open a shell as $SUDO_USER into the 64-bit Debian container.
exec machinectl shell \\
--setenv=QT_AUTO_SCREEN_SCALE_FACTOR=0 \\
--setenv=DISPLAY="\${DISPLAY}" \\
--uid=1000 \\
$DEB64 \\
/bin/bash
EOF
chmod +x $CMD_URI-shell
}
install_debian64() {
tmpKeyring=$(tempfile -s .deb)
wget -O $tmpKeyring -c $DEB_KEYRING_REPO
chown $SUDO_USER:$SUDO_USER $tmpKeyring
apt-get -y install $tmpKeyring
apt-get -y install debootstrap systemd-container zenity
mkdir -pv $MACHINES_DIR
echo "Die nachfolgende Installation kann bis 30 Minuten (oder sogar länger) dauern. Also bisschen Geduld ist angesagt."
debootstrap --arch=arm64 --include=systemd-container,zenity stretch $MACHINES_DIR/$DEB64 $DEB_REPO
echo "Deine Geduld hat sich gelohnt! Die nächsten Schritte erfolgen..."
apt-get -y purge debian-archive-keyring
rm $tmpKeyring
}
secure_kernel32() {
apt-mark hold raspberrypi-kernel
mkdir -pv $DTBS32_DIR
mv -v $DTB_SELECT $DTBS32_DIR
}
secure_kernel64() {
mkdir -pv $DTBS64_DIR
cp -v $DTB_SELECT $DTBS64_DIR
}
update_dtoverlay() {
confs_dtoverlay=$(cat $RASPI_CONF | grep ^dtoverlay=vc4-)
reg1="^dtoverlay=vc4-.*"
echo "Setze dtoverlay auf Fake-KMS"
if [ -n "$confs_dtoverlay" ]; then
for conf_dtoverlay in $confs_dtoverlay
do
sed $RASPI_CONF -i -e "s/$reg1/dtoverlay=vc4-fkms-v3d/"
done
else
echo -e "dtoverlay=vc4-fkms-v3d\n" >> $RASPI_CONF
fi
}
update_gpu_mem() {
confs_gpu_mem=$(cat $RASPI_CONF | grep ^gpu_mem.*=)
reg1="^gpu_mem=.*"
reg2="^gpu_mem_1024=.*"
echo "Setze GPU-Variable auf $GPU_MEM"
if [ -n "$confs_gpu_mem" ]; then
for conf_gpu_mem in $confs_gpu_mem
do
if [[ $conf_gpu_mem =~ $reg1 ]]; then
sed $RASPI_CONF -i -e "s/$reg1/gpu_mem=$GPU_MEM/"
fi
if [[ $conf_gpu_mem =~ $reg2 ]]; then
sed $RASPI_CONF -i -e "s/$reg2/gpu_mem_1024=$GPU_MEM/"
fi
done
else
echo -e "gpu_mem=$GPU_MEM\n" >> $RASPI_CONF
fi
}
upgrade_kernel() {
tmpTar=$(tempfile -s .tar.xz)
curl -s $KERNEL_INFO_REPO \
| grep "browser_download_url.*tar\.xz" \
| cut -d : -f 2,3 \
| tr -d \" \
| wget -O $tmpTar -i -
tar --exclude='COPYING.linux' -xJf $tmpTar -C /
sleep 2 && sync
sleep 4 && rm tmpTar
}
main "$@"