SpectreOS/make_mksquashfs-auto.sh
2023-03-07 12:55:35 +01:00

326 lines
12 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
#
set -ex
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
sudo "${0}" "$@"
exit 0
fi
# full install parameters
# ./make_mksquashfs-auto.sh makesystem mkinitcpio filesystem makeimage makebios makeiso
# Parameter:
# Entfernt die Datenträger die noch gemounted sind: umount
# Mountet die Datenträger: mount
#
# Packete die installiert sein muessen:
# arch-install-scripts
# xorriso
# squashfs-tools
iso_name=spectreos
iso_label="SPECTREOS"
iso_label_short="S_OS"
iso_version=$(date +%Y%m%d)
out_dir=out
install_dir=arch
# while-schleife
while (( "$#" ))
do
echo ${1}
export ${1}="y"
shift
done
arch=$(uname -m)
repo=spectreos
repo1=shell-scripte-code
work_dir="/builds"
function umount_chroot() {
if ! umount -Rfl /builds/${arch}/airootfs; then
echo "Buildverzeichnis NICHT erfolgreich ungemounted"
fi
}
function mount_chroot() {
umount_chroot
### https://bugs.archlinux.org/task/46169
mount --bind ${work_dir}/${arch}/airootfs/ ${work_dir}/${arch}/airootfs/
### https://wiki.archlinux.org/index.php/Install_Arch_Linux_from_existing_Linux#Using_a_chroot_environment
mount -t proc /proc ${work_dir}/${arch}/airootfs/proc
mount -o bind /dev ${work_dir}/${arch}/airootfs/dev
mount -o bind /dev/pts ${work_dir}/${arch}/airootfs/dev/pts
mount -o bind /sys ${work_dir}/${arch}/airootfs/sys
### Before chrooting to it, we need to set up some mount points and copy the resolv.conf for networking.
### https://askubuntu.com/questions/469209/how-to-resolve-hostnames-in-chroot
#mount --bind /etc/resolv.conf ${work_dir}/${arch}/airootfs/etc/resolv.conf
#mount --bind /run ${work_dir}/${arch}/airootfs/run
cp /etc/resolv.conf ${work_dir}/${arch}/airootfs/etc/resolv.conf
}
function system() {
pacman -Syu arch-install-scripts squashfs-tools dosfstools libisoburn --needed --noconfirm
if [ "${makesystem}" == "y" ]; then
mkdir -p ${work_dir}/${arch}/airootfs
cp -v mirrorlist* /etc/pacman.d/
pacstrap -c -G -C pacman.conf -M ${work_dir}/${arch}/airootfs $(cat packages.txt)
fi
if [ "${mkinitcpio}" == "y" ]; then
# module and hooks
# hooks
cp -v configs/install/* ${work_dir}/${arch}/airootfs/usr/lib/initcpio/install/
cp -v configs/hooks/* ${work_dir}/${arch}/airootfs/usr/lib/initcpio/hooks/
cp -v configs/script-hooks/* ${work_dir}/${arch}/airootfs/usr/lib/initcpio/
mkdir -p ${work_dir}/${arch}/airootfs/etc/pacman.d/hooks
cp -v configs/pacman-hooks/* ${work_dir}/${arch}/airootfs/etc/pacman.d/hooks/
cp -v pacman.conf ${work_dir}/${arch}/airootfs/etc/pacman.conf
cp -v mirrorlist* ${work_dir}/${arch}/airootfs/etc/pacman.d/
chmod 644 -R ${work_dir}/${arch}/airootfs/etc/pacman.d/mirrorlist*
# modprobe.d
mkdir -p ${work_dir}/${arch}/airootfs/etc/modprobe.d/
echo "blacklist floppy" > ${work_dir}/${arch}/airootfs/etc/modprobe.d/blacklist-floppy.conf
echo "blacklist nouveau" > ${work_dir}/${arch}/airootfs/etc/modprobe.d/blacklist_nouveau.conf
echo "install dell-smbios /bin/false" > ${work_dir}/${arch}/airootfs/etc/modprobe.d/blacklist-dell-smbios.conf
# modules
echo "MODULES=\"amdgpu i915 nouveau fuse loop\"" > ${work_dir}/${arch}/airootfs/etc/mkinitcpio.conf
echo "HOOKS=\"base udev keyboard keymap consolefont modconf archiso block filesystems\"" >> ${work_dir}/${arch}/airootfs/etc/mkinitcpio.conf
echo "COMPRESSION=\"zstd\"" >> ${work_dir}/${arch}/airootfs/etc/mkinitcpio.conf
fi
}
function IMAGE() {
if [ "$image" != "n" ]
then
echo "Unmounte System"
sleep 2
umount_chroot
echo "System wird gereinigt und komprimiert!!!"
sleep 5
mkdir -p ${work_dir}/iso/${install_dir}/${arch}/airootfs/
if [ -f ${work_dir}/${arch}/airootfs/pkglist.txt ]; then
cp ${work_dir}/${arch}/airootfs/pkglist.txt ${work_dir}/iso/${install_dir}/${arch}/
fi
if [ -f ${work_dir}/iso/${install_dir}/${arch}/airootfs.sfs ]
then
echo "${work_dir}/iso/${install_dir}/${arch}/airootfs.sfs wird neu angelegt!!!"
rm ${work_dir}/iso/${install_dir}/${arch}/airootfs.sfs
else
echo "airootfs.sfs nicht vorhanden!"
fi
mksquashfs ${work_dir}/${arch}/airootfs ${work_dir}/iso/${install_dir}/${arch}/airootfs.sfs -comp zstd
mkdir -p tmp/
sha512sum ${work_dir}/iso/${install_dir}/${arch}/airootfs.sfs > tmp/airootfs.sha512
echo "$(cat tmp/airootfs.sha512 | awk -F ' ' '{print $1}') /run/archiso/bootmnt/${install_dir}/${arch}/airootfs.sfs" > ${work_dir}/iso/${install_dir}/${arch}/airootfs.sha512
else
echo "Image wird nicht neu aufgebaut!!!"
fi
}
function copykernel() {
mkdir -p ${work_dir}/iso/boot
mkdir -p ${work_dir}/iso/${install_dir}/boot/${arch}/
cp ${work_dir}/${arch}/airootfs/boot/initramfs-linux.img ${work_dir}/iso/${install_dir}/boot/${arch}/archiso.img
cp ${work_dir}/${arch}/airootfs/boot/vmlinuz-linux ${work_dir}/iso/${install_dir}/boot/${arch}/vmlinuz
cp ${work_dir}/iso/${install_dir}/boot/${arch}/archiso.img ${work_dir}/iso/boot/initramfs-${arch}.img
cp ${work_dir}/iso/${install_dir}/boot/${arch}/vmlinuz ${work_dir}/iso/boot/vmlinuz-${arch}
}
function UEFI() {
mkdir -p ${work_dir}/iso/boot
mkdir -p ${work_dir}/iso/${install_dir}/boot/${arch}
mkdir -p ${work_dir}/iso/boot/
mkdir -p ${work_dir}/iso/EFI/boot/
mkdir -p ${work_dir}/iso/boot/grub/
mkdir -p ${work_dir}/iso/EFI/archiso
mkdir -p ${work_dir}/iso/EFI/boot
mkdir -p ${work_dir}/iso/loader/entries
if [ "$efi" != "n" ]
then
if [ -f ${work_dir}/iso/EFI/archiso/efiboot.img ]
then
rm ${work_dir}/iso/EFI/archiso/efiboot.img
else
echo "efiboot.img nicht vorhanden!"
fi
truncate -s 4M ${work_dir}/iso/EFI/archiso/efiboot.img
mkfs.vfat -n ${iso_label_short}_EFI ${work_dir}/iso/EFI/archiso/efiboot.img
copykernel
mkdir -p ${work_dir}/efiboot
mount -t vfat -o loop ${work_dir}/iso/EFI/archiso/efiboot.img ${work_dir}/efiboot
mkdir -p ${work_dir}/efiboot/EFI/boot/
cp -v grub-config/cfg/*.cfg ${work_dir}/iso/boot/grub/
mkdir -p ${work_dir}/iso/boot/grub/themes
cp -Rv grub-config/themes/Stylish/ ${work_dir}/iso/boot/grub/themes/
cp grub-config/unicode.pf2 ${work_dir}/iso/boot/grub/
cp -Rv grub-config/{locales,tz} ${work_dir}/iso/boot/grub/
cp -Rv /usr/lib/grub/i386-pc ${work_dir}/iso/boot/grub/
grub-mkimage -d ${work_dir}/iso/boot/grub/i386-pc -o ${work_dir}/iso/boot/grub/i386-pc/core.img -O i386-pc -p /boot/grub biosdisk iso9660
#grub-install --target=i386-pc --force --removable --boot-directory=${work_dir}/iso/boot/ --efi-directory=${work_dir}/efiboot/ /dev/sdc
cat ${work_dir}/iso/boot/grub/i386-pc/cdboot.img ${work_dir}/iso/boot/grub/i386-pc/core.img > ${work_dir}/iso/boot/grub/i386-pc/eltorito.img
cp -Rv /usr/lib/grub/x86_64-efi ${work_dir}/iso/boot/grub/
grub-mkimage -d ${work_dir}/iso/boot/grub/x86_64-efi -o ${work_dir}/iso/EFI/boot/bootx64.efi -O x86_64-efi -p /boot/grub iso9660
#grub-install --target=x86_64-efi --force --removable --boot-directory=${work_dir}/iso/EFI/boot/ --efi-directory=${work_dir}/efiboot/ /dev/sdc
cp -Rv /usr/lib/grub/x86_64-efi ${work_dir}/efiboot/EFI/boot/
grub-mkimage -d ${work_dir}/iso/boot/grub/x86_64-efi -o ${work_dir}/efiboot/EFI/boot/bootx64.efi -O x86_64-efi -p /boot/grub iso9660
cp ${work_dir}/${arch}/airootfs/boot/memtest86+/memtest.bin ${work_dir}/iso/boot/memtest
cp ${work_dir}/${arch}/airootfs/usr/share/licenses/common/GPL2/license.txt ${work_dir}/iso/boot/memtest.COPYING
cp ${work_dir}/${arch}/airootfs/boot/memtest86+/memtest.bin ${work_dir}/iso/EFI/boot/memtest
cp ${work_dir}/${arch}/airootfs/usr/share/licenses/common/GPL2/license.txt ${work_dir}/iso/EFI/boot/memtest.COPYING
sed -e 's|@iso_label@|'$iso_label'|' -i ${work_dir}/iso/boot/grub/kernels.cfg
sed -e 's|@parameters@||' -i ${work_dir}/iso/boot/grub/kernels.cfg
sed -e 's|grub_theme=.*$|grub_theme=/boot/grub/themes/Stylish/theme.txt|' -i ${work_dir}/iso/boot/grub/variable.cfg
sed -e 's|def_bootlang=.*$|def_bootlang=\"de_DE\"|' -i ${work_dir}/iso/boot/grub/defaults.cfg
sed -e 's|def_keyboard=.*$|def_keyboard=\"de\"|' -i ${work_dir}/iso/boot/grub/defaults.cfg
sed -e 's|def_timezone=.*$|def_timezone=\"Europe/Berlin\"|' -i ${work_dir}/iso/boot/grub/defaults.cfg
sed -e 's|def_netinstall=.*$|def_netinstall=\"no\"|' -i ${work_dir}/iso/boot/grub/defaults.cfg
sed -e 's|def_autostartdesktop=.*$|def_autostartdesktop=\"sway\"|' -i ${work_dir}/iso/boot/grub/defaults.cfg
sed -e 's|def_copytoram=.*$|def_copytoram=\"n\"|' -i ${work_dir}/iso/boot/grub/defaults.cfg
###
sleep 5
if [ "$trennen" != "n" ]
then
umount -d ${work_dir}/efiboot
fi
fi
}
function makegrubiso() {
mkdir -p ${out_dir}
xorriso -as mkisofs \
--modification-date=$(date -u +%Y-%m-%d-%H-%M-%S-00 | sed -e s/-//g) \
--protective-msdos-label \
-volid "${iso_label}" \
-appid "${iso_name} Live/Rescue CD" \
-publisher "${username}" \
-preparer "Prepared by simono41 SpectreOS/${0##*/}" \
-r -graft-points -no-pad \
--sort-weight 0 / \
--sort-weight 1 /boot \
--grub2-mbr ${work_dir}/iso/boot/grub/i386-pc/boot_hybrid.img \
-partition_offset 16 \
-b boot/grub/i386-pc/eltorito.img \
-c boot.catalog \
-no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \
-eltorito-alt-boot \
-append_partition 2 0xef ${work_dir}/iso/EFI/archiso/efiboot.img \
-e --interval:appended_partition_2:all:: -iso_mbr_part_type 0x00 \
-no-emul-boot -iso-level 3 \
-o "${out_dir}/${imagename}" \
"${work_dir}/iso/"
}
system
if [ "${filesystem}" == "y" ]; then
cp -v arch-graphical-install-auto.sh ${work_dir}/${arch}/airootfs/usr/bin/arch-graphical-install-auto
chmod +x ${work_dir}/${arch}/airootfs/usr/bin/arch-graphical-install-auto
# Dieses Script sorgt dafür, dass die Repository´s als Systemvariablen eingerichtet werden
cp -v repo.sh ${work_dir}/${arch}/airootfs/usr/bin/repo
chmod +x ${work_dir}/${arch}/airootfs/usr/bin/repo
# Falls das benötigte Packet nicht enthalten ist, installiere es erneut
mount_chroot
chroot ${work_dir}/${arch}/airootfs /usr/bin/arch-graphical-install-auto archisoinstall
fi
if [ "${makeimage}" == "y" ]; then
# System-image
IMAGE
fi
if [ "${umount}" == "y" ]; then
umount_chroot
fi
if [ "${mount}" == "y" ]; then
mount_chroot
fi
if [ "${makebios}" == "y" ]; then
copykernel
UEFI
fi
if [ "${makeiso}" == "y" ]; then
# MAKEISO
if [ "$image" != "n" ]
then
imagename=arch-${iso_name}-${iso_version}-${arch}.iso
if [ "$run" != "n" ]
then
if [ -f ${out_dir}/${imagename} ]
then
rm ${out_dir}/${imagename}
fi
makegrubiso
fi
fi
fi
# chroot
sync
echo "$(date "+%Y%m%d-%H%M%S")"
echo "Fertig!!!"