More strictly sh (posix) compatible + fix things

This commit is contained in:
TheElectronWill 2017-01-05 00:22:47 +01:00
parent 8e5f317176
commit 182d1ce9ee
2 changed files with 51 additions and 36 deletions

View file

@ -2,77 +2,92 @@
# Author: TheElectronWill
# This script downloads the latest version of Discord for linux, and creates a package with rpmbuild.
rpm_dir=$PWD/RPMs
# Define the needed paths
desktop_model=$PWD/discord.desktop
spec_file=$PWD/discord.spec
rpm_dir=$PWD/RPMs
work_dir=$PWD/work
downloaded_dir=$work_dir/discord
desktop_file=$work_dir/discord.desktop
# It's a bad idea to run rpmbuild as root!
if [ "$(id -u)" = "0" ]; then
echo '----- WARNING -----'
echo 'This script should NOT be executed with root privileges!'
echo 'Building rpm packages as root is dangerous and may harm the system!'
echo 'Actually, badly written RPM spec files may execute dangerous command in the system directories.'
echo 'So it is REALLY safer not to run this script as root.'
echo 'If you still want to run this script as root, type "do it!" within 5 seconds (type anything else to exit):'
read -t 5 -n 6 -p 'Do you really want to do it (not recommended)? ' answer
if [ "$answer" != "do it!" ]; then
exit
fi
fi
# Checks that rpmbuild is installed
if ! type 'rpmbuild' > /dev/null
then
echo "You need the rpm development tools to create rpm packages"
read -p "Do you want to install rpmdevtools now? This will run sudo dnf install rpmdevtools. [y/N]" answer
if ! type 'rpmbuild' > /dev/null; then
echo 'You need the rpm development tools to create rpm packages.'
read -n 1 -p 'Do you want to install the rpmdevtools package now? [y/N]' answer
case $answer in
[Yy]* ) sudo dnf install rpmdevtools;;
* )
y|Y)
sudo -p 'Enter your password to install rpmdevtools: ' dnf install rpmdevtools
;;
*)
echo "Ok, I won't install rpmdevtools."
exit
;;
esac
else
echo "rpmbuild detected!"
fi
# Download the discord tar.gz archive and puts its name in the global variable archive_name.
function download_discord {
# Downloads the discord tar.gz archive and puts its name in the global variable archive_name.
download_discord() {
echo 'Downloading discord canary for linux...'
wget -q --show-progress --content-disposition "https://discordapp.com/api/download/canary?platform=linux&format=tar.gz"
archive_name=$(ls *.tar.gz)
}
# Asks the user if he/she wants to remove the specified directory, and removes it if he wants to.
function ask_remove_dir {
# Asks the user if they want to remove the specified directory, and removes it if they want to.
ask_remove_dir() {
read -p "Do you want to remove the \"$1\" directory? [y/N]" answer
case $answer in
[Yy]* )
y|Y)
rm -r "$1"
echo "\"$1\" directory removed."
;;
* ) echo "Ok, I won't remove it." ;;
*)
echo "Ok, I won't remove it."
;;
esac
}
# If the specified directory exists, asks the user if he/she wants to remove it.
# If the specified directory exists, asks the user if they want to remove it.
# If it doesn't exist, creates it.
function manage_dir {
manage_dir() {
if [ -d "$1" ]; then
echo "The $2 directory already exist. It may contain outdated things."
ask_remove_dir "$1"
else
mkdir "$work_dir"
fi
mkdir -p "$work_dir"
}
manage_dir "$work_dir" 'work'
manage_dir "$rpm_dir" 'RPMs'
cd "$work_dir"
# Download discord if needed
archive_name=$(ls *.tar.gz)
# Downloads discord if needed
archive_name=$(ls *.tar.gz 2>/dev/null)
if [ $? -eq 0 ]; then
echo "Found $archive_name"
read -p 'Do you want to use this archive instead of downloading a new one? [y/N]' answer
case $answer in
[Yy]* )
echo 'Ok, I will use this this archive.'
y|Y)
echo 'Ok, I will use this archive.'
;;
* )
*)
rm "$archive_name"
download_discord
;;
esac
else
download_discord
@ -103,14 +118,15 @@ echo "Archive: $archive_name"
echo "Version: $version_number"
echo "Icon: $icon_name"
# Creates a .desktop file:
# Creates a .desktop file
echo 'Creating .desktop file...'
sed "s/_version/$version_number/; s/_icon/$icon_name/" "$desktop_model" > "$desktop_file"
# Chooses the spec file based on the system's architecture and build the packages
# Builds the packages
echo 'Creating the RPM package...'
rpmbuild -bb $spec_file --define "_topdir $work_dir" --define "_rpmdir $rpm_dir" --define "version_number $version_number" --define "downloaded_dir $downloaded_dir" --define "desktop_file $desktop_file"
# Done
echo '-----------'
echo 'Done!'
echo "The RPM package is located in the \"RPMs/x86_64\" folder."