]> git.proxmox.com Git - proxmox-backup-restore-image.git/blame - src/build_initramfs.sh
build initramfs: add libtirpc3 to basic packages
[proxmox-backup-restore-image.git] / src / build_initramfs.sh
CommitLineData
3b259e7a
SR
1#!/bin/sh
2
3set -e
4
5ROOT="root"
6BUILDDIR="build/initramfs"
dd8070a7 7INIT="../../init-shim-rs/target/x86_64-unknown-linux-gnu/release/init-shim-rs"
3b259e7a 8
3b259e7a
SR
9echo "Using build dir: $BUILDDIR"
10rm -rf "$BUILDDIR"
11mkdir -p "$BUILDDIR"
f773602b
TL
12if [ -d pkgs ]; then
13 echo "copying package cache into build-dir"
14 cp -a pkgs "$BUILDDIR/pkgs"
f773602b 15fi
3b259e7a
SR
16cd "$BUILDDIR"
17mkdir "$ROOT"
18
2a1ef81f
SR
19# adds necessary packages to initramfs build root folder
20add_pkgs() {
fb04ffde
SI
21 debdir=$2
22
f773602b
TL
23 if [ -z "$NO_DOWNLOAD" ]; then
24 DEPS=""
25 for pkg in $1; do
26 printf " getting reverse dependencies for '%s'" "$pkg"
27 LOCAL_DEPS=$(apt-rdepends -f Depends -s Depends "$pkg" | grep -v '^ ')
fb04ffde 28 DEPS="$DEPS $LOCAL_DEPS"
f773602b
TL
29 done
30 # debconf and gcc are unnecessary, libboost-regex doesn't install on bullseye
31 DEPS=$(echo "$DEPS" |\
32 sed -E 's/debconf(-2\.0)?//g' |\
33 sed -E 's/libboost-regex//g' |\
34 sed -E 's/gcc-.{1,2}-base//g')
35
fb04ffde
SI
36 if [ ! -d "pkgs/$debdir" ]; then
37 mkdir -p "pkgs/$debdir"
f773602b 38 fi
fb04ffde 39
f773602b 40 if [ -n "$DEPS" ]; then
fb04ffde 41 (cd "pkgs/$debdir"; apt-get download $DEPS)
f773602b
TL
42 fi
43 fi
44 if [ -z "$DOWNLOAD_ONLY" ]; then
fb04ffde 45 for deb in pkgs/$debdir/*.deb; do
f773602b
TL
46 dpkg-deb -x "$deb" "$ROOT"
47 done
f773602b 48 fi
2a1ef81f 49}
3b259e7a 50
2a1ef81f 51make_cpio() {
f773602b 52 echo "creating CPIO archive '$1'"
2a1ef81f
SR
53 fakeroot -- sh -c "
54 cd '$ROOT';
55 find . -print0 | cpio --null -oV --format=newc -F ../$1
56 "
57}
3b259e7a 58
f773602b
TL
59if [ -z "$DOWNLOAD_ONLY" ]; then
60 echo "copying init"
61 cp $INIT "$ROOT/init"
62 chmod a+x "$ROOT/init" # just to be sure
63
64 # tell daemon it's running in the correct environment
65 touch "$ROOT/restore-vm-marker"
66fi
3b259e7a 67
f773602b 68echo "getting base dependencies"
3b259e7a 69
2a1ef81f
SR
70add_pkgs "
71 libstdc++6:amd64 \
f773602b 72 libssl3:amd64 \
2a1ef81f 73 libacl1:amd64 \
03894a93
SR
74 libblkid1:amd64 \
75 libuuid1:amd64 \
76 zlib1g:amd64 \
0faebc35
SR
77 libzstd1:amd64 \
78 liblz4-1:amd64 \
79 liblzma5:amd64 \
80 libgcrypt20:amd64 \
fed9401c 81 libtirpc3:amd64 \
0faebc35
SR
82 lvm2:amd64 \
83 thin-provisioning-tools:amd64 \
fb04ffde 84" 'base'
03894a93 85
f773602b
TL
86if [ -z "$DOWNLOAD_ONLY" ]; then
87
88 echo "install ZFS tool"
89 # install custom ZFS tools (built without libudev)
90 mkdir -p "$ROOT/sbin"
91 cp -a ../zfstools/sbin/* "$ROOT/sbin/"
92 cp -a ../zfstools/etc/* "$ROOT/etc/"
93 cp -a ../zfstools/lib/* "$ROOT/lib/"
94 cp -a ../zfstools/usr/* "$ROOT/usr/"
03894a93 95
f773602b
TL
96 echo "cleanup unused data from base dependencies"
97 rm -rf ${ROOT:?}/usr/share # contains only docs and debian stuff
98 rm -rf ${ROOT:?}/usr/local/include # header files
99 rm -rf ${ROOT:?}/usr/local/share # mostly ZFS tests
100 rm -f ${ROOT:?}/lib/x86_64-linux-gnu/*.a # static libraries
03894a93 101
f773602b
TL
102 make_cpio "initramfs.img"
103fi
104
105echo "getting extra/debug dependencies"
2a1ef81f
SR
106
107# add debug helpers for debug initramfs, packages from above are included too
108add_pkgs "
109 util-linux:amd64 \
110 busybox-static:amd64 \
111 gdb:amd64 \
03894a93 112 strace:amd64 \
fb04ffde 113" 'debug'
f773602b
TL
114
115if [ -z "$DOWNLOAD_ONLY" ]; then
116 # leave /usr/share here, it contains necessary stuff for gdb
117 make_cpio "initramfs-debug.img"
118fi