diff --git a/README.md b/README.md index dee4a9f..7d9cfe9 100644 --- a/README.md +++ b/README.md @@ -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 `. -**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 `. diff --git a/create-package.sh b/create-package.sh index 0661b1e..13a3e7f 100755 --- a/create-package.sh +++ b/create-package.sh @@ -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."