Tag Archive: script

Seafile Script: Tools in „seafile/bin“ ausführen

Seafile stellt nach der Installation einige Helfer bereit, die im Laufe der Benutzung administrative Aufgaben vereinfachen sollen:
ccnet-init, ccnet-server, httpserver, seaf-fsck, seaf-fuse, seafile-controller, seaf-migrate,
seaf-server, seaf-server-init, seafserv-gc, seafserv-tool

Mit den Debian/Ubuntu-eigenen Bibliotheken, möchten diese jedoch nicht zusammenarbeiten:

./seafserv-tool: error while loading shared libraries: libccnet.so.0: cannot open shared object file: No such file or directory
Auf keinen Fall darf ein symbolischer Link zu den Bibliotheken in ein vom System benutztes Verzeichnis erstellt werden!

Einige Programme der Linux Installation stünden im Versionskonflikt mit den von Seafile verwendeten Bibliotheken.
Es ist ausreichend und sicher, die Anwendung mit einem vorhergehenden „LD_LIBRARY_PATH“ aufzurufen, womit der Pfad zu den Bibliotheken einmalig individuell bestimmt wird.

Hierzu habe ich ein kleines Script geschrieben, das diese Aufgabe übernimmt

Zur Konfiguration gehört nur ein Parameter „SEAFILE_MANUAL_PATH“. Bleibt dieser wie im Script leer, so versucht das Script den Pfad automatisch zu erkennen.
Wurde der Seafile-Server nach der Struktur meines Artikels aufgebaut, lautete der korrekte Pfad „/srv/seafile/servername“. Dieses Verzeichnis muss die Ordner „ccnet“ sowie „seafile-data“ beeinhalten.

