Support Discord stable (keep supporting canary builds)
Discord stable for linux is now available!
This commit is contained in:
		
							parent
							
								
									50704a5a5a
								
							
						
					
					
						commit
						4609df66e2
					
				
					 4 changed files with 177 additions and 1 deletions
				
			
		|  | @ -3,7 +3,7 @@ | ||||||
| # This script downloads the latest version of Discord for linux, and creates a package with rpmbuild. | # This script downloads the latest version of Discord for linux, and creates a package with rpmbuild. | ||||||
| 
 | 
 | ||||||
| desktop_model="$PWD/discord.desktop" | desktop_model="$PWD/discord.desktop" | ||||||
| spec_file="$PWD/discord.spec" | spec_file="$PWD/discord-canary.spec" | ||||||
| 
 | 
 | ||||||
| rpm_dir="$PWD/RPMs" | rpm_dir="$PWD/RPMs" | ||||||
| work_dir="$PWD/work" | work_dir="$PWD/work" | ||||||
							
								
								
									
										138
									
								
								create-package-stable.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										138
									
								
								create-package-stable.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,138 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | # Author: TheElectronWill | ||||||
|  | # This script downloads the latest version of Discord for linux, and creates a package with rpmbuild. | ||||||
|  | 
 | ||||||
|  | desktop_model="$PWD/discord.desktop" | ||||||
|  | spec_file="$PWD/discord-stable.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 -p 'Do you really want to do it (not recommended)? ' answer | ||||||
|  | 	if [ "$answer" != "do it!" ]; then | ||||||
|  | 		exit | ||||||
|  | 	fi | ||||||
|  | 	echo '------------------------ WARNING ------------------------' | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | # Checks that rpmbuild is installed. | ||||||
|  | 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 | ||||||
|  | 	echo | ||||||
|  | 	case "$answer" in | ||||||
|  | 		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 | ||||||
|  | 
 | ||||||
|  | # Downloads the discord tar.gz archive and puts its name in the global variable archive_name. | ||||||
|  | download_discord() { | ||||||
|  | 	echo 'Downloading discord stable for linux...' | ||||||
|  | 	wget -q --show-progress --content-disposition 'https://discordapp.com/api/download?platform=linux&format=tar.gz' | ||||||
|  | 	archive_name="$(ls *.tar.gz)" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Asks the user if they want to remove the specified directory, and removes it if they want to. | ||||||
|  | ask_remove_dir() { | ||||||
|  | 	read -n 1 -p "Do you want to remove the \"$1\" directory? [y/N]" answer | ||||||
|  | 	echo | ||||||
|  | 	case "$answer" in | ||||||
|  | 		y|Y) | ||||||
|  | 			rm -r "$1" | ||||||
|  | 			echo "\"$1\" directory removed."		 | ||||||
|  | 			;; | ||||||
|  | 		*) | ||||||
|  | 			echo "Ok, I won't remove it." | ||||||
|  | 	esac | ||||||
|  | 	echo | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # If the specified directory exists, asks the user if they want to remove it. | ||||||
|  | # If it doesn't exist, creates it. | ||||||
|  | manage_dir() { | ||||||
|  | 	if [ -d "$1" ]; then | ||||||
|  | 		echo "The $2 directory already exist. It may contain outdated data." | ||||||
|  | 		ask_remove_dir "$1" | ||||||
|  | 	fi | ||||||
|  | 	mkdir -p "$1" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | manage_dir "$work_dir" 'work' | ||||||
|  | manage_dir "$rpm_dir" 'RPMs' | ||||||
|  | cd "$work_dir" | ||||||
|  | 
 | ||||||
|  | # Downloads discord if needed. | ||||||
|  | archive_name="$(ls *.tar.gz 2>/dev/null)" | ||||||
|  | if [ $? -eq 0 ]; then | ||||||
|  | 	echo "Found $archive_name" | ||||||
|  | 	read -n 1 -p 'Do you want to use this archive instead of downloading a new one? [y/N]' answer | ||||||
|  | 	echo | ||||||
|  | 	case "$answer" in | ||||||
|  | 		y|Y) | ||||||
|  | 			echo 'Ok, I will use this archive.' | ||||||
|  | 			;; | ||||||
|  | 		*) | ||||||
|  | 			rm "$archive_name" | ||||||
|  | 			download_discord | ||||||
|  | 	esac | ||||||
|  | else | ||||||
|  | 	download_discord | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | echo | ||||||
|  | echo 'Extracting the files...' | ||||||
|  | archive_name="$(ls *.tar.gz)" | ||||||
|  | if [ ! -d "$downloaded_dir" ]; then | ||||||
|  | 	mkdir "$downloaded_dir" | ||||||
|  | fi | ||||||
|  | tar -xzf "$archive_name" -C "$downloaded_dir" --strip 1 | ||||||
|  | # --strip 1 gets rid of the top archive's directory | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Gets the discord's version number + icon file name | ||||||
|  | echo 'Analysing the files...' | ||||||
|  | version_number="$(echo "$archive_name" | cut -d'-' -f3 | rev | cut -c 8- | rev)" | ||||||
|  | # Explaination on how it works: | ||||||
|  | # cut -d'-' -f2  splits the archive's name around the '-' character, and takes the 2nd part | ||||||
|  | # For example if archive_name is "discord-0.0.1.tar.gz" we get "0.0.1.tar.gz" | ||||||
|  | # Then, rev | cut -c 8- | rev  reverse the string, removes the first 7 characters, and re-reverse it. | ||||||
|  | # This actually removes the last 8 characters, ie the ".tar.gz" part. | ||||||
|  | # So in our example we'll get version_number=0.0.1 | ||||||
|  | 
 | ||||||
