blob: ad91704f5650c49f3851d4d514e3202e04f588ea [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() {
37 apt install --no-install-recommends --assume-yes \
38 ca-certificates \
39 debsums \
40 dosfstools \
41 fai-server \
42 fai-setup-storage \
43 fdisk \
44 make \
45 python3 \
46 python3-libcloud \
47 python3-marshmallow \
48 python3-pytest \
49 python3-yaml \
50 qemu-utils \
Jeongik Cha652f73a2024-09-20 09:24:48 +000051 udev \
52 qemu-system-arm \
53 qemu-user-static
Jiyong Parka128bad2024-09-20 16:53:57 +090054}
55
56download_debian_cloud_image() {
57 local ver=master
58 local prj=debian-cloud-images
59 local url=https://salsa.debian.org/cloud-team/${prj}/-/archive/${ver}/${prj}-${ver}.tar.gz
60 local outdir=${debian_cloud_image}
61
62 mkdir -p ${outdir}
63 wget -O - ${url} | tar xz -C ${outdir} --strip-components=1
64}
65
66run_fai() {
67 local ver=bookworm
68 local cspace=${debian_cloud_image}/config_space/${ver}
69 local out=${built_image}
70
71 fai-diskimage \
72 --verbose \
73 --size 2G \
74 --class BASE,DEBIAN,NOCLOUD,ARM64,LINUX_VERSION_BASE+LINUX_VARIANT_CLOUD,BOOKWORM,BUILD_IMAGE,SYSTEM_BOOT \
75 --cspace ${cspace} \
76 ${out}
77}
78
79clean_up() {
80 rm -rf ${workdir}
81}
82
83set -e
84trap clean_up EXIT
85
86built_image=image.raw
87workdir=$(mktemp -d)
88debian_cloud_image=${workdir}/debian_cloud_image
89
90check_sudo
91parse_options $@
92install_prerequisites
93download_debian_cloud_image
94run_fai