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

@ -1,21 +1,20 @@
# RPM Package for Discord
I love Discord. But sadly, the devs don't provide any RPM package... Therefore I've made one!
It is based on the [discord's canary linux build](https://github.com/crmarsh/discord-linux-bugs).
To be precise, I've made a script that downloads the latest [discord's canary linux build](https://github.com/crmarsh/discord-linux-bugs) and creates a RPM package with it.
## How to use
### Build the rpm package yourself
Run the [create-package.sh](https://github.com/RPM-Outpost/discord/blob/master/create-package.sh) script (from the command line).
Run the [create-package.sh](https://github.com/RPM-Outpost/discord/blob/master/create-package.sh) script from the command line.
It will download the latest version of discord and build an RPM package.
Then, install the package with `sudo dnf install <rpm file>`.
**Note:** You need to install the `rpmdevtools` package to use the script.
### Requirements
You need to install the `rpmdevtools` package to build RPM packages and use the script.
Don't worry: the script detects if it isn't installed, and can install it for you.
### Use the rpm package I've already built
I've already built a package with my script.
You can download this package [here](https://github.com/RPM-Outpost/discord/blob/master/RPMs/x86_64/discord-0.0.10-canary.fc24.x86_64.rpm).
### About root privileges
Building an RPM package with root privileges is dangerous, because a mistake in SPEC file could result in running nasty commands.
See [](http://serverfault.com/questions/10027/why-is-it-bad-to-build-rpms-as-root).
### How to update
## Update discord
When a new version of discord is released, you can run the `create-package.sh` script again to create an updated package.
Or you can download an updated package from my github repository.
Then, simply install the updated package with `sudo dnf install <rpm file>`.

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."