shackle/resources/build_main.sh
2024-10-28 16:40:24 -04:00

87 lines
No EOL
2.2 KiB
Bash
Executable file

#!/bin/bash
#
# depends:
# - cdrtools (for mkisofs)
# - syslinux (for isohybrid)
# - p7zip (extracting the iso)
# - cpio (for creating the cpio file)
# - squashfs-tools (for extracting the tcz files)
if [ "$ARCH" == "x86_64" ]; then
export gz_file="corepure64"
sed -i 's/vmlinuz/vmlinuz64/g' resources/isolinux.cfg
sed -i 's/core.gz/corepure64.gz/g' resources/isolinux.cfg
else
export gz_file="core"
fi
# take use of timeout
sudo true
# extract our iso
printf "extracting $origISO..."
7z x iso/$origISO -oisoext > /dev/null
echo "done"
# get extensions
printf "downloading extensions..."
cd resources
sudo -E ./FetchExt.sh $extensions > /dev/null
cd ..
echo "done"
# extract $gz_file.gz
printf "extracting $gz_file.gz..."
mv isoext/boot/$gz_file.gz .
mkdir coreext
cd coreext
zcat ../$gz_file.gz | sudo cpio -i -H newc -d --quiet
cd ..
echo "done"
# extract extensions
printf "extracting extensions..."
cd resources
for tcztoext in *.tcz; do
unsquashfs -q -n -f $tcztoext
done
echo "done"
# inject extensions to core and inject a script to run at login
printf "injecting extensions and login script..."
sudo cp -r squashfs-root/* ../coreext/
cd ../coreext/
sudo cp ../resources/startup.sh etc/profile.d/startup.sh
echo "done"
# compile new core.gz
printf "creating new $gz_file.gz..."
sudo rm ../$gz_file.gz
sudo find | sudo cpio -o -H newc --quiet | gzip -11 > ../$gz_file.gz
cd ../isoext/
sudo mv ../$gz_file.gz boot/$gz_file.gz
cd ..
echo "done"
# remove boot menu and force directly booting
printf "removing boot menu..."
rm isoext/boot/isolinux/boot.msg isoext/boot/isolinux/f2 isoext/boot/isolinux/f3 isoext/boot/isolinux/f4
cp resources/isolinux.cfg isoext/boot/isolinux/isolinux.cfg
echo "done"
# make our new iso
printf "creating iso..."
mkisofs -l -J -R -V shackle -quiet -no-emul-boot -boot-load-size 4 -boot-info-table -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -o iso/shackle_$ARCH.iso isoext
isohybrid -o 64 iso/shackle_$ARCH.iso
echo "done"
# clean up
cd resources/
rm -r *.tcz *.dep *.md5.txt Log.txt info.lst Dependency.list squashfs-root/
cd ..
sudo rm -r isoext/ coreext/
if [ "$ARCH" == "x86_64" ]; then
sed -i 's/vmlinuz64/vmlinuz/g' resources/isolinux.cfg
sed -i 's/corepure64.gz/core.gz/g' resources/isolinux.cfg
fi