#!/bin/bash
if [ $# -lt 1 ]; then
        echo -e "\e[00;31mMissing argument\e[00m"
        echo -e "Valid arguments are\n\e[00;32mccnet-init  ccnet-server  httpserver seaf-fsck\nseaf-fuse  seafile-controller  seaf-migrate\nseaf-server  seaf-server-init  seafserv-gc  seafserv-tool\e[00m"
        exit 1
fi

### CONFIG START ###

# Path containing 'ccnet' and 'seafile-data' directories
# Leave empty to try autodetection
SEAFILE_MANUAL_PATH=

#### CONFIG END ####

if [ -z $SEAFILE_MANUAL_PATH ]; then
        SEAFILEPATH=$(dirname `locate seafile-server-latest`)
else
        SEAFILEPATH=$SEAFILE_MANUAL_PATH
fi

LD_LIBRARY_PATH=$SEAFILEPATH/seafile-server-latest/seafile/lib $SEAFILEPATH/seafile-server-latest/seafile/bin/$1 $2 $3 $4 $5 $6 $7

Usage: ./script.sh
Vorab als ausführbar markieren: chmod +x script.sh

Ein Beispiel im Einsatz:

Seafile Script
Seafile Script

Minidlna/ReadyMedia mit eigenem Symbol kompilieren

DLNA

Ich habe nie verstanden, warum ReadyMedia (früher Minidlna) bei der Einbindung des Icons einen so umständlichen Weg eingeschlagen hat.

ReadyMedia – aus dem offiziellen Quell-Code – verwendet je nach System unterschiedliche Symbole. So sehen Linux-Benutzer etwa den Tux-Pinguin, BSD-Benutzer hingegen Beastie, den kleinen Teufel. Zudem existiert für spezielle Konfigurationen ein Logo Netgears.
Um jedoch ein eigenes Symbol zu verwenden, reicht es nicht aus, die ein oder andere Grafik auszutauschen. Die Grafiken liegen als „dumps“ in der Datei „icons.c“.
Das macht einen Eingriff in den Quell-Code unumgänglich.

Beispiel ReadyMedia Symbol
Beispiel für ReadyMedia Symbol
Zur Vereinfachung habe ich ein Script geschrieben, das eine Datei „icons.c“ im Verzeichnis des Scripts anlegt. Die Daten in dieser Datei gelten für alle Systeme.
Die Grafiken werden – wie ReadyMedia es verlangt – einmal in das JPEG- sowie PNG-Format umgewandelt. Im gleichen Schritt werden beiden Dateien auf die Größe 120×120 bzw. 40×40 Pixel skaliert.

Getestet habe ich alles Folgende unter Ubuntu Server 13.10. Es sollte jedoch problemlos auf nahen Derivaten läuffähig sein.

Zu Beginn installiere ich diverse Abhängigkeiten, wovon „imagemagick“ und „xd“ für das Script notwendig sind:

sudo apt-get install autoconf gettext autopoint build-essential libvorbis-dev libsqlite3-dev libogg-dev libjpeg-dev libid3tag0-dev libflac-dev libexif-dev libavutil-dev libavformat-dev libavcodec-dev debhelper imagemagick xd

Als nächstes die aktuellste Version herunterladen und entpacken. Gearbeitet wird im Verzeichnis „~/build“:

mkdir ~/build
cd ~/build
wget --content-disposition -O - http://sourceforge.net/projects/minidlna/files/latest/download | tar xfvz -

Nun in das neue Verzeichnis wechseln und das Script erstellen:

cd ~/build/minidlna*
nano minidlna_icon_patch.sh

Dort folgenden Inhalt einfügen:

#!/bin/bash
PATH=/usr/bin:/usr/local/bin:$PATH
command -v convert >/dev/null 2>&1 || { echo >&2 "Please install imagemagick"; exit 1; }
command -v xxd >/dev/null 2>&1 || { echo >&2 "Please install xd"; exit 1; }
if [ -z "$1" ]; then
        echo "Usage: $0 imagefile"
        exit 1
fi
if [ ! -f $1 ]; then
        echo "Image does not exist"
        exit 1
fi
if [ -f icons.c ]; then
        mv icons.c icons.c_bak
fi
convert $1 -resize 40x40\! tmp_png_sm.png
convert $1 -flatten -resize 40x40\! tmp_jpeg_sm.jpeg
convert $1 -resize 120x120\! tmp_png_lrg.png
convert $1 -flatten  -resize 120x120\! tmp_jpeg_lrg.jpeg
xxd -p -c 24 tmp_png_sm.png | sed -e '    s/../\\x&/g' \
        -e '1   s/^/unsigned char png_sm\[\] =  "/' \
        -e '1 ! s/^/             "/' \
        -e '    s/$/"/' \
        -e '$   s/$/;/' >> icons.c
xxd -p -c 24 tmp_jpeg_sm.jpeg | sed -e '    s/../\\x&/g' \
        -e '1   s/^/unsigned char jpeg_sm\[\] =  "/' \
        -e '1 ! s/^/             "/' \
        -e '    s/$/"/' \
        -e '$   s/$/;/' >> icons.c
xxd -p -c 24 tmp_png_lrg.png | sed -e '    s/../\\x&/g' \
        -e '1   s/^/unsigned char png_lrg\[\] =  "/' \
        -e '1 ! s/^/             "/' \
        -e '    s/$/"/' \
        -e '$   s/$/;/' >> icons.c
xxd -p -c 24 tmp_jpeg_lrg.jpeg | sed -e '    s/../\\x&/g' \
        -e '1   s/^/unsigned char jpeg_lrg\[\] =  "/' \
        -e '1 ! s/^/             "/' \
        -e '    s/$/"/' \
        -e '$   s/$/;/' >> icons.c
rm tmp_*jpeg tmp_*png

Nun das Script als ausführbar markieren:

chmod +x minidlna_icon_patch.sh

Das neue Symbol sollte eine Aspect Ratio von 1:1 haben, also genauso breit wie hoch sein. Am besten wird ein Bild >= 120×120 Pixel ausgewählt. Das Format spielt keine Rolle.
Diese Bild-Datei, angenommen „image.png“, lege ich in diesem Beispiel im Verzeichnis des Scripts ab. Die Syntax lautet „./minidlna_icon_patch.sh grafik.ext“:

./minidlna_icon_patch.sh image.png

Es wurde ein Backup der originalen Datei „icon.c“ unter dem Namen „icon.c_bak“ angelegt.
Die Installation konfiguriere ich ohne besondere Parameter (etwa „prefix“ etc.):

./configure
make -j2
sudo make install

Die ausführbare Datei befindet sich so unter „/usr/local/sbin/minidlnad“.
Nun zur ReadyMedia-Konfiguration, welche ich sehr simpel halte. Hierzu bitte einfach in die man-page schauen. Ausgeführt wird ReadyMedia als Benutzer „nobody“.

sudo nano /etc/minidlna.conf

Inhalt:

user=nobody
media_dir=/opt/files
friendly_name=ReadyMedia
inotify=yes
log_dir=/var/log
log_level=warn
root_container=B

Diverse Verzeichnisse wird ReadyMedia nicht selbstständig anlegen, da der Benutzer „nobody“ dies nicht darf. Das erledige ich manuell:

sudo mkdir /var/{run,cache}/minidlna
sudo touch /var/log/minidlna.log
sudo chown -R nobody:nogroup /var/{run,cache}/minidlna /var/log/minidlna.log

Das Verzeichnis „/opt/files“, welches die Medien-Dateien (Urlaubsbilder ;) ) enthält, muss natürlich für den Benutzer „nobody“ lesbar sein.
Für den automatischen Start, wird ein Init-Script angelegt:

