Schlagwort-Archive: Linux

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

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.

Samson Go Mic USB portable

Soeben komme ich nach hause und was steht da vor meiner Tür: meine Bestellung eines großen Versandhauses.

Innerhalb der ominösen Papp-Umverpackung fand ich dann das Objekt meiner Begierde.
Ein Samson Go Mic USB Mikrofon!

Wie man dem letzten Beitrag entnehmen kann, bin ich auf den Geschmack gekommen meinen geistigen Inhalt auf anderen Kanälen zu publizieren. Einer davon ist der Podcast. Ich habe mir zum Ziel gesetzt sowohl alleine als auch in Gemeinschaft Gespräche aufzuzeichnen, Digital aufzuwerten und der Hörerschaft zur Verfügung zu stellen.

Aufgrund einer Empfehlung von Holger Klein habe ich auch gleich ein besseres Mikrofon bestellt. Das in mein Notebook eingebaute lieferte nicht die gewünschte Qualität (es funktionierte nahezu gar nicht).

Die Verpackung ist edel und aufgeräumt. Solide Pappe in einer angenehmen Faltart laden zum auspacken ein. Im Inneren fällt der Blick sofort auf das in samt einem gepackte sehr handliche Mikrofon. Eine erste Berührung macht deutlich: Hier handelt es sich um wertige Verarbeitung. Kühle Metall Haptik und robuste Verarbeitung runden diesen Eindruck ab.

Das Mikrofon selbst ist klein- und schwenkbar und wirkt auf Anhieb so als könnte es die sich im Raum befindlichen Klänge sowohl vor als auch dahinter aufzeichnen. Der stand Fuß ist angenehm schwer und mit dem Gummi Noppen verrutscht es auch nicht auf dem Tisch.

Ein leichter aber bestimmter Zug an der seitlichen Lasche offenbart weiteres Equipment im Inneren. Ein sehr langes USB Kabel, etwas Schellen artiges, eine schwarze Mutter, sowie Bedienungsanleitungen und zugehörige Software runden das Produkt ab. Als besonderes Schmankerl gibt es noch eine robuste wirkende kleine Umverpackungen Form einer Tasche dazu in welches man das zusammengefaltete Mikrofon verstorben kann. Leider passt ein entsprechendes USB Kabel nicht mehr dazu.

Das Mikrofon selbst wird unter MacOS sofort erkannt und kann in den Systemeinstellungen ausgewählt werden. Angenehm fällt auf dass bei einer Übersteuerung die frontale LED rot aufleuchtet.

Ein erster Test innerhalb der MacOS Umgebung zeigt sogleich die doch wohl recht hohe Qualität. Selbst aus größerer Entfernung kann ich ohne großartige Interne Verstärkung in normaler Lautstärke sprechen. Skype Test Anrufe und AudaCity Testaufnahmen machen eine insgesamt sehr hochwertigen Eindruck.

Insofern kann ich mich – und ihr euch hoffentlich auch – auf die nächste Podcast Folge freuen. Diesmal wohnen etwas Hörer Qualität-es wird ja schließlich kein Smartphone benutzt.

20140227-192352.jpg

Apache Webserver mit FastCGI in einfach unter Debian Wheezy

Da es immer wieder vor kommt, dass man einen Webserver installieren muss, habe ich hier mal alle bei mir so üblichen Schritte zusammengefasst. Dabei behandle ich nur die grobe allgemeine Instalaltion wie ich sie gern habe. Nicht mehr! Folgende Punkte sollen erreicht werden:

  • Debian Stable System mit der Option auf Testing Pakete
  • Apache2 Webserver (MPM-Worker) mit ein paar wichtigen Modulen
  • PHP als FastCGI
  • MySQL Datenbank
  • FTP Server
  • Ein paar Sicherheitsallgemeinheiten

1. Grundinstallation

Bei der Grundinstallation achte ich darauf, dass wirklich nichts ausser dem SSH-Server installiert wird. Alles andere wird per default nicht so gemacht wie ich es mir wünsche. Daher nehme ich nur die Konfiguration der Festplatte, des Netzwerkes und der Paketquellen mit.

2. Paketquellen anpassen

Ich nehme direkt zu Beginn den Testing-Zweig in die Paketquellen mit auf:

nano /etc/apt/sources.list

# Testing-Pakete

deb http://security.debian.org/ testing/updates main

deb http://ftp.de.debian.org/debian/ testing main

