blob: aab85d6c2517ae919032ceb28ccedd77db8ed4ac [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:
5# - Support x86_64 architecture
6# - Add Android-specific packages via a new class
7# - Use a stable release from debian-cloud-images
8
9show_help() {
10 echo Usage: $0 [OPTION]... [FILE]
11 echo Builds a debian image and save it to FILE.
12 echo Options:
13 echo -h Pring usage and this help message and exit.
14}
15
16check_sudo() {
17 if [ "$EUID" -ne 0 ]; then
18 echo "Please run as root."
19 exit
20 fi
21}
22
23parse_options() {
24 while getopts ":h" option; do
25 case ${option} in
26 h)
27 show_help
28 exit;;
29 esac
30 done
31 if [ -n "$1" ]; then
32 built_image=$1
33 fi
34}
35
36install_prerequisites() {
Jiyong Park44dd28f2024-09-20 18:47:40 +090037 DEBIAN_FRONTEND=noninteractive \
Jiyong Parka128bad2024-09-20 16:53:57 +090038 apt install --no-install-recommends --assume-yes \
39 ca-certificates \
40 debsums \
41 dosfstools \
42 fai-server \
43 fai-setup-storage \
44 fdisk \
45 make \
46 python3 \
47 python3-libcloud \
48 python3-marshmallow \
49 python3-pytest \
50 python3-yaml \
51 qemu-utils \
Jeongik Cha652f73a2024-09-20 09:24:48 +000052 udev \
53 qemu-system-arm \
54 qemu-user-static
Jiyong Parka128bad2024-09-20 16:53:57 +090055}
56
57download_debian_cloud_image() {
58 local ver=master
59 local prj=debian-cloud-images
60 local url=https://salsa.debian.org/cloud-team/${prj}/-/archive/${ver}/${prj}-${ver}.tar.gz
61 local outdir=${debian_cloud_image}
62
63 mkdir -p ${outdir}
64 wget -O - ${url} | tar xz -C ${outdir} --strip-components=1
65}
66
Jiyong Park44dd28f2024-09-20 18:47:40 +090067copy_android_config() {
68 local src=$(dirname $0)/fai_config
69 local dst=${config_space}
70
71 cp -R ${src}/* ${dst}
72}
73
Jiyong Parka128bad2024-09-20 16:53:57 +090074run_fai() {
Jiyong Park44dd28f2024-09-20 18:47:40 +090075 local cspace=${config_space}
Jiyong Parka128bad2024-09-20 16:53:57 +090076 local out=${built_image}
Jiyong Park44dd28f2024-09-20 18:47:40 +090077 local classes=(
78 BASE
79 DEBIAN
80 NOCLOUD
81 ARM64
82 LINUX_VERSION_BASE+LINUX_VARIANT_CLOUD
83 ${debian_version^^} # uppercase
84 AVF
85 BUILD_IMAGE
86 SYSTEM_BOOT
87 )
88 # join by comma
89 classes=$(IFS=","; echo "${classes[*]}")
Jiyong Parka128bad2024-09-20 16:53:57 +090090
91 fai-diskimage \
92 --verbose \
93 --size 2G \
Jiyong Park44dd28f2024-09-20 18:47:40 +090094 --class ${classes} \
Jiyong Parka128bad2024-09-20 16:53:57 +090095 --cspace ${cspace} \
96 ${out}
97}
98
99clean_up() {
100 rm -rf ${workdir}
101}
102
103set -e
104trap clean_up EXIT
105
106built_image=image.raw
107workdir=$(mktemp -d)
108debian_cloud_image=${workdir}/debian_cloud_image
Jiyong Park44dd28f2024-09-20 18:47:40 +0900109debian_version=bookworm
110config_space=${debian_cloud_image}/config_space/${debian_version}
Jiyong Parka128bad2024-09-20 16:53:57 +0900111
112check_sudo
113parse_options $@
114install_prerequisites
115download_debian_cloud_image
Jiyong Park44dd28f2024-09-20 18:47:40 +0900116copy_android_config
Jiyong Parka128bad2024-09-20 16:53:57 +0900117run_fai