initial commit
This commit is contained in:
commit
1b63fd18b7
5 changed files with 580 additions and 0 deletions
107
mk_pbp_img
Executable file
107
mk_pbp_img
Executable file
|
@ -0,0 +1,107 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
ROOT_DIR="$(dirname "$(readlink -f "$0")")"
|
||||
OUT_DIR="${1:-$(pwd)}"
|
||||
|
||||
TMP_DIR="$(mktemp --directory)"
|
||||
TMP_DIR_PFS="$(mktemp --directory)"
|
||||
TMP_DIR_MOUNT="$(mktemp --directory)"
|
||||
|
||||
TOOLS=(git make sudo qemu-aarch64-static xz)
|
||||
|
||||
GIT_REPO=https://github.com/void-linux/void-mklive.git
|
||||
GIT_REV=f71eb4bb81004b50884011ef5e0d00f99bc2892a
|
||||
GIT_DIR="$ROOT_DIR/.void-mklive"
|
||||
|
||||
cleanup() {
|
||||
cleanup_mounts
|
||||
sudo rm -r "$TMP_DIR" "$TMP_DIR_PFS" "$TMP_DIR_MOUNT"
|
||||
}
|
||||
|
||||
cleanup_mounts() {
|
||||
sudo losetup -D
|
||||
sudo umount --recursive "$TMP_DIR_MOUNT" || true
|
||||
}
|
||||
|
||||
check_tools() {
|
||||
for tool in ${TOOLS[@]}; do
|
||||
if ! command -v "$tool" &> /dev/null
|
||||
then
|
||||
echo "$tool could not be found"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
init_void_mklive() {
|
||||
if [ ! -d "$GIT_DIR" ]; then
|
||||
git clone "$GIT_REPO" "$GIT_DIR"
|
||||
cd "$GIT_DIR" && git checkout "$GIT_REV"
|
||||
fi
|
||||
|
||||
cd "$GIT_DIR"
|
||||
|
||||
if [ "$(git rev-parse HEAD)" != "$GIT_REV" ]; then
|
||||
git fetch
|
||||
git checkout "$GIT_REV"
|
||||
fi
|
||||
|
||||
make
|
||||
sed -i 's/ROOTFS_TARBALL#void-/ROOTFS_TARBALL#*void-/g' "$GIT_DIR/mkimage.sh"
|
||||
}
|
||||
|
||||
build_img() {
|
||||
local rootfs_file="$TMP_DIR/rootfs.tar.xz"
|
||||
local platformfs_file="$TMP_DIR/void-pinebookpro-PLATFORMFS.tar.xz"
|
||||
local img="$TMP_DIR/void-pbp.img"
|
||||
|
||||
cd "$GIT_DIR"
|
||||
|
||||
sudo ./mkrootfs.sh -o "$rootfs_file" aarch64
|
||||
sudo ./mkplatformfs.sh -p "dracut lvm2 cryptsetup" -o "$platformfs_file" pinebookpro "$rootfs_file"
|
||||
sudo ./mkimage.sh -B 256MiB -o "$img" "$platformfs_file"
|
||||
|
||||
sudo xz --decompress --stdout "$img.xz" > "$img"
|
||||
local loop_dev="$(sudo losetup --show -f -P "$img")"
|
||||
|
||||
if [ ! -z "$DISCOVER_DEV" ]; then # needed if building inside a docker container
|
||||
local partitions=$(lsblk --raw --output "MAJ:MIN" --noheadings ${loop_dev} | tail -n +2)
|
||||
counter=1
|
||||
for i in $partitions; do
|
||||
local maj=$(echo $i | cut -d: -f1)
|
||||
local min=$(echo $i | cut -d: -f2)
|
||||
if [ ! -e "${loop_dev}p${counter}" ]; then mknod ${loop_dev}p${counter} b $maj $min; fi
|
||||
counter=$((counter + 1))
|
||||
done
|
||||
fi
|
||||
|
||||
sudo mount "$loop_dev"p2 "$TMP_DIR_MOUNT"
|
||||
sudo mount "$loop_dev"p1 "$TMP_DIR_MOUNT"/boot
|
||||
|
||||
sudo cp "$ROOT_DIR/bootstrap" "$TMP_DIR_MOUNT/usr/bin/bootstrap"
|
||||
sudo chmod +x "$TMP_DIR_MOUNT/bin/bootstrap"
|
||||
|
||||
sudo cp "$(which qemu-aarch64-static)" "$TMP_DIR_MOUNT/usr/bin/"
|
||||
|
||||
sudo chroot "$TMP_DIR_MOUNT" qemu-aarch64-static /bin/bash <<"EOT"
|
||||
ln -s /etc/sv/dhcpcd /etc/runit/runsvdir/default/
|
||||
EOT
|
||||
|
||||
sudo rm "$TMP_DIR_MOUNT/usr/bin/qemu-aarch64-static"
|
||||
cleanup_mounts
|
||||
|
||||
mkdir -p "$OUT_DIR"
|
||||
xz --threads=0 --compress --stdout "$img" > "$OUT_DIR/$(basename $img.xz)"
|
||||
|
||||
echo "built pinebookpro image: $OUT_DIR/$(basename $img.xz)"
|
||||
}
|
||||
|
||||
trap cleanup 0 SIGHUP SIGINT SIGQUIT SIGABRT SIGTERM
|
||||
|
||||
check_tools
|
||||
init_void_mklive
|
||||
build_img
|
Loading…
Add table
Add a link
Reference in a new issue