blob: f751b300ecd56f88b9062a4f691d7f671abf5bbc [file] [log] [blame]
Jiyong Parka128bad2024-09-20 16:53:57 +09001#!/bin/bash
2
3# This is a script to build a Debian image that can run in a VM created via AVF.
4# TODOs:
Jiyong Parka128bad2024-09-20 16:53:57 +09005# - Add Android-specific packages via a new class
6# - Use a stable release from debian-cloud-images
7
Saswat Padhi323a8562025-01-27 13:54:07 -08008SCRIPT_DIR="$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
9
Jiyong Parka128bad2024-09-20 16:53:57 +090010show_help() {
maciek swiech0fdd0512024-10-11 15:12:44 +000011 echo "Usage: sudo $0 [OPTION]... [FILE]"
12 echo "Builds a debian image and save it to FILE. [sudo is required]"
13 echo "Options:"
14 echo "-h Print usage and this help message and exit."
Saswat Padhibf8a9cb2024-12-04 02:32:33 +000015 echo "-a ARCH Architecture of the image [default is host arch: $(uname -m)]"
Saswat Padhi8ba4a532025-02-19 12:37:03 -080016 echo "-g Use Debian generic kernel [default is our custom kernel]"
Jeongik Cha06f4ac52024-11-12 15:56:05 +090017 echo "-r Release mode build"
Saswat Padhi8d02dfe2025-03-19 17:11:53 -070018 echo "-u Set VM boot mode to u-boot [default is to load kernel directly]"
Saswat Padhibf8a9cb2024-12-04 02:32:33 +000019 echo "-w Save temp work directory [for debugging]"
Jiyong Parka128bad2024-09-20 16:53:57 +090020}
21
22check_sudo() {
23 if [ "$EUID" -ne 0 ]; then
Saswat Padhibf8a9cb2024-12-04 02:32:33 +000024 echo "Please run as root." ; exit 1
Jiyong Parka128bad2024-09-20 16:53:57 +090025 fi
26}
27
28parse_options() {
Saswat Padhi8d02dfe2025-03-19 17:11:53 -070029 while getopts "a:ghruw" option; do
Jiyong Parka128bad2024-09-20 16:53:57 +090030 case ${option} in
31 h)
Saswat Padhibf8a9cb2024-12-04 02:32:33 +000032 show_help ; exit
33 ;;
maciek swiech0fdd0512024-10-11 15:12:44 +000034 a)
maciek swiech0fdd0512024-10-11 15:12:44 +000035 arch="$OPTARG"
maciek swiech0fdd0512024-10-11 15:12:44 +000036 ;;
Saswat Padhi8ba4a532025-02-19 12:37:03 -080037 g)
38 use_generic_kernel=1
Saswat Padhiac62a8b2024-12-06 00:48:07 +000039 ;;
Jeongik Cha06f4ac52024-11-12 15:56:05 +090040 r)
41 mode=release
42 ;;
Saswat Padhi8d02dfe2025-03-19 17:11:53 -070043 u)
44 uboot=1
45 ;;
Saswat Padhi26c4ef32024-11-29 19:46:53 +000046 w)
47 save_workdir=1
48 ;;
maciek swiech0fdd0512024-10-11 15:12:44 +000049 *)
Saswat Padhibf8a9cb2024-12-04 02:32:33 +000050 echo "Invalid option: $OPTARG" ; exit 1
maciek swiech0fdd0512024-10-11 15:12:44 +000051 ;;
Jiyong Parka128bad2024-09-20 16:53:57 +090052 esac
53 done
Saswat Padhibf8a9cb2024-12-04 02:32:33 +000054 case "$arch" in
55 aarch64)
56 debian_arch="arm64"
57 ;;
58 x86_64)
59 debian_arch="amd64"
60 ;;
61 *)
62 echo "Invalid architecture: $arch" ; exit 1
63 ;;
64 esac
maciek swiech0fdd0512024-10-11 15:12:44 +000065 if [[ "${*:$OPTIND:1}" ]]; then
Jiyong Park0b3a2ba2024-12-23 12:54:21 +090066 output="${*:$OPTIND:1}"
Jiyong Parka128bad2024-09-20 16:53:57 +090067 fi
68}
69
Jiyong Park879ee4a2024-11-29 14:00:47 +090070prepare_build_id() {
Jiyong Park879ee4a2024-11-29 14:00:47 +090071 if [ -z "${KOKORO_BUILD_NUMBER}" ]; then
Jiyong Parkec71e582024-12-23 14:21:57 +090072 echo eng-$(hostname)-$(date --utc)
Jiyong Park879ee4a2024-11-29 14:00:47 +090073 else
Jiyong Parkec71e582024-12-23 14:21:57 +090074 echo ${KOKORO_BUILD_NUMBER}
Jiyong Park879ee4a2024-11-29 14:00:47 +090075 fi
Jiyong Park879ee4a2024-11-29 14:00:47 +090076}
77
Jiyong Parka128bad2024-09-20 16:53:57 +090078install_prerequisites() {
Jiyong Park0e565ed2024-09-24 12:39:53 +090079 apt update
maciek swiech0fdd0512024-10-11 15:12:44 +000080 packages=(
Jeongik Cha1542d152024-12-04 13:22:09 +090081 apt-utils
Jeongik Cha7e7f19d2024-10-31 20:50:24 +090082 automake
maciek swiech0fdd0512024-10-11 15:12:44 +000083 binfmt-support
84 build-essential
85 ca-certificates
Jeongik Cha7e7f19d2024-10-31 20:50:24 +090086 cmake
maciek swiech0fdd0512024-10-11 15:12:44 +000087 curl
88 debsums
89 dosfstools
90 fai-server
91 fai-setup-storage
92 fdisk
Jeongik Cha7e7f19d2024-10-31 20:50:24 +090093 git
94 libjson-c-dev
95 libtool
96 libwebsockets-dev
maciek swiech0fdd0512024-10-11 15:12:44 +000097 make
Jeongik Chace3a3962024-10-12 03:47:23 +090098 protobuf-compiler
maciek swiech0fdd0512024-10-11 15:12:44 +000099 python3
100 python3-libcloud
101 python3-marshmallow
102 python3-pytest
103 python3-yaml
104 qemu-user-static
105 qemu-utils
106 sudo
107 udev
108 )
109 if [[ "$arch" == "aarch64" ]]; then
110 packages+=(
111 gcc-aarch64-linux-gnu
112 libc6-dev-arm64-cross
113 qemu-system-arm
114 )
115 else
116 packages+=(
Jeongik Cha904d9622024-10-21 11:16:37 +0900117 qemu-system
Jeongik Cha8e711982024-10-20 12:45:35 +0900118 )
119 fi
120
Saswat Padhi8d02dfe2025-03-19 17:11:53 -0700121 if [[ "$uboot" != 1 ]]; then
122 packages+=(
123 libguestfs-tools
124 linux-image-generic
125 )
126 fi
127
Saswat Padhi8ba4a532025-02-19 12:37:03 -0800128 if [[ "$use_generic_kernel" != 1 ]]; then
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000129 packages+=(
130 bc
131 bison
132 debhelper
133 dh-exec
134 flex
135 gcc-12
136 kernel-wedge
137 libelf-dev
138 libpci-dev
139 lz4
140 pahole
141 python3-jinja2
142 python3-docutils
143 quilt
144 rsync
145 )
146 if [[ "$arch" == "aarch64" ]]; then
147 packages+=(
148 gcc-arm-linux-gnueabihf
149 gcc-12-aarch64-linux-gnu
150 )
151 fi
152 fi
153
Jiyong Park44dd28f2024-09-20 18:47:40 +0900154 DEBIAN_FRONTEND=noninteractive \
maciek swiech0fdd0512024-10-11 15:12:44 +0000155 apt install --no-install-recommends --assume-yes "${packages[@]}"
Jeongik Chab137a5f2024-10-02 12:53:05 +0900156
maciek swiech0fdd0512024-10-11 15:12:44 +0000157 if [ ! -f $"HOME"/.cargo/bin/cargo ]; then
Seungjae Yoo198a0fb2024-10-04 16:29:12 +0900158 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
159 fi
160
maciek swiech0fdd0512024-10-11 15:12:44 +0000161 source "$HOME"/.cargo/env
162 rustup target add "${arch}"-unknown-linux-gnu
Jeongik Cha139ddfd2024-11-01 23:16:44 +0900163 cargo install cargo-license
Jiyong Parkff0dc0d2025-01-06 17:38:21 +0900164 cargo install cargo-deb
Jiyong Parka128bad2024-09-20 16:53:57 +0900165}
166
167download_debian_cloud_image() {
Jeongik Chab5d11772025-02-04 21:18:00 +0900168 local ver=38da93fe
Jiyong Parka128bad2024-09-20 16:53:57 +0900169 local prj=debian-cloud-images
maciek swiech0fdd0512024-10-11 15:12:44 +0000170 local url="https://salsa.debian.org/cloud-team/${prj}/-/archive/${ver}/${prj}-${ver}.tar.gz"
171 local outdir="${debian_cloud_image}"
Jiyong Parka128bad2024-09-20 16:53:57 +0900172
maciek swiech0fdd0512024-10-11 15:12:44 +0000173 mkdir -p "${outdir}"
174 wget -O - "${url}" | tar xz -C "${outdir}" --strip-components=1
Jiyong Parka128bad2024-09-20 16:53:57 +0900175}
176
Jiyong Parkff0dc0d2025-01-06 17:38:21 +0900177build_rust_as_deb() {
Saswat Padhi323a8562025-01-27 13:54:07 -0800178 pushd "$SCRIPT_DIR/../../guest/$1" > /dev/null
Jiyong Parkff0dc0d2025-01-06 17:38:21 +0900179 cargo deb \
Seungjae Yoo1cfcb582024-10-17 14:06:58 +0900180 --target "${arch}-unknown-linux-gnu" \
Jiyong Parkff0dc0d2025-01-06 17:38:21 +0900181 --output "${debian_cloud_image}/localdebs"
Seungjae Yoo1cfcb582024-10-17 14:06:58 +0900182 popd > /dev/null
183}
184
Jeongik Cha7e7f19d2024-10-31 20:50:24 +0900185build_ttyd() {
186 local ttyd_version=1.7.7
187 local url="https://github.com/tsl0922/ttyd/archive/refs/tags/${ttyd_version}.tar.gz"
Saswat Padhi323a8562025-01-27 13:54:07 -0800188 cp -r "$SCRIPT_DIR/ttyd" "${workdir}/ttyd"
Jeongik Cha7e7f19d2024-10-31 20:50:24 +0900189
190 pushd "${workdir}" > /dev/null
191 wget "${url}" -O - | tar xz
192 cp ttyd/* ttyd-${ttyd_version}/scripts
193 pushd "$workdir/ttyd-${ttyd_version}" > /dev/null
194 bash -c "env BUILD_TARGET=${arch} ./scripts/cross-build.sh"
195 mkdir -p "${dst}/files/usr/local/bin/ttyd"
maciek swieche17e59f2024-11-25 20:13:23 +0000196 cp "/tmp/stage/${arch}-linux-musl/bin/ttyd" "${dst}/files/usr/local/bin/ttyd/AVF"
Jeongik Cha7e7f19d2024-10-31 20:50:24 +0900197 chmod 777 "${dst}/files/usr/local/bin/ttyd/AVF"
Jeongik Cha139ddfd2024-11-01 23:16:44 +0900198 mkdir -p "${dst}/files/usr/share/doc/ttyd"
199 cp LICENSE "${dst}/files/usr/share/doc/ttyd/copyright"
Jeongik Cha7e7f19d2024-10-31 20:50:24 +0900200 popd > /dev/null
201 popd > /dev/null
202}
203
Jiyong Park44dd28f2024-09-20 18:47:40 +0900204copy_android_config() {
maciek swieche17e59f2024-11-25 20:13:23 +0000205 local src
206 local dst
Saswat Padhi323a8562025-01-27 13:54:07 -0800207 src="$SCRIPT_DIR/fai_config"
maciek swieche17e59f2024-11-25 20:13:23 +0000208 dst="${config_space}"
Jiyong Park44dd28f2024-09-20 18:47:40 +0900209
maciek swiech0fdd0512024-10-11 15:12:44 +0000210 cp -R "${src}"/* "${dst}"
Saswat Padhi323a8562025-01-27 13:54:07 -0800211 cp "$SCRIPT_DIR/image.yaml" "${resources_dir}"
Jeongik Cha50952062024-09-23 18:13:38 +0900212
Saswat Padhi323a8562025-01-27 13:54:07 -0800213 cp -R "$SCRIPT_DIR/localdebs/" "${debian_cloud_image}/"
Jeongik Cha7e7f19d2024-10-31 20:50:24 +0900214 build_ttyd
Jiyong Parkff0dc0d2025-01-06 17:38:21 +0900215 build_rust_as_deb forwarder_guest
216 build_rust_as_deb forwarder_guest_launcher
217 build_rust_as_deb shutdown_runner
Keiichi Watanabe4d75b332025-03-05 12:18:32 +0000218 build_rust_as_deb storage_balloon_agent
Jiyong Park44dd28f2024-09-20 18:47:40 +0900219}
220
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000221package_custom_kernel() {
Saswat Padhi8ba4a532025-02-19 12:37:03 -0800222 if [[ "$use_generic_kernel" == 1 ]]; then
223 # NOTE: For bpfcc-tools, install generic headers for the generic kernel.
Saswat Padhif3e52572025-02-06 14:30:08 -0800224 cat > "${config_space}/package_config/LAST" <<EOF
225PACKAGES install
226linux-headers-generic
227EOF
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000228 return
229 fi
230
Saswat Padhi8ba4a532025-02-19 12:37:03 -0800231 # NOTE: Prevent FAI from installing a default Debian kernel, by removing
232 # linux-image meta package names from arch-specific class files.
233 sed -i "/linux-image.*-${debian_arch}/d" \
234 "${config_space}/package_config/${debian_arch^^}"
235
Saswat Padhif28d2172025-01-16 14:28:10 -0800236 local deb_base_url="https://deb.debian.org/debian"
237 local deb_security_base_url="https://security.debian.org/debian-security"
238
239 local pool_dir="pool/main/l/linux"
240 local ksrc_base_url="${deb_base_url}/${pool_dir}"
241 local ksrc_security_base_url="${deb_security_base_url}/${pool_dir}"
242
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000243 # NOTE: 6.1 is the latest LTS kernel for which Debian's kernel build scripts
244 # work on Python 3.10, the default version on our Ubuntu 22.04 builders.
Saswat Padhi6c1aaf32025-01-22 12:47:20 -0800245 #
246 # We track the latest Debian stable kernel version for the 6.1 branch,
247 # which can be found at:
248 # https://packages.debian.org/stable/linux-source-6.1
249 local debian_kver="6.1.123-1"
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000250
Saswat Padhif28d2172025-01-16 14:28:10 -0800251 local dsc_file="linux_${debian_kver}.dsc"
252 local orig_ksrc_file="linux_${debian_kver%-*}.orig.tar.xz"
253 local debian_ksrc_file="linux_${debian_kver}.debian.tar.xz"
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000254
Saswat Padhi74b3ac92024-12-11 13:41:59 -0800255 # 0. Grab the kernel sources, and the latest debian keyrings
256 mkdir -p "${workdir}/kernel"
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000257 pushd "${workdir}/kernel" > /dev/null
Saswat Padhif28d2172025-01-16 14:28:10 -0800258
259 wget "${ksrc_security_base_url}/${dsc_file}" || \
260 wget "${ksrc_base_url}/${dsc_file}"
261
262 wget "${ksrc_security_base_url}/${orig_ksrc_file}" || \
263 wget "${ksrc_base_url}/${orig_ksrc_file}"
264
265 wget "${ksrc_security_base_url}/${debian_ksrc_file}" || \
266 wget "${ksrc_base_url}/${debian_ksrc_file}"
267
Saswat Padhi74b3ac92024-12-11 13:41:59 -0800268 rsync -az --progress keyring.debian.org::keyrings/keyrings/ /usr/share/keyrings/
269
270 # 1. Verify, extract and merge patches into the original kernel sources
271 dpkg-source --require-strong-checksums \
272 --require-valid-signature \
Saswat Padhif28d2172025-01-16 14:28:10 -0800273 --extract "${dsc_file}"
Saswat Padhi74b3ac92024-12-11 13:41:59 -0800274 pushd "linux-${debian_kver%-*}" > /dev/null
Saswat Padhi61fbaed2025-01-16 15:58:00 -0800275
Saswat Padhi58333e72025-02-12 18:39:39 -0800276 local kpatches_src="$SCRIPT_DIR/kernel/patches"
Saswat Padhi61fbaed2025-01-16 15:58:00 -0800277 cp -r "${kpatches_src}/avf" debian/patches/
278 cat "${kpatches_src}/series" >> debian/patches/series
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000279 ./debian/rules orig
280
Saswat Padhif28d2172025-01-16 14:28:10 -0800281 local custom_flavour="avf"
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000282 local debarch_flavour="${custom_flavour}-${debian_arch}"
Saswat Padhif28d2172025-01-16 14:28:10 -0800283
284 local abi_kver="$(sed -nE 's;Package: linux-support-(.*);\1;p' debian/control)"
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000285 local abi_flavour="${abi_kver}-${debarch_flavour}"
286
287 # 2. Define our custom flavour and regenerate control file
288 # NOTE: Our flavour extends Debian's `cloud` config on the `none` featureset.
Saswat Padhi58333e72025-02-12 18:39:39 -0800289 cp "$SCRIPT_DIR/kernel/config" \
290 debian/config/${debian_arch}/config.${debarch_flavour}
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000291
292 sed -z "s;\[base\]\nflavours:;[base]\nflavours:\n ${debarch_flavour};" \
293 -i debian/config/${debian_arch}/none/defines
294 cat >> debian/config/${debian_arch}/none/defines <<EOF
295[${debarch_flavour}_image]
296configs:
297 config.cloud
298 ${debian_arch}/config.${debarch_flavour}
299EOF
300 cat >> debian/config/${debian_arch}/defines <<EOF
301[${debarch_flavour}_description]
302hardware: ${arch} AVF
303hardware-long: ${arch} Android Virtualization Framework
304EOF
305 ./debian/rules debian/control || true
306
307 # 3. Build the kernel and generate Debian packages
308 ./debian/rules source
309 [[ "$arch" == "$(uname -m)" ]] || export $(dpkg-architecture -a $debian_arch)
310 make -j$(nproc) -f debian/rules.gen \
311 "binary-arch_${debian_arch}_none_${debarch_flavour}"
312
313 # 4. Copy the packages to localdebs and add their names to package_config/AVF
314 popd > /dev/null
315 cp "linux-headers-${abi_flavour}_${debian_kver}_${debian_arch}.deb" \
316 "linux-image-${abi_flavour}-unsigned_${debian_kver}_${debian_arch}.deb" \
317 "${debian_cloud_image}/localdebs/"
318 popd > /dev/null
319 cat >> "${config_space}/package_config/AVF" <<EOF
320linux-headers-${abi_flavour}
321linux-image-${abi_flavour}-unsigned
322EOF
323}
324
Jiyong Parka128bad2024-09-20 16:53:57 +0900325run_fai() {
Saswat Padhi8d02dfe2025-03-19 17:11:53 -0700326 # NOTE: Prevent FAI from installing grub packages and running related scripts,
327 # if we are loading the kernel directly.
328 if [[ "$uboot" != 1 ]]; then
329 sed -i "/shim-signed/d ; /grub.*${debian_arch}.*/d" \
330 "${config_space}/package_config/${debian_arch^^}"
331 rm "${config_space}/scripts/SYSTEM_BOOT/20-grub"
332 fi
333
Jiyong Park0b3a2ba2024-12-23 12:54:21 +0900334 local out="${raw_disk_image}"
maciek swiech0fdd0512024-10-11 15:12:44 +0000335 make -C "${debian_cloud_image}" "image_bookworm_nocloud_${debian_arch}"
336 mv "${debian_cloud_image}/image_bookworm_nocloud_${debian_arch}.raw" "${out}"
Jiyong Parka128bad2024-09-20 16:53:57 +0900337}
338
Jiyong Parkdfec0202024-12-23 13:24:01 +0900339generate_output_package() {
340 fdisk -l "${raw_disk_image}"
Jiyong Park159b8f42024-12-26 18:05:22 +0900341 local root_partition_num=1
Jiyong Park159b8f42024-12-26 18:05:22 +0900342 local efi_partition_num=15
Mu-Le Lee955b6582024-11-01 15:40:58 +0800343
Saswat Padhi8d02dfe2025-03-19 17:11:53 -0700344 local vm_config="$SCRIPT_DIR/vm_config.json"
345 if [[ "$uboot" == 1 ]]; then
346 vm_config="$SCRIPT_DIR/vm_config.u-boot.json"
347 fi
348
Jiyong Parkec71e582024-12-23 14:21:57 +0900349 pushd ${workdir} > /dev/null
350
351 echo ${build_id} > build_id
352
Jiyong Park0b3a2ba2024-12-23 12:54:21 +0900353 loop=$(losetup -f --show --partscan $raw_disk_image)
maciek swieche17e59f2024-11-25 20:13:23 +0000354 dd if="${loop}p$root_partition_num" of=root_part
maciek swieche17e59f2024-11-25 20:13:23 +0000355 dd if="${loop}p$efi_partition_num" of=efi_part
356 losetup -d "${loop}"
Mu-Le Lee955b6582024-11-01 15:40:58 +0800357
Jiyong Parkec71e582024-12-23 14:21:57 +0900358 cp ${vm_config} vm_config.json
Saswat Padhi8ba4a532025-02-19 12:37:03 -0800359 # TODO(b/363985291): remove this when ballooning is supported on generic kernel
360 if [[ "$use_generic_kernel" == 1 ]] && [[ "$arch" == "aarch64" ]]; then
361 sed -i 's/"auto_memory_balloon": true/"auto_memory_balloon": false/g' vm_config.json
362 fi
363
Jiyong Park0b3a2ba2024-12-23 12:54:21 +0900364 sed -i "s/{root_part_guid}/$(sfdisk --part-uuid $raw_disk_image $root_partition_num)/g" vm_config.json
Jiyong Park0b3a2ba2024-12-23 12:54:21 +0900365 sed -i "s/{efi_part_guid}/$(sfdisk --part-uuid $raw_disk_image $efi_partition_num)/g" vm_config.json
Jiyong Parkdfec0202024-12-23 13:24:01 +0900366
Saswat Padhi80e72872025-02-25 21:20:21 -0800367 contents=(
368 build_id
369 root_part
370 efi_part
371 vm_config.json
372 )
373
Saswat Padhi8d02dfe2025-03-19 17:11:53 -0700374 if [[ "$uboot" != 1 ]]; then
375 rm -f vmlinuz* initrd.img*
376 virt-get-kernel -a "${raw_disk_image}"
377 mv vmlinuz* vmlinuz
378 mv initrd.img* initrd.img
379 contents+=(
380 vmlinuz
381 initrd.img
382 )
383 fi
384
385 popd > /dev/null
386
Jiyong Parkdfec0202024-12-23 13:24:01 +0900387 # --sparse option isn't supported in apache-commons-compress
Saswat Padhi80e72872025-02-25 21:20:21 -0800388 tar czv -f ${output} -C ${workdir} "${contents[@]}"
Mu-Le Lee955b6582024-11-01 15:40:58 +0800389}
390
Jiyong Parka128bad2024-09-20 16:53:57 +0900391clean_up() {
Saswat Padhibf8a9cb2024-12-04 02:32:33 +0000392 [ "$save_workdir" -eq 1 ] || rm -rf "${workdir}"
Jiyong Parka128bad2024-09-20 16:53:57 +0900393}
394
395set -e
396trap clean_up EXIT
397
Jiyong Park0b3a2ba2024-12-23 12:54:21 +0900398output=images.tar.gz
Jiyong Parka128bad2024-09-20 16:53:57 +0900399workdir=$(mktemp -d)
Jiyong Parkec71e582024-12-23 14:21:57 +0900400raw_disk_image=${workdir}/image.raw
Jiyong Park879ee4a2024-11-29 14:00:47 +0900401build_id=$(prepare_build_id)
Jiyong Parka128bad2024-09-20 16:53:57 +0900402debian_cloud_image=${workdir}/debian_cloud_image
Jiyong Park44dd28f2024-09-20 18:47:40 +0900403debian_version=bookworm
404config_space=${debian_cloud_image}/config_space/${debian_version}
Jeongik Cha37047c32024-09-20 23:09:16 +0900405resources_dir=${debian_cloud_image}/src/debian_cloud_images/resources
Saswat Padhibf8a9cb2024-12-04 02:32:33 +0000406arch="$(uname -m)"
Jeongik Cha06f4ac52024-11-12 15:56:05 +0900407mode=debug
Saswat Padhi26c4ef32024-11-29 19:46:53 +0000408save_workdir=0
Saswat Padhi8ba4a532025-02-19 12:37:03 -0800409use_generic_kernel=0
Saswat Padhi8d02dfe2025-03-19 17:11:53 -0700410uboot=0
Jiyong Park879ee4a2024-11-29 14:00:47 +0900411
maciek swiech0fdd0512024-10-11 15:12:44 +0000412parse_options "$@"
Jiyong Parka128bad2024-09-20 16:53:57 +0900413check_sudo
Jiyong Parka128bad2024-09-20 16:53:57 +0900414install_prerequisites
415download_debian_cloud_image
Jiyong Park44dd28f2024-09-20 18:47:40 +0900416copy_android_config
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000417package_custom_kernel
Jiyong Park0e565ed2024-09-24 12:39:53 +0900418run_fai
Jiyong Parkdfec0202024-12-23 13:24:01 +0900419generate_output_package