sudo nano /etc/init.d/minidlna

Der Inhalt:

#!/bin/sh

# chkconfig: 345 99 10
# description: Startup/shutdown script for MiniDLNA daemon
#
# Based on the MiniUPnPd script by Thomas Bernard
# Modified for MiniDLNA by Justin Maggard 
# Status function added by Igor Drobot
#
### BEGIN INIT INFO
# Provides:          minidlna
# Required-Start:    $network $local_fs $remote_fs
# Required-Stop::    $network $local_fs $remote_fs
# Should-Start:      $all
# Should-Stop:       $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: DLNA/UPnP-AV media server
### END INIT INFO

MINIDLNA=/usr/local/sbin/minidlnad
PIDFILE=/var/run/minidlna/minidlna.pid
CONF=/etc/minidlna.conf
ARGS="-f $CONF"

test -f $MINIDLNA || exit 0

. /lib/lsb/init-functions

case "$1" in
start)  log_daemon_msg "Starting minidlna" "minidlna"
        start-stop-daemon --start --quiet --pidfile $PIDFILE --startas $MINIDLNA -- $ARGS $LSBNAMES
        log_end_msg $?
        ;;
stop)   log_daemon_msg "Stopping minidlna" "minidlna"
        start-stop-daemon --stop --quiet --pidfile $PIDFILE
        log_end_msg $?
        ;;
restart|reload|force-reload)
        log_daemon_msg "Restarting minidlna" "minidlna"
        start-stop-daemon --stop --retry 5 --quiet --pidfile $PIDFILE
        start-stop-daemon --start --quiet --pidfile $PIDFILE --startas $MINIDLNA -- $ARGS $LSBNAMES
        log_end_msg $?
        ;;
status)
        status_of_proc -p $PIDFILE $MINIDLNA minidlna && exit 0 || exit $?
        ;;
*)      log_action_msg "Usage: /etc/init.d/minidlna {start|stop|restart|reload|force-reload|status}"
        exit 2
        ;;
esac
exit 0

Das Script als ausführbar markieren und den Dienst installieren:

sudo chmod +x /etc/init.d/minidlna
sudo update-rc.d minidlna defaults

Bevor der Dienst gestartet wird, erhöhe ich die „max_user_watches“ für „inotify“, damit ReadyMedia vernünftig arbeiten kann. Dies dient zur Erkennung neuer Medien-Dateien:

sudo bash -c "echo fs.inotify.max_user_watches=1048576 >> /etc/sysctl.conf" && sudo sysctl -p

Nun den Dienst starten:

sudo service minidlna start

Script: Chromium Nightly installieren (x64)

Chromium

Nach Firefox Aurora: Ein Chromium Nightly Install-Script, getestet unter Debian/Ubuntu in 64bit Ausführung.
Womöglich auch lauffähig auf weiteren Distributionen. Ich habe erst einmal nicht vor, auch 32bit-Versionen zu unterstützen.

Das Script ermittelt die aktuellste Version aus dem offiziellen Build-Repository Chromiums, lädt diese herunter und richtet sie für den eingeloggten Benutzer ein.

Chromium Nightly Installer
Chromium Nightly Installer
Benötigt werden „unzip“ sowie „curl“.
Im Gegensatz zu Aurora, erwartet Chromium nach dem Entpacken noch die ein oder andere Einstellung. Das Script erledigt diese Aufgaben.

Chromium Nightly Screenshot
Chromium Nightly Screenshot
Im Anschluss wird ein symbolischer Link „chromium-devel“ angelegt, zeigend auf „/opt/chrome-linux/chrome-wrapper“.
Außerdem wird Chromium nach der Einrichtung erstmalig gestartet, um den Starter zu erzeugen. Das erspart es dem Script.

Ich bin positiv überrascht, was das Font-Rendering angeht. Vor allem das Schriftbild der Tabs ist stark verbessert. Flott ist er auch.

Ebenfalls lohnt ein Blick in die experimentellen Einstellung. Hier gibt es einiges zu entdecken/kaputt zu machen. ;)
Hierzu „chrome://flags“ in die Adressleiste eintippen.

