Archiv der Kategorie: Shell

Debian: Autologin + Using screen + using ssh

I wished to use my raspberryPi with a tft touch panel but want to see my ssh session on this display. So here is my idea:

1. start an autologin with my user account after boot
2. every user login checks if screen is alive otherwise it starts a session
3. after ssh-login, just need to type screen -X NameOfScreen
4. …
5. Profit!

sudo vi /etc/inittab
change this line of tty1 to:

1:23:respawn:/sbin/rungetty tty1 -u root — login -f miro

vi ~/.bashrc
add this line at the end:

if ! screen -list | grep -q „NameOfScreen“; then
screen -S NameOfScreen
fi

Here is my result, left raspberryPi, right a console with ssh session 😉

Of course, better ideas are welcome!

Bash on two screens

OpenRheinRuhr 2014 – Tag 2

Da wir aus logistischen Gründen nicht gemeinsam hingefahren sind, war Jörg also am ersten Tag und ich am zweiten Tag bei der OpenRheinRuhr 2014 in Oberhausen.

Es war an beiden Tagen leider etwas „ruhiger“ als die letzten Jahre, trotzdem waren auch diesmal wieder nette Leute, Themen und Stände dabei.

Holger Jakobs hatte das Thema „C++11 und C++14 – Was bringen die neuen Standards?“ vorgestellt und ich war doch recht positiv überrascht über einige Änderungen. Endlich kann ich meine Matrix vernünftig verschieben indem ich einfach die Adresse ändere (hrhr). Holger war aber auch ein sehr guter Redner.

Unter anderem war aber auch der Vortrag von Sarah Julia Kriesch zum Thema OpenSuse 13.2 recht aufschlussreich. OpenSuse scheint nach wie vor ein großes Thema in der europäischen Community zu sein und es war auch irgendwie amüsant zu hören wie doch eigentlich jeder meiner Gesprächspartner seinen ersten Linux-Kontakt über Suse gefunden hat. Es war damals halt einfach und bunt. Sarahs positive Meinung zu KDE kann ich aber nicht teilen 😛 XFCE4 rulez!

Harald Koenig hatte aber danach den Vogel abgeschossen und gezeigt was für verrückte Dinge man mit Strace machen kann. Es ist eine einfache und geniale Art um mal hinter die Kommandos in der Konsole zu kommen und selbst zum Auffinden von Fehlern ist es genial. Er löste auch gleich mal das Problem mit dem „, ‚ sowie „/“ und zeigte die Unterschiede.  Großartig und genug zu Lachen gab es auch.

Ansonsten gab es noch ein paar schöne Stände und wie gesagt gute Gespräche. Ein paar Jungs hatten sich über einen RaspberryPi, WLAN-Stick und Motoren ferngesteuerte Pis gebaut (Apache, PHP und über Buttons dann bash-Befehle loshauen … geile Sache!).

OpenSuse war vertreten, Debian, es gab Mate(!) und die Orga war wie jedes mal gut organisiert 😉 Danke nochmals!

Ich würde mich wahnsinnig freuen wenn es 2015 wieder ein ORR gibt und so wie es ausschaut ist die Chance für einen eigenen Vortrag nicht schwer.

Wenn ja, wir sind wieder dabei (und hoffentlich mal unverpeilt und unverplant als Team, gell Jörg?).

Batch Umwandlung von Videos unter Linux/BSD

Als leidenschaftlicher Medienjunkie sammelt sich das ein oder andere Video auf meinen Datentresoren. TV-Aufnahmen werden verschoben, Vorträge gesammelt und so kommt ein beachtliches Arsenal an Videomaterial zusammen.

Nun bin ich nicht der Typ der alles in HD 1080p haben muss und schon gar nicht bei DVB-T Aufnahmen (die es ohnehin nicht mitbringen). Also jage ich nachfolgendes Skript über meine Screen Session um sämtliches Material in einem Ordner in ein platzsparenderes Format umzuwandeln. Dabei gehe ich den Weg des geringsten Wiederstand und nehme einfach eine Eingangsdatei und konvertiere diese in x264 Video mit ac3 Ton. Keine Anpassung von Ratio oder Auflösung. wer möchte kann das gern ergänzen. Dazu nutze ich der Einfachheit halber ffmpeg und schreibe die fertigen Dateien in einen entsprechenden Order um eine Unterscheidung machen zu können. Natürlich ersetze ich dabei die Dateiendungen.

In diesem Fall arbeite ich gezielt AVI Dateien ab. Wenn ich allerdings meine TV Aufnahmen bearbeite ersetze ich das .avi durch ein .ts.

for i in $(ls *.avi | sed -r -e ’s/(.*)\.(.*)/\1/‘);
do
ffmpeg -i $i.avi -c:v libx264 -preset slow -b:v 1000k -c:a ac3 -b:a 128k fertig/$i.mkv;
done

Mailserver Checkskript

#!/bin/sh
HELOSERVER=web,de
MAILFROM=info@worlddomination.de
RCPTTO=keine@aol.com
SERVER=Mail.deinserver.de
( echo „HELO $HELOSERVER“
sleep 2
echo „MAIL FROM:$MAILFROM“
sleep 2
echo „RCPT TO:$RCPTTO“
sleep 2
echo DATA
sleep 2
echo „Subject:Test-Mail!“
sleep 2
echo „Inhalt der Test-Mail!“
sleep 2
echo .
sleep 2
echo QUIT
) | telnet $SERVER 25

Paketauswahl von auf ein neues System transportieren

Dieser Tip dient mir als Gedächnisstütze.

Möchte man eine vorhandene Debian installation mit dem Paketbestand auf eine neue Maschine kopieren, so reichen um grunde genommen vier einfache Schritte.

  1. auf dem Quellserver führen Sie dpkg –get-selections > Paketliste.txt aus.
  2. Die erstellte Liste wird als Textdatei auf den Ziel server übertragen
  3. Auf dem Zielserver führt man dpkg –set-selections < /pfad/zur/Textdatei/vom/Quellserver aus
  4. anschließend auf dem Zielserver apt-get -u dselect-upgrade

Auf diesem Weg überträge man die installierte Paketauswahl einfach und schnell auf ein weiteres System

Debian mit cron-apt sicher halten

Der geneigte Administrator hat bei der Wahl seiner Sicherheitsstrategie immer wieder aufs neue elementare Dinge zu beachten. Zum einen muss er Augen und Ohren offen halten um Sicherheitlöcher mitzubekommen, zum anderen muss er sich immer wieder aufs neue Zeitfenster schaffen in denen er die entsprechenden Sicherheitsupdates auch einspielt.

Letzteres findet in aller Regel nach Feierabend und/oder Nachts statt.

Da ich von meiner Tendenz her eher zu den fauleren Administratoren gehöre und mich lieber mit der Arbeit an und mit Systemen anstatt mit dem Stopfen von Löchern beschäftige, kommt mir ein Programm wie cron-apt grade recht.

Mein freundlicher Arbeitskollege, der sich aktuell mit einer möglichst angenehmen Art und Weise des aktuell haltens unserer Serverlandschaft beschäftigt, wies mich darauf hin. Es handelt sich letztendlich nur um ein kleines Tool und einen zusätzlichen Cronjob, welcher die eingestellte Auswahl an Software aktuell hält und ggf. Downloads oder auch gleich (wie bei mir) die installation ausführt.

Da es mir primär um Sicherheitsupdates geht, gibt es einige Anpassungen die von der Standardinstallation abweicht. Diese lassen sich aber schön einfach zusammenfassen – ganz wie ich es mag 🙂

Installation

apt-get update && apt-get install cron-apt

Konfiguration

In diesem Beispiel werden nur Security Updates gesucht und installiert.

cat /etc/apt/sources.list | grep security > /etc/apt/sec-sources.list

