Continuous Integration: flashplayerdebugger auf Linux-Server

Wer Continuous-Integration-Systeme für Flash- bzw. ActionScript-Projekte verwendet, wie beispielsweise Bitbucket und Bamboo aus dem Atlassian-Universum, möchte auch Unit-Tests (FlexUnit) etc. auf dem Server ausführen lassen. Das ist nicht ganz einfach, da der flashplayerdebugger ein X-Display braucht und nur als 32bit-Variante vorliegt. Ich beschreibe hier die Minimal-Variante mit der wir es unter Debian Wheezy zum Laufen gebracht haben.

Display zur Verfügung stellen

Grundsätzlich gibt es 2 Möglichkeiten FlexUnit „headless“ zu betreiben. Erstens kann man den FlexUnit ANT-Task mittels eines VNC-Servers ein entsprechendes Display bereitstellen und damit arbeiten. Zweitens kann man auch ein Framebuffer-Device per Xvfb bereitstellen, auf dem gearbeitet wird. Nach Beleuchtung beider Mechanismen wurde Xvfb als brauchbarer erachtet:

apt-get install xvfb

Das Paket bietet einerseits das Xvfb-Binary, welches dauerhaft ein Display bereitstellt und das Wrapper-Skript „xvfb-run“, mit dem man Programme in einem separaten Display starten kann (beispielsweise xvfb-run xterm ). Für CI-Umgebungen verwenden wir Xvfb als permanentes Display, da das am ressourcenschonendsten ist. Zu beachten ist, dass Xvfb am besten als der User gestartet wird, unter dem später auch die Tests laufen. Ein entsprechendes Init-Skript erledigt das:

#! /bin/bash
#
### BEGIN INIT INFO
# Provides:             Xvfb framebuffer device
# Required-Start:       $local_fs
# Required-Stop:        $local_fs
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Xvfb framebuffer device
### END INIT INFO

USER="ciuser"
XVFB=/usr/bin/Xvfb
XVFBARGS=":0 +extension RANDR"
PIDFILE=/var/run/Xvfb/xvfb.pid

do_start () {
        echo -n "Starting virtual X frame buffer: Xvfb ..."
        su - ${USER} -c "/sbin/start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS"
        echo "."
}

do_stop () {
        echo -n "Stopping virtual X frame buffer: Xvfb ..."
        su - ${USER} -c "/sbin/start-stop-daemon --stop --quiet --pidfile $PIDFILE"
        echo "."
}

case "$1" in
                start)
                                do_start
                                ;;
                stop)
                                do_stop
                                ;;
                restart)
                                do_stop
                                do_start
                                ;;
                *)
                                echo "Usage: $0 {start|stop|restart}"
                                exit 3
                                ;;
esac

weiterlesen

Click’n’Load mit entfernten JDownloader- oder pyLoad-Instanzen

Wer pyLoad oder JDownloader auf einem Server oder einem entfernten Gerät benutzt, wünscht sich vielleicht die Click’n’Load-Funktion, die das Hinzufügen von Links sehr einfach macht. Um sie nutzen zu können müssen 2 Dinge gemacht werden:

weiterlesen

Plex Media Server: Init-Skript

Ich habe mir für den Plex Media Server ein Init-Skript geschrieben, was meine Anforderungen erfüllt. Es ist nicht perfekt, funktioniert aber ziemlich zuverlässig und reicht für meine Belange allemal.

Fehler oder Verbesserungsvorschläge können gern in die Kommentare geschrieben werden.

#!/bin/sh
### BEGIN INIT INFO
# Provides:          plexmediaserver
# Required-Start:    $syslog $networking
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Plex Media Server
### END INIT INFO

PLEX_BIN_NAME="Plex Media Server"
PLEX_START_SCRIPT="/usr/sbin/start_pms"

[ -r /etc/default/plexmediaserver ] && . /etc/default/plexmediaserver

is_running() {
	pgrep -f "${PLEX_BIN_NAME}" >/dev/null
	[ $? -gt 0 ] && return 1 || return 0
}

do_start() {
	if is_running; then
		echo "Plex Media Server is already running."
	else
		echo -n "Start Plex Media Server: "
		su -l ${PLEX_MEDIA_SERVER_USER} -c "${PLEX_START_SCRIPT} &" >/dev/null 2>&1
		echo "done"
	fi
}

