blob: 19ea1550c6a119f84a2063fd4eb16ec73a69d74d [file] [log] [blame]
Tomeu Vizoso22d97642019-12-17 11:50:14 +01001#!/bin/bash
Tomeu Vizosocc6bbf62019-04-29 16:33:22 +00002
3set -ex
4
Tomeu Vizoso6c8b9212020-07-03 10:04:20 +02005if [ $DEBIAN_ARCH = arm64 ]; then
6 ARCH_PACKAGES="firmware-qcom-media"
7elif [ $DEBIAN_ARCH = amd64 ]; then
8 # Upstream LLVM package repository
9 apt-get -y install --no-install-recommends gnupg ca-certificates
10 apt-key add /llvm-snapshot.gpg.key
Dave Airlie137d7d22020-10-06 10:49:00 +100011 echo "deb https://apt.llvm.org/buster/ llvm-toolchain-buster-10 main" >/etc/apt/sources.list.d/llvm10.list
Tomeu Vizoso6c8b9212020-07-03 10:04:20 +020012 apt-get update
13
14 ARCH_PACKAGES="libelf1
Dave Airlie137d7d22020-10-06 10:49:00 +100015 libllvm10
Tomeu Vizoso6c8b9212020-07-03 10:04:20 +020016 libxcb-dri2-0
17 libxcb-dri3-0
18 libxcb-present0
19 libxcb-sync1
20 libxcb-xfixes0
21 libxshmfence1
22 firmware-amd-graphics
23 "
24fi
25
Tomeu Vizoso22d97642019-12-17 11:50:14 +010026apt-get -y install --no-install-recommends \
Eric Anholtcf5ba9d2020-03-03 14:38:09 -080027 ca-certificates \
Christian Gmeiner096adbe2020-06-10 14:44:17 +020028 curl \
Tomeu Vizoso22d97642019-12-17 11:50:14 +010029 initramfs-tools \
30 libpng16-16 \
31 strace \
32 libsensors5 \
33 libexpat1 \
Rohan Garg7406d622020-01-28 15:19:53 +010034 libx11-6 \
35 libx11-xcb1 \
Tomeu Vizoso6c8b9212020-07-03 10:04:20 +020036 $ARCH_PACKAGES \
Eric Anholt3b5e71c2020-05-01 09:57:00 -070037 netcat-openbsd \
Rohan Garg7406d622020-01-28 15:19:53 +010038 python3 \
39 libpython3.7 \
40 python3-pil \
41 python3-pytest \
42 python3-requests \
43 python3-yaml \
Tomeu Vizosocf8a8b72020-07-31 06:51:47 +020044 sntp \
Eric Anholt33f38602020-01-28 12:02:39 -080045 wget \
46 xz-utils
Eric Anholtdd167782020-05-28 12:50:51 -070047
48if [ -n "$INCLUDE_VK_CTS" ]; then
49 apt-get install -y libvulkan1
50fi
51
Tomeu Vizosocc6bbf62019-04-29 16:33:22 +000052passwd root -d
53chsh -s /bin/sh
Eric Anholt54dbb552020-02-19 10:22:02 -080054
55cat > /init <<EOF
56#!/bin/sh
57export PS1=lava-shell:
58exec sh
59EOF
60chmod +x /init
Tomeu Vizosocc6bbf62019-04-29 16:33:22 +000061
Tomeu Vizosocf55abe2020-07-09 22:38:51 +020062mkdir -p /lib/firmware/rtl_nic
63wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/rtl_nic/rtl8153a-3.fw -O /lib/firmware/rtl_nic/rtl8153a-3.fw
64
Tomeu Vizosocc6bbf62019-04-29 16:33:22 +000065#######################################################################
66# Strip the image to a small minimal system without removing the debian
67# toolchain.
68
Tomeu Vizosocf55abe2020-07-09 22:38:51 +020069# xz compress firmware so it doesn't waste RAM at runtime. Except db820c's
70# GPU firmware, due to using a precompiled kernel without compression support.
Eric Anholt4bc15e72020-03-03 14:38:09 -080071find /lib/firmware -type f -print0 | \
Tomeu Vizosocf55abe2020-07-09 22:38:51 +020072 grep -vz a530 | \
Eric Anholt4bc15e72020-03-03 14:38:09 -080073 xargs -0r -P4 -n4 xz -T1 -C crc32
Tomeu Vizosocf55abe2020-07-09 22:38:51 +020074ln -s /lib/firmware/qcom/a530* /lib/firmware/
Eric Anholt33f38602020-01-28 12:02:39 -080075
Tomeu Vizosocc6bbf62019-04-29 16:33:22 +000076# Copy timezone file and remove tzdata package
77rm -rf /etc/localtime
78cp /usr/share/zoneinfo/Etc/UTC /etc/localtime
79
Tomeu Vizoso76af4652019-08-15 10:41:21 +020080UNNEEDED_PACKAGES="libfdisk1
81 tzdata
Tomeu Vizoso6c8b9212020-07-03 10:04:20 +020082 diffutils
83 gnupg"
Tomeu Vizosocc6bbf62019-04-29 16:33:22 +000084
85export DEBIAN_FRONTEND=noninteractive
86
87# Removing unused packages
88for PACKAGE in ${UNNEEDED_PACKAGES}
89do
90 echo ${PACKAGE}
91 if ! apt-get remove --purge --yes "${PACKAGE}"
92 then
93 echo "WARNING: ${PACKAGE} isn't installed"
94 fi
95done
96
97apt-get autoremove --yes || true
98
99# Dropping logs
100rm -rf /var/log/*
101
102# Dropping documentation, localization, i18n files, etc
103rm -rf /usr/share/doc/*
104rm -rf /usr/share/locale/*
Rohan Garg7406d622020-01-28 15:19:53 +0100105rm -rf /usr/share/X11/locale/*
Tomeu Vizosocc6bbf62019-04-29 16:33:22 +0000106rm -rf /usr/share/man
107rm -rf /usr/share/i18n/*
108rm -rf /usr/share/info/*
109rm -rf /usr/share/lintian/*
110rm -rf /usr/share/common-licenses/*
111rm -rf /usr/share/mime/*
112
113# Dropping reportbug scripts
114rm -rf /usr/share/bug
115
116# Drop udev hwdb not required on a stripped system
117rm -rf /lib/udev/hwdb.bin /lib/udev/hwdb.d/*
118
119# Drop all gconv conversions && binaries
120rm -rf usr/bin/iconv
121rm -rf usr/sbin/iconvconfig
122rm -rf usr/lib/*/gconv/
123
124# Remove libusb database
125rm -rf usr/sbin/update-usbids
126rm -rf var/lib/usbutils/usb.ids
127rm -rf usr/share/misc/usb.ids
128
129#######################################################################
130# Crush into a minimal production image to be deployed via some type of image
131# updating system.
132# IMPORTANT: The Debian system is not longer functional at this point,
133# for example, apt and dpkg will stop working
134
Eric Anholt8094a9a2020-05-13 16:58:26 -0700135UNNEEDED_PACKAGES="apt libapt-pkg6.0 "\
136"ncurses-bin ncurses-base libncursesw6 libncurses6 "\
Tomeu Vizosocc6bbf62019-04-29 16:33:22 +0000137"perl-base "\
138"debconf libdebconfclient0 "\
139"e2fsprogs e2fslibs libfdisk1 "\
140"insserv "\
141"udev "\
142"init-system-helpers "\
143"bash "\
144"cpio "\
Eric Anholt33f38602020-01-28 12:02:39 -0800145"xz-utils "\
Tomeu Vizosocc6bbf62019-04-29 16:33:22 +0000146"passwd "\
147"libsemanage1 libsemanage-common "\
148"libsepol1 "\
Tomeu Vizosocc6bbf62019-04-29 16:33:22 +0000149"gpgv "\
150"hostname "\
151"adduser "\
152"debian-archive-keyring "\
Rohan Garg7406d622020-01-28 15:19:53 +0100153"libegl1-mesa-dev "\
154"libegl-mesa0 "\
155"libgl1-mesa-dev "\
156"libgl1-mesa-dri "\
157"libglapi-mesa "\
158"libgles2-mesa-dev "\
159"libglx-mesa0 "\
160"mesa-common-dev "\
161"libz3-4 "\
Tomeu Vizosocc6bbf62019-04-29 16:33:22 +0000162
163# Removing unneeded packages
164for PACKAGE in ${UNNEEDED_PACKAGES}
165do
166 echo "Forcing removal of ${PACKAGE}"
167 if ! dpkg --purge --force-remove-essential --force-depends "${PACKAGE}"
168 then
169 echo "WARNING: ${PACKAGE} isn't installed"
170 fi
171done
172
173# Show what's left package-wise before dropping dpkg itself
174COLUMNS=300 dpkg-query -W --showformat='${Installed-Size;10}\t${Package}\n' | sort -k1,1n
175
176# Drop dpkg
177dpkg --purge --force-remove-essential --force-depends dpkg
178
179# No apt or dpkg, no need for its configuration archives
180rm -rf etc/apt
181rm -rf etc/dpkg
182
183# Drop directories not part of ostree
184# Note that /var needs to exist as ostree bind mounts the deployment /var over
185# it
186rm -rf var/* opt srv share
187
188# ca-certificates are in /etc drop the source
189rm -rf usr/share/ca-certificates
190
191# No bash, no need for completions
192rm -rf usr/share/bash-completion
193
194# No zsh, no need for comletions
195rm -rf usr/share/zsh/vendor-completions
196
197# drop gcc-6 python helpers
198rm -rf usr/share/gcc-6
199
200# Drop sysvinit leftovers
201rm -rf etc/init.d
202rm -rf etc/rc[0-6S].d
203
204# Drop upstart helpers
205rm -rf etc/init
206
207# Various xtables helpers
208rm -rf usr/lib/xtables
209
210# Drop all locales
211# TODO: only remaining locale is actually "C". Should we really remove it?
212rm -rf usr/lib/locale/*
213
214# partition helpers
Eric Anholt18fc6a92020-05-13 14:36:36 -0700215rm -rf usr/sbin/*fdisk
Tomeu Vizosocc6bbf62019-04-29 16:33:22 +0000216
217# local compiler
Eric Anholt18fc6a92020-05-13 14:36:36 -0700218rm -rf usr/bin/localedef
Tomeu Vizosocc6bbf62019-04-29 16:33:22 +0000219
220# Systemd dns resolver
221find usr etc -name '*systemd-resolve*' -prune -exec rm -r {} \;
222
223# Systemd network configuration
224find usr etc -name '*networkd*' -prune -exec rm -r {} \;
225
226# systemd ntp client
227find usr etc -name '*timesyncd*' -prune -exec rm -r {} \;
228
229# systemd hw database manager
230find usr etc -name '*systemd-hwdb*' -prune -exec rm -r {} \;
231
232# No need for fuse
233find usr etc -name '*fuse*' -prune -exec rm -r {} \;
234
235# lsb init function leftovers
236rm -rf usr/lib/lsb
237
238# Only needed when adding libraries
Eric Anholt18fc6a92020-05-13 14:36:36 -0700239rm -rf usr/sbin/ldconfig*
Tomeu Vizosocc6bbf62019-04-29 16:33:22 +0000240
241# Games, unused
242rmdir usr/games
243
244# Remove pam module to authenticate against a DB
245# plus libdb-5.3.so that is only used by this pam module
Eric Anholt18fc6a92020-05-13 14:36:36 -0700246rm -rf usr/lib/*/security/pam_userdb.so
247rm -rf usr/lib/*/libdb-5.3.so
Tomeu Vizosocc6bbf62019-04-29 16:33:22 +0000248
249# remove NSS support for nis, nisplus and hesiod
Eric Anholt18fc6a92020-05-13 14:36:36 -0700250rm -rf usr/lib/*/libnss_hesiod*
251rm -rf usr/lib/*/libnss_nis*