Skip to content

Instantly share code, notes, and snippets.

@sp2hari
Created August 14, 2015 04:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sp2hari/94c9236c39634c6a788e to your computer and use it in GitHub Desktop.
Save sp2hari/94c9236c39634c6a788e to your computer and use it in GitHub Desktop.
Script to download/install all firefox versions
#!/bin/bash
default_versions_future="beta aurora nightly ux"
default_versions_current="39"
default_versions_past="2 3 3.5 3.6 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38"
versions_usage_point_one="3.6 12 16 17 22 23 25"
versions_usage_point_two="21 24 26"
versions_usage_point_three=""
versions_usage_point_four_up="27 28 29"
default_versions="${default_versions_past} ${default_versions_current} ${default_versions_future}"
tmp_directory="/tmp/firefoxes/"
bits_host="https://raw.githubusercontent.com/omgmog/install-all-firefox/master/bits/"
bits_directory="${tmp_directory}bits/"
locale_default="en-US"
# Don't edit below this line (unless you're adding new version cases in get_associated_information)
versions="${1:-$default_versions}"
ftp_root=""
dmg_file=""
sum_file=""
sum_file_type=""
sum_of_dmg=""
sum_expected=""
binary=""
short_name=""
nice_name=""
vol_name_default="Firefox"
release_name_default="Firefox"
release_type=""
binary_folder="/Contents/MacOS/"
uses_v2_signing=false
specified_locale="en-US"
if [[ "${3}" == "no_prompt" ]]; then
no_prompt=true
else
no_prompt=false
fi
no_prompt = true
if [[ "${4}" == "" ]]; then
install_directory="/Applications/Firefoxes/"
else
install_directory=$4
install_directory_length=${#install_directory}-1
if [ "${install_directory:install_directory_length}" != "/" ]; then
install_directory="${install_directory}/"
fi
fi
ask(){
return 0
while true; do
if [ "${2:-}" = "Y" ]; then
prompt="Y/n"
default=Y
elif [ "${2:-}" = "N" ]; then
prompt="y/N"
default=N
else
prompt="y/n"
default=
fi
echo
read -p "$1 [$prompt] " REPLY
if [ -z "$REPLY" ]; then
REPLY=$default
fi
case "$REPLY" in
Y*|y*) return 0 ;;
N*|n*) return 1 ;;
esac
done
}
get_associated_information(){
# Reset everything
vol_name=$vol_name_default
release_name=$release_name_default
future=""
case $1 in
2 | 2.0 | 2.0.0.20)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/"
dmg_file="Firefox 2.0.0.20.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox-bin"
short_name="fx2"
nice_name="Firefox 2.0"
firebug_version="1.3.1"
firebug_root="http://getfirebug.com/releases/firebug/1.3/"
firebug_file="firebug-1.3.1.xpi"
;;
3 | 3.0 | 3.0.19)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/"
dmg_file="Firefox 3.0.19.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox-bin"
short_name="fx3"
nice_name="Firefox 3.0"
firebug_version="1.3.4b2"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
3.5 | 3.5.19)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/3.5.19/"
dmg_file="Firefox 3.5.19.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox-bin"
short_name="fx3-5"
nice_name="Firefox 3.5"
firebug_version="1.5.4"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
3.6 | 3.6.28)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/3.6.28/"
dmg_file="Firefox 3.6.28.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox-bin"
short_name="fx3-6"
nice_name="Firefox 3.6"
firebug_version="1.7.3"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
4 | 4.0 | 4.0.1)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/4.0.1/"
dmg_file="Firefox 4.0.1.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox-bin"
short_name="fx4"
nice_name="Firefox 4.0"
firebug_version="1.8.0b7"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
5 | 5.0 | 5.0.1)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/5.0.1/"
dmg_file="Firefox 5.0.1.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox-bin"
short_name="fx5"
nice_name="Firefox 5.0"
firebug_version="1.9.2"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
6 | 6.0 | 6.0.2)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/6.0.2/"
dmg_file="Firefox 6.0.2.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox-bin"
short_name="fx6"
nice_name="Firefox 6.0"
firebug_version="1.9.2"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
7 | 7.0 | 7.0.1)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/7.0.1/"
dmg_file="Firefox 7.0.1.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx7"
nice_name="Firefox 7.0"
firebug_version="1.9.2"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
8 | 8.0 | 8.0.1)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/8.0.1/"
dmg_file="Firefox 8.0.1.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx8"
nice_name="Firefox 8.0"
firebug_version="1.9.2"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
9 | 9.0 | 9.0.1)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/9.0.1/"
dmg_file="Firefox 9.0.1.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx9"
nice_name="Firefox 9.0"
firebug_version="1.9.2"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
10 | 10.0 | 10.0.2)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/10.0.2/"
dmg_file="Firefox 10.0.2.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx10"
nice_name="Firefox 10.0"
firebug_version="1.9.2"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
11 | 11.0)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/11.0/"
dmg_file="Firefox 11.0.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx11"
nice_name="Firefox 11.0"
firebug_version="1.9.2"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
12 | 12.0)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/12.0/"
dmg_file="Firefox 12.0.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx12"
nice_name="Firefox 12.0"
firebug_version="1.9.2"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
13 | 13.0 | 13.0.1)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/13.0.1/"
dmg_file="Firefox 13.0.1.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx13"
nice_name="Firefox 13.0"
firebug_version="1.10.6"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
14 | 14.0 | 14.0.1)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/14.0.1/"
dmg_file="Firefox 14.0.1.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx14"
nice_name="Firefox 14.0"
firebug_version="1.10.6"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
15 | 15.0 | 15.0.1)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/15.0.1/"
dmg_file="Firefox 15.0.1.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx15"
nice_name="Firefox 15.0"
firebug_version="1.10.6"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
16 | 16.0 | 16.0.1)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/16.0.1/"
dmg_file="Firefox 16.0.1.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx16"
nice_name="Firefox 16.0"
firebug_version="1.10.6"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
17 | 17.0 | 17.0.1)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/17.0.1/"
dmg_file="Firefox 17.0.1.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx17"
nice_name="Firefox 17.0"
firebug_version="1.11.3"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
18 | 18.0 | 18.0.2)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/18.0.2/"
dmg_file="Firefox 18.0.2.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx18"
nice_name="Firefox 18.0"
firebug_version="1.11.3"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
19 | 19.0 | 19.0.2)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/19.0.2/"
dmg_file="Firefox 19.0.2.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx19"
nice_name="Firefox 19.0"
firebug_version="1.11.3"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
20 | 20.0)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/20.0/"
dmg_file="Firefox 20.0.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx20"
nice_name="Firefox 20.0"
firebug_version="1.11.3"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
21 | 21.0)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/21.0/"
dmg_file="Firefox 21.0.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx21"
nice_name="Firefox 21.0"
firebug_version="1.11.3"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
22 | 22.0)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/22.0/"
dmg_file="Firefox 22.0.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx22"
nice_name="Firefox 22.0"
firebug_version="1.11.3"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
23 | 23.0 | 23.0.1)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/23.0.1/"
dmg_file="Firefox 23.0.1.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx23"
nice_name="Firefox 23.0"
firebug_version="1.12.0"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
24 | 24.0)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/24.0/"
dmg_file="Firefox 24.0.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx24"
nice_name="Firefox 24.0"
firebug_version="1.12.0"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
25 | 25.0 | 25.0.1)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/25.0.1/"
dmg_file="Firefox 25.0.1.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx25"
nice_name="Firefox 25.0"
firebug_version="1.12.0"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
26 | 26.0)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/26.0/"
dmg_file="Firefox 26.0.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx26"
nice_name="Firefox 26.0"
firebug_version="1.12.0"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
27 | 27.0 | 27.0.1)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/27.0.1/"
dmg_file="Firefox 27.0.1.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx27"
nice_name="Firefox 27.0"
firebug_version="1.12.0"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
28 | 28.0)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/28.0/"
dmg_file="Firefox 28.0.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx28"
nice_name="Firefox 28.0"
firebug_version="1.12.0"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
29 | 29.0 | 29.0.1)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/29.0.1/"
dmg_file="Firefox 29.0.1.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx29"
nice_name="Firefox 29.0"
firebug_version="1.12.0"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
30 | 30.0)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/30.0/"
dmg_file="Firefox 30.0.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx30"
nice_name="Firefox 30.0"
firebug_version="2.0.6"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
31 | 31.0)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/31.0/"
dmg_file="Firefox 31.0.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx31"
nice_name="Firefox 31.0"
firebug_version="2.0.6"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
32 | 32.0)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/32.0/"
dmg_file="Firefox 32.0.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx32"
nice_name="Firefox 32.0"
firebug_version="2.0.6"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
33 | 33.0 | 33.1 | 33.1.1)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/33.1.1/"
dmg_file="Firefox 33.1.1.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx33"
nice_name="Firefox 33.0"
firebug_version="2.0.6"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
34 | 34.0)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/34.0/"
dmg_file="Firefox 34.0.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx34"
nice_name="Firefox 34.0"
uses_v2_signing=true
firebug_version="2.0.6"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
35 | 35.0 | 35.0.1)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/35.0.1/"
dmg_file="Firefox 35.0.1.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx35"
nice_name="Firefox 35.0"
uses_v2_signing=true
firebug_version="2.0.6"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
36 | 36.0)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/36.0/"
dmg_file="Firefox 36.0.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx36"
nice_name="Firefox 36.0"
uses_v2_signing=true
firebug_version="2.0.6"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
37 | 37.0)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/37.0/"
dmg_file="Firefox 37.0.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx37"
nice_name="Firefox 37.0"
uses_v2_signing=true
firebug_version="2.0.8"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
38 | 38.0)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/38.0/"
dmg_file="Firefox 38.0.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx38"
nice_name="Firefox 38.0"
uses_v2_signing=true
firebug_version="2.0.9"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
39 | 39.0)
ftp_root="http://ftp.mozilla.org/pub/firefox/releases/39.0.3/"
dmg_file="Firefox 39.0.3.dmg"
sum_file="MD5SUMS"
sum_file_type="md5"
binary="firefox"
short_name="fx39"
nice_name="Firefox 39.0"
uses_v2_signing=true
firebug_version="2.0.11"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
# This process is a bit flaky
beta)
release_type="beta"
ftp_candidates="ftp://ftp.mozilla.org/pub/mozilla.org/firefox/candidates/"
if [[ $versions != 'status' ]]; then
candidates_folder=$(curl --silent -L ${ftp_candidates} | sed "s/^.\{56\}//" | sort -n | tail -n1)
build_folder=$(curl --silent -L ${ftp_candidates}/${candidates_folder}/ | sed "s/^.\{56\}//" | sort -n | tail -n1)
ftp_root="${ftp_candidates}${candidates_folder}/${build_folder}/"
dmg_file=$(curl --progress-bar -L ${ftp_root}mac/${locale}/ | grep ".dmg" | tail -1 | sed "s/^.\{56\}//")
sum_file_tmp=$(curl --progress-bar -L ${ftp_root}mac/${locale}/ | grep ".checksums$" | tail -1 | sed "s/^.\{56\}//")
sum_file_folder="mac/${locale}/"
sum_file="${sum_file_tmp}"
sum_file_type="md5"
fi
binary="firefox"
short_name="fxb"
nice_name="Firefox Beta"
firebug_version="2.0"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
aurora)
release_type="aurora"
future="true"
ftp_root="ftp://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-aurora/"
if [[ $versions != 'status' ]]; then
dmg_file=$(curl --progress-bar -L ${ftp_root} | grep ".mac.dmg$" | tail -1 | sed "s/^.\{56\}//")
sum_file=$(echo ${dmg_file} | sed "s/\.dmg/\.checksums/")
sum_file_type="sha512"
fi
binary="firefox"
short_name="fxa"
nice_name="Aurora"
vol_name="Aurora"
release_name="FirefoxAurora"
firebug_version="2.0"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
nightly)
release_type="nightly"
future="true"
ftp_root="ftp://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/"
if [[ $versions != 'status' ]]; then
dmg_file=$(curl --progress-bar -L ${ftp_root} | grep ".mac.dmg$" | tail -1 | sed "s/^.* \(".*"$\)/\1/")
sum_file=$(echo ${dmg_file} | sed "s/\.dmg/\.checksums/")
sum_file_type="sha512"
fi
binary="firefox"
short_name="fxn"
nice_name="Nightly"
vol_name="Nightly"
release_name="FirefoxNightly"
firebug_version="2.0"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
ux)
release_type="ux"
future="true"
ftp_root="ftp://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-ux/"
if [[ $versions != 'status' ]]; then
dmg_file=$(curl --progress-bar -L ${ftp_root} | grep ".mac.dmg$" | tail -1 | sed "s/^.\{56\}//")
sum_file=$(echo ${dmg_file} | sed "s/\.dmg/\.checksums/")
sum_file_type="sha512"
fi
binary="firefox"
short_name="fxux"
nice_name="Nightly UX"
vol_name="UX"
release_name="FirefoxUX"
firebug_version="2.0"
firebug_version_short=$(echo "${firebug_version}" | sed 's/\.[0-9a-zA-Z]*$//')
firebug_root="http://getfirebug.com/releases/firebug/${firebug_version_short}/"
firebug_file="firebug-${firebug_version}.xpi"
;;
*)
error " Invalid version specified!\n\n Please choose one of:\n all all_past all_future current $default_versions\n\n"
error " To see which versions you have installed, type:\n ./firefoxes.sh status"
exit 1
;;
esac
}
setup_dirs(){
if [[ ! -d "$tmp_directory" ]]; then
mkdir -p "$tmp_directory"
fi
if [[ ! -d "$bits_directory" ]]; then
mkdir -p "$bits_directory"
fi
if [[ ! -d "$install_directory" ]]; then
mkdir -p "$install_directory"
fi
}
get_bits(){
log "Downloading bits"
current_dir=$(pwd)
cd "$bits_directory"
if [[ ! -f "setfileicon" ]]; then
curl -C - -L --progress-bar "${bits_host}setfileicon" -o "setfileicon"
chmod +x setfileicon
fi
if [[ ! -f "${short_name}.png" ]]; then
new_icon="true"
icon_file="${current_dir}/bits/${short_name}.png"
if [[ -f $icon_file ]]; then
cp -r $icon_file "${short_name}.png"
else
curl -C - -L --progress-bar "${bits_host}${short_name}.png" -o "${short_name}.png"
fi
fi
if [[ ! -f "${short_name}.icns" || $new_icon == "true" ]]; then
sips -s format icns "${short_name}.png" --out "${short_name}.icns" &> /dev/null
fi
if [[ ! -f "${install_directory}{$nice_name}.app/Icon" ]]; then
if [[ ! -f "fxfirefox-folder.png" ]]; then
curl -C - -L --progress-bar "${bits_host}fxfirefox-folder.png" -o "fxfirefox-folder.png"
fi
if [[ ! -f "fxfirefox-folder.icns" ]]; then
sips -s format icns "fxfirefox-folder.png" --out "fxfirefox-folder.icns" &> /dev/null
fi
./setfileicon "fxfirefox-folder.icns" "${install_directory}"
fi
}
check_dmg(){
if [[ ! -f "${tmp_directory}/${dmg_file}" ]]; then
log "Downloading ${dmg_file}"
download_dmg
else
get_sum_file
case $sum_file_type in
md5)
sum_of_dmg=$(md5 -q "${tmp_directory}${dmg_file}")
sum_expected=$(cat "${sum_file}-${short_name}" | grep "${locale}/${dmg_file}" | cut -c 1-32)
;;
sha512)
sum_of_dmg=$(openssl dgst -sha512 "${tmp_directory}${dmg_file}" | sed "s/^.*\(.\{128\}\)$/\1/")
sum_expected=$(cat "${sum_file}-${short_name}" | grep "${sum_of_dmg}" | cut -c 1-128)
;;
*)
error "✖ Invalid sum type specified!"
;;
esac
if [[ "${sum_expected}" == *"${sum_of_dmg}"* ]]; then
log "✔ ${sum_file_type} of ${dmg_file} matches"
else
error "✖ ${sum_file_type} of ${dmg_file} doesn't match!"
log "Redownloading.\n"
download_dmg
fi
fi
}
get_sum_file(){
cd "${tmp_directory}"
curl -C - -L --progress-bar "${ftp_root}${sum_file_folder}${sum_file}" -o "${sum_file}-${short_name}"
}
download_dmg(){
cd "${tmp_directory}"
if [[ "${future}" == "true" ]]; then
dmg_url="${ftp_root}${dmg_file}"
else
dmg_url="${ftp_root}mac/$locale/${dmg_file}"
fi
echo "${dmg_url}"
if ! wget "${dmg_url}" -O "${dmg_file}"
then
error "✖ Failed to download ${dmg_file}!"
fi
}
download_firebug(){
cd "${tmp_directory}"
if [[ ! -f "${firebug_file}" ]]; then
log "Downloading Firebug ${firebug_version}"
if ! curl -C - -L --progress-bar "${firebug_root}${firebug_file}" -o "${firebug_file}"
then
error "✖ Failed to download ${firebug_file}"
else
log "✔ Downloaded ${firebug_file}"
fi
fi
}
prompt_firebug(){
if [ ${no_prompt} == false ]; then
if ask "Install Firebug ${firebug_version} for ${nice_name}?" Y; then
download_firebug
install_firebug
fi
else
download_firebug
install_firebug
fi
}
install_firebug(){
if [[ -f "${install_directory}${nice_name}.app${binary_folder}${binary}" ]]; then
is_legacy="false"
if [ "${short_name}" == "fx2" -o "${short_name}" == "fx3" -o "${short_name}" == "fx3-5" -o "${short_name}" == "fx3-6" ]; then
is_legacy="true"
fi
if [ "${is_legacy}" == "true" ]; then
ext_dir=$(cd $HOME/Library/Application\ Support/Firefox/Profiles/;cd $(ls -1 | grep ${short_name}); pwd)
else
if [ "${uses_v2_signing}" == "true" ];then
ext_dir="${install_directory}${nice_name}.app/Contents/Resources/"
else
ext_dir="${install_directory}${nice_name}.app${binary_folder}"
fi
fi
cd "${ext_dir}"
if [ "${is_legacy}" != "true" ]; then
if [[ ! -d "distribution" ]]; then
mkdir "distribution"
fi
cd "distribution"
fi
if [[ ! -d "extensions" ]]; then
mkdir "extensions"
fi
cd "extensions"
ext_dir=$(pwd)
if [[ "${is_legacy}" == "true" ]]; then
cp -r "${tmp_directory}${firebug_file}" "${ext_dir}"
else
unzip -qqo "${tmp_directory}${firebug_file}" -d "${tmp_directory}${firebug_version}"
cd "${tmp_directory}${firebug_version}"
FILE="$(cat install.rdf)"
for i in $FILE;do
if echo "$i"|grep "urn:mozilla:install-manifest" &> /dev/null ; then
GET="true"
fi
if [ "$GET" = "true" ] ; then
if echo "$i"|grep "<em:id>" &> /dev/null; then
ID=$(echo "$i" | sed 's#.*<em:id>\(.*\)</em:id>.*#\1#')
GET="false"
elif echo "$i"|grep "em:id=\"" &> /dev/null; then
ID=$(echo "$i" | sed 's/.*em:id="\(.*\)".*/\1/')
GET="false"
fi
fi
done
cd ..
mv "${firebug_version}" "${ext_dir}/${ID}/"
fi
log "✔ Installed Firebug ${firebug_version}"
else
error "${nice_name} not installed so we can't install Firebug ${firebug_version}!"
fi
}
mount_dmg(){
echo Y | PAGER=true hdiutil attach -plist -nobrowse -readonly "${dmg_file}" > /dev/null
}
unmount_dmg(){
if [[ -d "/Volumes/${vol_name}" ]]; then
hdiutil detach "/Volumes/${vol_name}" -force > /dev/null
fi
}
install_app(){
if [[ -d "${install_directory}${nice_name}.app" ]]; then
if [ ${no_prompt} == false ]; then
if ask "Delete your existing ${nice_name}.app and reinstall?" Y; then
log "Reinstalling ${nice_name}.app"
remove_app
process_install
else
log "Skipping reinstallation of ${nice_name}.app"
fi
else
remove_app
process_install
fi
else
process_install
fi
}
remove_app(){
if rm -rf "${install_directory}${nice_name}.app"
then
log "✔ Removed ${install_directory}${nice_name}.app"
else
error "✖ Could not remove ${install_directory}${nice_name}.app!"
fi
}
process_install(){
cd "/Volumes/${vol_name}"
if cp -r "${release_name}.app/" "${install_directory}${nice_name}.app/"
then
log "✔ Installed ${nice_name}.app"
else
unmount_dmg
error "✖ Could not install ${nice_name}.app!"
fi
unmount_dmg
create_profile
modify_launcher
install_complete
}
create_profile(){
if exec "${install_directory}${nice_name}.app${binary_folder}${binary}" -CreateProfile "${short_name}" &> /dev/null &
then
log "✔ Created profile '${short_name}' for ${nice_name}"
else
error "✖ Could not create profile '${short_name}' for ${nice_name}"
fi
}
modify_launcher(){
plist_old="${install_directory}${nice_name}.app/Contents/Info.plist"
plist_new="${tmp_directory}Info.plist"
sed -e "s/${binary}/${binary}-af/g" "${plist_old}" > "${plist_new}"
mv "${plist_new}" "${plist_old}"
# No indentation while catting
cat > "${install_directory}${nice_name}.app${binary_folder}${binary}-af" <<EOL
#!/bin/sh
"${install_directory}${nice_name}.app${binary_folder}${binary}" -no-remote -P ${short_name} &
EOL
chmod +x "${install_directory}${nice_name}.app${binary_folder}${binary}-af"
# tell all.js where to find config
if [[ "${uses_v2_signing}" == "true" ]]; then
config_dir="${install_directory}${nice_name}.app/Contents/Resources/"
else
config_dir="${install_directory}${nice_name}.app${binary_folder}"
fi
prefs_dir="${config_dir}defaults/pref/"
# fx34 doesn't move the mozilla.cfg yet...
if [[ "${short_name}" == "fx34" ]]; then
config_dir="${install_directory}${nice_name}.app${binary_folder}"
fi
mkdir -p "${prefs_dir}"
prefs_file="${prefs_dir}all.js"
cat > "${prefs_file}" <<EOL
pref("general.config.obscure_value", 0);
pref("general.config.filename", "mozilla.cfg");
EOL
# make config
config_file="${config_dir}mozilla.cfg"
cat > "${config_file}" <<EOL
lockPref("browser.shell.checkDefaultBrowser", false);
lockPref("browser.startup.homepage_override.mstone", "ignore");
lockPref("app.update.enabled", false);
lockPref("browser.rights.3.shown", false);
lockPref("toolkit.telemetry.prompted", 2);
lockPref("toolkit.telemetry.rejected", true);
EOL
cd "${bits_directory}"
./setfileicon "${short_name}.icns" "${install_directory}/${nice_name}.app/"
}
install_complete(){
log "✔ Install complete!"
}
error(){
printf "\n\033[31m$*\033[00m"
return 0
}
log(){
printf "\n\033[32m$*\033[00m\n"
return $?
}
# Replace special keywords with actual versions (duplicates are okay; it'll work fine)
versions=${versions/all_future/${default_versions_future}}
versions=${versions/all_past/${default_versions_past}}
versions=${versions/all/${default_versions}}
versions=${versions/current/${default_versions_current}}
versions=${versions/latest/${default_versions_current}}
versions=${versions/newest/${default_versions_current}}
versions=${versions/min_point_one/${versions_usage_point_one} ${versions_usage_point_two} ${versions_usage_point_three} ${versions_usage_point_four_up}}
versions=${versions/min_point_two/${versions_usage_point_two} ${versions_usage_point_three} ${versions_usage_point_four_up}}
versions=${versions/min_point_three/${versions_usage_point_three} ${versions_usage_point_four_up}}
versions=${versions/min_point_four/${versions_usage_point_four_up}}
if [[ $versions == 'status' ]]; then
printf "The versions in \033[32mgreen\033[00m are installed:\n"
for VERSION in $default_versions; do
get_associated_information $VERSION
if [[ -d "${install_directory}${nice_name}.app" ]]; then
printf "\n\033[32m - ${nice_name} ($VERSION)\033[00m"
else
printf "\n\033[31m - ${nice_name} ($VERSION)\033[00m"
fi
done
printf "\n\nTo install, type \033[1m./firefoxes.sh [version]\033[22m, \nwith [version] being the number or name in parentheses\n\n"
exit 1
fi
get_locale() {
all_locales=" af ar be bg ca cs da de el en-GB en-US es-AR es-ES eu fi fr fy-NL ga-IE he hu it ja-JP-mac ko ku lt mk mn nb-NO nl nn-NO pa-IN pl pt-BR pt-PT ro ru sk sl sv-SE tr uk zh-CN zh-TW "
# ex: "fr-FR.UTF-8" => "fr-FR"
cleaned_specified_locale=$(echo ${specified_locale/_/-} | sed 's/\..*//')
cleaned_system_locale=$(echo ${LANG/_/-} | sed 's/\..*//')
# ex: "fr-FR" => "fr"
cleaned_system_locale_short=$(echo $cleaned_system_locale | sed 's/-.*//')
# Will make something more scalable if needed later
# But for now, we make these locales use en-US
if [[ $cleaned_system_locale == 'en-AU' || $cleaned_system_locale == 'en-CA' ]]; then
echo "Your system locale is set to ${cleaned_system_locale}. As there is no ${cleaned_system_locale} localization available for Firefox, en-US has been used instead."
cleaned_system_locale='en-US'
fi
if [[ $all_locales != *" $cleaned_system_locale "* && $all_locales == *" $cleaned_system_locale_short "* ]]; then
echo "Your system locale \"$cleaned_system_locale\" is not available, but \"$cleaned_system_locale_short\" is!"
echo "We'll use \"$cleaned_system_locale_short\" as the default locale if you've not specified a valid locale."
cleaned_system_locale=$cleaned_system_locale_short
fi
if [[ -n $specified_locale ]]; then
if [[ $all_locales != *" $cleaned_specified_locale "* ]]; then
echo "\"${cleaned_specified_locale}\" was not found in our list of valid locales."
locale=$cleaned_system_locale
else
locale=$cleaned_specified_locale
fi
else
locale=$cleaned_system_locale
fi
echo "We're using ${locale} as your locale."
echo "If this is wrong, use './firefoxes.sh [version] [locale]' to specify the locale."
echo ""
echo "The valid locales are:"
echo " ${all_locales}"
}
clean_up() {
if ask "Delete all files from temp directory (${tmp_directory})?" Y; then
log "Deleting temp directory (${tmp_directory})!"
rm -rf ${tmp_directory}
else
log "Keeping temp directory (${tmp_directory}), though it will be deleted upon reboot!\n"
fi
return 0
}
if [ "$(uname -s)" != "Darwin" ]; then
error "This script is designed to be run on OS X\nExiting...\n"
exit 0
fi
get_locale
for VERSION in $versions; do
get_associated_information $VERSION
log "====================\nInstalling ${nice_name}"
setup_dirs
get_bits
check_dmg
mount_dmg
install_app
unmount_dmg
prompt_firebug
done
clean_up
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment