Tag Archive: bash

Snippet: Update-Script „upchk“

Zugegeben, das kleine Update-Script entsprang einer Menge Langeweile und einer verschleppten Magen-Darm-Verstimmung.

Ist aber ganz witzig, denke ich.

sudo nano /usr/local/bin/upchk

Das Script:

#!/bin/bash
TEMPFILE=`tempfile`
LASTUPDATE=`date -r /var/lib/apt/lists/`
echo "Package Installed Upgrade Branch Architecture -" > $TEMPFILE
CUP=`apt-get dist-upgrade -qq -y -s | grep '^Inst '| cut -d' ' -f2- | sed 's/[^a-zA-Z0-9+:~/.-]/ /g' >> $TEMPFILE`
NUP=`cat $TEMPFILE | wc -l`
if [[ "$NUP" -lt 2 ]] ; then
  echo -e "\e[00;32mNo upgrades available.\e[00m"
else
  echo -e "\e[00;31m`expr $NUP - 1` packages upgradeable.\e[00m"
  echo ""
  column -t -s ' ' $TEMPFILE
fi
echo -e "\n\e[00;93mLast update of package lists: \n$LASTUPDATE\e[00m"
rm $TEMPFILE

Usage: upchk
Vorab als ausführbar markieren: chmod +x /usr/local/bin/upchk

Das Ergebnis mit Updates…
upchk_w
…sowie ohne Updates:
upchk_wo

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

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