Anschließend werden werden die Prioritäten angepasst:

nano /etc/apt/preferences.d/priority

Package: *

Pin: release n=wheezy

Pin-Priority: 990

3. Software installieren

aptitude install apache2 apache2-mpm-worker libapache2-mod-fcgid php5-cgi php5-mysql php5-xcache php5-sqlite php5-mcrypt php5-json php5-gd php5-fpm php5-curl mysql-server

aptitude install -t testing vsftpd

4. Software Konfigurieren

Apache2: Module aktivieren

a2enmod rewrite mem_cache fcgid deflate alias

a2dismod php5_cgi

service apache2 restart

usermog www-data -G ftp

FastCGI:

nano /etc/apache2/mods-enabled/fcgid.conf

<IfModule mod_fcgid.c>

AddHandler    fcgid-script .fcgi

FcgidConnectTimeout 20

FcgidIOTimeout              60

FcgidMaxRequestsPerProcess  400

FcgidIdleTimeout            60

FcgidMinProcessesPerClass   0

</IfModule>

VsFTPD: Konfiguration erstellen

listen=YES

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=0022

dirmessage_enable=YES

use_localtime=YES

xferlog_enable=YES

connect_from_port_20=YES

chown_uploads=YES

idle_session_timeout=600

data_connection_timeout=120

nopriv_user=ftp

ftpd_banner=Willkommen zum FTP-Server

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd.chroot_list

allow_writeable_chroot=YES                               #Dieser Punkt ist der Grund weshalb wir testing installiert haben

secure_chroot_dir=/var/run/vsftpd/empty

pam_service_name=vsftpd

rsa_cert_file=/etc/ssl/private/vsftpd.pem

Wichtig ist, das wir die zukünftig verwendeten Shells auch aktivieren, da ansonsten der vsftpd streikt. In der Datei /etc/vsftpd.chroot_list werden alle Benutzer eingetragen die NICHT gechrooted werden sollen.

echo „/bin/false“ >> /etc/shells

Fail2ban

nano /etc/fail2ban/jail.conf

[ssh]

enabled  = true

port     = ssh

filter   = sshd

logpath  = /var/log/auth.log

maxretry = 2

[vsftpd]

enabled  = false

port     = ftp,ftp-data,ftps,ftps-data

filter   = vsftpd

logpath  = /var/log/vsftpd.log

maxretry = 3

Mailserver

Da Debian ja ohnehin schon mit einem Mailserver daher kommt können wir diesen für einfache Aufgaben auch nutzen. In diesem Fall möchte ich einfach einen Mailversand über einen Smarthos realisieren.

dpkg-reconfigure exim4-config

5. Benutzer anlegen

useradd webuser -c „Benutzer fuer dasWebsystem via FTP“ -d /var/www/webseite.de -m -s /bin/false -U

usermod -G ftp && passwd webuser

6. Webseite einrichten

Zunächst einmal legen wir eine virtuelle Konfigurationsdatei an:

nano /etc/apache2/sites-enabled/webseite.de

<VirtualHost webseite:80>

ServerName webseite.de

ServerAdmin webmaster@webseite.de

DocumentRoot /var/www/webseite.de/httpdocs/

<Directory /var/www/webseite.de/httpdocs>

Options +ExecCGI

AddHandler fcgid-script .php

FCGIWrapper /usr/bin/php-cgi .php

AllowOverride All

Order allow,deny

allow from all

</Directory>

ErrorLog ${APACHE_LOG_DIR}/webseite.de_error.log

LogLevel warn

CustomLog ${APACHE_LOG_DIR}/webseite.de_access.log combined

</VirtualHost>

Nun müssen wir noch die Verzeichnisse anlegen. Dies geschieht unterhalb des Homeverzeichnisses des Benutzers:

mkdir /var/www/webseite.de/httpdocs && chown :ftp /var/www/webseite.de/httpdocs

Fazit

Was haben wir bisher erreicht?

  • Wir haben einen zügigen Webserver
  • PHP mit Hilfe von FastCGI ausführt.
  • Der FTP-Server bietet die Möglichkeit Chrootfreie Benutzer zuzulassen
  • Systembenutzer können sich via FTP auf dem Server einloggen und landen in Ihrem Homeverzeichnis
  • Unterhalb des Homeverzeichnisses gibt es ein httpdocs Order der die Webseiten vorhalten wird
  • MySQL speichert seine Tabellen freundlicherweise in einzelnen InnoDB Dateien