neymac |
06-09-2012 10:02 AM |
I use this script to update Firefox.
It downloads the latest Firefox version, builds a package, then I use upgradepkg <package_full_path_file_name> and it is done!
Save the script bellow as latest-firefox.sh
Before run the script, change the line FFLANG=${FFLANG:- en-US} to your language and it will download the proper non english firefox version.
Eg: FLANG=${FFLANG:- sv-SE} (for Sweden language)
Quote:
#!/bin/bash
# This script will find the latest Firefox binary package, download it
# and repackage it into Slackware format.
# I don't use Firefox for regular browsing but it is handy for
# comparative tests against Opera. :P
# Copyright 2011 Ruarí Ødegaard, Olso, Norway
# 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 COPYRIGHT HOLDERS AND CONTRIBUTORS
# "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 COPYRIGHT
# HOLDER 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.
# Use the architecture of the current machine or whatever the user has
# set externally
ARCH=${ARCH:-$(uname -m)}
if [ "$ARCH" = "x86_64" ]; then
LIBDIRSUFFIX="64"
else
LIBDIRSUFFIX=""
fi
# This defines the language of the downloaded package
FFLANG=${FFLANG:-en-US}
# Work out the latest stable Firefox if VERSION is unset
VERSION=${VERSION:-$(wget -qO- http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest/linux-$ARCH/$FFLANG/ | sed -nr 's|.*>firefox-(.*)\.tar\.bz2</a>.*|\1|p')}
# Error out if $VERISON is unset, e.g. because previous wget command
# failed
if [ -z $VERSION ]; then
echo "Could not work out the latest version; exiting"
exit 1
fi
# Don't start repackaging if the same version is already installed
if /bin/ls /var/log/packages/mozilla-firefox-$VERSION-* >/dev/null 2>&1 ; then
echo "Firefox ($VERSION) is already installed; exiting"
exit 0
fi
TMP=${TMP:-/tmp}
OUTPUT=${OUTPUT:-/tmp}
TAG=1ro
PKGTYPE=${PKGTYPE:-tgz}
# Set compressor type based on package extension
if [ "$PKGTYPE" = "tgz" ]; then
COMPRESSOR="gzip -9c"
elif [ "$PKGTYPE" = "txz" ]; then
COMPRESSOR="xz -c"
elif [ "$PKGTYPE" = "tlz" ]; then
COMPRESSOR="lzma -c"
elif [ "$PKGTYPE" = "tbz" ]; then
COMPRESSOR="bzip2 -c"
else
echo "$PKGTYPE is not a valid package type; exiting"
exit 1
fi
PACKAGE="$OUTPUT/mozilla-firefox-$VERSION-$ARCH-$TAG.$PKGTYPE"
# If the package was made previously, no need to make it again. ;)
if [ -e "$PACKAGE" ]; then
echo "$PACKAGE already exists; exiting"
exit 0
fi
REPACKDIR=$TMP/repackage-mozilla-firefox
# Three sources are needed, here is where to find them if they are not
# already in the directory this script was started from.
FIREFOXPKG=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/$VERSION/linux-$ARCH/$FFLANG/firefox-$VERSION.tar.bz2
DESKTOPFILE=ftp://ftp.osuosl.org/pub/slackware/slackware-current/source/xap/mozilla-firefox/mozilla-firefox.desktop
SCRIPT=${0/*\//}
# Since packaging is about to begin errors become more important now,
# so exit if things fail.
set -eu
# If the repackage is already present from the past, clear it down
# and re-create it.
if [ -d "$REPACKDIR" ]; then
rm -fr "$REPACKDIR"
fi
mkdir -p "$REPACKDIR"/{pkg,src}
# Check if the current directory contains mozilla-firefox.desktop. If
# not try /usr/share/applications/, otherwise download it.
if [ -e mozilla-firefox.desktop ]; then
cp mozilla-firefox.desktop "$REPACKDIR/src/"
elif [ -e /usr/share/applications/mozilla-firefox.desktop ]; then
cp /usr/share/applications/mozilla-firefox.desktop "$REPACKDIR/src/"
else
wget -P "$REPACKDIR/src" $DESKTOPFILE
fi
# Save a copy if this script but remove execute persmissions as it will
# larer be moved into the doc directory.
install -m 644 "${0}" "$REPACKDIR/src/$SCRIPT"
# Check if the current directory contains the Firefox binary package,
# otherwise download it.
if [ -e firefox-$VERSION.tar.bz2 ]; then
cp firefox-$VERSION.tar.bz2 "$REPACKDIR/src/"
else
wget -P "$REPACKDIR/src" $FIREFOXPKG
fi
# Now we have all the sources in place, switch to the package directory
# and start setting things up.
cd "$REPACKDIR/pkg"
# Create the basic directory structure for files and post-install
# symlinks.
mkdir -p install
mkdir -p usr/bin
mkdir -p usr/doc/mozilla-firefox-$VERSION
mkdir -p usr/share/applications
mkdir -p usr/share/icons/hicolor/{16x16,32x32,48x48,128x128}/apps
mkdir -p usr/lib$LIBDIRSUFFIX/mozilla
mkdir -p usr/lib$LIBDIRSUFFIX/firefox-$VERSION
# Copy the desktop file in place
cp ../src/mozilla-firefox.desktop usr/share/applications/
# Copy this script into the doc directory
cp ../src/$SCRIPT usr/doc/mozilla-firefox-$VERSION/$SCRIPT
# Extract the contents of the binary Firefox package into an
# appropriately named lib directory.
tar -xf ../src/firefox-$VERSION.tar.bz2 --strip 1 -C usr/lib$LIBDIRSUFFIX/firefox-$VERSION
# If present, move the readme or any other similar text files to the
# doc directory.
find usr/lib$LIBDIRSUFFIX/firefox-$VERSION -iname "*.txt" -maxdepth 1 -exec mv {} usr/doc/mozilla-firefox-$VERSION/ \;
# If a plugins folder was present move it to the mozilla lib directory.
# Otherwise just create a directory in mozilla so that there is
# definately somthing to symlink to later on in the post-install.
if [ -d usr/lib$LIBDIRSUFFIX/firefox-$VERSION/plugins ]; then
mv usr/lib$LIBDIRSUFFIX/firefox-$VERSION/plugins usr/lib$LIBDIRSUFFIX/mozilla/
else
mkdir usr/lib$LIBDIRSUFFIX/mozilla/plugins
fi
# The doinst.sh is going to create symlinks. Therefore it is necessary
# to check that the files that will be linked are actually present, so
# that the post-install goes smoothly.
checkfile ()
{
if [ ! -e $1 ]; then
echo "$1 not found, so symlink in post install will fail; exiting"
exit 1
fi
}
checkfile usr/lib$LIBDIRSUFFIX/firefox-$VERSION/firefox
checkfile usr/lib$LIBDIRSUFFIX/firefox-$VERSION/chrome/icons/default/default16.png
checkfile usr/lib$LIBDIRSUFFIX/firefox-$VERSION/chrome/icons/default/default32.png
checkfile usr/lib$LIBDIRSUFFIX/firefox-$VERSION/chrome/icons/default/default48.png
checkfile usr/lib$LIBDIRSUFFIX/firefox-$VERSION/icons/mozicon128.png
# Also check that there are no symlinks already present as these are
# not allowed in Slackware packages.
if find usr -type l -print | grep . >/dev/null; then
echo "unexpected symlink(s) found; exiting"
exit 1
fi
# Now create the post-install to setup the symlinks and register the
# desktop file and icons.
cat <<EOS > install/doinst.sh
( cd usr/bin ; rm -rf firefox )
( cd usr/bin ; ln -sf ../lib$LIBDIRSUFFIX/firefox-$VERSION/firefox firefox )
( cd usr/lib$LIBDIRSUFFIX/firefox-$VERSION ; rm -rf plugins )
( cd usr/lib$LIBDIRSUFFIX/firefox-$VERSION ; ln -sf ../mozilla/plugins plugins )
( cd usr/share/icons/hicolor/16x16/apps ; rm -rf firefox.png )
( cd usr/share/icons/hicolor/16x16/apps ; ln -sf ../../../../../lib$LIBDIRSUFFIX/firefox-$VERSION/chrome/icons/default/default16.png firefox.png )
( cd usr/share/icons/hicolor/32x32/apps ; rm -rf firefox.png )
( cd usr/share/icons/hicolor/32x32/apps ; ln -sf ../../../../../lib$LIBDIRSUFFIX/firefox-$VERSION/chrome/icons/default/default32.png firefox.png )
( cd usr/share/icons/hicolor/48x48/apps ; rm -rf firefox.png )
( cd usr/share/icons/hicolor/48x48/apps ; ln -sf ../../../../../lib$LIBDIRSUFFIX/firefox-$VERSION/chrome/icons/default/default48.png firefox.png )
( cd usr/share/icons/hicolor/128x128/apps ; rm -rf firefox.png )
( cd usr/share/icons/hicolor/128x128/apps ; ln -sf ../../../../../lib$LIBDIRSUFFIX/firefox-$VERSION/icons/mozicon128.png firefox.png )
# Setup menu entries
if command -v update-desktop-database >/dev/null 2>&1; then
update-desktop-database -q usr/share/applications
fi
# Setup icons
touch -c usr/share/icons/hicolor
if command -v gtk-update-icon-cache >/dev/null 2>&1; then
gtk-update-icon-cache -tq usr/share/icons/hicolor
fi
EOS
# Create a description file inside the package.
cat <<EOD > install/slack-desc
|-----handy-ruler------------------------------------------------------|
mozilla-firefox: mozilla-firefox (Mozilla Firefox Web browser)
mozilla-firefox:
mozilla-firefox: This project is a redesign of the Mozilla browser component written
mozilla-firefox: using the XUL user interface language. Firefox delivers safe, easy web
mozilla-firefox: browsing.
mozilla-firefox:
mozilla-firefox: Visit the Mozilla Firefox project online:
mozilla-firefox: http://www.mozilla.org/projects/firefox/
mozilla-firefox:
mozilla-firefox:
mozilla-firefox:
EOD
# Make sure the file permissions are ok
chmod -R u+w,go+r-w,a-s .
# Use tar version 1.13 if available, if not (e.g. packaging was done on
# a non Slackware machine) force modern tar into formatting its
# directory structure just like tar 1.13 because this is what pkgtools
# expect. Also use options to set ownership of all files to root:root.
if [ -x /bin/tar-1.13 ]; then
/bin/tar-1.13 --owner 0 --group 0 -cvvf- . | $COMPRESSOR > "$PACKAGE"
else
find ./ -print | sed -r 's|^\./(.)|\1|' | tar --owner 0 --group 0 --no-recursion -T- -cvvf- | $COMPRESSOR > "$PACKAGE"
fi
# Tell the user we are done! :D
echo -e "\nCreated: $PACKAGE"
|
PS: Thanks to ruario (Ruarí Ødegaard, Olso, Norway)!
|