|  | cd "$downloaded_dir" | ||||||
|  | icon_name="$(ls *.png)" | ||||||
|  | echo "    Archive: $archive_name" | ||||||
|  | echo "    Version: $version_number" | ||||||
|  | echo "    Icon: $icon_name" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | echo 'Creating .desktop file...' | ||||||
|  | sed "s/_version/$version_number/; s/_icon/$icon_name/" "$desktop_model" > "$desktop_file" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | echo 'Creating the RPM package (this may take a while)...' | ||||||
|  | rpmbuild --quiet -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" | ||||||
|  | 
 | ||||||
|  | echo | ||||||
|  | echo '------------------------- Done! -------------------------' | ||||||
|  | echo "The RPM package is located in the \"RPMs/x86_64\" folder." | ||||||
|  | ask_remove_dir "$work_dir" | ||||||
							
								
								
									
										38
									
								
								discord-stable.spec
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								discord-stable.spec
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | ||||||
|  | # Defined by the caller (ie the script): | ||||||
|  | # version_number | ||||||
|  | # downloaded_dir | ||||||
|  | # desktop_file | ||||||
|  | 
 | ||||||
|  | %define install_dir /opt/discord | ||||||
|  | %define apps_dir /usr/share/applications | ||||||
|  | 
 | ||||||
|  | Name:		discord | ||||||
|  | Version:	%{version_number} | ||||||
|  | Release:	stable%{?dist} | ||||||
|  | Summary:	Free Voice and Text Chat for Gamers. | ||||||
|  | 
 | ||||||
|  | Group:		Applications/Internet | ||||||
|  | License:	Proprietary | ||||||
|  | URL:		https://discordapp.com/ | ||||||
|  | BuildArch:	x86_64 | ||||||
|  | Requires:   glibc, alsa-lib, GConf2, libnotify, nspr >= 4.13, nss >= 3.27, libstdc++ >= 6, libX11 >= 1.6, libXtst >= 1.2, libappindicator | ||||||
|  | 
 | ||||||
|  | %description | ||||||
|  | All-in-one voice and text chat for gamers that’s free, secure, and works on both your desktop and phone.  | ||||||
|  | It’s time to ditch Skype and TeamSpeak. | ||||||
|  | 
 | ||||||
|  | %prep | ||||||
|  | 
 | ||||||
|  | %build | ||||||
|  | 
 | ||||||
|  | %install | ||||||
|  | mkdir -p "%{buildroot}%{install_dir}" | ||||||
|  | mkdir -p "%{buildroot}%{apps_dir}" | ||||||
|  | mv "%{downloaded_dir}"/* "%{buildroot}%{install_dir}" | ||||||
|  | cp "%{desktop_file}" "%{buildroot}%{apps_dir}" | ||||||
|  | chmod +x "%{buildroot}%{install_dir}"/*.so | ||||||
|  | 
 | ||||||
|  | %files | ||||||
|  | /* | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 TheElectronWill
						TheElectronWill