#!/usr/bin/env bash set -x usage() { echo -e "$(basename $0) [ISO_FLAVOUR] [Kernel-VERSION]" } error() { local ERROR ERROR="$1" echo -e "Error during proceeding, aborting due to ${ERROR}" exit 3 } deps_check() { local PACKAGE COMMAND PACKAGE=$1 COMMAND=$2 RESULT=$(which $COMMAND) if [[ -z $RESULT ]]; then if [[ $PACKAGE == cards ]] && [[ -z $RESULT ]]; then echo -e "You're in a other distro than NuTyX/Yaolinux, please install packages manually" echo -e "Packages are git cdrtools syslinux libisoburn grub-efi dosfstools" exit 1 fi echo -e "$PACKAGE not installed, proceeding..." cards install $PACKAGE || error "Cards can not install packages" RESULT_AFTER_INSTALL=$(which $COMMAND) if [[ -z $RESULT_AFTER_INSTALL ]]; then echo -e "Installation of $PACKAGE failed, exiting..." exit 2 fi fi } if [[ $1 == -h ]]; then usage exit 1 fi if [[ $UID != 0 ]]; then error "Must be in Super User mode to execute the script" fi ISO_DEST=$1 if [[ -z $ISO_DEST ]]; then echo -e "What is the destination of the iso ? (MINI (default), XFCE...)" read ISO_DEST fi [[ -z $ISO_DEST ]] && ISO_DEST=MINI [[ -z $BUILD_ISOFOLDER ]] && BUILD_ISOFOLDER=/ISO_${ISO_DEST} [[ -z $GIT_CLONE_HOME ]] && GIT_CLONE_HOME=$HOME #[[ -z $GIT_FOLDER ]] && GIT_FOLDER=$GIT_CLONE_HOME/packages-x86_64 [[ -z $GIT_FOLDER ]] && GIT_FOLDER=$GIT_CLONE_HOME/base-sysd GIT_ISOFOLDER=$GIT_FOLDER/iso GIT_SCRIPTSFOLDER=$GIT_FOLDER/scripts #[[ -z $GIT_URL ]] && GIT_URL='https://github.com/NuTyX/packages-x86_64' [[ -z $GIT_URL ]] && GIT_URL='https://github.com/YaoLinux/base-sysd' [[ -z $SQUASH_COMP_OPTS ]] && SQUASH_COMP_OPTS='-comp zstd' case $ISO_DEST in MINI) INSTALL_PACKAGES="cards install efibootmgr dosfstools wireless-tools wpa-supplicant gpm" POST_INSTALL="systemctl enable systemd-{network,resolve}d.service getty@tty1.service" ;; XFCE4) INSTALL_PACKAGES="cards install efibootmgr dosfstools wireless-tools wpa-supplicant gpm \ network-manager-applet gvfs lightdm-gtk-greeter xfce4 xfce4-extra xdg-user-dirs \ xorg-server xorg-xinit vlc firefox flcards gparted xorg-xf86-input-synaptics" POST_INSTALL="systemctl enable NetworkManager.service lightdm getty@tty1.service" ;; XFCE4_FR) INSTALL_PACKAGES="cards install efibootmgr dosfstools wireless-tools wpa-supplicant gpm \ network-manager-applet gvfs lightdm-gtk-greeter xfce4 xfce4-extra xdg-user-dirs \ xorg-server xorg-xinit vlc firefox flcards gparted xorg-xf86-input-synaptics" POST_INSTALL="systemctl enable NetworkManager.service lightdm getty@tty1.service" CARDS_LOCALE="echo 'group fr' >> \/etc\/cards.conf" INSTALL_LOCALE="cards upgrade" ;; MATE_LIGHT) INSTALL_PACKAGES="cards install efibootmgr dosfstools wireless-tools wpa-supplicant gpm \ network-manager-applet gvfs lightdm-gtk-greeter mate mate-extra xdg-user-dirs \ xorg-server xorg-xinit vlc firefox flcards gparted yaolinux-wallpaper xorg-xf86-input-synaptics" POST_INSTALL="systemctl enable NetworkManager.service lightdm getty@tty1.service" ;; MATE_LIGHT_FR) INSTALL_PACKAGES="cards install efibootmgr dosfstools wireless-tools wpa-supplicant gpm \ network-manager-applet gvfs lightdm-gtk-greeter mate mate-extra xdg-user-dirs \ xorg-server xorg-xinit vlc firefox flcards gparted yaolinux-wallpaper xorg-xf86-input-synaptics" POST_INSTALL="systemctl enable NetworkManager.service lightdm getty@tty1.service" CARDS_LOCALE="echo 'group fr' >> \/etc\/cards.conf" INSTALL_LOCALE="cards upgrade" ;; MATE_FULL) INSTALL_PACKAGES="cards install efibootmgr dosfstools wireless-tools wpa-supplicant gpm \ network-manager-applet gvfs lightdm-gtk-greeter mate mate-extra xdg-user-dirs xorg-xf86-input-synaptics\ xorg-server xorg-xinit vlc firefox flcards gparted gnome-disk-utility system-config-printer thunderbird \ htop inxi neofetch libreoffice deadbeef yaolinux-wallpaper" POST_INSTALL="systemctl enable NetworkManager.service lightdm getty@tty1.service cups" ;; MATE_FULL_FR) INSTALL_PACKAGES="cards install efibootmgr dosfstools wireless-tools wpa-supplicant gpm \ network-manager-applet gvfs lightdm-gtk-greeter mate mate-extra xdg-user-dirs xorg-xf86-input-synaptics \ xorg-server xorg-xinit vlc firefox flcards gparted gnome-disk-utility system-config-printer thunderbird \ htop inxi neofetch libreoffice deadbeef yaolinux-wallpaper" POST_INSTALL="systemctl enable NetworkManager.service lightdm getty@tty1.service cups" CARDS_LOCALE="echo 'group fr' >> \/etc\/cards.conf" INSTALL_LOCALE="cards upgrade" ;; ENLIGHTENMENT_FR) INSTALL_PACKAGES="cards install efibootmgr dosfstools wireless-tools wpa-supplicant gpm xorg-xf86-input-synaptics \ gvfs sddm elementary xdg-user-dirs xorg-server xorg-xinit chromium gparted yaolinux-wallpaper" POST_INSTALL="systemctl enable sddm getty@tty1.service" CARDS_LOCALE="echo 'group fr' >> \/etc\/cards.conf" INSTALL_LOCALE="cards upgrade" ;; KDE5|PLASMA5|kde5|plasma5) INSTALL_PACKAGES="cards install efibootmgr dosfstools wireless-tools wpa-supplicant gpm xorg-xf86-input-synaptics \ gvfs sddm kde5-desktops konsole dolphin breeze-gtk xdg-user-dirs xorg-server xorg-xinit gparted \ network-manager plasma-nm yaolinux-wallpaper" POST_INSTALL="systemctl enable sddm getty@tty1.service systemd-timesyncd NetworkManager" CARDS_LOCALE="echo 'group fr' >> \/etc\/cards.conf" INSTALL_LOCALE="cards upgrade" ;; KDE5_FR|PLASMA5_FR|kde5_fr|plasma5_fr) INSTALL_PACKAGES="cards install efibootmgr dosfstools wireless-tools wpa-supplicant gpm xorg-xf86-input-synaptics \ gvfs sddm kde5-desktops konsole dolphin breeze-gtk xdg-user-dirs xorg-server xorg-xinit gparted \ networkmanager plasma-nm hplip yaolinux-wallpaper" POST_INSTALL="systemctl enable sddm getty@tty1.service systemd-timesyncd NetworkManager cups" CARDS_LOCALE="echo 'group fr' >> \/etc\/cards.conf" INSTALL_LOCALE="cards upgrade" ;; GNOME_FR) INSTALL_PACKAGES="cards install efibootmgr dosfstools wireless-tools wpa-supplicant gpm \ network-manager-applet gvfs gdm gnome3 gnome3-apps xdg-user-dirs \ xorg-server xorg-xinit vlc chromium gparted gnome-disk-utility system-config-printer thunderbird \ htop libreoffice spotify telegram-desktop-bin discord" POST_INSTALL="systemctl enable NetworkManager.service gdm getty@tty1.service" CARDS_LOCALE="echo 'group fr' >> \/etc\/cards.conf" INSTALL_LOCALE="cards upgrade" ;; GNOME_MINI_FR) INSTALL_PACKAGES="cards install efibootmgr dosfstools \ gvfs gdm gnome3 xdg-user-dirs \ xorg-server xorg-xinit" POST_INSTALL="systemctl enable systemd-networkd systemd-resolved systemd-timesyncd getty@tty1.service" CARDS_LOCALE="echo 'group fr' >> \/etc\/cards.conf" INSTALL_LOCALE="cards upgrade" ;; *) echo -e "Unknown flavour, back to MINI" INSTALL_PACKAGES="cards install efibootmgr dosfstools wireless-tools wpa-supplicant gpm" POST_INSTALL="systemctl enable systemd-{network,resolve}d.service getty@tty1.service" ;; esac for DEP in cards git cdrtools syslinux libisoburn grub-efi dosfstools; do case $DEP in cards) deps_check cards cards ;; git) deps_check git git ;; cdrtools) deps_check cdrtools genisoimage ;; syslinux) deps_check syslinux isohybrid ;; libisoburn) deps_check libisoburn xorrisofs ;; grub-efi) deps_check grub-efi grub-install-efi ;; dosfstools) deps_check dosfstools mkfs.vfat ;; esac done cat > /tmp/buildisoscript << "EOF" #!/bin/bash KERNEL_LTS="$(readlink /boot/kernel-lts)" mkinitramfs "${KERNEL_LTS/kernel-/}" -nf cards install kernel KERNEL="$(readlink /boot/kernel)" mkinitramfs "${KERNEL/kernel-/}" -nf @@INSTALL_PACKAGES@@ @@POST_INSTALL@@ @@CARDS_LOCALE@@ @@INSTALL_LOCALE@@ cards purge for directories in opt bin etc lib lib64 root run sbin usr var home do [[ -f /ISO/boot/"$directories".squashfs ]] && rm /ISO/boot/"$directories".squashfs mksquashfs /"$directories" /ISO/boot/"$directories".squashfs @@SQUASH_COMP_OPTS@@ done exit 0 EOF sed -e "s/@@SQUASH_COMP_OPTS@@/${SQUASH_COMP_OPTS}/" -i /tmp/buildisoscript || error "Can not modify buildisoscript" sed -e "s/@@INSTALL_PACKAGES@@/${INSTALL_PACKAGES}/" -i /tmp/buildisoscript || error "Can not modify buildisoscript" sed -e "s/@@POST_INSTALL@@/${POST_INSTALL}/" -i /tmp/buildisoscript || error "Can not modify buildisoscript" sed -e "s/@@CARDS_LOCALE@@/${CARDS_LOCALE}/" -i /tmp/buildisoscript || error "Can not modify buildisoscript" sed -e "s/@@INSTALL_LOCALE@@/${INSTALL_LOCALE}/" -i /tmp/buildisoscript || error "Can not modify buildisoscript" GITCMD=$(which git) CHROOTCMD=$(which chroot) INSTALL_NUTYXCMD=$(which install-nutyx) export LFS=${BUILD_ISOFOLDER} if [[ ! -d $GIT_FOLDER ]] then git clone $GIT_URL || error "Can not do git clone $GIT_URL" else pushd $GIT_FOLDER git pull || error "Can not do git pull in $GITFOLDER" popd fi if [[ -d $LFS ]]; then echo -e "Folder $LFS already exists, deleting..." rm -rf $LFS fi VERSION=${VERSION} URL=${URL} ${INSTALL_NUTYXCMD} cp -av $GIT_ISOFOLDER $LFS/ISO || error "Can not copy in $LFS/ISO" install -vm755 /tmp/buildisoscript ${BUILD_ISOFOLDER}/tmp || error "Can not install in ${BUILD_ISOFOLDER}/tmp" #cat ${BUILD_ISOFOLDER}/tmp/buildisoscript chroot ${BUILD_ISOFOLDER} /bin/bash -c "/tmp/buildisoscript" || error "Chroot was not executed normally" KERNEL_NAME=$(readlink ${BUILD_ISOFOLDER}/boot/kernel) KERNEL_NAME=${KERNEL_NAME/kernel-/} bash $GIT_SCRIPTSFOLDER/mkiso-script $ISO_DEST $KERNEL_NAME || error "mkiso-script was not executed normally"