@@ -13,6 +13,8 @@ log() { printf '\n=== %s ===\n' "$*"; }
1313log " apt update + upgrade"
1414export DEBIAN_FRONTEND=noninteractive
1515APT_OPTS=(-y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold)
16+ LLVM_VERSION=" ${LLVM_VERSION:- 21} "
17+ LLVM_GPG_FINGERPRINT=" 6084F3CF814B57C1CF12EFD515CF4D18AF4F7421"
1618
1719# Scaleway baremetal Debian ships grub-cloud-amd64; its postinst (fired as a
1820# trigger by initramfs-tools / shim-signed / kernel upgrades) runs grub-install
@@ -24,11 +26,46 @@ apt-get update -y
2426apt-get upgrade " ${APT_OPTS[@]} "
2527
2628# --- 2. apt packages ---------------------------------------------------------
27- log " apt install base packages + clang/lld/llvm + xz-utils"
29+ log " apt install base packages + xz-utils"
2830apt-get install " ${APT_OPTS[@]} " \
2931 ca-certificates curl wget gnupg vim git zip unzip openssl libssl-dev jq \
30- build-essential rsyslog htop rsync pkg-config locales ufw \
31- clang lld llvm xz-utils
32+ build-essential rsyslog htop rsync pkg-config locales ufw xz-utils
33+
34+ # Debian's default clang can lag behind RISC-V ISA attribute syntax emitted by
35+ # the checked-in assembly fixtures. Use a pinned apt.llvm.org toolchain.
36+ log " LLVM $LLVM_VERSION toolchain from apt.llvm.org"
37+ . /etc/os-release
38+ LLVM_CODENAME=" ${VERSION_CODENAME:- } "
39+ if [ -z " $LLVM_CODENAME " ]; then
40+ echo " ERROR: could not determine Debian/Ubuntu codename from /etc/os-release" >&2
41+ exit 1
42+ fi
43+ install -d -m 0755 /etc/apt/keyrings
44+ wget -qO /etc/apt/keyrings/apt.llvm.org.asc https://apt.llvm.org/llvm-snapshot.gpg.key
45+ if ! LLVM_ACTUAL_FINGERPRINT=" $( gpg --show-keys --with-colons /etc/apt/keyrings/apt.llvm.org.asc 2> /dev/null \
46+ | awk -F: ' /^fpr:/ { print $10; exit }' ) " ; then
47+ echo " ERROR: could not read apt.llvm.org GPG key fingerprint" >&2
48+ exit 1
49+ fi
50+ if [ " $LLVM_ACTUAL_FINGERPRINT " != " $LLVM_GPG_FINGERPRINT " ]; then
51+ echo " ERROR: apt.llvm.org GPG key fingerprint mismatch (got $LLVM_ACTUAL_FINGERPRINT , expected $LLVM_GPG_FINGERPRINT )" >&2
52+ exit 1
53+ fi
54+ chmod 0644 /etc/apt/keyrings/apt.llvm.org.asc
55+ cat > /etc/apt/sources.list.d/apt.llvm.org.list << EOF
56+ deb [signed-by=/etc/apt/keyrings/apt.llvm.org.asc] http://apt.llvm.org/$LLVM_CODENAME / llvm-toolchain-$LLVM_CODENAME -$LLVM_VERSION main
57+ EOF
58+ apt-get update -y
59+ apt-get install " ${APT_OPTS[@]} " " clang-$LLVM_VERSION " " lld-$LLVM_VERSION " " llvm-$LLVM_VERSION "
60+ for tool in clang clang++ lld ld.lld llvm-ar llvm-ranlib; do
61+ versioned=" /usr/bin/$tool -$LLVM_VERSION "
62+ if [ ! -x " $versioned " ]; then
63+ echo " ERROR: expected $versioned after installing LLVM $LLVM_VERSION " >&2
64+ exit 1
65+ fi
66+ ln -sf " $versioned " " /usr/local/bin/$tool "
67+ done
68+ clang --version | head -n 1
3269
3370# --- 3. users: admin (sudo) + app (no sudo) ----------------------------------
3471log " users: admin (sudo) + app (no sudo)"
0 commit comments