blob: 63035ae5b245477ab9afce3a2b60ae167b62b7ac [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 Padhibf8a9cb2024-12-04 02:32:33 +000018 echo "-w Save temp work directory [for debugging]"
Jiyong Parka128bad2024-09-20 16:53:57 +090019}
20
21check_sudo() {
22 if [ "$EUID" -ne 0 ]; then
Saswat Padhibf8a9cb2024-12-04 02:32:33 +000023 echo "Please run as root." ; exit 1
Jiyong Parka128bad2024-09-20 16:53:57 +090024 fi
25}
26
27parse_options() {
Saswat Padhi8ba4a532025-02-19 12:37:03 -080028 while getopts "a:ghrw" option; do
Jiyong Parka128bad2024-09-20 16:53:57 +090029 case ${option} in
30 h)
Saswat Padhibf8a9cb2024-12-04 02:32:33 +000031 show_help ; exit
32 ;;
maciek swiech0fdd0512024-10-11 15:12:44 +000033 a)
maciek swiech0fdd0512024-10-11 15:12:44 +000034 arch="$OPTARG"
maciek swiech0fdd0512024-10-11 15:12:44 +000035 ;;
Saswat Padhi8ba4a532025-02-19 12:37:03 -080036 g)
37 use_generic_kernel=1
Saswat Padhiac62a8b2024-12-06 00:48:07 +000038 ;;
Jeongik Cha06f4ac52024-11-12 15:56:05 +090039 r)
40 mode=release
41 ;;
Saswat Padhi26c4ef32024-11-29 19:46:53 +000042 w)
43 save_workdir=1
44 ;;
maciek swiech0fdd0512024-10-11 15:12:44 +000045 *)
Saswat Padhibf8a9cb2024-12-04 02:32:33 +000046 echo "Invalid option: $OPTARG" ; exit 1
maciek swiech0fdd0512024-10-11 15:12:44 +000047 ;;
Jiyong Parka128bad2024-09-20 16:53:57 +090048 esac
49 done
Saswat Padhibf8a9cb2024-12-04 02:32:33 +000050 case "$arch" in
51 aarch64)
52 debian_arch="arm64"
53 ;;
54 x86_64)
55 debian_arch="amd64"
56 ;;
57 *)
58 echo "Invalid architecture: $arch" ; exit 1
59 ;;
60 esac
maciek swiech0fdd0512024-10-11 15:12:44 +000061 if [[ "${*:$OPTIND:1}" ]]; then
Jiyong Park0b3a2ba2024-12-23 12:54:21 +090062 output="${*:$OPTIND:1}"
Jiyong Parka128bad2024-09-20 16:53:57 +090063 fi
64}
65
Jiyong Park879ee4a2024-11-29 14:00:47 +090066prepare_build_id() {
Jiyong Park879ee4a2024-11-29 14:00:47 +090067 if [ -z "${KOKORO_BUILD_NUMBER}" ]; then
Jiyong Parkec71e582024-12-23 14:21:57 +090068 echo eng-$(hostname)-$(date --utc)
Jiyong Park879ee4a2024-11-29 14:00:47 +090069 else
Jiyong Parkec71e582024-12-23 14:21:57 +090070 echo ${KOKORO_BUILD_NUMBER}
Jiyong Park879ee4a2024-11-29 14:00:47 +090071 fi
Jiyong Park879ee4a2024-11-29 14:00:47 +090072}
73
Jiyong Parka128bad2024-09-20 16:53:57 +090074install_prerequisites() {
Jiyong Park0e565ed2024-09-24 12:39:53 +090075 apt update
maciek swiech0fdd0512024-10-11 15:12:44 +000076 packages=(
Jeongik Cha1542d152024-12-04 13:22:09 +090077 apt-utils
Jeongik Cha7e7f19d2024-10-31 20:50:24 +090078 automake
maciek swiech0fdd0512024-10-11 15:12:44 +000079 binfmt-support
80 build-essential
81 ca-certificates
Jeongik Cha7e7f19d2024-10-31 20:50:24 +090082 cmake
maciek swiech0fdd0512024-10-11 15:12:44 +000083 curl
84 debsums
85 dosfstools
86 fai-server
87 fai-setup-storage
88 fdisk
Jeongik Cha7e7f19d2024-10-31 20:50:24 +090089 git
90 libjson-c-dev
91 libtool
92 libwebsockets-dev
maciek swiech0fdd0512024-10-11 15:12:44 +000093 make
Jeongik Chace3a3962024-10-12 03:47:23 +090094 protobuf-compiler
maciek swiech0fdd0512024-10-11 15:12:44 +000095 python3
96 python3-libcloud
97 python3-marshmallow
98 python3-pytest
99 python3-yaml
100 qemu-user-static
101 qemu-utils
102 sudo
103 udev
104 )
105 if [[ "$arch" == "aarch64" ]]; then
106 packages+=(
107 gcc-aarch64-linux-gnu
108 libc6-dev-arm64-cross
109 qemu-system-arm
110 )
111 else
112 packages+=(
Jeongik Cha904d9622024-10-21 11:16:37 +0900113 qemu-system
Jeongik Cha8e711982024-10-20 12:45:35 +0900114 )
115 fi
116
117 # TODO(b/365955006): remove these lines when uboot supports x86_64 EFI application
118 if [[ "$arch" == "x86_64" ]]; then
119 packages+=(
120 libguestfs-tools
Saswat Padhi79f52132024-11-27 03:56:40 +0000121 linux-image-generic
maciek swiech0fdd0512024-10-11 15:12:44 +0000122 )
123 fi
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000124
Saswat Padhi8ba4a532025-02-19 12:37:03 -0800125 if [[ "$use_generic_kernel" != 1 ]]; then
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000126 packages+=(
127 bc
128 bison
129 debhelper
130 dh-exec
131 flex
132 gcc-12
133 kernel-wedge
134 libelf-dev
135 libpci-dev
136 lz4
137 pahole
138 python3-jinja2
139 python3-docutils
140 quilt
141 rsync
142 )
143 if [[ "$arch" == "aarch64" ]]; then
144 packages+=(
145 gcc-arm-linux-gnueabihf
146 gcc-12-aarch64-linux-gnu
147 )
148 fi
149 fi
150
Jiyong Park44dd28f2024-09-20 18:47:40 +0900151 DEBIAN_FRONTEND=noninteractive \
maciek swiech0fdd0512024-10-11 15:12:44 +0000152 apt install --no-install-recommends --assume-yes "${packages[@]}"
Jeongik Chab137a5f2024-10-02 12:53:05 +0900153
maciek swiech0fdd0512024-10-11 15:12:44 +0000154 if [ ! -f $"HOME"/.cargo/bin/cargo ]; then
Seungjae Yoo198a0fb2024-10-04 16:29:12 +0900155 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
156 fi
157
maciek swiech0fdd0512024-10-11 15:12:44 +0000158 source "$HOME"/.cargo/env
159 rustup target add "${arch}"-unknown-linux-gnu
Jeongik Cha139ddfd2024-11-01 23:16:44 +0900160 cargo install cargo-license
Jiyong Parkff0dc0d2025-01-06 17:38:21 +0900161 cargo install cargo-deb
Jiyong Parka128bad2024-09-20 16:53:57 +0900162}
163
164download_debian_cloud_image() {
Jeongik Chab5d11772025-02-04 21:18:00 +0900165 local ver=38da93fe
Jiyong Parka128bad2024-09-20 16:53:57 +0900166 local prj=debian-cloud-images
maciek swiech0fdd0512024-10-11 15:12:44 +0000167 local url="https://salsa.debian.org/cloud-team/${prj}/-/archive/${ver}/${prj}-${ver}.tar.gz"
168 local outdir="${debian_cloud_image}"
Jiyong Parka128bad2024-09-20 16:53:57 +0900169
maciek swiech0fdd0512024-10-11 15:12:44 +0000170 mkdir -p "${outdir}"
171 wget -O - "${url}" | tar xz -C "${outdir}" --strip-components=1
Jiyong Parka128bad2024-09-20 16:53:57 +0900172}
173
Jiyong Parkff0dc0d2025-01-06 17:38:21 +0900174build_rust_as_deb() {
Saswat Padhi323a8562025-01-27 13:54:07 -0800175 pushd "$SCRIPT_DIR/../../guest/$1" > /dev/null
Jiyong Parkff0dc0d2025-01-06 17:38:21 +0900176 cargo deb \
Seungjae Yoo1cfcb582024-10-17 14:06:58 +0900177 --target "${arch}-unknown-linux-gnu" \
Jiyong Parkff0dc0d2025-01-06 17:38:21 +0900178 --output "${debian_cloud_image}/localdebs"
Seungjae Yoo1cfcb582024-10-17 14:06:58 +0900179 popd > /dev/null
180}
181
Jeongik Cha7e7f19d2024-10-31 20:50:24 +0900182build_ttyd() {
183 local ttyd_version=1.7.7
184 local url="https://github.com/tsl0922/ttyd/archive/refs/tags/${ttyd_version}.tar.gz"
Saswat Padhi323a8562025-01-27 13:54:07 -0800185 cp -r "$SCRIPT_DIR/ttyd" "${workdir}/ttyd"
Jeongik Cha7e7f19d2024-10-31 20:50:24 +0900186
187 pushd "${workdir}" > /dev/null
188 wget "${url}" -O - | tar xz
189 cp ttyd/* ttyd-${ttyd_version}/scripts
190 pushd "$workdir/ttyd-${ttyd_version}" > /dev/null
191 bash -c "env BUILD_TARGET=${arch} ./scripts/cross-build.sh"
192 mkdir -p "${dst}/files/usr/local/bin/ttyd"
maciek swieche17e59f2024-11-25 20:13:23 +0000193 cp "/tmp/stage/${arch}-linux-musl/bin/ttyd" "${dst}/files/usr/local/bin/ttyd/AVF"
Jeongik Cha7e7f19d2024-10-31 20:50:24 +0900194 chmod 777 "${dst}/files/usr/local/bin/ttyd/AVF"
Jeongik Cha139ddfd2024-11-01 23:16:44 +0900195 mkdir -p "${dst}/files/usr/share/doc/ttyd"
196 cp LICENSE "${dst}/files/usr/share/doc/ttyd/copyright"
Jeongik Cha7e7f19d2024-10-31 20:50:24 +0900197 popd > /dev/null
198 popd > /dev/null
199}
200
Jiyong Park44dd28f2024-09-20 18:47:40 +0900201copy_android_config() {
maciek swieche17e59f2024-11-25 20:13:23 +0000202 local src
203 local dst
Saswat Padhi323a8562025-01-27 13:54:07 -0800204 src="$SCRIPT_DIR/fai_config"
maciek swieche17e59f2024-11-25 20:13:23 +0000205 dst="${config_space}"
Jiyong Park44dd28f2024-09-20 18:47:40 +0900206
maciek swiech0fdd0512024-10-11 15:12:44 +0000207 cp -R "${src}"/* "${dst}"
Saswat Padhi323a8562025-01-27 13:54:07 -0800208 cp "$SCRIPT_DIR/image.yaml" "${resources_dir}"
Jeongik Cha50952062024-09-23 18:13:38 +0900209
Saswat Padhi323a8562025-01-27 13:54:07 -0800210 cp -R "$SCRIPT_DIR/localdebs/" "${debian_cloud_image}/"
Jeongik Cha7e7f19d2024-10-31 20:50:24 +0900211 build_ttyd
Jiyong Parkff0dc0d2025-01-06 17:38:21 +0900212 build_rust_as_deb forwarder_guest
213 build_rust_as_deb forwarder_guest_launcher
214 build_rust_as_deb shutdown_runner
Jiyong Park44dd28f2024-09-20 18:47:40 +0900215}
216
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000217package_custom_kernel() {
Saswat Padhi8ba4a532025-02-19 12:37:03 -0800218 if [[ "$use_generic_kernel" == 1 ]]; then
219 # NOTE: For bpfcc-tools, install generic headers for the generic kernel.
Saswat Padhif3e52572025-02-06 14:30:08 -0800220 cat > "${config_space}/package_config/LAST" <<EOF
221PACKAGES install
222linux-headers-generic
223EOF
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000224 return
225 fi
226
Saswat Padhi8ba4a532025-02-19 12:37:03 -0800227 # NOTE: Prevent FAI from installing a default Debian kernel, by removing
228 # linux-image meta package names from arch-specific class files.
229 sed -i "/linux-image.*-${debian_arch}/d" \
230 "${config_space}/package_config/${debian_arch^^}"
231
Saswat Padhif28d2172025-01-16 14:28:10 -0800232 local deb_base_url="https://deb.debian.org/debian"
233 local deb_security_base_url="https://security.debian.org/debian-security"
234
235 local pool_dir="pool/main/l/linux"
236 local ksrc_base_url="${deb_base_url}/${pool_dir}"
237 local ksrc_security_base_url="${deb_security_base_url}/${pool_dir}"
238
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000239 # NOTE: 6.1 is the latest LTS kernel for which Debian's kernel build scripts
240 # work on Python 3.10, the default version on our Ubuntu 22.04 builders.
Saswat Padhi6c1aaf32025-01-22 12:47:20 -0800241 #
242 # We track the latest Debian stable kernel version for the 6.1 branch,
243 # which can be found at:
244 # https://packages.debian.org/stable/linux-source-6.1
245 local debian_kver="6.1.123-1"
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000246
Saswat Padhif28d2172025-01-16 14:28:10 -0800247 local dsc_file="linux_${debian_kver}.dsc"
248 local orig_ksrc_file="linux_${debian_kver%-*}.orig.tar.xz"
249 local debian_ksrc_file="linux_${debian_kver}.debian.tar.xz"
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000250
Saswat Padhi74b3ac92024-12-11 13:41:59 -0800251 # 0. Grab the kernel sources, and the latest debian keyrings
252 mkdir -p "${workdir}/kernel"
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000253 pushd "${workdir}/kernel" > /dev/null
Saswat Padhif28d2172025-01-16 14:28:10 -0800254
255 wget "${ksrc_security_base_url}/${dsc_file}" || \
256 wget "${ksrc_base_url}/${dsc_file}"
257
258 wget "${ksrc_security_base_url}/${orig_ksrc_file}" || \
259 wget "${ksrc_base_url}/${orig_ksrc_file}"
260
261 wget "${ksrc_security_base_url}/${debian_ksrc_file}" || \
262 wget "${ksrc_base_url}/${debian_ksrc_file}"
263
Saswat Padhi74b3ac92024-12-11 13:41:59 -0800264 rsync -az --progress keyring.debian.org::keyrings/keyrings/ /usr/share/keyrings/
265
266 # 1. Verify, extract and merge patches into the original kernel sources
267 dpkg-source --require-strong-checksums \
268 --require-valid-signature \
Saswat Padhif28d2172025-01-16 14:28:10 -0800269 --extract "${dsc_file}"
Saswat Padhi74b3ac92024-12-11 13:41:59 -0800270 pushd "linux-${debian_kver%-*}" > /dev/null
Saswat Padhi61fbaed2025-01-16 15:58:00 -0800271
Saswat Padhi58333e72025-02-12 18:39:39 -0800272 local kpatches_src="$SCRIPT_DIR/kernel/patches"
Saswat Padhi61fbaed2025-01-16 15:58:00 -0800273 cp -r "${kpatches_src}/avf" debian/patches/
274 cat "${kpatches_src}/series" >> debian/patches/series
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000275 ./debian/rules orig
276
Saswat Padhif28d2172025-01-16 14:28:10 -0800277 local custom_flavour="avf"
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000278 local debarch_flavour="${custom_flavour}-${debian_arch}"
Saswat Padhif28d2172025-01-16 14:28:10 -0800279
280 local abi_kver="$(sed -nE 's;Package: linux-support-(.*);\1;p' debian/control)"
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000281 local abi_flavour="${abi_kver}-${debarch_flavour}"
282
283 # 2. Define our custom flavour and regenerate control file
284 # NOTE: Our flavour extends Debian's `cloud` config on the `none` featureset.
Saswat Padhi58333e72025-02-12 18:39:39 -0800285 cp "$SCRIPT_DIR/kernel/config" \
286 debian/config/${debian_arch}/config.${debarch_flavour}
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000287
288 sed -z "s;\[base\]\nflavours:;[base]\nflavours:\n ${debarch_flavour};" \
289 -i debian/config/${debian_arch}/none/defines
290 cat >> debian/config/${debian_arch}/none/defines <<EOF
291[${debarch_flavour}_image]
292configs:
293 config.cloud
294 ${debian_arch}/config.${debarch_flavour}
295EOF
296 cat >> debian/config/${debian_arch}/defines <<EOF
297[${debarch_flavour}_description]
298hardware: ${arch} AVF
299hardware-long: ${arch} Android Virtualization Framework
300EOF
301 ./debian/rules debian/control || true
302
303 # 3. Build the kernel and generate Debian packages
304 ./debian/rules source
305 [[ "$arch" == "$(uname -m)" ]] || export $(dpkg-architecture -a $debian_arch)
306 make -j$(nproc) -f debian/rules.gen \
307 "binary-arch_${debian_arch}_none_${debarch_flavour}"
308
309 # 4. Copy the packages to localdebs and add their names to package_config/AVF
310 popd > /dev/null
311 cp "linux-headers-${abi_flavour}_${debian_kver}_${debian_arch}.deb" \
312 "linux-image-${abi_flavour}-unsigned_${debian_kver}_${debian_arch}.deb" \
313 "${debian_cloud_image}/localdebs/"
314 popd > /dev/null
315 cat >> "${config_space}/package_config/AVF" <<EOF
316linux-headers-${abi_flavour}
317linux-image-${abi_flavour}-unsigned
318EOF
319}
320
Jiyong Parka128bad2024-09-20 16:53:57 +0900321run_fai() {
Jiyong Park0b3a2ba2024-12-23 12:54:21 +0900322 local out="${raw_disk_image}"
maciek swiech0fdd0512024-10-11 15:12:44 +0000323 make -C "${debian_cloud_image}" "image_bookworm_nocloud_${debian_arch}"
324 mv "${debian_cloud_image}/image_bookworm_nocloud_${debian_arch}.raw" "${out}"
Jiyong Parka128bad2024-09-20 16:53:57 +0900325}
326
Jiyong Parkdfec0202024-12-23 13:24:01 +0900327generate_output_package() {
328 fdisk -l "${raw_disk_image}"
Saswat Padhi323a8562025-01-27 13:54:07 -0800329 local vm_config="$SCRIPT_DIR/vm_config.json.${arch}"
Jiyong Park159b8f42024-12-26 18:05:22 +0900330 local root_partition_num=1
331 local bios_partition_num=14
332 local efi_partition_num=15
Mu-Le Lee955b6582024-11-01 15:40:58 +0800333
Jiyong Parkec71e582024-12-23 14:21:57 +0900334 pushd ${workdir} > /dev/null
335
336 echo ${build_id} > build_id
337
Jiyong Park0b3a2ba2024-12-23 12:54:21 +0900338 loop=$(losetup -f --show --partscan $raw_disk_image)
maciek swieche17e59f2024-11-25 20:13:23 +0000339 dd if="${loop}p$root_partition_num" of=root_part
340 if [[ "$arch" == "x86_64" ]]; then
341 dd if="${loop}p$bios_partition_num" of=bios_part
342 fi
343 dd if="${loop}p$efi_partition_num" of=efi_part
344 losetup -d "${loop}"
Mu-Le Lee955b6582024-11-01 15:40:58 +0800345
Jiyong Parkec71e582024-12-23 14:21:57 +0900346 cp ${vm_config} vm_config.json
Saswat Padhi8ba4a532025-02-19 12:37:03 -0800347 # TODO(b/363985291): remove this when ballooning is supported on generic kernel
348 if [[ "$use_generic_kernel" == 1 ]] && [[ "$arch" == "aarch64" ]]; then
349 sed -i 's/"auto_memory_balloon": true/"auto_memory_balloon": false/g' vm_config.json
350 fi
351
Jiyong Park0b3a2ba2024-12-23 12:54:21 +0900352 sed -i "s/{root_part_guid}/$(sfdisk --part-uuid $raw_disk_image $root_partition_num)/g" vm_config.json
maciek swieche17e59f2024-11-25 20:13:23 +0000353 if [[ "$arch" == "x86_64" ]]; then
Jiyong Park0b3a2ba2024-12-23 12:54:21 +0900354 sed -i "s/{bios_part_guid}/$(sfdisk --part-uuid $raw_disk_image $bios_partition_num)/g" vm_config.json
maciek swieche17e59f2024-11-25 20:13:23 +0000355 fi
Jiyong Park0b3a2ba2024-12-23 12:54:21 +0900356 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 +0900357
358 images=()
359 if [[ "$arch" == "aarch64" ]]; then
360 images+=(
361 root_part
362 efi_part
363 )
364 # TODO(b/365955006): remove these lines when uboot supports x86_64 EFI application
365 elif [[ "$arch" == "x86_64" ]]; then
366 rm -f vmlinuz initrd.img
367 virt-get-kernel -a "${raw_disk_image}"
368 mv vmlinuz* vmlinuz
369 mv initrd.img* initrd.img
370 images+=(
371 bios_part
372 root_part
373 efi_part
374 vmlinuz
375 initrd.img
376 )
377 fi
378
Jiyong Parkec71e582024-12-23 14:21:57 +0900379 popd > /dev/null
380
Jiyong Parkdfec0202024-12-23 13:24:01 +0900381 # --sparse option isn't supported in apache-commons-compress
Jiyong Parkec71e582024-12-23 14:21:57 +0900382 tar czv -f ${output} -C ${workdir} build_id "${images[@]}" vm_config.json
Mu-Le Lee955b6582024-11-01 15:40:58 +0800383}
384
Jiyong Parka128bad2024-09-20 16:53:57 +0900385clean_up() {
Saswat Padhibf8a9cb2024-12-04 02:32:33 +0000386 [ "$save_workdir" -eq 1 ] || rm -rf "${workdir}"
Jiyong Parka128bad2024-09-20 16:53:57 +0900387}
388
389set -e
390trap clean_up EXIT
391
Jiyong Park0b3a2ba2024-12-23 12:54:21 +0900392output=images.tar.gz
Jiyong Parka128bad2024-09-20 16:53:57 +0900393workdir=$(mktemp -d)
Jiyong Parkec71e582024-12-23 14:21:57 +0900394raw_disk_image=${workdir}/image.raw
Jiyong Park879ee4a2024-11-29 14:00:47 +0900395build_id=$(prepare_build_id)
Jiyong Parka128bad2024-09-20 16:53:57 +0900396debian_cloud_image=${workdir}/debian_cloud_image
Jiyong Park44dd28f2024-09-20 18:47:40 +0900397debian_version=bookworm
398config_space=${debian_cloud_image}/config_space/${debian_version}
Jeongik Cha37047c32024-09-20 23:09:16 +0900399resources_dir=${debian_cloud_image}/src/debian_cloud_images/resources
Saswat Padhibf8a9cb2024-12-04 02:32:33 +0000400arch="$(uname -m)"
Jeongik Cha06f4ac52024-11-12 15:56:05 +0900401mode=debug
Saswat Padhi26c4ef32024-11-29 19:46:53 +0000402save_workdir=0
Saswat Padhi8ba4a532025-02-19 12:37:03 -0800403use_generic_kernel=0
Jiyong Park879ee4a2024-11-29 14:00:47 +0900404
maciek swiech0fdd0512024-10-11 15:12:44 +0000405parse_options "$@"
Jiyong Parka128bad2024-09-20 16:53:57 +0900406check_sudo
Jiyong Parka128bad2024-09-20 16:53:57 +0900407install_prerequisites
408download_debian_cloud_image
Jiyong Park44dd28f2024-09-20 18:47:40 +0900409copy_android_config
Saswat Padhiac62a8b2024-12-06 00:48:07 +0000410package_custom_kernel
Jiyong Park0e565ed2024-09-24 12:39:53 +0900411run_fai
Jiyong Parkdfec0202024-12-23 13:24:01 +0900412generate_output_package