#!/bin/bash
if [[ $UID -ne 0 ]]; then
        echo "$0 muss als \"root\" ausgeführt werden!"
        exit 1
fi
ISCURL=`which curl`
if [ -z $ISCURL ]; then
        echo "Bitte \"curl\" installieren!"
        exit 1
fi
ISUNZIP=`which unzip`
if [ -z $ISUNZIP ]; then
        echo "Bitte \"unzip\" installieren!"
        exit 1
fi

LATEST=`wget -q -O - "$@" http://commondatastorage.googleapis.com/chromium-browser-continuous/Linux_x64/LAST_CHANGE`
LATEST_LINK=http://commondatastorage.googleapis.com/chromium-browser-continuous/Linux_x64/$LATEST/chrome-linux.zip
echo "Chromium Nightly wird eingerichtet, bitte warten..."
curl -# -o $LATEST.zip $LATEST_LINK
unzip -q -o $LATEST -d /opt && rm $LATEST.zip
# Setting permissions
chown -R :users /opt/chrome-linux
find /opt/chrome-linux/ -type f -exec chmod 644 {} \; && find /opt/chrome-linux/ -type d -exec chmod 755 {} \;
chmod 755 /opt/chrome-linux/{chrome,chrome-wrapper}
chmod 4755 /opt/chrome-linux/chrome_sandbox
# Fixes for wrapper
ln -s /lib/x86_64-linux-gnu/libudev.so.1.3.5 /usr/lib/libudev.so.0 > /dev/null 2>&1
mv /opt/chrome-linux/chrome_sandbox /opt/chrome-linux/chrome-sandbox
ln -s /opt/chrome-linux/chrome-wrapper /usr/local/bin/chromium-devel
su `logname` -c "chromium-devel"

Usage: sudo ./script.sh
Vorab als ausführbar markieren: chmod +x script.sh

Hinweis: Ein Update gleicht der Erst-Installation. Vorab Chromium beenden. Das Profil kann zerstört werden!

Script: FFmpeg Snapshot Installer für Ubuntu

FFmpeg

Da ich wieder häufiger mit FFmpeg arbeiten muss und viel zu viel mit den verschiedenen Ubuntu-Derivaten experimentiere, habe ich mir einen „FFmpeg Snapshot Installer“ zum installieren, upgraden und deinstallieren von FFmpeg geschrieben.
 
 
Changelog

  • 16. Mär – ~/bin zu PATH hinzufügen

FFmpeg Snapshot Installer – Vorwort

FFmpeg Script
FFmpeg Script
Das Script überprüft das Betriebssystem auf das Vorkommen des Wortes „Ubuntu“ (~ Kubuntu, Xubuntu, …). Linux Mint und sonstige Derivate werden noch nicht unterstützt.

Installiert wird nur für den lokalen Benutzer. Die Binaries befinden sich nach der Installation im Verzeichnis „~/bin“.

FFmpeg Binaries
FFmpeg Binaries
Die Links („TARGETS“ Array) sind austauschbar, falls es für die Abhängigkeiten Updates geben- oder sich die URL ändern sollte. Zusätzlich wird der Link-Status geprüft: Ist eine Datei nicht mehr vorhanden, so bricht das Script noch vor der Ausführung ab.

Folgende Anwendungen werden vorab kompiliert:

  • Yasm 1.2.0, falls Ubuntu < v13.04, ansonsten via "apt-get"
  • x264 Snapshot
  • FDK-AAC Snaptshot
  • Opus 1.1
  • libvpx 1.3.0

Konfiguration FFmpegs:

--prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" \
--extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac \
--enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis \
--enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab

Die Parameter sind vorwiegend aus dem Ubuntu Compilation Guide übernommen.

Das Script + Benutzung

 

#!/bin/bash
if [ "$(id -u)" != "0" ]; then
	echo "This script must be run as root" 1>&2
	exit 1
