add github action to build the rootfs

This commit is contained in:
ading2210 2024-01-25 21:12:20 +00:00
parent 9840555faa
commit 73a2a38698
4 changed files with 57 additions and 26 deletions

26
.github/workflows/build-rootfs.yaml vendored Normal file
View File

@ -0,0 +1,26 @@
name: build-rootfs
run-name: Build the base Debian rootfs
on: [push]
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: download repo
uses: actions/checkout@v4
- name: install deps
run: |
sudo apt-get install debootstrap coreutils -y
- name: run build
id: run_build
run: sudo DEBUG=1 ./build_rootfs.sh data/rootfs bookworm hostname=shimboot root_passwd=root username=user user_passwd=user
- name: archive rootfs
run: tar -vcf data/rootfs.tar.gz -C data/rootfs ./
- name: upload rootfs
uses: actions/upload-artifact@v4
with:
name: rootfs_tar
path: data/rootfs.tar.gz

View File

@ -14,15 +14,6 @@ print_help() {
echo "Usage: ./build.sh output_path shim_path rootfs_dir" echo "Usage: ./build.sh output_path shim_path rootfs_dir"
} }
check_deps() {
local needed_commands="cpio binwalk pcregrep realpath cgpt mkfs.ext4 mkfs.ext2 fdisk rsync"
for command in $needed_commands; do
if ! command -v $command &> /dev/null; then
echo $command
fi
done
}
if [ "$EUID" -ne 0 ]; then if [ "$EUID" -ne 0 ]; then
echo "this needs to be run as root." echo "this needs to be run as root."
exit 1 exit 1
@ -33,13 +24,8 @@ if [ -z "$3" ]; then
exit 1 exit 1
fi fi
missing_commands=$(check_deps) . ./common.sh
if [ "${missing_commands}" ]; then assert_deps "cpio binwalk pcregrep realpath cgpt mkfs.ext4 mkfs.ext2 fdisk rsync"
echo "You are missing dependencies needed for this script."
echo "Commands needed:"
echo "${missing_commands}"
exit 1
fi
output_path=$(realpath "${1}") output_path=$(realpath "${1}")
shim_path=$(realpath "${2}") shim_path=$(realpath "${2}")

View File

@ -17,9 +17,21 @@ if [ -z "$1" ]; then
echo "Usage: ./build_complete.sh board_name" echo "Usage: ./build_complete.sh board_name"
echo "Valid named arguments (specify with 'key=value'):" echo "Valid named arguments (specify with 'key=value'):"
echo " compress_img - Compress the final disk image into a zip file. Set this to any value to enable this option." echo " compress_img - Compress the final disk image into a zip file. Set this to any value to enable this option."
echo " rootfs_dir - Use a different rootfs for the build. The directory you select will be copied before any patches are applied."
exit 1 exit 1
fi fi
parse_args "$@"
needed_deps="wget python3 unzip zip git debootstrap cpio binwalk pcregrep cgpt mkfs.ext4 mkfs.ext2 fdisk rsync"
if ! check_deps "$needed_deps"; then
#install deps automatically on debian and ubuntu
if [ -f "/etc/debian_version" ]; then
echo "attempting to install build deps"
apt-get install wget python3-all unzip zip debootstrap cpio binwalk pcregrep cgpt rsync -y
fi
assert_deps "$needed_deps"
fi
cleanup_path="" cleanup_path=""
sigint_handler() { sigint_handler() {
if [ $cleanup_path ]; then if [ $cleanup_path ]; then
@ -77,6 +89,7 @@ download_and_unzip $reco_url $reco_zip $reco_bin
echo "downloading shim image" echo "downloading shim image"
download_and_unzip $shim_url $shim_zip $shim_bin download_and_unzip $shim_url $shim_zip $shim_bin
if [ ! "${args['rootfs_dir']}" ]; then
rootfs_dir="$(realpath data/rootfs_$board)" rootfs_dir="$(realpath data/rootfs_$board)"
rm -rf $rootfs_dir rm -rf $rootfs_dir
mkdir -p $rootfs_dir mkdir -p $rootfs_dir
@ -87,12 +100,16 @@ echo "building debian rootfs"
root_passwd=root \ root_passwd=root \
username=user \ username=user \
user_passwd=user user_passwd=user
else
rootfs_dir="$(realpath "${args['rootfs_dir']}")"
fi
echo "patching debian rootfs" echo "patching debian rootfs"
./patch_rootfs.sh $shim_bin $reco_bin $rootfs_dir ./patch_rootfs.sh $shim_bin $reco_bin $rootfs_dir
echo "building final disk image" echo "building final disk image"
final_image="$base_dir/data/shimboot_$board.bin" final_image="$base_dir/data/shimboot_$board.bin"
rm -rf $final_image
./build.sh $final_image $shim_bin data/rootfs ./build.sh $final_image $shim_bin data/rootfs
echo "build complete! the final disk image is located at $final_image" echo "build complete! the final disk image is located at $final_image"

View File

@ -29,11 +29,13 @@ fi
assert_deps "realpath debootstrap" assert_deps "realpath debootstrap"
parse_args "$@" parse_args "$@"
rootfs_dir=$(realpath "${1}") rootfs_dir=$(realpath -m "${1}")
release_name="${2}" release_name="${2}"
packages="${args['custom_packages']-'task-xfce-desktop'}" packages="${args['custom_packages']-'task-xfce-desktop'}"
chroot_mounts="proc sys dev run" chroot_mounts="proc sys dev run"
mkdir -p $rootfs_dir
unmount_all() { unmount_all() {
for mountpoint in $chroot_mounts; do for mountpoint in $chroot_mounts; do
umount -l "$rootfs_dir/$mountpoint" umount -l "$rootfs_dir/$mountpoint"