#!/bin/bash
# Copyright 2016-2020 Jay Flood, SP, Brasil
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# Author: brokenman@porteus.org
# mangled by: ncmprhnsbl
# version: 20201210
#
# This is a script to update palemoon
# Source porteus-functions
. /usr/share/porteus/porteus-functions
get_colors
txtbld=$(tput bold)
txtred=${txtbld}$(tput setaf 1)
txtgreen=${txtbld}$(tput setaf 2)
txtwhite=${txtbld}$(tput setaf 7)
txtcyan=${txtbld}$(tput setaf 6)
rst=$(tput sgr0)
function bold(){ echo -e $txtbld "$1" $rst; }
function green() { echo -e $txtgreen "$1" $rst; }
function red(){ echo $txtred "$1" $rst; }
function cyan(){ echo $txtcyan "$1" $rst; }
saypass(){ echo "[${txtbold}${txtgreen}PASS$rst] $1"; }
sayfail(){ echo "[${txtbold}${txtred}FAIL$rst] $1"; }
# Check for root
if [ `whoami` != "root" ]; then
echo "Only root can run this."
exit 1
fi
# functions set work directory(default is /tmp) to current work directory
set_tmp() {
WRKDIR=/tmp
}
set_pwd() {
WRKDIR=`pwd`
}
# echo usage
show_help() {
echo " options: -d : do operations in the present directory, instead of /tmp . "
echo " -h : show this usage. "
}
while getopts ":-d:-h:" o; do
case "$1" in
-d)
set_pwd;;
-h)
show_help
exit 0;;
*)
show_help
exit 1;;
esac
done
case "$1" in
"")
set_tmp;;
esac
array_menu(){
echo
echo "$1"
echo "$2"
select LOC in ${RESULT[@]}; do
if [ -z "$LOC" ]; then
bold "English locale chosen." && echo
else
bold "$LOC locale chosen"
fi
break
done
}
get_locale(){
# Set locales in array
for a in bg cs de el en-GB en-US es-AR es-ES es-MX fr hu it ko pl pt-BR pt-PT ru sk sv-SE tl tr uk vi zh-CN; do
RESULT+=( $a )
done
array_menu "Choose a locale from the list."
unset RESULT
}
# tell us where the work will be done
echo "Work will be done in: $WRKDIR "
## Check if there's enough working space
check_space() {
[ `df -l --output=avail $WRKDIR | tail -1` -lt 384000 ] && { red "There's not enough space to run this script"; exit 1; }
}
# Check if palemoon is currently installed
bold "Checking if palemoon is installed ..."
command -pv palemoon >/dev/null && ISINSTALLED=0
# Get current palemoon version if installed
if [ "$ISINSTALLED" ]; then
sayok "palemoon is installed"
CVER=`palemoon --version | cut -d" " -f5`
[ "$CVER" ] || CVER=`ls /var/lib/pkgtools/packages/palemoon* | sort | tail -n1 | awk -F- '{print$2}'`
[ "$CVER" ] && sayok "installed palemoon version: $txtgreen $CVER $rst" || echo "No palemoon version found"
else
echo "palemoon is not installed"
fi
# Set variables
#RELURL=http://linux.palemoon.org/download/mainline/
RELURL=https://www.palemoon.org/download.shtml
USE_SYSTEM_SPELLCHECK=yes
CWD=`pwd`
ARCH=${ARCH:-$(uname -m)}
SERVER=`awk -F= '/SERVER=/{print$NF}' /etc/porteus.conf`
case "$ARCH" in
i?86) PARCH="i586" ; LIBDIRSUFFIX="" ; ARCH=i686 ;;
x86_64) PARCH="x86_64" ; LIBDIRSUFFIX="64" ; ARCH=x86_64 ;;
*) echo "Package for $(uname -m) architecture is not available." ; exit 1 ;;
esac
## Check for palemoon file in $WRKDIR
## If it exists then ask to build from it.
if [ `ls $WRKDIR/palemoon-* 2>/dev/null | wc -l` -ge 1 ]; then
# Make sure it is a tarball(xz)
cfile=( `ls -1 $WRKDIR/palemoon-*.xz 2>/dev/null | awk -F/ '{print$NF}'` )
if [ ${#cfile[@]} -gt 0 ]; then
RESULT=${cfile[@]}
echo
green "A palemoon tarball was found in $WRKDIR"
echo " We will use this archive to create palemoon."
menu_from_array "Choose the palemoon file you want to process."
echo "CHOICE:$CHOICE"
unset RESULT
fi
fi
bold "Checking for Porteus ..."
is_porteus && saypass "Distro is Porteus" || { sayfail "Distro is not Porteus"; cleanup; }
if [ -z $CHOICE ]; then
echo "Getting latest version ..."
#VER=`wget release -q -O - $RELURL | sed -n '/
/p' | head -1 | awk -F"" '{print$2}' | cut -d' ' -f1`
#VER=`wget release -q -O - $RELURL | sed -n '//p' | head -1 | awk -F"v" '{print$2}' | cut -d' ' -f1`
#VER=`wget release -q -O - $RELURL | sed -n '//p' | head -1 | awk -F"v" '{print$2}' | cut -d'"' -f1`
#VER=`curl -sf $RELURL | grep 'Version:' | head -n1 | grep -o '[0-9]*\.[0-9]*' | sed 'N;s/\n//g'`
#VER=`curl -sf $RELURL | grep 'Version:' | head -n1 | grep -o '[0-9]*\.[0-9]*' | tr -d '\n'`
VER=`curl -sf $RELURL | grep linux-x86_64-gtk3 | grep -o '[0-9]*\.[0-9]' | tr -d '\n'`
#VER=`curl -sf $RELURL | grep 'Version:' | head -n1 | grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*'`
if [ "$VER" ];then
if [ "$VER" = "$CVER" ]; then
read -p " You already have the latest version $txtgreen$CVER$rst. Do you still want to continue? [y/n]" -n 1 -r -s && echo
[[ $REPLY =~ ^[Nn]$ ]] && exit 0
fi
else
sayerror "Could not find latest version"
exit 1
fi
fi
# Get version on porteus server
SERVER_LATFILE=`lynx -dump --nonumbers --listonly $SERVER/$PARCH/current/modules | awk -F/ '/palemoon/{print$NF}' | tail -n1`
SERVER_LATVER=`awk -F- '{print$2}' <<<$SERVER_LATFILE`
########## START FUNCTIONS
cleanup(){
[ -d $TMPDIR ] && rm -rf $TMPDIR
[ -d $PKG ] && rm -rf $PKG
exit
}
create_default_homepage(){
echo "W0dsb2JhbF0KaWQ9UG9ydGV1cwp2ZXJzaW9uPTUuMAphYm91dD1QYWxlbW9vbiBmb3IgUG9ydGV1
cwoKW1ByZWZlcmVuY2VzXQphcHAudXBkYXRlLmF1dG89ZmFsc2UKYXBwLnVwZGF0ZS5lbmFibGVk
PWZhbHNlCmJyb3dzZXIuc3RhcnR1cC5ob21lcGFnZT0iZGF0YTp0ZXh0L3BsYWluLGJyb3dzZXIu
c3RhcnR1cC5ob21lcGFnZT1odHRwczovL2ZvcnVtLnBvcnRldXMub3JnLyIKYnJvd3Nlci5jYWNo
ZS5kaXNrLmNhcGFjaXR5PTEwMjQwCmJyb3dzZXIuc2hlbGwuY2hlY2tEZWZhdWx0QnJvd3Nlcj1m
YWxzZQo=" | base64 -d > $PKG/opt/palemoon/distribution/distribution.ini
}
get_home_page(){
HOMEPAGE="https://forum.porteus.org"
bold "Set your home page."
echo " Leave blank for: https://forum.porteus.org and press Enter to continue."
read -p "> " answ
if [ `wc -c <<<$answ` -gt 1 ]; then
HOMEPAGE=$answ
unset answ
echo "Verifying home page ..."
if is_online_url $HOMEPAGE; then
saypass "Homepage is online."
else
sayfail "This homepage is not available."
echo
$FUNCNAME
fi
else
saypass "Homepage is available"
fi
}
# Generic checksum check
checksum () {
echo "Verifying download integrity.."
echo "Server : $SUM1"
echo "Download: $SUM2"
if [ "$SUM1" = "$SUM2" ]; then
echo "Download verified."
else
read -p "Integrity check failed. Would you like to continue anyway? [y/n]" -n 1 -r -s && echo
if [[ $REPLY =~ ^[Nn]$ ]]; then
cleanup
fi
fi
}
trap cleanup SIGHUP SIGINT SIGTERM
if [ -z $CHOICE ]; then
echo "Checking $SERVER/$PARCH/current/modules"
echo
if [ "$ARCH" = "i686" ];then
red "Sorry, Palemoon no longer supplies 32bit binaries."
cyan "If you want to use an older version go here:"
bold " https://www.palemoon.org/archived.shtml "
cyan "to find one, then place it in:"
bold "$WRKDIR"
cyan "and rerun this script."
cyan " or"
cyan "You can choose to download the premade module from our server(en-US locale)"
echo "The porteus server module version is:" $txtgreen "palemoon-$SERVER_LATVER" $rst
else
echo "The latest version is:" $txtgreen "palemoon-$VER" $rst
echo "The porteus server module version is:" $txtgreen "palemoon-$SERVER_LATVER" $rst
cyan "You can choose to download the premade module from our server(en-US locale)"
cyan "or download the version from palemoon.org,"
cyan "which enables you to choose your language and set a custom homepage."
fi
echo
read -p " Would you like to download the porteus server module? [y/n]" -n 1 -r -s && echo
if [[ $REPLY =~ ^[Yy]$ ]] ; then
echo
download $SERVER/$PARCH/current/modules/$SERVER_LATFILE $WRKDIR
## Check that we have a module in $WRKDIR
if [ ! -f $WRKDIR/$SERVER_LATFILE ]; then
echo
sayerror "Download of the palemoon module failed."
cleanup
else
echo
echo "Your file is at:" $txtcyan "$WRKDIR/$SERVER_LATFILE" $rst
echo "Please move it to your modules folder to survive a reboot."
echo
cleanup
fi
elif [ "$ARCH" = "i686" ];then
cleanup
else
check_space
read -p " Would you like to create a module of the latest version? [y/n]" -n 1 -r -s && echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then cleanup; fi
fi
fi
get_home_page
if [ -z $CHOICE ]; then
get_locale
fi
TMPDIR=$WRKDIR/.pale.$$
PRGNAM=palemoon
#BZ2URL=http://linux.palemoon.org/files/$VER/palemoon-$VER.en-US.linux-$ARCH.tar.bz2
#BZ2URL=http://linux.palemoon.org/datastore/release/palemoon-$VER.en-US.linux-$ARCH.tar.bz2
## note "tarball" is now tar.xz
#BZ2URL=http://linux.palemoon.org/datastore/release/palemoon-$VER.linux-$ARCH-gtk3.tar.xz
BZ2URL=https://rm-us.palemoon.org/release/palemoon-$VER.linux-$ARCH-gtk3.tar.xz
PFILE=${BZ2URL##*/}
PKG=$TMPDIR/package-$PRGNAM
OUTPUT=${OUTPUT:-$WRKDIR}
SERVER=`awk -F= '/SERVER=/{print$NF}' /etc/porteus.conf`
## Create temp dir
[ ! -d $TMPDIR ] && mkdir -p $TMPDIR || rm -rf $TMPDIR/*
## Download tarball
if [ -z $CHOICE ]; then
if [ ! -e $WRKDIR/$PFILE ]; then
download $BZ2URL $TMPDIR
fi
else
cp -a $WRKDIR/$CHOICE $TMPDIR
fi
## If locale other than en-US, fetch language pack
if [ -z $CHOICE ]; then
if [ ! "$LOC" = "en-US" ]; then
echo "Fetching language pack.."
mkdir $TMPDIR/locale
/usr/bin/curl --silent --user-agent 'PaleMoon' --output "$TMPDIR/locale/$PRGNAM-i18n-${LOC,,}-${VER}.xpi" "https://addons.palemoon.org/?component=download&version=${VER}&id=langpack-${LOC}@palemoon.org" && echo " Done." || echo "Language pack download failed!"
fi
fi
## Check that we have an archive in TMPDIR
if [ -z $CHOICE ]; then
if [ ! -f $TMPDIR/$PFILE ]; then
echo
sayerror "File $PFILE not found"
cleanup
fi
elif [ ! -f $TMPDIR/$CHOICE ]; then
echo
sayerror "File $CHOICE not found"
cleanup
fi
## Get and check checksum for tarball
if [ -z $CHOICE ]; then
#SHAURL=http://linux.palemoon.org/download/mainline/
if [ "$ARCH" = "x86_64" ]; then
LINE="head -n1"
else
LINE="tail -n1"
fi
fi
#SUM1=`wget release -q -O - $RELURL | sed -n '/SHA/p' | $LINE | cut -d" " -f6 | cut -d"<" -f1`
SUM1=`lynx -dump -dont_wrap_pre $RELURL | grep -A 1 linux-x86_64-gtk3 | tail -n1`
SUM2=`sha256sum $TMPDIR/$PRGNAM* | cut -d" " -f1`
if [ -z $CHOICE ]; then
checksum
fi
## Make the package and module
mkdir -p $PKG
cd $PKG
if [ -z $CHOICE ]; then
tar xvf ../$PFILE || { red "Failed to decompress tarball."; exit 1; }
else
tar xvf ../$CHOICE || { red "Failed to decompress tarball."; exit 1; }
fi
chown -R root:root $PRGNAM
find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
-o -perm 511 \) -exec chmod 755 {} \; -o \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
# use system hunspell if user wants it
if [[ $USE_SYSTEM_SPELLCHECK == "yes" ]]; then
rm -rf palemoon/dictionaries
ln -sv /usr/share/hunspell $PRGNAM/dictionaries
fi
# create directories
mkdir -p $PKG/opt
mkdir -p $PKG/usr/bin
mkdir -p $PKG/usr/share/icons/hicolor/{16x16,32x32,48x48,128x128}/apps
mkdir -p $PKG/usr/share/applications
#mkdir -p $PKG/install
# install pale moon into /opt
cp -vr palemoon $PKG/opt
rm -rf palemoon
# create settings directory for distribution.ini for homepage setting
mkdir -p $PKG/opt/$PRGNAM/distribution
# link stuff
## binary
ln -s /opt/palemoon/palemoon $PKG/usr/bin/palemoon
## icons
ln -s /opt/palemoon/browser/chrome/icons/default/default16.png $PKG/usr/share/icons/hicolor/16x16/apps/palemoon.png
ln -s /opt/palemoon/browser/chrome/icons/default/default32.png $PKG/usr/share/icons/hicolor/32x32/apps/palemoon.png
ln -s /opt/palemoon/browser/chrome/icons/default/default48.png $PKG/usr/share/icons/hicolor/48x48/apps/palemoon.png
ln -s /opt/palemoon/browser/icons/mozicon128.png $PKG/usr/share/icons/hicolor/128x128/apps/palemoon.png
## Add distribution.ini to set homepage
echo "Setting Porteus Forum to Homepage"
create_default_homepage
# Add home page
echo "Adding home page ..."
sed -i 's@https://forum.porteus.org@'$HOMEPAGE'@g' $PKG/opt/$PRGNAM/distribution/distribution.ini
## Add language pack and set language if present
if [ -e "$TMPDIR/locale/$PRGNAM-i18n-${LOC,,}-${VER}.xpi" ]; then
mkdir $PKG/opt/$PRGNAM/distribution/extensions
cp $TMPDIR/locale/$PRGNAM-i18n-${LOC,,}-${VER}.xpi $PKG/opt/$PRGNAM/distribution/extensions/langpack-${LOC}@palemoon.org.xpi
cat >> $PKG/opt/$PRGNAM/distribution/distribution.ini << EOF
general.useragent.locale="${LOC}"
extensions.autoDisableScopes=0
extensions.shownSelectionUI=true
intl.locale.matchOS=true
EOF
fi
## Install desktop file
cat > $PKG/usr/share/applications/$PRGNAM.desktop << EOF
[Desktop Entry]
Version=1.0
Name=Pale Moon Web Browser
Comment=Browse the World Wide Web
Keywords=Internet;WWW;Browser;Web;Explorer
Exec=palemoon %u
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=palemoon
Categories=Network;WebBrowser;Internet;GTK;
MimeType=text/html;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;x-scheme-handler/chrome;video/webm;application/x-xpinstall;
StartupNotify=true
EOF
cp -a $PKG/usr/share/applications/$PRGNAM.desktop $PKG/usr/share/applications/browser.desktop
echo "NoDisplay=true" >> $PKG/usr/share/applications/browser.desktop
sed -i 's/MimeType/#MimeType/' $PKG/usr/share/applications/browser.desktop
echo "Fixing permissions ..."
find $PKG -type d | xargs -i chmod 755 {}
find $PKG -type f | xargs -i chmod 644 {}
chmod +x $PKG/opt/palemoon/palemoon*
for a in `find $PKG -type f`; do
if [[ `file $a | grep -o ELF` ]]||[[ `file $a | grep -o "shell"` ]]; then
echo "Setting ${a##*/} as executable ..."
chmod +x $a
fi
done
if [ -d $PKG/home/guest ]; then echo "Setting guest permsissions ..."; chown -R guest: $PKG/home/guest; fi
chmod 755 $PKG/opt/palemoon/{plugin*,pale*,run*}
#echo "Copying config files ..."
#cp -a $CWD/files/* $PKG
#chown -R guest: $PKG/home/guest
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
## remove - for some locales
#~ if [ `echo $LOC | grep -` ]; then
#~ PLOC=${LOC/-/}
#~ else
#~ PLOC=$LOC
#~ fi
if [ -z $CHOICE ]; then
PNAME=$PRGNAM-$VER-$ARCH-${LOC}
else
PNAME=${CHOICE::-7}
fi
### fake slackware type package info: super dumb version
PKGINFO=var/lib/pkgtools/packages
#FILES=`find *`
mkdir -p $PKGINFO
echo "PACKAGE NAME: $PNAME" > $PKGINFO/$PNAME
cat >> $PKGINFO/$PNAME << EOM
PACKAGE DESCRIPTION:
palemoon: palemoon (Web browser)
palemoon:
palemoon: Pale Moon is a fork of pre-Australis Mozilla Firefox aiming to be
palemoon: fast, efficient and easy to use.
palemoon:
palemoon: Homepage: http://www.palemoon.org/
palemoon:
palemoon:
palemoon:
palemoon:
FILE LIST:
EOM
find * | grep -v var >> $PKGINFO/$PNAME
cd $WRKDIR
dir2xzm $PKG $OUTPUT/$PNAME.xzm
#/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VER-$ARCH-$PLOC.txz || { red "Failed to create slackware package."; exit 1; }
#txz2xzm $OUTPUT/$PRGNAM-$VER-$ARCH-$PLOC.txz || { red "Failed to create porteus module."; exit 1; }
echo
echo "Your file is at:" $txtcyan "$OUTPUT/$PNAME.xzm" $rst
echo "Please copy it to your modules folder to survive a reboot."
echo
cleanup