various build script improvements and fixes

This commit is contained in:
ading2210 2024-05-03 19:20:09 +00:00
parent a67bb493af
commit 16000d09e2
6 changed files with 43 additions and 15 deletions

View File

@ -23,6 +23,8 @@ A clear and concise description of what you expected to happen.
**Screenshots / Photos** **Screenshots / Photos**
If applicable, add screenshots or photos to help explain your problem. If applicable, add screenshots or photos to help explain your problem.
If you are reporting an issue with the build process, please run the scripts in debug mode by putting `DEBUG=1` before the build commmand, like `sudo DEBUG=1 ./build_complete.sh`.
**Target Chrome OS Device (please complete the following information):** **Target Chrome OS Device (please complete the following information):**
- Board Name (e.g. dedede) - Board Name (e.g. dedede)
- Device Name (e.g. drawcia) - Device Name (e.g. drawcia)

View File

@ -72,6 +72,7 @@ PRs and contributions are welcome to help implement these features.
### Prerequisites: ### Prerequisites:
- A separate Linux PC for the build process (preferably something Debian-based) - A separate Linux PC for the build process (preferably something Debian-based)
- WSL2 is supported if you are on Windows - WSL2 is supported if you are on Windows
- Github Codespaces is not supported at the moment
- A USB drive that is at least 8GB in size - A USB drive that is at least 8GB in size
- At least 20GB of free disk space - At least 20GB of free disk space
- An x86-based Chromebook - An x86-based Chromebook

View File

