Skip to content

Commit af2818d

Browse files
committed
SWPROT-8953: build: Add rootfs script
Origin: SiliconLabs/UnifySDK#50 Forwarded: #5 Signed-off-by: Philippe Coval <philippe.coval@silabs.com>
1 parent 4b7503f commit af2818d

File tree

1 file changed

+125
-0
lines changed

1 file changed

+125
-0
lines changed

scripts/build-rootfs.sh

+125
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
#! /usr/bin/env bash
2+
# -*- mode: Bash; tab-width: 2; indent-tabs-mode: nil; coding: utf-8 -*-
3+
# vim:shiftwidth=4:softtabstop=4:tabstop=4:
4+
# SPDX-License-Identifier: LicenseRef-MSLA
5+
# SPDX-FileCopyrightText: Silicon Laboratories Inc. https://www.silabs.com
6+
7+
set -e
8+
set -x
9+
10+
cat<<EOF
11+
Usage:
12+
13+
ARCH=arm64 ./scripts/build-rootfs.sh
14+
EOF
15+
16+
project="unifysdk"
17+
debian_suite="bookworm"
18+
19+
# Can be overloaded from env eg: ARCH=arm64"
20+
target_debian_arch=${ARCH:="$(dpkg --print-architecture)"}
21+
22+
debian_mirror_url="http://deb.debian.org/debian"
23+
sudo="sudo"
24+
machine="${project}-${debian_suite}-${target_debian_arch}-rootfs"
25+
rootfs_dir="/var/tmp/var/lib/machines/${machine}"
26+
MAKE="/usr/bin/make"
27+
CURDIR="$PWD"
28+
chroot="systemd-nspawn"
29+
packages="debootstrap \
30+
binfmt-support \
31+
debian-archive-keyring \
32+
qemu-user-static \
33+
systemd-container \
34+
time \
35+
"
36+
case $target_debian_arch in
37+
amd64)
38+
export CMAKE_SYSTEM_PROCESSOR="x86_64"
39+
export CARGO_TARGET_TRIPLE="${CMAKE_SYSTEM_PROCESSOR}-unknown-linux-gnu"
40+
packages="${packages} qemu-system-x86"
41+
qemu_system="qemu-system-${CMAKE_SYSTEM_PROCESSOR}"
42+
;;
43+
44+
arm64)
45+
qemu_arch="aarch64"
46+
qemu_system="qemu-system-${qemu_arch}"
47+
export CMAKE_SYSTEM_PROCESSOR="${qemu_arch}"
48+
export CARGO_TARGET_TRIPLE="${CMAKE_SYSTEM_PROCESSOR}-unknown-linux-gnu"
49+
packages="${packages} qemu-system-arm"
50+
;;
51+
52+
*)
53+
CMAKE_SYSTEM_PROCESSOR="$ARCH"
54+
CARGO_TARGET_TRIPLE="${CMAKE_SYSTEM_PROCESSOR}-unknown-linux-gnu"
55+
qemu_arch="${ARCH}"
56+
qemu_system="qemu-system-${qemu_arch}"
57+
echo "error: Not supported yet"
58+
59+
exit 1
60+
;;
61+
esac
62+
63+
${sudo} apt-get update
64+
${sudo} apt install -y ${packages}
65+
if [ -e "/var/lib/binfmts/qemu-${qemu_arch}" ]; then
66+
${sudo} update-binfmts --enable "qemu-${qemu_arch}"
67+
fi
68+
qemu_file="/usr/bin/${qemu_system}"
69+
70+
if [ ! -d "${rootfs_dir}" ] ; then
71+
${sudo} mkdir -pv "${rootfs_dir}"
72+
time ${sudo} debootstrap \
73+
--arch="${target_debian_arch}" \
74+
"${debian_suite}" "${rootfs_dir}" "${debian_mirror_url}"
75+
${sudo} chmod -v u+rX "${rootfs_dir}"
76+
fi
77+
78+
# TODO: https://github.com/rust-lang/cargo/issues/8719#issuecomment-1516492970
79+
env_vars="$env_vars CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse"
80+
81+
# TODO: https://github.com/rust-lang/cargo/issues/10583
82+
env_vars="$env_vars CARGO_NET_GIT_FETCH_WITH_CLI=true"
83+
84+
cargo_dir="/tmp/$USER/${machine}/${HOME}/.cargo"
85+
${sudo} mkdir -pv "${cargo_dir}"
86+
87+
case ${chroot} in
88+
"systemd-nspawn")
89+
rootfs_shell="${sudo} systemd-nspawn \
90+
--directory="${rootfs_dir}" \
91+
--machine="${machine}" \
92+
--bind="${CURDIR}:${CURDIR}" \
93+
--bind="${cargo_dir}:/root/.cargo" \
94+
"
95+
if [ -e "${qemu_file}" ] ; then
96+
rootfs_shell="$rootfs_shell --bind ${qemu_file}"
97+
fi
98+
;;
99+
*)
100+
rootfs_shell="${sudo} chroot ${rootfs_dir}"
101+
l="dev dev/pts sys proc"
102+
for t in $l ; do
103+
$sudo mkdir -p "${rootfs_dir}/$t"
104+
$sudo mount --bind "/$t" "${rootfs_dir}/$t"
105+
done
106+
;;
107+
esac
108+
109+
${rootfs_shell} \
110+
apt-get install -y -- make sudo util-linux
111+
112+
${rootfs_shell} \
113+
${MAKE} \
114+
--directory="${CURDIR}" \
115+
--file="${CURDIR}/helper.mk" \
116+
USER="${USER}" \
117+
${env_vars} \
118+
-- \
119+
help setup default \
120+
target_debian_arch="${target_debian_arch}" \
121+
CMAKE_SYSTEM_PROCESSOR="${CMAKE_SYSTEM_PROCESSOR}" \
122+
CARGO_TARGET_TRIPLE="${CARGO_TARGET_TRIPLE}" \
123+
# EoL
124+
125+
sudo du -hs "/var/tmp/var/lib/machines/${machine}"

0 commit comments

Comments
 (0)