Willkommen

Über Mich - Mirko Schulze

ich.jpg

Meine ersten Erfahrungen mit einem Computer machte ich mit einem KC85/4 (Links: Wikipedia, Robotron-net.de) im Alter von *grübel* …ich war noch sehr jung. Natürlich hatte ich damals von Programmierung keine Ahnung und habe mich gewundert, wie meine ältere Schwester bereits kleinere Programme schreibt und größere Programme verändert. Auch als dann nach dem Mauerfall der erste Verwandte der heute üblichen PC's ein 286'er mit unglaublichen 40MByte Festplattenspeicher, hatte ich mit Programmierung immer noch nichts zu tun. Später schwirrte ein 486'er in Haus und so ging es über die Jahre weiter. Dass ich jedoch im Berufsleben in die Informatik gehen würde, hatte sich erst im Hochsommer 1996 ergeben. Ich machte ein einjähriges schulbegleitendes Praktikum bei der Firma Laser Mikro Präzision GmbH in Teltow, wo ich mit der Programmierung im eigentlichen Sinne zum ersten Mal zu tun hatte. Naja so kommt man halt dazu….

Nachfolgend erscheinen die neuesten Einträge aus meinem Blog. Hier dokumentiere ich verschiedene Dinge, welche ich auf meinem Streifzügen durch Web&Welt gefunden habe.

Als überzeugter Potsdamer entsteht hier weiterhin eine Art Mini-Reiseführer. Sicher kann man einen Reiseführer überall kaufen - wer gerne Standard-Touri sein will, kann das gerne machen. Für alle, die mehr sehen wollen, entsteht hier der ultimative Routenplaner für 3 Tage Potsdam. Grundlage der dargestellten Seiten ist die deutsche Wikipedia. Der angezeigte Content wird On-Demand in meine Webseite eingeblendet. Inzwischen scheint das Tool stabil zu laufen und in Kürze kann ich dann mit den eigentlichen Arbeiten beginnen. ;-)

Neues aus meinem Blog

Eigener DynDns Dienst mit der Fritz.Box

Ich bin seit kurzer Zeit stolzer Besitzer einer Fritz Box 7490. Ein echt tolles Gerät, muss ich sagen. Jedenfalls bietet die Box viele Funktionen, die erst einen Sinn ergeben, wenn der Router aus dem Internet erreicht werden kann. Hierfür gibt es schon seit Jahren die DynDNS Dienste diverser Anbieter. Die Fritz.Box wiederum hat die wichtigsten dieser Anbieter voreingestellt, sodass nur noch die eigenen Daten eingegeben werden müssen - und fertig. Früher waren diese DynDNS-Dienste kostenlos und die Hostnamen sind nicht verfallen - im Gegensatz zu heute, wo bei praktisch jedem DynDNS Anbieter die registrierten Hostnamen nach nur einem Monat wieder freigegeben werden.

Jeden Monat sich beim DynDNS Anbieter einzuloggen und den Host zu refreshen liegt mir fern und nebenbei kann es ja auch sein, dass die Anbieter grundsätzlich nach einem Monat für Ihren Service Geld haben wollen.