fi
if [ $# -lt 1 ]
then
	echo "Usage: $0 install/upgrade/uninstall"
	exit
fi

##############################################
#### some vars, do not rearrange TARGETS! ####
##############################################
CORECOUNT=`grep "^core id" /proc/cpuinfo | sort -u | wc -l`
OS=$(lsb_release -si)
VER=$(lsb_release -sr)
TARGETS=(
'http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz'
'http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2'
'https://github.com/mstorsjo/fdk-aac/zipball/master'
'http://downloads.xiph.org/releases/opus/opus-1.1.tar.gz'
'http://webm.googlecode.com/files/libvpx-v1.3.0.tar.bz2'
'http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2'
)

###################
#### functions ####
###################
function checks {
	if [[ $OS =~ .*ubuntu*. ]]; then
		echo "You are not running an Ubuntu derivate, exiting..."
		exit 1
	fi
	ISCURL=`which curl`
	if [ -z $ISCURL ]; then
		echo "Please install \"curl\"..."
		exit 1
	fi
	echo -en "Checking for dead targets, please wait...\t"
	for i in ${TARGETS[@]}
	do
		LINK_STATUS=$(curl -o /dev/null --silent --write-out '%{http_code}\n' $i)
		if [ $LINK_STATUS = "404" ]; then
			echo -e "\e[00;31m ERR\e[00m"
		        echo "Link $i seems offline, exiting..."
		        exit 1
		fi
	done
	echo -e "\e[00;32m OK\e[00m"
}

function install-ffmpeg {
	echo -en "Preparing system...\t\t\t\t"
		sudo apt-get update > /dev/null 2>&1
		sudo apt-get -y install unzip autoconf automake build-essential libass-dev libgpac-dev \
		libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libx11-dev \
		libxext-dev libxfixes-dev pkg-config texi2html zlib1g-dev libmp3lame-dev > /dev/null 2>&1
	if [ $? -ne 0 ] ; then
		echo -e "\e[00;31m ERR\e[00m"
		exit 1
	fi
	echo -e "\e[00;32m OK\e[00m"
	echo "######################"
	echo "THIS MAY TAKE A WHILE!"
	echo "######################"
        secs=3
        while [ $secs -gt 0 ]; do
                echo -ne "Progress will be spammed to console... $secs\r"
                sleep 1
                : $((secs--))
        done
	mkdir ~/ffmpeg_sources

	if (( $(echo "$VER > 13" | bc -l) )); then
		sudo apt-get -y install yasm
	else
		cd ~/ffmpeg_sources
		wget ${TARGETS[0]}
		tar xzvf yasm-1.2.0.tar.gz
		cd yasm-1.2.0
		./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
		make -j$CORECOUNT
		make install
		make distclean
		export "PATH=$PATH:$HOME/bin"
	fi

	cd ~/ffmpeg_sources
	wget ${TARGETS[1]}
	tar xjvf last_x264.tar.bz2
	cd x264-snapshot*
	./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static
	make -j$CORECOUNT
	make install
	make distclean

	cd ~/ffmpeg_sources
	wget -O fdk-aac.zip ${TARGETS[2]}
	unzip fdk-aac.zip
	cd mstorsjo-fdk-aac*
	autoreconf -fiv
	./configure --prefix="$HOME/ffmpeg_build" --disable-shared
	make -j$CORECOUNT
	make install
	make distclean

	cd ~/ffmpeg_sources
	wget ${TARGETS[3]}
	tar xzvf opus-1.1.tar.gz
	cd opus-1.1
	./configure --prefix="$HOME/ffmpeg_build" --disable-shared
	make -j$CORECOUNT
	make install
	make distclean

	cd ~/ffmpeg_sources
	wget ${TARGETS[4]}
	tar xjvf libvpx-v1.3.0.tar.bz2
	cd libvpx-v1.3.0
	./configure --prefix="$HOME/ffmpeg_build" --disable-examples
	make -j$CORECOUNT
	make install
	make clean

	cd ~/ffmpeg_sources
	wget ${TARGETS[5]}
	tar xjvf ffmpeg-snapshot.tar.bz2
	cd ffmpeg
	PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"
	export PKG_CONFIG_PATH
	./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" \
	   --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --extra-libs=-ldl --enable-gpl \
	   --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libtheora \
	   --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab
	make -j$CORECOUNT
	make install
	make distclean
	hash -r
	echo "Done!"
        echo -e "PLEASE RUN \"\e[00;31mexport \"PATH=\$PATH:\$HOME/bin\"\e[00m\" NOW (copy red command)"
}

function uninstall-ffmpeg {
	rm -rf ~/ffmpeg_build ~/ffmpeg_sources ~/bin/{ffmpeg,ffprobe,ffserver,vsyasm,x264,yasm,ytasm}
	sudo apt-get autoremove autoconf automake build-essential libass-dev libgpac-dev \
	  libmp3lame-dev libopus-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev \
	  libvorbis-dev libvpx-dev libx11-dev libxext-dev libxfixes-dev texi2html zlib1g-dev
	sed -i '/ffmpeg_build/c\' ~/.manpath
	hash -r 
}

function upgrade-ffmpeg {
	rm -rf ~/ffmpeg_build ~/ffmpeg_sources ~/bin/{ffmpeg,ffprobe,ffserver,vsyasm,x264,yasm,ytasm}
	install-ffmpeg
}

##############
#### case ####
##############
case "$1" in

install)
	checks
	install-ffmpeg
	;;