cat > /etc/cron-apt/config << EOF
OPTIONS=“-q -o Dir::Etc::SourceList=/etc/apt/sec-sources.list“
MAILON=“upgrade“
MAILTO=“deine@adresse.de“
EOF

und zu guter letzt noch

cat > /etc/cron-apt/action.d/3-download << EOF
autoclean -y
dist-upgrade -y -o APT::Get::Show-Upgraded=true
EOF

Damit erreichen wir folgendes:

  • Es gibt einen Cronjob um 4 Uhr morgens (standard)
  • Es gibt eine zusätzliche apt-sources list nur für Sicherheitsupdates die von Cron-apt genutzt wird.
  • Updates werden heruntergeladen und auch gleich installiert
  • Es findet eine Bereinigung statt, sodass APT die Festplatte nicht sonderlich voll müllt.
  • Ihr bekommt (bei eingerichtetem MTA) eine Mail über die Updates, welche durchgeführt wurden.

Vielen Dank an MM für diese Steigerung der Lebensqualität.

MySQL Magic und datadir Wechsel

Manchmal hat man es mit merkwürdigen Verhaltnsweisen einer Datenbank wie MySQL zu tun.

So zum Beispeil wenn die Engine InnoDB genutzt wird. Diese ist total toll und auch transaktionssicher. Nur brauchen die wenigsten Anwendungen diese Sicherheit und wollen lieber schneller und/oder schlanker sein.

An dieser Stelle wird man bei InnoDB mit großen Dateigrößen überrascht und bekommt mit unter Performanceschwierigkeiten. Ich habe mir viele Gedanken dazu wie man etwas derartiges Lösen kann. Fest steht, dass die Datenbanken und mehrere Faktoren größer sind und man nur bedingt die Möglichkeit bestitzt hier zu tunen ohne die Hardware anzupassen (zumindest ab einer gewissen Größenordnung).

Normalerweise sollte der mysqlcheck Befehl dabei helfen die Geschwindigkeit und „Ordentlichkeit“ zumindest ein kleines Stück weit bezubehalten.

Nicht immer ist das aber ausreichend um die Dateigröße und auch die Geschwindigkeit zu steigern. Letztendlich habe ich keinen anderen Weg gefunden als die komplette Datenbank zu exportieren und anschließend wieder zu importieren. Das Ergebnis vor weg ist eine um den Faktor 13 kleinere Datenbank geworden.

Zunächst sollte man sich vor Augen führen, wie große die Datenbanken wirklich sind:

mysql -u root -p -e ’select table_schema „Database“,round(sum(data_length+index_length)/1024/1024,4) „Size (MB)“ from information_schema.tables group by table_schema;‘ > /root/databasesize.txt

In der Datei databasesize.txt stehen alle Datenbanken mit Namen und der entsprechenden Größe.

Zunächst einmal werden alle Datenbanken gecheckt:

  • mysqlcheck –all-databases -u root -p –optimize –auto-repair

Anschließend wird die Datenbank exportiert

  • mysqlcheck –all-databases -u root -p –all-databases > /root/Sicherung.sql

Ist die Sicherung erledigt fährt man den MySQL dienst herunter

/etc/init.d/mysql stop

und kann man sich (vielleicht auch zur Sicherheit) einen neuen Speicherort für die Datenbanken aussuchen. Diese stellt man in der Datei /etc/mysql/my.cnf ein. Dort legt man sich einfach einen neuen Eintrag für das datadir an.

#datadir = /var/lib/mysql
datadir = /neuer/speicherort/lib/mysql

Möchte man bei InnoDB bleiben, so kann es interessant sein den Eintrag

innodb_file_per_table = 1

in der Sektion [mysqld] hinzuzufügen.

Wichtig ist, dass der neue Speicherort auch von dem Benutzer und der Gruppe mysql genutzt werden kann  (chmod mysql:mysql /neuer/speicherort/lib/mysql). Dorthin kopiert man die vorhandene MySQL Datenbank

cp /var/lib/mysql/mysql /neuer/speicherort/lib/mysql

