#!/bin/bash echo -n $( dirname -- "$( readlink -f -- "$0" )" ) > pwd.txt CWD=$(cat pwd.txt) user=$(who | grep "tty" | cut -d" " -f1) group=$user if [[ "$UID" != 0 ]]; then echo "USER NOT ROOT" sudo "$0" exit else echo "USER IS ROOT" fi DELAY=1 function check_internet() { SECONDS=0 ping -c 1 1.1.1.1 > /dev/null have_internet="$?" if [ "$have_internet" -ne 0 ]; then echo "No internet connection" exit fi ELAPSED="Elapsed: $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec" echo -e "\n$ELAPSED\n" } function clean() { echo "CLEAN" if [ -n "$dir" ]; then cd "$CWD/$dir" echo "PWD: $(pwd)" else exit fi rm -v airootfs/opt/extra-drivers/*.pkg.tar.* rm -v airootfs/root/packages/*.pkg.tar.* rm -v airootfs/usr/share/packages/*.pkg.tar.* cd "$CWD" echo "PWD: $CWD" } function mirrorlist() { SECONDS=0 echo "MIRRORLIST" check_internet sed -i -e "s/#Server/Server/g" /etc/pacman.d/mirrorlist.pacnew cp /etc/pacman.d/mirrorlist.pacnew /etc/pacman.d/mirrorlist reflector --save /etc/pacman.d/mirrorlist -c "CA,FI,FR,DE,IS,IE,IT,JP,KZ,LV,LU,NZ,NO,PL,PT,RU,SG,ES,SE,CH,TW,TH, " --protocol https --latest 50 --fastest 50 --sort rate ELAPSED="Elapsed: $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec" echo -e "\n$ELAPSED\n" } function prepare() { SECONDS=0 echo "PREPARE" check_internet if [ -n "$dir" ]; then cd "$CWD/$dir" echo "PWD: $(pwd)" else exit fi pacman -Sy --config pacman_sys.conf pacman -Sw --config pacman_sys.conf --noconfirm --cachedir "./airootfs/opt/extra-drivers" r8168-dkms packs=( dracut grub-dracut grub systemd-boot-dracut libxvmc linux-api-headers linux-cachyos linux-cachyos-headers linux-cachyos-zfs melawy-dracut-initramfs melawy-dracut-ukify melawy-refind-menu-generator melawy-refind-theme-nier-a2 melawy-plymouth-theme-nier-a2 os-prober refind update-grub xf86-video-intel ) pacman -Sw --config pacman_sys.conf --noconfirm --cachedir "./airootfs/usr/share/packages" ${packs[@]} if [ "$?" -ne 0 ]; then pacman -Sw --config pacman_sys.conf --noconfirm --cachedir "./airootfs/usr/share/packages" ${packs[@]} if [ "$?" -ne 0 ]; then for pack in ${packs[@]} do pacman -Sw --config pacman_sys.conf --noconfirm --cachedir "./airootfs/usr/share/packages" $pack done fi fi paccache -rvk 1 --cachedir "./airootfs/opt/extra-drivers" paccache -rvk 1 --cachedir "./airootfs/usr/share/packages" chown -R $user:$group ./airootfs/opt/extra-drivers/ chown -R $user:$group ./airootfs/usr/share/packages/ chown -R $user:$group $CWD/boot/iso cd "$CWD" echo "PWD: $CWD" ELAPSED="Elapsed: $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec" echo -e "\n$ELAPSED\n" } function build() { SECONDS=0 echo "BUILD" check_internet if [ -n "$dir" ]; then cd "$CWD/$dir" echo "PWD: $(pwd)" else exit fi rm -rfv "$CWD/work_${edition}" mkdir -pv "$CWD/boot/"{fd,iso,qcow2,shell_scripts,txt} 2>/dev/null mkdir -pv "$CWD/sf" 2>/dev/null mkdir -pv "$CWD/work_${edition}" 2>/dev/null mkdir -pv "$CWD/sf/${iso_dir}" 2>/dev/null cp -vf "/etc/pacman.d/mirrorlist" "./airootfs/etc/pacman.d/" if [ -f "$CWD/sf/${iso_dir}/${iso_name}.iso" ]; then rm "$CWD/sf/${iso_dir}/${iso_name}.iso" fi pacman -Sw --config pacman_sys.conf --noconfirm $(grep -v '^#' ./packages.x86_64 | grep -v '^$') if [ "$?" -ne 0 ]; then pacman -Sw --config pacman_sys.conf --noconfirm $(grep -v '^#' ./packages.x86_64 | grep -v '^$') fi ./mkarchiso_last_my -v "." cd "$CWD" echo "PWD: $CWD" ELAPSED="Elapsed: $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec" echo -e "\n$ELAPSED\n" } function sign() { SECONDS=0 cd "$CWD" echo "PWD: $CWD" if [ -n "$dir" ]; then chown -R $user:$group "$CWD/sf/" cd "$CWD/sf/${iso_dir}" echo "PWD: $(pwd)" else exit fi if [ -f "${std_iso_name}.iso" ] || [ -f "${iso_name}.iso" ]; then echo "SIGN, SUM, TORRENT" cp -v "$CWD/verify.sh" "." if [ -f "${iso_name}-pkglist.txt" ]; then rm "${iso_name}-pkglist.txt"; fi cp -vf "$CWD/work_${edition}/iso/arch/pkglist.x86_64.txt" "${iso_name}-pkglist.txt" if [ -f "${std_iso_name}.iso" ]; then mv "${std_iso_name}.iso" "${iso_name}.iso"; fi if [ -f "${iso_name}.iso.sig" ]; then rm "${iso_name}.iso.sig"; fi echo "Sign ${iso_name}.iso.sig ${iso_name}.iso" su $(who | grep "tty" | cut -d" " -f1) -c "gpg --detach-sign --local-user BC8B600E8DDA1F4CB77B10D2BA803A261A5EE6B8 --output '${iso_name}.iso.sig' '${iso_name}.iso'" if [ -f "${iso_name}.iso.md5" ]; then rm "${iso_name}.iso.md5"; fi echo "md5sum ${iso_name}.iso" md5sum "${iso_name}.iso" > "${iso_name}.iso.md5" if [ -f "${iso_name}.iso.sha1" ]; then rm "${iso_name}.iso.sha1"; fi echo "sha1sum ${iso_name}.iso" sha1sum "${iso_name}.iso" > "${iso_name}.iso.sha1" if [ -f "${iso_name}.iso.sha256" ]; then rm "${iso_name}.iso.sha256"; fi echo "sha256sum ${iso_name}.iso" sha256sum "${iso_name}.iso" > "${iso_name}.iso.sha256" cd ".." if [ -f "${iso_dir}/${iso_name}.torrent" ]; then rm "${iso_dir}/${iso_name}.torrent" fi if [ -f "${iso_dir}/${iso_name}.iso.torrent" ]; then rm "${iso_dir}/${iso_name}.iso.torrent" fi baselink="https://downloads.sourceforge.net/project/melawy-linux/${iso_dir}" links="" for i in $(ls -1 ${iso_dir}) do links+=$(echo "$baselink/$i," | grep -v "torrent" | tr -d '[:blank:]' | tr -d '[:space:]' | tr -d '[:cntrl:]' | sed 's/[/]$//' | awk '{$1=$1;print}') done links=$(echo $links | sed 's/[,]$//' | tr -d '[:blank:]' | tr -d '[:space:]' | tr -d '[:cntrl:]' | sed 's/[/]$//' | awk '{$1=$1;print}') # mktorrent --verbose --comment="https://melawy.ru" --announce="udp://fosstorrents.com:6969/announce,udp://tracker.opentrackr.org:1337/announce,udp://opentracker.i2p.rocks:6969/announce,udp://open.demonii.com:1337/announce,udp://tracker.openbittorrent.com:6969/announce,http://tracker.openbittorrent.com:80/announce,udp://open.stealth.si:80/announce,udp://tracker.torrent.eu.org:451/announce,udp://exodus.desync.com:6969/announce,udp://tracker1.bt.moack.co.kr:80/announce,udp://tracker.moeking.me:6969/announce,udp://explodie.org:6969/announce,https://tracker.tamersunion.org:443/announce,udp://uploads.gamecoast.net:6969/announce,udp://tracker.tiny-vps.com:6969/announce,udp://tracker.bittor.pw:1337/announce,udp://retracker01-msk-virt.corbina.net:80/announce,udp://movies.zsw.ca:6969/announce,udp://isk.richardsw.club:6969/announce,https://tracker.renfei.net:443/announce,https://tr.burnabyhighstar.com:443/announce,http://fosstorrents.com:6969/announce" --web-seed="${links}" --output="${iso_dir}/${iso_name}.torrent" "${iso_dir}" # transmission-create --anonymize --comment="https://melawy.ru" --tracker="udp://fosstorrents.com:6969/announce,udp://tracker.opentrackr.org:1337/announce,udp://opentracker.i2p.rocks:6969/announce,udp://open.demonii.com:1337/announce,udp://tracker.openbittorrent.com:6969/announce,http://tracker.openbittorrent.com:80/announce,udp://open.stealth.si:80/announce,udp://tracker.torrent.eu.org:451/announce,udp://exodus.desync.com:6969/announce,udp://tracker1.bt.moack.co.kr:80/announce,udp://tracker.moeking.me:6969/announce,udp://explodie.org:6969/announce,https://tracker.tamersunion.org:443/announce,udp://uploads.gamecoast.net:6969/announce,udp://tracker.tiny-vps.com:6969/announce,udp://tracker.bittor.pw:1337/announce,udp://retracker01-msk-virt.corbina.net:80/announce,udp://movies.zsw.ca:6969/announce,udp://isk.richardsw.club:6969/announce,https://tracker.renfei.net:443/announce,https://tr.burnabyhighstar.com:443/announce,http://fosstorrents.com:6969/announce" --webseed="${links}" --outfile="${iso_dir}/${iso_name}.torrent" "${iso_dir}" # buildtorrent --nodate --nocreator --md5sum --show --comment="https://melawy.ru" --announce="udp://fosstorrents.com:6969/announce" --announcelist="udp://fosstorrents.com:6969/announce,udp://tracker.opentrackr.org:1337/announce,udp://opentracker.i2p.rocks:6969/announce,udp://open.demonii.com:1337/announce,udp://tracker.openbittorrent.com:6969/announce,http://tracker.openbittorrent.com:80/announce,udp://open.stealth.si:80/announce,udp://tracker.torrent.eu.org:451/announce,udp://exodus.desync.com:6969/announce,udp://tracker1.bt.moack.co.kr:80/announce,udp://tracker.moeking.me:6969/announce,udp://explodie.org:6969/announce,https://tracker.tamersunion.org:443/announce,udp://uploads.gamecoast.net:6969/announce,udp://tracker.tiny-vps.com:6969/announce,udp://tracker.bittor.pw:1337/announce,udp://retracker01-msk-virt.corbina.net:80/announce,udp://movies.zsw.ca:6969/announce,udp://isk.richardsw.club:6969/announce,https://tracker.renfei.net:443/announce,https://tr.burnabyhighstar.com:443/announce,http://fosstorrents.com:6969/announce" --webseeds="${links}" "${iso_dir}" "${iso_dir}/${iso_name}.torrent" buildtorrent --nodate --nocreator --md5sum --show --comment="https://melawy.ru" --announce="udp://fosstorrents.com:6969/announce" --announcelist="udp://fosstorrents.com:6969/announce,udp://tracker.opentrackr.org:1337/announce,udp://opentracker.i2p.rocks:6969/announce,udp://open.demonii.com:1337/announce,udp://tracker.openbittorrent.com:6969/announce,http://tracker.openbittorrent.com:80/announce,udp://open.stealth.si:80/announce,udp://tracker.torrent.eu.org:451/announce,udp://exodus.desync.com:6969/announce,udp://tracker1.bt.moack.co.kr:80/announce,udp://tracker.moeking.me:6969/announce,udp://explodie.org:6969/announce,https://tracker.tamersunion.org:443/announce,udp://uploads.gamecoast.net:6969/announce,udp://tracker.tiny-vps.com:6969/announce,udp://tracker.bittor.pw:1337/announce,udp://retracker01-msk-virt.corbina.net:80/announce,udp://movies.zsw.ca:6969/announce,udp://isk.richardsw.club:6969/announce,https://tracker.renfei.net:443/announce,https://tr.burnabyhighstar.com:443/announce,http://fosstorrents.com:6969/announce" "${iso_dir}" "${iso_dir}/${iso_name}.torrent" buildtorrent --nodate --nocreator --md5sum --show --comment="https://melawy.ru" --announce="udp://fosstorrents.com:6969/announce" --announcelist="udp://fosstorrents.com:6969/announce,udp://tracker.opentrackr.org:1337/announce,udp://opentracker.i2p.rocks:6969/announce,udp://open.demonii.com:1337/announce,udp://tracker.openbittorrent.com:6969/announce,http://tracker.openbittorrent.com:80/announce,udp://open.stealth.si:80/announce,udp://tracker.torrent.eu.org:451/announce,udp://exodus.desync.com:6969/announce,udp://tracker1.bt.moack.co.kr:80/announce,udp://tracker.moeking.me:6969/announce,udp://explodie.org:6969/announce,https://tracker.tamersunion.org:443/announce,udp://uploads.gamecoast.net:6969/announce,udp://tracker.tiny-vps.com:6969/announce,udp://tracker.bittor.pw:1337/announce,udp://retracker01-msk-virt.corbina.net:80/announce,udp://movies.zsw.ca:6969/announce,udp://isk.richardsw.club:6969/announce,https://tracker.renfei.net:443/announce,https://tr.burnabyhighstar.com:443/announce,http://fosstorrents.com:6969/announce" "${iso_dir}/${iso_name}.iso" "${iso_dir}/${iso_name}.iso.torrent" chown -R $user:$group "$CWD/sf" fi cd "$CWD" echo "PWD: $CWD" ELAPSED="Elapsed: $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec" echo -e "\n$ELAPSED\n" } function std_build() { MAIN_SECONDS=0 # clean # sleep $DELAY # prepare sleep $DELAY build sleep $DELAY sign sleep $DELAY _notify sleep $DELAY MAIN_ELAPSED="Elapsed: $(($MAIN_SECONDS / 3600))hrs $((($MAIN_SECONDS / 60) % 60))min $(($MAIN_SECONDS % 60))sec" echo -e "\n$MAIN_ELAPSED\n" exit } function get_users() { /usr/bin/users | sed 's| |\n|g' | sort | uniq ; } _notify() { local msg="Finished" local title="Make" # at TTY echo "==> INFO: $msg" >&2 if command -v notify-send &> /dev/null then # notification local user userid cmd for user in $(get_users) ; do userid=$(/usr/bin/id -u $user) cmd=( DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$userid/bus /usr/bin/notify-send --expire-time=10000 --icon=info --urgency=normal "'$title'" "'$msg'" ) /usr/bin/su $user -c "${cmd[*]}" done fi } while true; do cd "$CWD" echo "PWD: $CWD" # clear cat << _EOF_ Please Select: 1 - Melawy-Linux-Full 2 - Melawy-Linux-Tiny 3 - Melawy-Linux-NetInstall 0 - Exit _EOF_ read -p "Enter selection [0-3] > " dir="" if [[ $REPLY =~ ^[0-3]$ ]]; then case $REPLY in 1) dir="Melawy-Linux-Full" sleep $DELAY # continue ;; 2) dir="Melawy-Linux-Tiny" sleep $DELAY # continue ;; 3) dir="Melawy-Linux-NetInstall" sleep $DELAY # continue ;; 0) break ;; esac else echo "Invalid entry." sleep $DELAY continue fi # clear cat << _EOF_ Please Select: 1 - Clean 2 - Mirrirlist 3 - Prepare 4 - Build 5 - Sign 6 - Std build chain 0 - Exit _EOF_ read -p "Enter selection [0-6] > " edition="$(basename $(pwd)/${dir})" date_tag=$(date +%Y.%m.%d) std_iso_name="Melawy-Linux-${date_tag}-x86_64" iso_name="${edition}-${date_tag}-x86_64" iso_dir="${edition}-${date_tag}" if [[ $REPLY =~ ^[0-6]$ ]]; then case $REPLY in 1) clean sleep $DELAY continue ;; 2) mirrorlist sleep $DELAY continue ;; 3) prepare sleep $DELAY continue ;; 4) build sleep $DELAY continue ;; 5) sign sleep $DELAY continue ;; 6) std_build sleep $DELAY continue ;; 0) break ;; esac else echo "Invalid entry." sleep $DELAY continue fi done # notify-send -a "$(basename $(pwd)): Make" -t 10000 "finished" "$(date '+%Y.%m.%d %H:%M:%S')" _notify echo "Ready" # # if [ "$status" == 0 ]; then # sleep 5 # kill $(ps x | grep konsole | grep $0 | awk '{print $1}') # fi