2022-10-04 19:55:42 +02:00
|
|
|
|
<#!/usr/bin/env bash
|
2022-10-04 19:01:31 +02:00
|
|
|
|
#
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
isohostname="${iso_name}"
|
|
|
|
|
|
|
|
|
|
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 -Sy arch-install-scripts squashfs-tools dosfstools libisoburn --needed
|
|
|
|
|
|
|
|
|
|
if [ "${makesystem}" == "y" ]; then
|
|
|
|
|
mkdir -p ${work_dir}/${arch}/airootfs
|
|
|
|
|
cp -v mirrorlist* /etc/pacman.d/
|
|
|
|
|
pacstrap -c -d -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
|
2022-10-04 19:55:42 +02:00
|
|
|
|
echo "MODULES=\"amdgpu i915 nouveau fuse loop\"" > ${work_dir}/${arch}/airootfs/etc/mkinitcpio.conf
|
2022-10-04 19:01:31 +02:00
|
|
|
|
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
|
2022-10-04 19:25:25 +02:00
|
|
|
|
sed -e 's|def_autostartdesktop=.*$|def_autostartdesktop=\"sway\"|' -i ${work_dir}/iso/boot/grub/defaults.cfg
|
2022-10-04 19:01:31 +02:00
|
|
|
|
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!!!"
|