#!/bin/bash
# temel sistemin olduğu dizin

hata_olustu(){
        echo "$1"
        exit 1
}

# gerekler
[ ! -f /usr/bin/xorriso ] && hata_olustu "xorriso komutu bulunamadı!"
[ ! -f /usr/sbin/mke2fs ] && hata_olustu "mke2fs komutu bulunamadı!"
[ ! -f /usr/bin/mksquashfs ] && hata_olustu "mksquashfs komutu bulunamadı!"
[ ! -f /usr/sbin/mkfs.vfat ] && hata_olustu "mkfs.vfat komutu bulunamadı!"

if [ -z $ROOTFS ];then
	ROOTFS="/home/mlfs/onsistem"
fi

if [ ! -z $1 ];then
	ROOTFS="$1"
fi

if [ ! -d $ROOTFS ];then
	echo "$ROOTFS dizini mevcut değil!"
	exit 1
fi

#[ ! -f $ROOTFS/boot/kernel ] && hata_olustu "$ROOTFS/boot/kernel bulunamadı"
[ ! -f $ROOTFS/boot/initrd_live ] && hata_olustu "$ROOTFS/boot/initrd_live bulunamadı"

# temizlik
if [ -d iso ];then
	rm -fv iso/boot/kernel*
	rm -fv iso/boot/initrd*
	rm -fv iso/efiboot.img
	rm -rfv iso/LiveOS
	rm -rvf $ROOTFS/var/cache/mps/depo/*.mps.lz
fi

echo "Güncel kernel ve initramfs kopyalanıyor..."
kversion=`ls $ROOTFS/boot/kernel-* | xargs -I {} basename {} | head -n1 |cut -d'-' -f2`
cp -rvf $ROOTFS/boot/kernel-${kversion} iso/boot/kernel
#cp -rvf $ROOTFS/boot/initrd_live iso/boot/initrd-${kversion}
cp -rvf $ROOTFS/boot/initrd_live iso/boot/initrd

# LiveOS ayarları
echo "LiveOS ayarları yapılıyor..."
# varsa temp-root/ ve tmp/ umount edil silelim
if [ -d temp-root ]; then
	mountpoint -q temp-root && umount -l temp-root
	rm -rf temp-root
fi
[[ -d tmp ]] && rm -rf tmp

#
mkdir -p tmp/LiveOS
fallocate -l 16G tmp/LiveOS/rootfs.img
mke2fs -t ext4 -L MILIS_CALISAN -F tmp/LiveOS/rootfs.img
mkdir -p temp-root
mount -o loop tmp/LiveOS/rootfs.img temp-root
echo "Chroot içerik dosya sistemi imajına kopyalanıyor..."
cp -dpR $ROOTFS/* temp-root/
umount -l temp-root && rm -rf temp-root 
mkdir -p iso/LiveOS
echo "Dosya sistemi imajı sıkıştırılıyor..."
#mksquashfs tmp iso/LiveOS/squashfs.img -comp xz -b 256K -Xbcj x86
mksquashfs tmp iso/LiveOS/squashfs.img -comp zstd -Xcompression-level 20
chmod 444 iso/LiveOS/squashfs.img
rm -rf tmp

echo "Efi ayarları yapılıyor..."
mkdir -p iso/efi_tmp
dd if=/dev/zero bs=1M count=64 of=./iso/efiboot.img
mkfs.vfat -n Milis_EFI ./iso/efiboot.img 

mount -o loop ./iso/efiboot.img ./iso/efi_tmp
cp -rf ./iso/boot/kernel ./iso/efi_tmp/
cp -rf ./iso/boot/initrd ./iso/efi_tmp/
cp -rf ./efi/* ./iso/efi_tmp/

umount ./iso/efi_tmp 
rm -rf ./iso/efi_tmp

month="$(date -d "$D" '+%m')"
day="$(date -d "$D" '+%d')"
year="$(date -d "$D" '+%Y')"

# updates dizini ile özel ayarların eklenmesi/üstüne yazılması
rm -rf ./iso/updates
cp -rf updates ./iso/

# minimal imajda görsel kurucunun silinmesi
if [ ! -f $ROOTFS/usr/bin/wayland-scanner ];then
	rm -rf iso/updates/opt/Milis-Yukleyici
fi

echo "milis-2.3-${year}.${month}.${day}" > ./iso/updates/etc/milis-surum
echo "Iso dosyası hazırlanıyor..."
#cp $ROOTFS/usr/lib/syslinux/isohdpfx.bin iso/boot/isolinux/isohdpfx.bin
xorriso -as mkisofs \
-iso-level 3 -rock -joliet \
-max-iso9660-filenames -omit-period \
-omit-version-number -relaxed-filenames -allow-lowercase \
-volid "MILIS_CALISAN" \
-eltorito-boot boot/isolinux/isolinux.bin \
-eltorito-catalog boot/isolinux/isolinux.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-eltorito-alt-boot -e efiboot.img -isohybrid-gpt-basdat -no-emul-boot \
-isohybrid-mbr iso/boot/isolinux/isohdpfx.bin \
-output "milis-2.3-${year}.${month}.${day}.iso" iso || echo "ISO imaj olusturalamadı";

chmod 777 milis-2.3-${year}.${month}.${day}.iso