do_stop() {
	if ! is_running; then
		echo "Plex Media Server is not running."
	else
		echo -n "Stop Plex Media Server: "
		for i in $(pgrep -f "Plex Media Server") $(pgrep -f "Plex Plug-in"); do
			kill ${i} >/dev/null 2>&1
			if ps -p ${i} >/dev/null; then sleep 1; kill -9 ${i} >/dev/null 2>&1; fi
		done
		echo "done"
	fi
}

do_status() {
	if is_running; then
		echo "Plex Media Server is running."
	else
		echo "Plex Media Server is stopped."
	fi
}

case "$1" in
	start)
		do_start
	;;
	stop)
		do_stop
	;;
	restart)
		do_stop
		do_start
	;;
	status)
		do_status
	;;
	*)
		echo "Usage: ${0} {start|stop|restart|status}"
		exit 3
	;;
esac

weiterlesen

Linux-Server: Teamspeak installieren

Hier eine kurze Anleitung um Teamspeak auf einem Linux-Server zu installieren. Diese Anleitung ist für die meisten Distributionen gültig.

Als erstes laden wir die Server-Version von der offiziellen Seite herunter und packen Sie auf den Server und entpacken es unter /opt.

tar -C /opt -xvjf /pfad/zum/archiv/teamspeak3-server_linux_<arch>.tar.bz2

Ich habe das Verzeichnis der Einfachheit halber dann einfach in „teamspeak“ umbenannt.

mv /opt/teamspeak3-server* /opt/teamspeak

Anschließend erstellen wir einen User unter dem es dann laufen soll und übereignen die Daten.

useradd -M -d /opt/teamspeak teamspeak
chown -R teamspeak:teamspeak /opt/teamspeak

Teamspeak bringt von Haus aus ein recht umfangreiches Init-Skript mit. Leider kann in diesem kein User eingestellt werden, unter welchem der Dienst laufen soll, weshalb ich selbst ein minimales Startskript geschrieben habe, das als Wrapper für das vorhandene fungiert. Auf debian-basierten Systemen mit SysV-Init-System würde man also folgendes tun:

wget -O /etc/init.d/teamspeak https://raw.githubusercontent.com/misterunknown/teamspeak/master/teamspeak
update-rc.d teamspeak defaults

weiterlesen

Linux: extrem große Dateien bearbeiten

Wer unter Linux mit großen Dateien hantiert, kann nicht immer einen klassischen Editor zum Bearbeiten nutzen. Aktuelles Beispiel bei mir ist ein Datenbank-Dump, der 11 GB groß ist.

Anzeigen und Suchen

Zum Anzeigen von und Suchen in großen Dateien eignen sich die Tools head, tail, less und grep:

# head gibt per default die ersten 10 Zeilen einer Datei aus.
$ head datei.txt
# Die Anzahl der Zeilen ist aber konfigurierbar.
$ head -n 200 datei.txt

# tail gibt die letzten 10 Zeilen einer Datei aus, oder eine definierte
# Anzahl Zeilen.
$ tail -n 50 datei.txt

# less bietet sich an, wenn man erstmal einen Überblick erhalten möchte.
$ less datei.txt
# Zerstören Zeilenumbrüche die Übersicht? Mit -S lassen sich diese verhindern
$ less -S datei.txt

weiterlesen

VirtualBox mit FreeBSD Gast: Kein DHCP

Ich habe auf einem Debian-Server VirtualBox installiert und wollte eine VM mit FreeBSD aufsetzen. Soweit hat auch alles geklappt, allerdings hat FreeBSD keinen DHCP-Server gefunden – die Netzwerkhardware wurde jedoch erkannt. Nach einigem Googlen fand ich den Hinweis, dass es trotzdem sein kann, dass es an der virtualisierten Netzwerkhardware lag. Die AMD-Adapter funktionierten bei mir beide nicht, daher nutze ich jetzt den Intel PRO/1000 MT Desktop (82540EM).

weiterlesen

Debian auf Lenovo U330p installieren

Wenn man Debian oder generell ein Linux-System auf dem Lenovo U330p installieren will, gibt es einige Punkte zu beachten.

Vorbereitungen

Novo-Button
Novo-Button

Es gibt bei Lenovo seit einiger Zeit den sogenannten „Novo“-Button. Beim U330p ist dieser an der linken Seite und ist mit einem Pfeil beschriftet. Wenn man den Computer herunterfährt und diesen Button drückt, kann man unter anderem Einstellungen im BIOS vornehmen. Dort muss folgendes getan werden:

weiterlesen

Debian-Server: Plex Media Server installieren

Plex ist ein kostenloser, closed-source Media-Server mit DLNA-Unterstützung, Transcoding und vielen Apps für Smartphones, Smart-TVs etc.

