diff --git a/build.sh b/build.sh index 03d16b9..eccbd05 100755 --- a/build.sh +++ b/build.sh @@ -110,10 +110,10 @@ echo "copying data into the image" rootfs_mount=/tmp/new_rootfs populate_partitions $image_loop $initramfs_dir $rootfs_dir $rootfs_mount -echo "copying modules into the rootfs" -patch_rootfs $shim_rootfs $rootfs_mount || echo "failed patching rootfs" -umount $rootfs_mount -umount $shim_rootfs +#echo "copying modules into the rootfs" +#patch_rootfs $shim_rootfs $rootfs_mount || echo "failed patching rootfs" +#umount $rootfs_mount +#umount $shim_rootfs echo "cleaning up loop devices" losetup -d $shim_loop diff --git a/build_rootfs.sh b/build_rootfs.sh new file mode 100755 index 0000000..f31fbb1 --- /dev/null +++ b/build_rootfs.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +#build the debian rootfs + +set -e +if [ "$DEBUG" ]; then + set -x +fi + +print_help() { + echo "Usage: ./build_rootfs.sh rootfs_path release_name" +} + +check_deps() { + local needed_commands="realpath debootstrap" + for command in $needed_commands; do + if ! command -v $command &> /dev/null; then + echo $command + fi + done +} + +if [ "$EUID" -ne 0 ]; then + echo "this needs to be run as root." + exit 1 +fi + +if [ -z "$2" ]; then + print_help + exit 1 +fi + +missing_commands=$(check_deps) +if [ "${missing_commands}" ]; then + echo "You are missing dependencies needed for this script." + echo "Commands needed:" + echo "${missing_commands}" + exit 1 +fi + +rootfs_dir=$(realpath "${1}") +release_name="${2}" + +debootstrap $release_name $rootfs_dir http://deb.debian.org/debian/ +cp -r rootfs/* $rootfs_dir +chroot_command="DEBUG=${DEBUG} release_name=${release_name} /opt/setup_rootfs.sh" +chroot $rootfs_dir /bin/bash -c "${chroot_command}" \ No newline at end of file diff --git a/patch_rootfs.sh b/patch_rootfs.sh index 2ffaf37..6aff958 100755 --- a/patch_rootfs.sh +++ b/patch_rootfs.sh @@ -7,14 +7,20 @@ if [ "$DEBUG" ]; then set -x fi -patch_rootfs() { +copy_modules() { local shim_rootfs=$(realpath $1) - local target_rootfs=$(realpath $2) + local reco_rootfs=$(realpath $2) + local target_rootfs=$(realpath $3) cp -r "${shim_rootfs}/lib/modules/"* "${target_rootfs}/lib/modules/" - cp -r "${shim_rootfs}/lib/modprobe.d/"* "${target_rootfs}/lib/modprobe.d/" - cp -r "${shim_rootfs}/etc/modprobe.d/"* "${target_rootfs}/etc/modprobe.d/" cp -r "${shim_rootfs}/lib/firmware/"* "${target_rootfs}/lib/firmware/" + cp -r "${reco_rootfs}/lib/modprobe.d/"* "${target_rootfs}/lib/modprobe.d/" + cp -r "${reco_rootfs}/etc/modprobe.d/"* "${target_rootfs}/etc/modprobe.d/" } -patch_rootfs $1 $2 \ No newline at end of file +download_firmware() { + local firmware_url="https://chromium.googlesource.com/chromiumos/third_party/linux-firmware" + local firmware_path="/tmp/chromium-firmware" + + git clone --branch master --depth=1 "${firmware_url}" $firmware_path +} \ No newline at end of file diff --git a/rootfs/opt/setup_rootfs.sh b/rootfs/opt/setup_rootfs.sh new file mode 100755 index 0000000..7fd10c1 --- /dev/null +++ b/rootfs/opt/setup_rootfs.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +#setup the debian rootfs +#this is meant to be run within the chroot created by debootstrap + +set -e +if [ "$DEBUG" ]; then + set -x +fi + +custom_repo="https://shimboot.ading.dev/debian" +sources_entry="deb [trusted=yes] ${custom_repo} ${release_name} main" + +#add shimboot repos +echo -e "${sources_entry}\n$(cat /etc/apt/sources.list)" > /etc/apt/sources.list +tee -a /etc/apt/preferences << END +Package: * +Pin: origin "${custom_repo}" +Pin-Priority: 1001 +END + +#install the patched systemd +apt-get install -y ca-certificates +apt-get update +apt-get upgrade -y + +#install desktop +apt-get install -y xfce4 xfce4-goodies network-manager blueman firefox-esr sudo \ No newline at end of file