upgrade)
	checks
	upgrade-ffmpeg
	;;
uninstall)
	uninstall-ffmpeg
	;;
*)
	echo "Invalid argument"
	;;
esac

Usage: sudo ./ffmpeg_installer.sh install|upgrade|uninstall
Vorab als ausführbar markieren: chmod +x ffmpeg_installer.sh

Script: Aktuellste Firefox Aurora Version installieren

Gerne teile ich mit euch ein Bash-Script, welches die aktuelle Version des Firefox Aurora Browsers in deutscher Sprache ermittelt, herunterlädt und installiert. Aurora ist anzusiedeln zwischen Nightly und Beta.

Changelog

  • 25. Mär – Neueste Version auswählen, wenn mehrere verfügbar sind

Als Zielverzeichnis für die Installation wähle ich „/opt/aurora“, zudem erstellt das Script einen Anwendungsstarter in „/usr/share/applications“. Profile werden wie üblich im Heimverzeichnis des jeweiligen Benutzers via „.mozilla/“ gespeichert.

Aurora
Aurora
Vorab wird die Architektur des Systems ermittelt. Eine alte Installation wird unter Angabe von Datum und Zeit in „/opt“ gesichert.

Installation

Das Script an beliebigem Ort erstellen:

nano aurora_installer.sh

Und folgenden Inhalt einfügen:

#!/bin/bash
if [[ $UID -ne 0 ]]; then
        echo "$0 muss als \"root\" ausgeführt werden!"
        exit 1
fi
ISCURL=`which curl`
if [ -z $ISCURL ]; then
        echo "Bitte \"curl\" installieren!"
        exit 1
else
AURORA_TEMPRDIR='http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-aurora-l10n/?C=M;O=D'
AURORA_RDIR='http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-aurora-l10n/'

arch=$(uname -m)
 
echo -ne "Neueste Version suchen...\t\t\t"
if [ "$arch" == 'x86_64' ]; then
        AURORA_TNAME=`curl -s $AURORA_TEMPRDIR | grep -m1 -o '"firefox.*de\.linux-x86_64\.tar\.bz2"' | tr -d '"'`
else
        AURORA_TNAME=`curl -s $AURORA_TEMPRDIR | grep -m1 -o '"firefox.*de\.linux-i686\.tar\.bz2"' | tr -d '"'`
fi
echo -e "\e[00;32m OK\e[00m"
AURORA_RTARGET=$AURORA_RDIR$AURORA_TNAME
LINK_STATUS=$(curl -s --head -w %{http_code} $AURORA_RTARGET -o /dev/null)
if [ "$LINK_STATUS" == '200' ] && [ ! -z $AURORA_TNAME ]; then
        echo "Herunterladen und entpacken von $AURORA_TNAME..."
        [ ! -d "/opt/aurora/" ] || mv /opt/aurora /opt/aurora_bak_`date +%e%m%y_%H%M`
        cd /tmp/ && curl -# -o- $AURORA_RTARGET | tar xj
        echo -ne "Installieren und aufräumen...\t"
        cat > /usr/share/applications/firefox-aurora.desktop << "EOF"
[Desktop Entry]
Version=1.0
Name=Firefox Aurora
Comment=Browse the World Wide Web
GenericName=Web Browser
Exec=/opt/aurora/firefox -no-remote %u
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=/opt/aurora/browser/icons/mozicon128.png
Categories=GNOME;GTK;Network;WebBrowser;
StartupWMClass="Navigator","Firefox"
StartupNotify=true
EOF
        cp -r ./firefox /opt/aurora/ && rm -r ./firefox/
        chown -R root:users /opt/aurora
        echo -e "\e[00;32m OK\e[00m"
        echo "Firefox Aurora wurde installiert!"
        echo "Falls der Starter nicht erscheint, bitte \"unity --replace &\" ausführen."
        echo "Falls vorhanden, wurde eine alte Version in \"/opt\" gesichert."
else
        echo "URL ungültig: $AURORA_RTARGET"
fi
fi

Usage: # ./aurora_installer.sh
Vorab als ausführbar markieren: chmod +x aurora_installer.sh