Somit kann man sich sicher sein, dass man sich auch wieder einloggen kann. Nun kann man den den Dienst wieder starten

/etc/init.d/mysql start

und die Datenbank einlesen:

mysql -u root -p < /root/Sicherung.sql

Man kann nun zuschauen, wie die Datenbankan erneut angelegt werden.

Da ich hier beschreibe wie man von zum Beispiel InnoDB auf MyISAM kommt, fehlt noch die Konvertierung der Tabelle auf das gewünscht Format. Dazu lassen wir uns von MySQL ein Skript generieren:

mysql -u root -p -e ’select concat(‚alter table ‚,table_schema,‘.‘,table_name,‘ engine=MyISAM;‘) from information_schema.tables where engine = ‚InnoDB“ > /root/altertabletomyisam.sql

und lesen es erneut ein:

mysql -u root -p < /root/altertabletomyisam.sql

Nun rattert MySQL die ganzen Tabellen durch und erzeugt uns feine MyISAM Tabellen.

Wenn man genug Platz hat, dann kannn man den letzten Schritt schon vor dem Export der Datenbank machen, denn es werden neue Tabellen erzeugt und die alten nicht gelöscht.

Es gibt natürlich noch andere Wege. Einen habe ich hier gefunden.

Mehrere PHP Versionen innerhalb von Plesk 11.5

Bei der Arbeit mit Plesk kann es sinnvoll sein mehrere unterschiedliche Versionen von PHP innerhalb von Plesk zur Verfügung zu haben. Zum einen erleichtert es doch immens die Arbeit bei der Migration von Webseiten, zum anderen kann man so individueller auf die Bedürfnisse der Umgebung eingehen. Ziel ist es die jeweils zu verwendende PHP Version innerhalb des Plesk Panels auswählen zu können.

Grundsätzlich werden alle PHP Versionen als FastCGI zur Verfügung gestellt.

Das diese Pakete nicht vorkompiliert zur Verfügung stehen muss selbst hand angelegt werden. Hier gibt es diverse Anleitungen im Netz wie man unter Debian das alle Voraussetzungen schafft um ein sauberes Kompilat zu erhalten. Als hilfreich hat sich folgende Umgebung herausgestellt:

apt-get install apache2-suexec libpcre3-dev libpcre++-dev libpng12-dev libbz2-dev libcurl4-openssl-dev libc-client2007e-dev libjpeg-dev libgif-dev libgif4 libpthread-stubs0 libpthread-stubs0-dev libx11-dev libxau-dev libxcb1-dev libxdmcp-dev libxpm-dev x11proto-core-dev x11proto-input-dev x11proto-kb-dev xtrans-dev libxml2-dev libmysqlclient-dev libfreetype6-dev build-essential make wget build-essential

An dieser stelle muss nach Bedarf ergänzt werden, was man braucht oder aber eben nicht.

Nun fangen wir an mit der Einrichtung von PHP 5.3:
cd /usr/src
wget http://de1.php.net/get/php-5.3.28.tar.gz/from/this/mirror -O php.tar.gz
tar xzvf php.tar.gz
cd php-5.3.28

ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a

./configure –prefix=/usr/share/php53 –datadir=/usr/share/php53 –mandir=/usr/share/man –bindir=/usr/bin/php53 –with-libdir=lib/x86_64-linux-gnu –includedir=/usr/include/php53 –sysconfdir=/etc/php53/apache2 –with-config-file-path=/etc/php53/apache2 –with-config-file-scan-dir=/etc/php53/conf.d –enable-libxml –enable-session –with-pcre-regex=/usr –enable-xml –enable-simplexml –enable-filter –disable-debug –enable-inline-optimization –disable-rpath –disable-static –enable-shared –with-pic –with-gnu-ld –with-mysql –with-gd –with-jpeg-dir –with-png-dir –with-xpm-dir –enable-exif –with-zlib –with-bz2 –with-curl –with-ldap –with-mysqli –with-freetype-dir –enable-soap –enable-sockets –enable-calendar –enable-ftp –enable-mbstring –enable-gd-native-ttf –enable-bcmath –enable-zip –with-pear –with-openssl=/usr/ –with-imap –with-imap-ssl –with-kerberos –enable-phar –enable-pdo –with-pdo-mysql –with-mysqli

