Demonstrating core cloud concepts, starting with CaaS. Not for production use.
0

Configure Feed

Select the types of activity you want to include in your feed.

at main 2.8 kB View raw
1#!/bin/bash 2 3set -e 4 5ALPINE_VERSION="v3.20" 6ARCH=$(uname -m) 7ROOTFS_DIR="alpine-podman-rootfs" 8ROOTFS_FILE="alpine-with-podman.ext4" 9ROOTFS_SIZE_MB=2048 10 11echo "--- Finding and fetching apk-tools-static for ${ARCH} ---" 12# Map uname arch to Alpine's arch naming 13case ${ARCH} in 14 x86_64) ALPINE_ARCH="x86_64" ;; 15 aarch64) ALPINE_ARCH="aarch64" ;; 16 *) echo "Unsupported architecture: ${ARCH}"; exit 1 ;; 17esac 18 19REPO_URL="https://dl-cdn.alpinelinux.org/alpine/${ALPINE_VERSION}/main/${ALPINE_ARCH}" 20 21APK_TOOLS_PKG=$(curl -sL "${REPO_URL}/APKINDEX.tar.gz" | tar -xz -O APKINDEX | grep -F 'P:apk-tools-static' -A1 | grep -F 'V:' | cut -d: -f2 | xargs -I{} echo "apk-tools-static-{}.apk") 22APK_TOOLS_URL="${REPO_URL}/${APK_TOOLS_PKG}" 23 24echo "Found package: ${APK_TOOLS_PKG}" 25echo "Downloading from: ${APK_TOOLS_URL}" 26 27curl -sL "${APK_TOOLS_URL}" | tar -xz -C . sbin/apk.static 28mv sbin/apk.static . 29rmdir sbin 30chmod +x apk.static 31 32echo "Successfully fetched ./apk.static" 33 34echo "--- Ensuring host has 'mkfs.ext4' (e2fsprogs) ---" 35if ! command -v mkfs.ext4 &> /dev/null; then 36 if command -v apt-get &> /dev/null; then 37 sudo apt-get update && sudo apt-get install -y e2fsprogs 38 elif command -v dnf &> /dev/null || command -v yum &> /dev/null; then 39 sudo yum install -y e2fsprogs 40 else 41 echo "Error: mkfs.ext4 not found. Please install 'e2fsprogs' manually." 42 exit 1 43 fi 44fi 45 46echo "--- Bootstrapping Alpine ${ALPINE_VERSION} with Podman ---" 47sudo rm -rf "${ROOTFS_DIR}" 48mkdir -p "${ROOTFS_DIR}" 49 50sudo ./apk.static \ 51 -X "https://dl-cdn.alpinelinux.org/alpine/${ALPINE_VERSION}/main" \ 52 -X "https://dl-cdn.alpinelinux.org/alpine/${ALPINE_VERSION}/community" \ 53 -U --allow-untrusted --root "${ROOTFS_DIR}" \ 54 --initdb add alpine-base openrc podman util-linux 55 56echo "--- Configuring the rootfs ---" 57echo "root:root" | sudo chroot "${ROOTFS_DIR}" chpasswd 58 59sudo chroot "${ROOTFS_DIR}" rc-update add cgroups default 60 61cat << EOF | sudo tee "${ROOTFS_DIR}/etc/fstab" > /dev/null 62proc /proc proc defaults 0 0 63sysfs /sys sysfs defaults 0 0 64EOF 65 66echo 'ttyS0::respawn:/sbin/agetty -L 115200 ttyS0 vt100' | sudo tee -a "${ROOTFS_DIR}/etc/inittab" > /dev/null 67 68echo "--- Creating ${ROOTFS_SIZE_MB}MB ext4 image: ${ROOTFS_FILE} ---" 69rm -f "${ROOTFS_FILE}" 70dd if=/dev/zero of="${ROOTFS_FILE}" bs=1M count=${ROOTFS_SIZE_MB} 71mkfs.ext4 "${ROOTFS_FILE}" 72 73echo "--- Mounting image and copying rootfs data ---" 74MOUNT_DIR=$(mktemp -d) 75sudo mount -o loop "${ROOTFS_FILE}" "${MOUNT_DIR}" 76(cd "${ROOTFS_DIR}" && sudo tar -cf - .) | (cd "${MOUNT_DIR}" && sudo tar -xf -) 77 78echo "--- Cleaning up ---" 79sudo umount "${MOUNT_DIR}" 80rm -rf "${MOUNT_DIR}" 81sudo rm -rf "${ROOTFS_DIR}" 82rm ./apk.static 83 84echo "Success! Rootfs created at ./${ROOTFS_FILE}" 85