Im privaten Umfeld mag es ausreichen, das Paket zu installieren und loszulegen. Im Server-Umfeld, vielleicht sogar mit direkter Internetverbindung sollte man einige Sachen besser machen. Da die Software nicht quelloffen ist, stellt sie ein besonderes Sicherheitsrisiko dar. Diese Anleitung hält sich an bestimmte Festlegungen, die ich für meine Server getroffen habe, die Ihr natürlich auf eure Umgebungen anpassen könnt. Grundsätzlich gilt: Wer nicht genau weiß, was er tut, sollte einen solchen Server nicht im Internet betreiben.

Vorbereitungen

Als erstes legen wir einen Benutzer an, unter dem die Software dann laufen soll. Standardmäßig läuft Plex mit Root-Rechten, was im Falle einer Sicherheitslücke äußerst problematisch werden kann. Nicht, dass die Ausführung unter einem anderen Nutzer 100% Sicherheit bringt, aber es ist eine weitere Hürde, die ein eventueller Angreifer zu nehmen hat.

$ mkdir -p /opt/plex
$ mkdir -p /opt/plex/tmp   # dieses Verzeichnis brauchen wir später noch
$ useradd -M -d /opt/plex/ -s /bin/bash plex

Ich möchte, dass der Nutzer sein Home-Verzeichnis unter /opt/ hat, damit relevante Daten des Media-Severs dort liegen. Außerdem weise ich dem Nutzer als Login-Shell eine Bash statts der unter Debian mittlerweile üblichen Dash zu. Die Option -M verhindert nur, dass automatisch ein Homeverzeichnis unter /home/ erstellt wird.

Installation

Nun laden wir uns das das entsprechende Paket auf der Homepage von Plex herunter. Als Debian-Nutzer nehmen wir die „Ubuntu“-Version. Am besten per Rechtsklick -> Linkadresse kopieren und dann per wget  direkt auf dem Server herunterladen:

$ wget https://downloads.plex.tv/plex-media-server/0.9.11.7.803-87d0708/plexmediaserver_0.9.11.7.803-87d0708_amd64.deb

weiterlesen

Debian: Screenshots in LXDE erstellen

Ohne zusätzliche Pakete und Bibliotheken ist es unter LXDE schwierig, einen Screenshot zu erstellen. Hier gibt es eine „Minimal“-Anleitung 😉

Als erstes benötigen wir die Pakete x11-apps (ist zu 99,9% schon installiert) und Imagemagick.

apt-get install x11-apps imagemagick

Das Paket x11-apps beinhaltet das Tool xwd , welches unseren Screenshot macht, aber nur als xwd-Datei abspeichern kann. Deshalb konvertieren wir das Bild (in diesem Fall Imagemagick) in eine PNG. Sofern man eine andere Software nehmen will, um xwd-Dateien nach PNG oder JPG zu konvertieren, kann man das natürlich gern tun.

Dann schreiben wir uns ein kleines Skript, welches entweder einen gesamten Screenshot macht, oder ein einzelnes Fenster „fotografiert“, abhängig vom Parameter „-s“:

$ cat <<EOF > /usr/local/bin/myscreenshot.sh
> #!/bin/sh
> 
> MYSCREENSHOT_FILE="screenshot_$(date +%Y-%m-%d-%H-%M-%S)"
> MYSCREENSHOT_PREFIX=0
> 
> echo $SCREENSHOT_FILE
> 
> while [ -e "~/${MYSCREENSHOT_FILE}_${MYSCREENSHOT_PREFIX}.png" ]; do
>         MYSCREENSHOT_PREFIX=$((MYSCREENSHOT_PREFIX + 1))
> done
> 
> if [ $# -gt 0 ] && [ "$1" = "-s" ]; then
>         xwd | convert - ${MYSCREENSHOT_FILE}_${MYSCREENSHOT_PREFIX}.png
> else
>         xwd -root | convert - ${MYSCREENSHOT_FILE}_${MYSCREENSHOT_PREFIX}.png
> fi
> EOF

weiterlesen

Websharing: Dateiaustausch mit Android-Geräten

Seit einiger Zeit habe ich eine Möglichkeit gesucht, Dateien von verschiedenen Rechnern (Linux und Windows) einfach mit dem Android-Gerät auszutauschen. Natürlich gibt es dir Möglichkeit Dropbox, Google Drive oder ähnliche Internet-Dienste zu verwenden, aber innerhalb des heimischen WLANs sollte das fixer und problemloser gehen.

weiterlesen