make
make test
make install

Wenn alles durchgelaufen ist, erhalten wir eine interessante Übersicht:
Installing PHP SAPI module:       cgi
Installing PHP CGI binary: /usr/bin/php53/
Installing PHP CLI binary:        /usr/bin/php53/
Installing PHP CLI man page:      /usr/share/man/man1/
Installing build environment:     /usr/share/php53/lib/php/build/
Installing header files:          /usr/include/php53/php/
Installing helper programs:       /usr/bin/php53/
program: phpize
program: php-config
Installing man pages:             /usr/share/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment:      /usr/share/php53/lib/php/
[PEAR] Archive_Tar    – already installed: 1.3.11
[PEAR] Console_Getopt – already installed: 1.3.1
[PEAR] PEAR           – already installed: 1.9.4
Wrote PEAR system config file at: /etc/php53/apache2/pear.conf
You may want to add: /usr/share/php53/lib/php to your php.ini include_path
[PEAR] Structures_Graph- already installed: 1.0.4
[PEAR] XML_Util       – already installed: 1.2.1
/usr/src/php-5.3.28/build/shtool install -c ext/phar/phar.phar /usr/bin/php53
ln -s -f /usr/bin/php53/phar.phar /usr/bin/php53/phar
Installing PDO headers:          /usr/include/php53/php/ext/pdo/

Das ist aus dem Grund interessant, weil es und etwas anschaulicher zeigt wo unsere
Datein liegen.

Nun kopieren wir noch die Beispielkonfigurationsdatei:
cp php.ini-production /etc/php53/apache2/php.ini

Wenn das erledigt ist, können wir Plesk mitteilen, wo es unser neues PHP findet, wie es heißen soll und was es damit anfangen soll:

/usr/local/psa/bin/php_handler –add -id PHP-5.3.28 -displayname NEWPHP-5.3 -path /usr/bin/php53/php-cgi -type fastcgi -phpini /etc/php53/apache2/php.ini

Haben wir das erledigt brauchen wir einfach nur noch unseren Apache neu starten und haben in den Hostingeinstellung der Pleskdomain unsere neue Version PHP mit dem Namen NEWPHP-5.3 zur Verfügung.

 

Quellen:

  • http://massivelydigital.com/run-two-versions-of-php-on-one-plesk-11-server/
  • http://blogs.reliablepenguin.com/2013/10/01/plesk-11-5-with-multiple-php-versions
  • http://zgadzaj.com/how-to-install-php-53-and-52-together-on-ubuntu-1204
  • http://wiki.apache.org/httpd/php-fcgid
  • http://www.soeren-hentzschel.at/technik/linux-server/2013/05/17/php-5-3-und-5-4-unter-debian-7-wheezy-parallel-installieren/

DNS Zonen anhand von Master finden

Ist man auf einem unixoiden System unterwegs und will sich auf einem großen Nameserver die Liste aller Zonen aus der Named-conf anzeigen lassen, welche einen bestimmten Master haben, so kann man das ziemlich elegant mit folgender Zeile tun:

grep -i -B 5 „IP-DES-MASTER-SERVERS“ etc/named.conf | grep -i  zone | grep -v \# | cut -d \“ -f 2 | sort -u

Es wird die named.conf ausgelesen und nach dem Master Server gesucht und zusätzlich 5 darüberliegende Zeilen mit ausgegeben. Diese Zeilen durchsuchen wir nach dem Wort „zone“ und filtern im zweiten Schritt alle auskommentierten Zeilen heraus. Damit fertig geht es weiter und wir trennen den Text nach Anführungszeichen und lassen uns nur alles dazwischen in geordneter Form ausgeben. So erhalten wir eine Liste die wir auch gern für andere Dinge verwenden können.