-
Notifications
You must be signed in to change notification settings - Fork 0
/
fxlowmem.sh
109 lines (102 loc) · 3.45 KB
/
fxlowmem.sh
1
2
3
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/bin/bash
_os="linux64"
_lang="en-US"
AUTODOWNLOAD="release"
die() {
echo "$1"
exit 1
}
download() {
case $AUTODOWNLOAD in
esr) URL=-esr ;;
beta) URL=-beta ;;
devedition) URL=-devedition ;;
nightly) URL=-nightly ;;
*) URL=
esac
[[ -d "$HOME/.cache" ]] && ccache="$HOME/.cache"
cdir="${ccache:-$WORKDIR}/fxlowmem"
_base="$AUTODOWNLOAD-latest.tar.bz2"
[[ ! -d "$cdir" ]] && mkdir -p "${cdir}"
# cleanup
if [[ -n "$CLEAN" ]]; then
rm -f "${cdir}/$_base"
rm -f "${cdir}/${AUTODOWNLOAD}*"
fi
# download
echo "Downloading firefox version: $AUTODOWNLOAD"
[[ ! -e "${cdir}/$_base" ]] && curl -Lo "${cdir}/$_base" "https://download.mozilla.org/?product=firefox${URL}-latest-ssl&os=${_os}&lang=${_lang}"
[[ -n "$CLEAN" ]] && rm "${cdir}/$AUTODOWNLOAD.version"
if [[ ! -f "${cdir}/$AUTODOWNLOAD.version" ]]; then
tar xvf "${cdir}/$_base" firefox/application.ini -O | grep -Po '(?<=^Version=).*' >"${cdir}/$AUTODOWNLOAD.version"
fi
version="$(cat "${cdir}/$AUTODOWNLOAD".version)"
LOCATION="${cdir}/${AUTODOWNLOAD}-${version}"
[[ -n "$CLEAN" ]] && rm -r "${LOCATION}"
if ! test -d "${LOCATION}"; then
mkdir "${LOCATION}"
# unpack
tar xvjf "${cdir}/$_base" --strip-components=1 -C "${LOCATION}"
fi
current_version="$(grep -Po '(?<=^Version=).*' "${LOCATION}/application.ini")"
if [[ ${current_version} != "${version}" ]]; then
echo "Firefox is updated, moving ${AUTODOWNLOAD}-${version} to ${AUTODOWNLOAD}-${current_version}"
echo "${current_version}" > "${cdir}/$AUTODOWNLOAD".version
mv -f "${LOCATION}" "${cdir}/${AUTODOWNLOAD}-${current_version}"
LOCATION="${cdir}/${AUTODOWNLOAD}-${current_version}"
version="$(cat "${cdir}/$AUTODOWNLOAD".version)"
fi
}
start() {
if [[ -n "${AUTODOWNLOAD}" && -z "${LOCATION}" ]]; then
download "${AUTODOWNLOAD}"
fi
fxbranch="${AUTODOWNLOAD}"-
fxver="${version}"-
date=$(date +%d.%m.%G-%T)
profile=${PROFILE:-$(mktemp -d "${cdir}/firefox-${fxbranch}${fxver}${date}"-XXX)}
location=${LOCATION:-/usr/lib/firefox}
logfile=${LOGFILE:-$(mktemp -t -p "${cdir}" "firefox-${fxbranch}${fxver}${date}"-XXX.log)}
cat > "${profile}/user.js" <<END
user_pref("browser.shell.checkDefaultBrowser", false);
user_pref("browser.startup.page", 3);
END
if [[ -n "${INFO}" ]]; then
echo "Using date: ${date}"
echo "Using profile dir: ${profile}"
echo "Using firefox location: ${location}"
echo "Using log file: ${logfile}"
fi
echo "Launching firefox version: ${AUTODOWNLOAD}-${version}"
nohup "${location}"/firefox --new-instance --profile "${profile}" &>"${logfile}" &
}
while getopts "p:l:g:a:d:c:i:h:c" opt; do
case $opt in
p) PROFILE="${OPTARG}" ;;
l) LOCATION="${OPTARG}" ;;
g) LOGFILE="${OPTARG}" ;;
a) AUTODOWNLOAD=${OPTARG} ;;
d) WORKDIR=${OPTARG} ;;
c) CLEAN=true ;;
i) INFO=true ;;
h) ACTION="help" ;;
*) echo "no such action"
esac
done
shift $((OPTIND -1))
if [[ -z "${ACTION}" ]]; then
ACTION="${1:-start}"
fi
case "${ACTION}" in
start) start ;;
help) echo "usage: ${0} [-p, -l, -lg, -a, -i, -h]
-p use custom profile path
-l use custom firefox location (such as firefox from your package manager or other)
-g use custom log location
-a autodownload one of this versions: esr, release, beta, devedition, nightly
-d where to store logs and versions
-i output some info
-c remove cached downloaded version
-h help" ;;
*) die "invalid action '${ACTION}'" ;;
esac