build_appimage.sh | Light | Dark | Close
#!/bin/bash
# build_appimage.sh Copyright (C) 2023 Ingemar Ceicer
# https://ceicer.eu
# programming@ceicer.com
# build_appimage.sh is free software:
# you can redistribute it and/or modify
# it under the terms of the
# GNU General Public License as published by
# the Free Software Foundation, version 3.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# EDIT
QT5=5.15.10
QT6=6.5.2
EXECUTABLE=streamcapture2
SUPORTEDGLIBC=2.31
# STOP EDIT
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
BOLD=$(tput bold)
NORMAL=$(tput sgr0)
GLIBCVERSION=$(glibcversion)
READMORE=https://gitlab.com/posktomten/${EXECUTABLE}
if [ $(getconf LONG_BIT) = 64 ]; then
GCC="gcc_64"
else
GCC="gcc_32"
fi
function doZsynkMake() {
PS3=$(echo -e "${BLUE}Pleas Select Stable or BETA ${NC}")
stable_or_beta=("Stable" "BETA" "Quit")
select opt in "${stable_or_beta[@]}"; do
case "$opt" in
"Stable")
BIN_DIR="/bin.ceicer.com/public_html/${EXECUTABLE}/bin/linux/GLIBC${GLIBCVERSION}"
ZSYNC_ADDRESS="http://bin.ceicer.com/zsync/${EXECUTABLE}/GLIBC${GLIBCVERSION}/"
ZSYNC_DIR="/bin.ceicer.com/public_html/zsync/${EXECUTABLE}/GLIBC${GLIBCVERSION}"
echo "${EXECUTABLE} AppImage will be uploaded to"
echo $BIN_DIR
break
;;
"BETA")
BIN_DIR="/bin.ceicer.com/public_html/${EXECUTABLE}/bin/linux/GLIBC${GLIBCVERSION}/BETA"
ZSYNC_ADDRESS="http://bin.ceicer.com/zsync/${EXECUTABLE}/GLIBC${GLIBCVERSION}/BETA/"
ZSYNC_DIR="/bin.ceicer.com/public_html/zsync/${EXECUTABLE}/GLIBC${GLIBCVERSION}/BETA"
echo "${EXECUTABLE} AppImage will be uploaded to"
echo $BIN_DIR
break
;;
"Quit")
echo "Goodbye!"
exit 0
break
;;
esac
done
whitespace=" "
date_now=$(date "+%F %H:%M:%S")
for i in *.AppImage; do
filelenght=$(("${#i}" + 41))
#if [[ $filelenght -le 57 ]] ;
# then
# filelenght=56
#fi
streck=""
while [[ ${#streck} -le ${filelenght} ]]; do
streck="${streck}-"
done
echo "${streck}" >"$i-MD5.txt"
echo "MD5 HASH SUM" >>"$i-MD5.txt"
md5sum "$i" >>"$i-MD5.txt"
echo "${streck}" >>"$i-MD5.txt"
filesize=$(stat -c%s "$i")
mb=$(bc <<<"scale=6; $filesize / 1048576")
mb2=$(echo $mb | awk '{printf "%f", $1 + $2}')
echo "Uploaded: $date_now" >>"$i-MD5.txt"
echo "Size:$whitespace$mb2 MB" >>"$i-MD5.txt"
echo "$i" requires GLIBC higher than or equal to "${GLIBCVERSION}" >>"$i-MD5.txt"
echo "${streck}" >>"$i-MD5.txt"
echo "HOW TO CHECK THE HASH SUM" >>"$i-MD5.txt"
echo "${streck}" >>"$i-MD5.txt"
echo "LINUX" >>"$i-MD5.txt"
echo "\"md5sum\" is included in most Linus distributions." >>"$i-MD5.txt"
echo "md5sum $i" >>"$i-MD5.txt"
echo "${streck}" >>"$i-MD5.txt"
echo "WINDOWS" >>"$i-MD5.txt"
echo "\"certutil\" is included in Windows." >>"$i-MD5.txt"
echo "certutil -hashfile $i md5" >>"$i-MD5.txt"
echo "${streck}" >>"$i-MD5.txt"
echo "READ MORE" >>"$i-MD5.txt"
echo "$READMORE" >>"$i-MD5.txt"
echo "${streck}" >>"$i-MD5.txt"
echo
echo " _ _ _____ _ " >>"$i-MD5.txt"
echo "| | | | __ _ __ __ ___ | ___|_ _ _ __ | |" >>"$i-MD5.txt"
echo "| |_| | / _ |\ \ / // _ \ | |_ | | | || _ \ | |" >>"$i-MD5.txt"
echo "| _ || (_| | \ V /| __/ | _| | |_| || | | ||_|" >>"$i-MD5.txt"
echo "|_| |_| \__,_| \_/ \___| |_| \__,_||_| |_|(_)" >>"$i-MD5.txt"
done
echo "----------------------------------------------------------------"
PS3=$(echo -e "${BLUE}Please enter your choice: ${NC}")
options=("Upload AppImage" "Upload AppImage later" "Quit")
select opt in "${options[@]}"; do
case $opt in
"Upload AppImage")
echo "You chose $REPLY which is $opt"
cp -f *.AppImage ${EXECUTABLE}-zsyncmake/
cp -f *.AppImage-MD5.txt ${EXECUTABLE}-zsyncmake/
cd ${EXECUTABLE}-zsyncmake
for i in *.AppImage; do
./zsyncmake "$i" -u "${ZSYNC_ADDRESS}/${i}"
done
HOST="$(sed -n 1p ../../secret)"
USER="$(sed -n 2p ../../secret)"
PASSWORD="$(sed -n 3p ../../secret)"
for fil in *.AppImage; do
ftp -v -inv $HOST <<EOF
passive
user $USER $PASSWORD
cd "$BIN_DIR"
put $fil
cd "$ZSYNC_DIR"
put $fil
bye
EOF
done
for fil in *.zsync; do
ftp -v -inv $HOST <<EOF
passive
user $USER $PASSWORD
cd "$ZSYNC_DIR"
put $fil
bye
EOF
done
for fil in *AppImage-MD5.txt; do
ftp -v -inv $HOST <<EOF
passive
user $USER $PASSWORD
cd "$BIN_DIR"
put $fil
bye
EOF
done
break
;;
"Upload AppImage later")
cp -f *.AppImage ${EXECUTABLE}-zsyncmake/
cd ${EXECUTABLE}-zsyncmake
for i in *.AppImage; do
./zsyncmake "$i" -u "${ZSYNC_ADDRESS}/$i"
done
break
;;
"Quit")
echo "Goodbye"
exit 0
;;
*)
echo "invalid option $REPLY"
;;
esac
done
} #doZsynkMake
possibleappdirs=$($(echo ls -d AppDir*))
for i in ${possibleappdirs[*]}; do
options+=(${i})
done
PS3=$(echo -e "${BLUE}Pleas Select AppDir to create AppImage from\nor create *.zsync file and MD5 sum: ${NC}")
select opt in "${options[@]}" "Create *.zsync fil and MD5 sum" "Quit"; do
case "$REPLY" in
$((${#options[@]} + 1)))
echo "Create *.zsync file and MD5 sum"
doZsynkMake
break
;;
$((${#options[@]} + 2)))
echo "Goodbye!"
exit 0
break
;;
esac
[ $REPLY -gt $((${#options[@]} + 1)) -o $REPLY -lt 1 ] && echo "Invalid selection" || break
done
echo "You chose $opt which is $(pwd)/${options[(($REPLY - 1))]}"
appdirname="${options[(($REPLY - 1))]}"
if [ -d "$(pwd)/$appdirname" ]; then
echo "You have chosen to create an AppImage from the folder $(pwd)/$appdirname"
else
echo "Error: Directory $(pwd)/$appdirname does not exists."
fi
echo "----------------------------------------------------------------"
PS3=$(echo -e "${BLUE}Please enter Qt version: ${NC}")
options=("5.15.2" "${QT5}" "${QT6}" "Create *.zsync file and MD5 sum" "Quit")
select opt in "${options[@]}"; do
case $opt in
"5.15.2 64-bit")
export LD_LIBRARY_PATH="/opt/Qt/5.15.2/${GCC}/lib:${LD_LIBRARY_PATH}"
export PATH="/opt/Qt/5.15.2/${GCC}/bin:${PATH}"
echo "You chose $REPLY which is $opt"
qmakeexecutable="/opt/Qt/5.15.2/${GCC}/bin/qmake"
break
;;
"${QT5}")
export LD_LIBRARY_PATH="/opt/Qt/${QT5}/${GCC}/lib:${LD_LIBRARY_PATH}"
export PATH="/opt/Qt/${QT5}/${GCC}/bin:${PATH}"
echo "You chose $REPLY which is $opt"
qmakeexecutable="/opt/Qt/${QT5}/${GCC}/bin/qmake"
break
;;
"${QT6}")
export LD_LIBRARY_PATH="/opt/Qt/${QT6}/${GCC}/lib:${LD_LIBRARY_PATH}"
export PATH="/opt/Qt/${QT6}/${GCC}/bin:${PATH}"
echo "You chose $REPLY which is $opt"
qmakeexecutable="/opt/Qt/${QT6}/${GCC}/bin/qmake"
break
;;
"Create *.zsync file and MD5 sum")
echo "You chose $REPLY which is $opt"
doZsynkMake
break
;;
"Quit")
echo "Goodbye"
echo "You chose $REPLY which is $opt"
exit 0
;;
*) echo "invalid option $REPLY" ;;
esac
done
echo -----------------------------------------------------------
PS3=$(echo -e "${BLUE}Please enter your choice: ${NC}")
options=("Sign AppImage" "Do not sign AppImage" "Quit")
select opt in "${options[@]}"; do
case $opt in
"Sign AppImage")
echo "You chose $REPLY which is $opt"
signera=1
break
;;
"Do not sign AppImage")
echo "You chose $REPLY which is $opt"
signera=0
break
;;
"Quit")
echo "Goodbye"
exit 0
;;
*) echo "invalid option $REPLY" ;;
esac
done
echo "----------------------------------------------------------------"
PS3=$(echo -e "${BLUE}Please enter your choice: ${NC}")
options=("Make an AppImage" "Quit")
select opt in "${options[@]}"; do
case $opt in
"Make an AppImage")
echo "You chose $REPLY which is $opt"
if [[ (${GLIBCVERSION} > ${SUPORTEDGLIBC}) ]]; then
echo -e ${BLUE}${BOLD}UNSUPORTED!${NORMAL}${NC}
~/bin/linuxdeployqt ${appdirname}/usr/bin/${EXECUTABLE} -qmake=$qmakeexecutable -bundle-non-qt-libs -verbose=2 -no-translations -no-copy-copyright-files -unsupported-allow-new-glibc
else
echo -e ${BLUE}${BOLD}SUPORTED!${NORMAL}${NC}
~/bin/linuxdeployqt ${appdirname}/usr/bin/${EXECUTABLE} -qmake=$qmakeexecutable -bundle-non-qt-libs -verbose=2 -no-translations -no-copy-copyright-files
fi
MACHINE_TYPE=$(uname -m)
if [ ${MACHINE_TYPE} == 'x86_64' ]; then
if [ "$signera" -gt 0 ]; then
ARCH=x86_64 ~/bin/appimagetool --sign ${appdirname}
else
ARCH=x86_64 ~/bin/appimagetool ${appdirname}
fi
else
if [ "$signera" -gt 0 ]; then
ARCH=i386 ~/bin/appimagetool --sign ${appdirname}
else
ARCH=i386 ~/bin/appimagetool ${appdirname}
fi
fi
break
;;
"Quit")
echo "Goodbye"
exit 0
;;
*) echo "invalid option $REPLY" ;;
esac
done