ohhhhhhhhhhh (exclude linux-extra-rootfs.img build artifact)
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Install Arch distro CPython + hello.py into an existing guest root tree.
|
||||
# Prefer a native-disk staging directory (not /mnt/d).
|
||||
#
|
||||
# Usage (as root):
|
||||
# bash CODE/linux/install_guest_python.sh
|
||||
# ROOTFS=/root/arch_rootfs_work/rootfs bash CODE/linux/install_guest_python.sh
|
||||
# ROOTFS=/root/extra_rootfs_work/mnt bash CODE/linux/install_guest_python.sh
|
||||
|
||||
set -Eeuo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
ROOTFS="${ROOTFS:-/root/arch_rootfs_work/rootfs}"
|
||||
HELLO_SRC="$PROJECT_ROOT/SYSTEM/user/python/hello.py"
|
||||
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
echo "[guest-python] ERROR: must run as root" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -x "$ROOTFS/usr/bin/pacman" ] && [ ! -x "$ROOTFS/bin/pacman" ]; then
|
||||
echo "[guest-python] ERROR: $ROOTFS is not an Arch root (no pacman)" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# uutils mkdir (Ubuntu WSL) can error "Already exists" on -p; ignore that.
|
||||
ensure_dir() {
|
||||
[ -d "$1" ] && return 0
|
||||
/usr/bin/mkdir -p "$1" 2>/dev/null || true
|
||||
[ -d "$1" ]
|
||||
}
|
||||
ensure_dir "$ROOTFS/dev"
|
||||
ensure_dir "$ROOTFS/proc"
|
||||
ensure_dir "$ROOTFS/sys"
|
||||
ensure_dir "$ROOTFS/tmp"
|
||||
# Deshab staging rootfs often symlinks /var/lib/pacman -> /tmp/pacman/lib.
|
||||
ensure_dir "$ROOTFS/tmp/pacman/lib/sync"
|
||||
ensure_dir "$ROOTFS/tmp/pacman/cache/pkg"
|
||||
# Arch dropped [community]; leftover configs 404 on every -Sy.
|
||||
if [ -f "$ROOTFS/etc/pacman.conf" ]; then
|
||||
/usr/bin/sed -i '/^\[community\]/,/^$/d' "$ROOTFS/etc/pacman.conf" || true
|
||||
fi
|
||||
printf 'nameserver 1.1.1.1\n' > "$ROOTFS/tmp/resolv.conf"
|
||||
printf 'nameserver 1.1.1.1\n' > "$ROOTFS/etc/resolv.conf"
|
||||
/bin/mount --bind /dev "$ROOTFS/dev" 2>/dev/null || true
|
||||
/bin/mount --bind /proc "$ROOTFS/proc" 2>/dev/null || true
|
||||
/bin/mount --bind /sys "$ROOTFS/sys" 2>/dev/null || true
|
||||
cleanup() {
|
||||
set +e
|
||||
umount "$ROOTFS/dev" 2>/dev/null || true
|
||||
umount "$ROOTFS/proc" 2>/dev/null || true
|
||||
umount "$ROOTFS/sys" 2>/dev/null || true
|
||||
}
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
chroot "$ROOTFS" /usr/bin/pacman -Sy --noconfirm
|
||||
# Staging trees often already contain overlapping bootstrap files.
|
||||
chroot "$ROOTFS" /usr/bin/pacman -S --noconfirm --needed --overwrite '*' python
|
||||
|
||||
/bin/mkdir -p "$ROOTFS/usr/local/share/deshab/python"
|
||||
if [ -f "$HELLO_SRC" ]; then
|
||||
install -m 0644 "$HELLO_SRC" "$ROOTFS/usr/local/share/deshab/python/hello.py"
|
||||
fi
|
||||
|
||||
echo "[guest-python] $(chroot "$ROOTFS" /usr/bin/python3 --version)"
|
||||
echo "[guest-python] hello.py -> $ROOTFS/usr/local/share/deshab/python/hello.py"
|
||||
Reference in New Issue
Block a user