-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathmk-base-ubuntu.sh
executable file
·246 lines (199 loc) · 7.26 KB
/
mk-base-ubuntu.sh
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
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
#!/bin/bash -e
if [ ! $TARGET ]; then
echo "---------------------------------------------------------"
echo "please enter TARGET version number:"
echo "请输入要构建的根文件系统版本:"
echo "[0] Exit Menu"
echo "[1] gnome"
echo "[2] xfce"
echo "[3] lite"
echo "[4] gnome-full"
echo "[5] xfce-full"
echo "---------------------------------------------------------"
read input
case $input in
0)
exit;;
1)
TARGET=gnome
;;
2)
TARGET=xfce
;;
3)
TARGET=lite
;;
4)
TARGET=gnome-full
;;
5)
TARGET=xfce-full
;;
*)
echo -e "\033[47;36m input TARGET version number error, exit ! \033[0m"
exit;;
esac
echo -e "\033[47;36m set TARGET=$TARGET...... \033[0m"
fi
if [ "$ARCH" == "armhf" ]; then
ARCH='armhf'
elif [ "$ARCH" == "arm64" ]; then
ARCH='arm64'
else
ARCH="arm64"
echo -e "\033[47;36m set default ARCH=arm64...... \033[0m"
fi
TARGET_ROOTFS_DIR="binary"
sudo rm -rf $TARGET_ROOTFS_DIR/
if [ ! -d $TARGET_ROOTFS_DIR ] ; then
sudo mkdir -p $TARGET_ROOTFS_DIR
if [ ! -e ubuntu-base-20.04.5-base-$ARCH.tar.gz ]; then
echo -e "\033[47;36m wget ubuntu-base-20.04-base-x.tar.gz \033[0m"
wget -c http://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/ubuntu-base-20.04.5-base-$ARCH.tar.gz
fi
sudo tar -xzf ubuntu-base-20.04.5-base-$ARCH.tar.gz -C $TARGET_ROOTFS_DIR/
sudo cp sources.list $TARGET_ROOTFS_DIR/etc/apt/sources.list
sudo cp -b /etc/resolv.conf $TARGET_ROOTFS_DIR/etc/resolv.conf
if [ "$ARCH" == "armhf" ]; then
sudo cp -b /usr/bin/qemu-arm-static $TARGET_ROOTFS_DIR/usr/bin/
elif [ "$ARCH" == "arm64" ]; then
sudo cp -b /usr/bin/qemu-aarch64-static $TARGET_ROOTFS_DIR/usr/bin/
fi
fi
finish() {
./ch-mount.sh -u $TARGET_ROOTFS_DIR
echo -e "error exit"
exit -1
}
trap finish ERR
echo -e "\033[47;36m Change root.................... \033[0m"
./ch-mount.sh -m $TARGET_ROOTFS_DIR
cat <<EOF | sudo chroot $TARGET_ROOTFS_DIR/
export DEBIAN_FRONTEND=noninteractive
export APT_INSTALL="apt-get install -fy --allow-downgrades"
export LC_ALL=C.UTF-8
apt-get -y update
apt-get -f -y upgrade
if [ "$TARGET" == "gnome" ]; then
apt install -y ubuntu-desktop-minimal rsyslog sudo dialog apt-utils ntp evtest onboard
mv /var/lib/dpkg/info/ /var/lib/dpkg/info_old/
mkdir /var/lib/dpkg/info/
apt-get update
apt install -y ubuntu-desktop-minimal rsyslog sudo dialog apt-utils ntp evtest onboard
mv /var/lib/dpkg/info_old/* /var/lib/dpkg/info/
elif [ "$TARGET" == "xfce" ]; then
apt install -y xubuntu-core onboard rsyslog sudo dialog apt-utils ntp evtest udev
mv /var/lib/dpkg/info/ /var/lib/dpkg/info_old/
mkdir /var/lib/dpkg/info/
apt-get update
apt install -y xubuntu-core onboard rsyslog sudo dialog apt-utils ntp evtest udev
mv /var/lib/dpkg/info_old/* /var/lib/dpkg/info/
elif [ "$TARGET" == "lite" ]; then
apt install -y rsyslog sudo dialog apt-utils ntp evtest acpid
elif [ "$TARGET" == "gnome-full" ]; then
apt install -y ubuntu-desktop-minimal rsyslog sudo dialog apt-utils ntp evtest onboard
mv /var/lib/dpkg/info/ /var/lib/dpkg/info_old/
mkdir /var/lib/dpkg/info/
apt-get update
apt install -y ubuntu-desktop-minimal rsyslog sudo dialog apt-utils ntp evtest onboard
mv /var/lib/dpkg/info_old/* /var/lib/dpkg/info/
elif [ "$TARGET" == "xfce-full" ]; then
apt install -y xubuntu-desktop onboard rsyslog sudo dialog apt-utils ntp evtest udev
mv /var/lib/dpkg/info/ /var/lib/dpkg/info_old/
mkdir /var/lib/dpkg/info/
apt-get update
apt install -y xubuntu-desktop onboard rsyslog sudo dialog apt-utils ntp evtest udev
mv /var/lib/dpkg/info_old/* /var/lib/dpkg/info/
fi
\${APT_INSTALL} net-tools openssh-server ifupdown alsa-utils ntp network-manager gdb inetutils-ping libssl-dev \
vsftpd tcpdump can-utils i2c-tools strace vim iperf3 ethtool netplan.io toilet htop pciutils usbutils curl \
whiptail gnupg bc xinput gdisk parted gcc sox libsox-fmt-all gpiod libgpiod-dev python3-pip python3-libgpiod \
guvcview
\${APT_INSTALL} ttf-wqy-zenhei xfonts-intl-chinese
if [[ "$TARGET" == "gnome-full" || "$TARGET" == "xfce-full" ]]; then
apt purge ibus firefox -y
echo -e "\033[47;36m Install Chinese fonts.................... \033[0m"
\${APT_INSTALL} language-pack-zh-hans fonts-noto-cjk-extra gnome-user-docs-zh-hans language-pack-gnome-zh-hans
# set default xinput for fcitx
\${APT_INSTALL} fcitx fcitx-table fcitx-googlepinyin fcitx-pinyin fcitx-config-gtk
sed -i 's/default/fcitx/g' /etc/X11/xinit/xinputrc
\${APT_INSTALL} ipython3 jupyter
fi
if [[ "$TARGET" == "gnome-full" || "$TARGET" == "xfce-full" ]]; then
# Uncomment zh_CN.UTF-8 for inclusion in generation
sed -i 's/^# *\(zh_CN.UTF-8\)/\1/' /etc/locale.gen
echo "LANG=zh_CN.UTF-8" >> /etc/default/locale
# Generate locale
locale-gen zh_CN.UTF-8
# Export env vars
echo "LC_ALL=zh_CN.UTF-8" >> /etc/environment
echo "LANG=zh_CN.UTF-8" >> /etc/environment
echo "LANGUAGE=zh_CN:zh:en_US:en" >> /etc/environment
echo "export LC_ALL=zh_CN.UTF-8" >> /etc/profile.d/zh_CN.sh
echo "export LANG=zh_CN.UTF-8" >> /etc/profile.d/zh_CN.sh
echo "export LANGUAGE=zh_CN:zh:en_US:en" >> /etc/profile.d/zh_CN.sh
\${APT_INSTALL} $(check-language-support)
fi
if [[ "$TARGET" == "gnome" || "$TARGET" == "gnome-full" ]]; then
\${APT_INSTALL} mpv acpid gnome-sound-recorder
elif [[ "$TARGET" == "xfce" || "$TARGET" == "xfce-full" ]]; then
\${APT_INSTALL} mpv acpid gnome-sound-recorder
elif [ "$TARGET" == "lite" ]; then
\${APT_INSTALL}
fi
pip3 install python-periphery Adafruit-Blinka -i https://mirrors.aliyun.com/pypi/simple/
HOST=lubancat
# Create User
useradd -G sudo -m -s /bin/bash cat
passwd cat <<IEOF
temppwd
temppwd
IEOF
gpasswd -a cat video
gpasswd -a cat audio
passwd root <<IEOF
root
root
IEOF
# allow root login
sed -i '/pam_securetty.so/s/^/# /g' /etc/pam.d/login
# hostname
echo lubancat > /etc/hostname
# set localtime
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# workaround 90s delay
services=(NetworkManager systemd-networkd)
for service in ${services[@]}; do
systemctl mask ${service}-wait-online.service
done
# disbale the wire/nl80211
systemctl mask wpa_supplicant-wired@
systemctl mask wpa_supplicant-nl80211@
systemctl mask wpa_supplicant@
# Make systemd less spammy
sed -i 's/#LogLevel=info/LogLevel=warning/' \
/etc/systemd/system.conf
sed -i 's/#LogTarget=journal-or-kmsg/LogTarget=journal/' \
/etc/systemd/system.conf
# check to make sure sudoers file has ref for the sudo group
SUDOEXISTS="$(awk '$1 == "%sudo" { print $1 }' /etc/sudoers)"
if [ -z "$SUDOEXISTS" ]; then
# append sudo entry to sudoers
echo "# Members of the sudo group may gain root privileges" >> /etc/sudoers
echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
fi
# make sure that NOPASSWD is set for %sudo
# expecially in the case that we didn't add it to /etc/sudoers
# just blow the %sudo line away and force it to be NOPASSWD
sed -i -e '
/\%sudo/ c \
%sudo ALL=(ALL) NOPASSWD: ALL
' /etc/sudoers
apt-get clean
rm -rf /var/lib/apt/lists/*
sync
EOF
./ch-mount.sh -u $TARGET_ROOTFS_DIR
DATE=$(date +%Y%m%d)
echo -e "\033[47;36m Run tar pack ubuntu-base-$TARGET-$ARCH-$DATE.tar.gz \033[0m"
sudo tar zcf ubuntu-base-$TARGET-$ARCH-$DATE.tar.gz $TARGET_ROOTFS_DIR