Daher habe ich nach einer Eigenbau Lösung gesucht. Praktisch alle gefundenen Anleitungen im Netz einen DynDNS Dienst aufzubauen sind gruselig. Entweder muss Mysql für den DNS Server installiert sein, oder die so genannte Lösung ermöglicht keine echte Namenesauflösung, wie es jeder semi-professionelle DynDNS Dienst macht. Jedoch habe ich einen sehr guten Beitrag im Netz gefunden, der mir die richtigen Hinweise zur Lösung gab. Hier nochmal vielen Dank an Martin von (http://www.thesysadmin.net/eigenen-dyndns-server-betreiben/)

Beispiel: Die Domain schulzemirko.de soll eine neue Subdomain erhalten z.B. home.schulzemirko.de. Beim Aufruf von home.schulzemirko.de (Internet Explorer, Firefox etc) soll die automatisch die externe IP meiner Fritz.box aufgelöstt werden, die mein Provider ihr gegeben hat.

Was braucht man alles hierfür:

  1. Webserver mit Möglichkeit die DNS-Einträge selbst zu steuern
  2. Fritz.box 7490 (viele andere Router müssten es auch können)
  3. Handwerkliches Geschick (Konfigurationsskripte etc.)

Im Prinzip bin ich genauso vorgegangen, wie Martin:

Installation der Pakete auf dem Webserver

Nachfolgender Befehl installiert den DNS Server bind

apt-get install bind9 bind9-doc 
Einrichten des DNS Servers

In der Datei /etc/bind/named.conf.options werden folgende Eintragungen gemacht, welche jedoch für den jeweiligen Einsatz (je nach Provider) angepasst werden muss.

        forwarders {
                81.169.163.106;
                81.169.163.104;
        };

        allow-transfer {
                81.169.163.106;
                81.169.163.104;
        };

Die forwarders-Adressen geben an, welche Server lokal unbekannte Domains auflösen sollen. Die allows-transfer-Adressen geben an, welche Server die lokal bekannten Domains spiegeln dürfen. Hier werden die DNS-Server der übergeordneten Domain (z.B. schulzemirko.de) angegeben.

Einrichten der lokalen Namensauflösung auf dem Server

Die Datei /etc/resolv.conf wird wie folgt angepasst.

domain schulzemirko.de
nameserver 85.214.147.21
#nameserver 81.169.163.106

Ob es unbedingt nötig ist, hier die Domain anzugeben weiß ich nicht. Wichtig ist es den lokalen DNS Server hier einzutragen und den alten auszukommentieren.

Einrichten der DNS Zone

In der Datei etc/bind/named.conf.local wird folgender Block hinzugefügt.

zone "schulzemirko.de" in {
  type master;
  file "schulzemirko.de.zone";
  update-policy {
    grant home.schulzemirko.de name home.schulzemirko.de A;
  };
};

In der 3. Zeile verweist die zone „schulzemirko.de“ auf die Konfigdatei „schulzemirko.de.zone“, welche im Verzeichnis /var/cache/bind/ abgelegt wird. Sie hat bei mir folgenden Inhalt:

$ORIGIN .
$TTL 86400      ; 1 day
schulzemirko.de         IN SOA  ns1.schulzemirko.de. root.schulzemirko.de. (
                                201407354  ; serial
                                3600       ; refresh (1 hour)
                                7200       ; retry (2 hours)
                                21600      ; expire (6 hours)
                                3600       ; minimum (1 hour)
                                )
                        NS      ns1.schulzemirko.de.
$ORIGIN schulzemirko.de.
*                       A       85.214.147.21
$TTL 60 ; 1 minute
home                    A       77.185.106.26
Erstellen der DynDNS Funktionalität

Bisher haben wir lediglich den DNS Server auf unseren Webserver eingerichtet. Jetzt erfolgt das eigentlich interessante: Wir müssen es mit ein paar Skripten schaffen, eine beliebige IP für home.schulzemirko.de zu setzen.

Erzeugen von Keys für das DNS Update

Mit dem Befehl erzeugen wir uns einen Key. Im Key enthaltene Leerzeichen sollten entfernt werden.

sudo dnssec-keygen -a HMAC-MD5 -b 512 -n HOST home.schulzemirko.de

Der erzeugte Key wird nun mit ein paar Konfigurationszeilen in die /etc/bind/named.keys eingetragen. Der key kommt dabei in die Zeile mit dem Schlüssel „secret“.

key home.schulzemirko.de {
  algorithm     HMAC-MD5;
  secret "6yDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs0x8QxHsXXXXXXXXXXXXXXXXXXXXXXXXVcx4fKQcVYXXXXX==";
};

Nun muss die Datei /etc/bind/named.keys in de Konfig eingebunden werden. Dies geschieht über folgende Zeile, welche der Datei /etc/bind/named.conf hinzugefügt wird.

include "/etc/bind/named.keys";

Anschließend werden die Rechte an den Dateien gesetzt:

chown root.bind /etc/bind/named.keys
chmod 640 /etc/bind/named.keys

Anschließend werden die Update-Skripte erzeugt. Ich benötige zwei Stück: Das eigentliche Shell-Skript, welches auf dem Server lokal aufgerufen (Zum Debugging wichtig) werden kann und das PHP Skript, welches über den Webserver aufrufbar ist.

Shell-Skript

Das Shell-Skript habe ich unter /srv/dyndns/update.dyndns.sh abgelegt. (Ausführungsrechte setzen!)

server=ns1.schulzemirko.de
zone=schulzemirko.de
host=home
secret="6yDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs0x8QxHsXXXXXXXXXXXXXXXXXXXXXXXXVcx4fKQcVYXXXXX=="

ip=$1

cat <<EOF | nsupdate
server $server
zone $zone.
key $host.$zone $secret
update delete $host.$zone.
update add $host.$zone. 60 A $ip
send
EOF

Das Tool benötigt als einzigen Parameter eine IP Adresse. Theoretisch könnte man hier ansetzen und weitere hosts oder auch IPv6 Einträge updaten. Dazu muss das Skript nur minimal angepasst werden. Die Zeile

update add $host.$zone. 60 A $ip

führt das Update durch. Die 60 gibt hier die TTL an, nach der ein Eintrag in den Caches verfällt und neu vom DNS Server geladen werden muss. Siehe auch TimeToLive Domain Name System

Sofern das Programm nsupdate nicht installiert ist, müssen die dnsutils installiert werden, die das Tool enthalten.

apt-get install dnsutils
PHP Skript

Das über die Fritzbox aufrufbare Skript kann an einer beliebigen Stelle auf dem Webserver abgelegt werden. In meinem Beispiel habe ich dies unter htdocs/dyndns.update.now.php abgelegt. Auch hier sind wieder die Berechtigungen richtig zu setzen, da das PHP Skript sonst nicht ausführbar wäre.

// Zugangsdaten
$user = 'mschulze';
$passwort = 'mschulzespassword';

// skript
$skriptfile='/srv/dyndns/update.dyndns.sh';
$ipv4 = $_GET['addressv4'];
$ipv6 = $_GET['addressv6'];
if($_GET['user'] == $user && $_GET['pass'] == $passwort) {
  if (!empty($ipv4)){
  echo("<p>IPv4: $ipv4</p>");
  $cmd = $skriptfile . ' ' .$ipv4;
  exec($cmd);
  }
} else {
  echo('Zugangsdaten falsch');
}
?>
Einrichtung an der Fritz.Box

Man muss nun die URL des Skriptes (bei mir http://www.schulzemirko.de/dyndns.update.now.php) ermitteln und kann dies in der Fritz.box einrichten:

Die Update-URL habe ich wie folgt angegeben: http://www.schulzemirko.de/dyndns.update.now.php?user=<username>&pass=<pass>&host=<domain>&addressv4=<ipaddr>&addressv6=<ip6addr>

Sicherheitsbedenken & Weitere Verbesserungen

Einige der Übergabeparameter etc. lassen sich mangels Verschlüsselung leicht abgreifen oder manipulieren. Grundsätzlich wäre eine https Verschlüsselung zum PHP Skript sinnvoll. Weiterhin wird die Domain der die Übergabeparameter nicht ausgewertet, bzw. benutzt. dies führt dazu, dass die Skripte nur die eine hart-codierte Domain manipulieren können. Wie dem auch sei. Für das semiprofessionelle Umfeld reicht es völlig aus. ;)

Erfahrungen aus Praxis

Nun verwenden die DNS Server im Internet alle Caches, um die Namensauflösung zu beschleunigen. Dies ist für statische DNS Einträge auch sinnvoll. Für den DynDNS Anwendungsfall jedoch möchte man, dass eine neu gesetzte IP-Adresse möglichst ohne Verzögerung den via DNS anfragenden Clients ausgeliefert wird. Hierbei spielen die Einträge in der Zonendatei eine Rolle. In meiner Konfiguration hatte ich im Worst-Case noch für ca. 1 Minute die alte Adresse, bevor die neue vom Client ermittelt werden konnte.

ThisIsAFuckingMSIE

Meine Streifzüge durch das Internet trieben mich heute zur Webseite des Instituts für Angewandte Informatik e. V. an der Universität Leipzig. Hin und wieder schaue ich mir auch mal den Quelltext einiger Seiten an. Im konkreten Fall, fiel mir doch prompt die Erkennungsroutine für den Microsoft Internet Explorer (MSIE) auf. Sollte ein Besucher mit dem MSIE surfen, wird diese nette Variable true gesetzt: ThisIsAFuckingMSIE

<script language="JavaScript" type="text/javascript">
	var ThisIsAFuckingMSIE = false;
</script>
<!--[if IE]>
	<script language="JavaScript" type="text/javascript">
		var ThisIsAFuckingMSIE = true;
	</script>
<![endif]-->

Mysql root Passwort vergessen?

Wegen meines bevorstehenden Serverumzuges habe ich krampfhaft versucht mich an mein mysql root passwort zu erinnern. Naja der Masse an Passwörtern ist mir dies nun dann nicht wirklich gelungen. Dafür habe ich aber eine Lösung für mein Dilemma gefunden. Einfach das MySQL Passwort neu setzen!

Linux Kommando Beschreibung
/etc/init.d/mysql stop Mysql stoppen
mysqld_safe –skip-grant-tables & Mysql im SAFE-Mode und deaktivierter Berechtigungsprüfung starten
mysql -u root Ohne Passwort bei Mysql anmelden
mysql> Das ist die Mysql-Kommandozeile
mysql> use mysql; Zur Mysql-Db wechseln
mysql> update user set password=PASSWORD(„newrootpassword“) where user='root'; Neues Passwort für den root User setzen. Eventuell sind die Anführungszeichen beim Passwort, als auch beim User anzupassen, da diese durch die verschiedenen System (hier insbesondere mein WIKI)modifiziert wurden.
mysql> flush privileges; Die neuen Berechtigungen einlesen… Ich frage mich ob der Schritt notwendig ist
mysql> quit Mysql verlassen
/etc/init.d/mysql stop Mysql (noch im SAFE-Mode) stoppen
/etc/init.d/mysql start Mysql normal starten
mysql -u root -p Bei Mysql mit dem neuen Passwort newrootpassword anmelden

Grausamkeiten wie PHP

Beim Update von Magento Commerce auf ein aktuelles System mit aktuellem PHP flog mir doch prompt alles um die Ohren, da die Entwickler von PHP mal wieder signifikante Änderungen an einigen Funktionen vorgenommen haben.

Es fing mit diesem harmlosen Fehler an: Fatal error: Method Varien_Object::__tostring() cannot take arguments in .. lib/Varien/Object.php on line 488

Auf der Suche nach der Ursache entdeckte ich schnell einen Thread im Magento-Board. Schließlich landete ich auf der PHP Seite, wo mir minimale Inkompatibelitäten bei einem Versionssprung auf PHP 5.3 prophezeit wurden.

Naja am heftigsten fand ich dann aber den netten kleinen Hinweis, dass goto neuerdings ein reserviertes Wort ist. Man glaubt es nicht, aber die PHP - Entwickler haben doch tatsächlich dieses unnütze und absolut sinnlose goto

  1. eingebaut
  2. diese Schandtat dokumentiert (Ich würde mich nicht mehr auf die Straße trauen)
  3. mit einem absolut sinnlosen Beispiel diese Unsinnigkeit unterstrichen
  4. und mit einem lustigen Comic das ganze so ziemlich an den Rand der Ernsthaftigkeit gebracht!

Wer bitte programmiert sowas:

for($i=0,$j=50; $i<100; $i++) {
  while($j--) {
    if($j==17) goto end; 
  }  
}
echo "i = $i";
end:
echo 'j hit 17';

Jedenfalls frage ich mich, welcher Entwickler Bedarf für eine solche goto Funktion hat.

Bruchbude gesucht

Ohne Worte

home.txt · Zuletzt geändert: 2011/03/22 03:46 (Externe Bearbeitung)
[unknown link type]Nach oben
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0