June 30, 2010
phpMyAdmin setzt time_zone für Session
Simpler Patch, damit phpMyAdmin für jede Verbindung zu Datenbankservern die Zeitzone setzt. Das war hier erforderlich, weil eine Änderung der default time_zone bei AWS RDB nicht möglich ist.
--- libraries/dbi/mysqli.dbi.lib.php 2010-06-26 12:53:06.000000000 +0200
+++ libraries/dbi/mysqli.dbi.lib.php-new 2010-06-30 16:23:54.000000000 +0200
@@ -137,6 +137,10 @@
PMA_DBI_postConnect($link, $is_controluser);
}
+ // Dirty hack to set session time_zone because we cannot
+ // change default time_zone in AWS RDB.
+ mysqli_query($link, "SET time_zone = 'Europe/Berlin';");
+
return $link;
}
June 18, 2010
EC2 Abuse: Mail auf Port 25
Von unseren Instanzen in EC2 werden viele Mails über einen Smarthost verschickt. Amazon limitiert die Anzahl der Mails von Instanzen auf Port 25 jedoch (aus verständlichen Gründen (Stichwort: Spam)) und empfiehlt den Einsatz von Elastic IPs und die Anmeldung als Mailversender bei ihnen. Für uns kommt das nicht in Frage, da wir ja unseren Smarthost nutzen. Also habe ich schnell Submission (Port 587/tcp) auf dem Smarthost aufgemacht und die EC2-Instanzen liefern nun dahin aus, was Amazon nicht mehr zu beanstanden hat.
June 16, 2010
Internes Portforwarding von 80 auf 8080
iptables -t nat -I PREROUTING --src 0/0 --dst 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 8080
June 9, 2010
BASH function: Alias mit Variablen
Um häufig benutzte, komplizierte Shell-Kommandos abzukürzen, kann man ein kurzes alias definieren. Leider können so keine Parameter bzw. Variablen übergeben werden. Alternativ kann man in seiner .bashrc eine Funktion schreiben:
function sshlnxp () { ssh -A user@lnxp-$*.srv.mediaways.net; }
Möchte man alle fünf Minuten einen Befehl ausführen lassen, bemüht man hierfür üblicherweise cron und schreibt ihm ein */5 in die crontab. Der Befehl wird dann in den Minuten 0, 5, 10, 15 … 55 ausgeführt. Möchte man den Aufruf aber beispielsweise in den Minuten 2, 7, 12, 17 … 57 ausführen, wird cron einem ein 2/5 als Syntaxfehler um die Ohren schlagen. */5 kann auch als 0-59/5 notiert werden. 2-59/5 erfüllt den Zweck, beginnend ab Minute 2, alle 5 Minuten den Befehl auszuführen.
June 8, 2010
mysqldump mit where clause
Soll nur eine Teilmenge einer Tabelle gesichert werden, kann auch dies mit mysqldump erledigt werden. Es bietet hierzu den Parameter —where an, mit dem man eine übliche where clause setzen kann.
mysqldump --where "column=1" dbname tablename
May 28, 2010
EC2: Flash kann X-Domain-Policy nicht laden
Der Flash Player versucht die Crossdomain-Policy erst vom Port 843/tcp zu laden. Bekommt er dort keine Antwort, versucht er es auf dem Service-Port, den es zu kontaktieren gilt. Bei unseren Anwendung im Amazon EC2 konnten wir dabei ein Problem auf Windows-Systemen beobachten (Mac und Linux hatten keine Schwierigkeiten). Der Flash Player fragte auf 843 an, mehrfach, aber erst viel zu spät auf dem Port des Dienstes, der die Policy ausliefert. Der Flash Player hatte bereits vorher die Verbindung gekappt.
Die Ursache ist nicht ganz klar, scheint aber im NATing zu liegen, dass Amazon für die öffentlichen IPs betreibt. Hierbei wird die Anfrage auf Port 843 ausgebremst. Als wir den Port in der Security Group freigegeben haben (ohne dafür einen Service anzubieten), ging die Anfrage durch, wurde vom Server zurückgewiesen und der Flash Player fragte unsere Anwendung auf dem Service-Port wie gewünscht nach der Policy.
EC2: Elastic IP für private Adressen
Die Instanzen im Amazon EC2 bekommen dynamische Hostnamen und IP-Adressen. Zur dauerhaften Adressen kann man Elastic IPs allocieren, die jedoch öffentliche Adressen sind. Will man auf eine andere Instanz in der Cloud zugreifen, möchte man selbstverständlich die lokale IP (RFC1918) nutzen und keine öffentliche (das ist ja auch eine Kostenfrage). Doch Amazon bietet hier eine Möglichkeit: Die Reverse-DNS-Hostname der IP-Adresse wird von den Amazon-Nameservern auf die private Adresse aufgelöst, während er sonst auf die Öffentliche zeigt.
root@domU-xx-xx-xx-xx-xx-xx:~# host 184.73.175.xxx
xxx.175.73.184.in-addr.arpa domain name pointer ec2-184-73-175-xxx.compute-1.amazonaws.com.
root@domU-xx-xx-xx-xx-xx-xx:~# host ec2-184-73-175-xxx.compute-1.amazonaws.com
ec2-184-73-175-xxx.compute-1.amazonaws.com has address 10.253.87.xxx
sw@external:~$ host ec2-184-73-175-xxx.compute-1.amazonaws.com
ec2-184-73-175-xxx.compute-1.amazonaws.com has address 184.73.175.xxx
Mit dem Reverse-DNS-Eintrag der Elastic IP hat man also auch eine statische Adresse für internen Traffic im EC2.
May 21, 2010
chsmbpasswd
#!/bin/bash
# Reads username:password per line in plain text from stdin
# and feeds smbpasswd to add/update users, similiar to chpasswd
while read line
do
username="$(echo ${line} | cut -d: -f1)"
password="$(echo ${line} | cut -d: -f2)"
(echo $password; echo $password) | smbpasswd -s -a $username
done
May 7, 2010
Habe Ubuntu 10.04 (Lucid Lynx) auf meinem Laptop installiert. Dabei habe ich den Aufbau der OpenVPN-Verbindungen vom Terminal mittels des Plugins NetworkManager-OpenVPN in den NetworkManager verschoben. Dummerweise überschreibt dieser die Default-Route und setzt stattdessen das VPN als Gateway. Etwas versteckt, ganz unten auf dem Reiter IPv4 Settings, kann hinter dem Button Routes das Routing geändert werden. Mit einem Haken in der Checkbox vor “Use this connection only for resources on its network” kann das Default-Verhalten von OpenVPN wieder hergestellt werden. Das sollte voreingestellt sein. Als ich einen Bugreport schreiben wollte, mußte ich feststellen, dass das Problem kein neues ist. Der Bug ist schon seit längerem bekannt.