@ -10,6 +10,7 @@ print_help() {
echo " quiet - Don't use progress indicators which may clog up log files." echo " quiet - Don't use progress indicators which may clog up log files."
echo " desktop - The desktop environment to install. This defaults to 'xfce'. Valid options include:" echo " desktop - The desktop environment to install. This defaults to 'xfce'. Valid options include:"
echo " gnome, xfce, kde, lxde, gnome-flashback, cinnamon, mate, lxqt" echo " gnome, xfce, kde, lxde, gnome-flashback, cinnamon, mate, lxqt"
echo " data_dir - The working directory for the scripts. This defaults to ./data"
} }
assert_root assert_root
@ -20,13 +21,14 @@ compress_img="${args['compress_img']}"
rootfs_dir="${args['rootfs_dir']}" rootfs_dir="${args['rootfs_dir']}"
quiet="${args['quiet']}" quiet="${args['quiet']}"
desktop="${args['desktop']-'xfce'}" desktop="${args['desktop']-'xfce'}"
data_dir="${args['data_dir']}"
needed_deps="wget python3 unzip zip git debootstrap cpio binwalk pcregrep cgpt mkfs.ext4 mkfs.ext2 fdisk rsync" needed_deps="wget python3 unzip zip git debootstrap cpio binwalk pcregrep cgpt mkfs.ext4 mkfs.ext2 fdisk rsync depmod findmnt"
if [ "$(check_deps "$needed_deps")" ]; then if [ "$(check_deps "$needed_deps")" ]; then
#install deps automatically on debian and ubuntu #install deps automatically on debian and ubuntu
if [ -f "/etc/debian_version" ]; then if [ -f "/etc/debian_version" ]; then
echo "attempting to install build deps" echo "attempting to install build deps"
apt-get install wget python3-all unzip zip debootstrap cpio binwalk pcregrep cgpt rsync pv -y apt-get install wget python3-all unzip zip debootstrap cpio binwalk pcregrep cgpt rsync kmod pv -y
fi fi
assert_deps "$needed_deps" assert_deps "$needed_deps"
fi fi
@ -45,6 +47,12 @@ board="$1"
shim_url="https://dl.darkn.bio/api/raw/?path=/SH1mmer/$board.zip" shim_url="https://dl.darkn.bio/api/raw/?path=/SH1mmer/$board.zip"
boards_url="https://chromiumdash.appspot.com/cros/fetch_serving_builds?deviceCategory=ChromeOS" boards_url="https://chromiumdash.appspot.com/cros/fetch_serving_builds?deviceCategory=ChromeOS"
if [ -z "$data_dir" ]; then
data_dir="$base_dir/data"
else
data_dir="$(realpath -m "$data_dir")"
fi
echo "downloading list of recovery images" echo "downloading list of recovery images"
reco_url="$(wget -qO- --show-progress $boards_url | python3 -c ' reco_url="$(wget -qO- --show-progress $boards_url | python3 -c '
import json, sys import json, sys
@ -59,11 +67,11 @@ print(reco_url)
' $board)" ' $board)"
echo "found url: $reco_url" echo "found url: $reco_url"
shim_bin="$base_dir/data/shim_$board.bin" shim_bin="$data_dir/shim_$board.bin"
shim_zip="$base_dir/data/shim_$board.zip" shim_zip="$data_dir/shim_$board.zip"
reco_bin="$base_dir/data/reco_$board.bin" reco_bin="$data_dir/reco_$board.bin"
reco_zip="$base_dir/data/reco_$board.zip" reco_zip="$data_dir/reco_$board.zip"
mkdir -p "$base_dir/data" mkdir -p "$data_dir"
download_and_unzip() { download_and_unzip() {
local url="$1" local url="$1"
@ -107,6 +115,9 @@ download_and_unzip $shim_url $shim_zip $shim_bin
if [ ! "$rootfs_dir" ]; then if [ ! "$rootfs_dir" ]; then
rootfs_dir="$(realpath -m data/rootfs_$board)" rootfs_dir="$(realpath -m data/rootfs_$board)"
desktop_package="task-$desktop-desktop" desktop_package="task-$desktop-desktop"
if [ "$(findmnt -T "$rootfs_dir/dev")" ]; then
sudo umount -l $rootfs_dir/* 2>/dev/null || true
fi
rm -rf $rootfs_dir rm -rf $rootfs_dir
mkdir -p $rootfs_dir mkdir -p $rootfs_dir
@ -122,13 +133,13 @@ echo "patching debian rootfs"
retry_cmd ./patch_rootfs.sh $shim_bin $reco_bin $rootfs_dir "quiet=$quiet" retry_cmd ./patch_rootfs.sh $shim_bin $reco_bin $rootfs_dir "quiet=$quiet"
echo "building final disk image" echo "building final disk image"
final_image="$base_dir/data/shimboot_$board.bin" final_image="$data_dir/shimboot_$board.bin"
rm -rf $final_image rm -rf $final_image
retry_cmd ./build.sh $final_image $shim_bin $rootfs_dir "quiet=$quiet" retry_cmd ./build.sh $final_image $shim_bin $rootfs_dir "quiet=$quiet"
echo "build complete! the final disk image is located at $final_image" echo "build complete! the final disk image is located at $final_image"
if [ "$compress_img" ]; then if [ "$compress_img" ]; then
image_zip="$base_dir/data/shimboot_$board.zip" image_zip="$data_dir/shimboot_$board.zip"
echo "compressing disk image into a zip file" echo "compressing disk image into a zip file"
zip -j $image_zip $final_image zip -j $image_zip $final_image
echo "finished compressing the disk file" echo "finished compressing the disk file"

View File

@ -23,7 +23,7 @@ print_help() {
} }
assert_root assert_root
assert_deps "realpath debootstrap" assert_deps "realpath debootstrap findmnt"
assert_args "$2" assert_args "$2"
parse_args "$@" parse_args "$@"

View File

@ -2,6 +2,12 @@
create_loop() { create_loop() {
local loop_device=$(losetup -f) local loop_device=$(losetup -f)
if [ ! -b "$loop_device" ]; then
#we might run out of loop devices, see https://stackoverflow.com/a/66020349
local major=$(grep loop /proc/devices | cut -c3)
local number="$(echo "$loop_device" | grep -Eo '[0-9]+' | tail -n1)"
mknod $loop_device b $major $number
fi
losetup -P $loop_device "${1}" losetup -P $loop_device "${1}"
echo $loop_device echo $loop_device
} }
@ -65,10 +71,18 @@ partition_disk() {
} }
safe_mount() { safe_mount() {
umount $2 2> /dev/null || /bin/true local source="$1"
rm -rf $2 local dest="$2"
mkdir -p $2 local opts="$3"
mount $1 $2
umount $dest 2> /dev/null || /bin/true
rm -rf $dest
mkdir -p $dest
if [ "$opts" ]; then
mount $source $dest -o $dest
else
mount $source $dest
fi
} }
create_partitions() { create_partitions() {

View File

@ -44,7 +44,7 @@ systemctl enable kill-frecon.service
#install base packages #install base packages
if [ -z "$disable_base_pkgs" ]; then if [ -z "$disable_base_pkgs" ]; then
apt-get install -y cloud-utils zram-tools sudo command-not-found apt-get install -y cloud-utils zram-tools sudo command-not-found bash-completion
#set up zram #set up zram
echo "ALGO=lzo" >> /etc/default/zramswap echo "ALGO=lzo" >> /etc/default/zramswap