Archive
[TwitPic] Photo vom 07.06.2010 um 16:29
Nach gefühlten 10 Jahren ist die Restaurierung vom #Charlottenburger #Tor fertig! #berlin
Gepostet vom iPhone
[TwitPic] Photo vom 06.06.2010 um 20:00
Projekt Pause
Ich habe leider gerade keine Zeit das Projekt “ReadOnly Debian on Wrap” weiterzuführen. So bald ich wieder Zeit habe, werde ich die Dokumentation weiterführen. Ich hoffe, dass ich zwischen durch mal kleine HowTo veröffentliche, die nachträglich ins Projekt eingepasst werden.
Gerade über das Thema ReadOnly bin ich nicht so glücklich und muss mal schauen, wie ich es am besten löse.
Illegal V.s. Legal
Icons für die Webseite
Wenn ich Icons für eine Webseite brauchte, benutze ich selbstverständlich die “silk” Icons von famfamfam.com.

Auf Twitter habe ich über ein alternatives Set mit über 2.500 Icons erfahren, was ich in Zukunft öfter einsetzen werde, da mir die Icons sehr gut gefallen.
PS: Es gibt auf der Seite von famfamfam.com auch Flaggen-Icons.
Links:
- Seite: http://pinvoke.com/
- Seite: famfamfam.com
- Icons: http://www.famfamfam.com/lab/icons/silk/
- Icons: http://www.famfamfam.com/lab/icons/flags/
Linux-Befehle auf einem Blatt
Wer kennt es nicht, man arbeitet mal wieder mit Linux und sucht ein bestimmten Befehl, wo man den Namen vergessen hat. Man weißt noch, was der Befehl macht, aber man kommt einfach auf den Namen nicht.
Für die wichtigsten Befehle wurde auf der Seite “Linux auf einem Blatt“ ein zweiseitige PDF-Datei bereitgestellt, wo sie niedergeschrieben sind. Dort sind alle Befehle nach folgenden Themen gegliedert:
- Hilfe
- Dateien
- Verzeichnisse
- Speicherplatzinformationen
- Dateisysteme
- Benutzer und Gruppen
- Prozessverwaltung
- System
- Datum und Uhrzeit
- Netzwerk
- Bildschirm und Terminal
- Shell
- Editoren
- PostScript
- Sonstige Befehle
So kleine Helfer sind immer praktisch
Links:
- Seite: http://helmbold.de/linux/
[HowTo] Debian auf einer CF-Karte installieren
Dies ist der erste Abschnitt von meinem Projekt “ReadOnly Debian on Wrap”. Das Ziel des Projektes ist ein „read only“ System auf einer CompactFlash auf einem Wrap “wrap2e3″ laufen zu bekommen. Der Server soll mein Netzwerk verwalten und braucht dafür folgende Dienste DHCP, Bind9, NTP und ein WINS-Server.
Jede Haftung meinerseits wegen evtl. entstandener Schäden oder Kosten ist ausgeschlossen. Du benutzt diese Anleitung und die darin enthaltenen Scripte auf eignenden Risiko. Ich übernehme keinerlei Gewährleistung für die Funktion des hier beschriebenen Verfahrens. Ich gehe davon aus, dass ihr wisst, was ihr macht und nicht einfach alles blind kopiert!
Vorbereitung
Um Linux auf einer CompactFlash-Karte (CF-Karte) zu installieren, brauchen wir ein Computer mit einem CF-Lesegerät. Da wir Debian auf der CF installieren wollen, muss auf dem Hostsystem auch Debian installiert sein.
Bei meinem Computer spreche ich die CF-Karte über das Device hdc an. Bei euch kann es ein anderes Device sein. Ich setze voraus, dass ihr wisst, welches Device eure CF-Karte hat und entsprechend die Anleitung anpasst.
Partitionierung der CF-Karte
Um auf der CF-Karte Debian zu installieren, müssen wir die CF-Karte partitionieren und ein Dateisystem erstellen.
Alle Daten auf der CF-Karte werden in diesem Arbeitsschritt gelöscht!
Für die Erstellung der Partition benutzen wir cfdisk.
homer:~# cfdisk -z /dev/hdcAls erstes löschen wir über [ Delete ] eventuelle vorhandene Partitionen. Über [ Write ] erstellen wir eine neue Partition. Am Ende sollte es wie folgt aussehen:
cfdisk 2.12r
Disk Drive: /dev/hdc
Size: 1020837888 bytes, 1020 MB
Heads: 16 Sectors per Track: 63 Cylinders: 1978
Name Flags Part Type FS Type [Label] Size (MB)
------------------------------------------------------------------------------
hdc1 Boot Primary Linux 1020,84
[Bootable] [ Delete ] [ Help ] [Maximize] [ Print ]
[ Quit ] [ Type ] [ Units ] [ Write ]
Toggle bootable flag of the current partitionÜber [ Quit ] verlassen wir cfdisk.
Dateisystem ext2
Ich habe mich für das Dateisystem ext2 und gegen ext3 entschieden, weil wir die Journal-Funktion von ext3 nicht brauchen.
homer:~# mke2fs /dev/hdc1 mke2fs 1.40-WIP (14-Nov-2006) Dateisystem-Label= OS-Typ: Linux Blockgröße=4096 (log=2) Fragmentgröße=4096 (log=2) 124672 Inodes, 249220 Blöcke 12461 Blöcke (5.00%) reserviert für den Superuser erster Datenblock=0 Maximum filesystem blocks=255852544 8 Blockgruppen 32768 Blöcke pro Gruppe, 32768 Fragmente pro Gruppe 15584 Inodes pro Gruppe Superblock-Sicherungskopien gespeichert in den Blöcken: 32768, 98304, 163840, 229376 Schreibe Inode-Tabellen: erledigt Schreibe Superblöcke und Dateisystem-Accountinginformationen: erledigt Das Dateisystem wird automatisch alle 39 Mounts bzw. alle 180 Tage überprüft, je nachdem, was zuerst eintritt. Veränderbar mit tune2fs -c oder -t . homer:~#
Die CF-Karte ist nun für die Installation bereit. Als letzter schritt mounten wir die CF-Karte ins System ein.
homer:~# mkdir -p /mnt/wrap homer:~# mount /dev/hdc1 /mnt/wrap/

Installation von Debian Lenny
Im folgenden Abschnitt installieren wir Debian Lenny. Da wir nicht über eine Installation-CD gehen, müssen wir die einzelnen Schritte manuell abarbeiten. Den Abschnitt für die Festplatte bzw. in unseren Fall die CF-Karte haben wir im letzten abschnitt vorbereitet. Im nächsten Schritt installieren wir das Minimum von den benötigen Programmen und die Ordnerstruktur. Dies kann mehrere Minuten dauern.
homer:~# debootstrap lenny /mnt/wrap/ http://ftp.debian.de/debianUm im “neuen” Debian zu arbeiten und ohne das Gast-System zu beeinflussen, benutzen wir chroot.
homer:~# chroot /mnt/wrap/Konfiguration von apt-get
Wir passen die sources.list an, um benötigte Programm über apt-get zu installieren.
homer:/# nano /etc/apt/sources.list
Die Datei sollte am Ende wie folgt aussehen:
deb ftp://ftp2.de.debian.org/debian lenny contrib main non-free deb-src ftp://ftp2.de.debian.org/debian lenny contrib main non-free deb ftp://ftp2.de.debian.org/debian-security lenny/updates main contrib non-free deb-src ftp://ftp2.de.debian.org/debian-security lenny/updates main contrib non-free
Wir laden als nächstes die aktuelle Programmliste herunter und wir aktualisieren gleich auch die Programme
homer:/# apt-get update Writing extended state information... Done Get:1 ftp://ftp2.de.debian.org lenny Release.gpg [1032B] Get:2 ftp://ftp2.de.debian.org lenny/updates Release.gpg [835B] Get:3 ftp://ftp2.de.debian.org lenny Release [73.6kB] Get:4 ftp://ftp2.de.debian.org lenny/updates Release [40.8kB] Get:5 ftp://ftp2.de.debian.org lenny/contrib Packages [92.7kB] Get:6 ftp://ftp2.de.debian.org lenny/main Packages [6911kB] Get:7 ftp://ftp2.de.debian.org lenny/non-free Packages [123kB] Get:8 ftp://ftp2.de.debian.org lenny/contrib Sources [46.2kB] Get:9 ftp://ftp2.de.debian.org lenny/main Sources [2982kB] Get:10 ftp://ftp2.de.debian.org lenny/non-free Sources [58.5kB] Get:11 ftp://ftp2.de.debian.org lenny/updates/main Packages [306kB] Get:12 ftp://ftp2.de.debian.org lenny/updates/contrib Packages [20B] Get:13 ftp://ftp2.de.debian.org lenny/updates/non-free Packages [20B] Get:14 ftp://ftp2.de.debian.org lenny/updates/main Sources [76.0kB] Get:15 ftp://ftp2.de.debian.org lenny/updates/contrib Sources [20B] Get:16 ftp://ftp2.de.debian.org lenny/updates/non-free Sources [20B] Fetched 10.7MB in 3min47s (47.2kB/s) Reading package lists... Done Current status: 5 updates [+5], 22891 new [+22891]. homer:/# apt-get upgrade
Installation und Konfiguration der Sprach bzw. des Zeichensatzes
Um Probleme mit der Spracheinstellung zu umgehen, installieren wir locales. Mit locales kann man die Spracheinstellungen vom Betriebssystem einstellen bzw. ändern.
homer:/# apt-get install locales Reading package lists... Done Building dependency tree Reading state information... Done Reading extended state information Initializing package states... Done Reading task descriptions... Done The following NEW packages will be installed: locales 0 packages upgraded, 1 newly installed, 0 to remove and 5 not upgraded. Need to get 4492kB of archives. After unpacking 12.0MB will be used. Do you want to continue? [Y/n/?]
Während der Installation können wir die Fragen mit YES beantworten. Nach der Installation konfigurieren wir die Spracheinstellungen.
homer:/# dpkg-reconfigure locales
Package configuration lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu Configuring locales tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x Locales are a framework to switch between multiple languages and allow users to x x use their language, country, characters, collation order, etc. x x x x Please choose which locales to generate. UTF-8 locales should be chosen by x x default, particularly for new installations. Other character sets may be useful x x for backwards compatibility with older systems and software. x x x x Locales to be generated: x x x x [ ] en_US.ISO-8859-15 ISO-8859-15 x x [*] en_US.UTF-8 UTF-8 x x [ ] en_ZA ISO-8859-1 a x x [ ] en_ZA.UTF-8 UTF-8 a x x [ ] en_ZW ISO-8859-1 a x x [ ] en_ZW.UTF-8 UTF-8 x x x x x x x x x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
Im ersten Dialog können wir die gewünschten Sprache und den dazugehörigen Zeichensatz auswhlen. Im folgenden Dialog werden die ausgewählten nochmal übersichtlich dargestellt. Ich habe folgende ausgewählt…
Package configuration lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu Configuring locales tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x Many packages in Debian use locales to display text in the correct language for x x the user. You can choose a default locale for the system from the generated x x locales. x x x x This will select the default language for the entire system. If this system is a x x multi-user system where not all users are able to speak the default language, x x they will experience difficulties. x x x x Default locale for the system environment: x x x x None x x de_DE.UTF-8 x x en_US.UTF-8 x x x x x x x x x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
Wir schauen uns die aktuellen Einstellung der Sprache bzw. des Zeichensatzes an und passen sie an…
homer:/# locale -a locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_COLLATE to default locale: No such file or directory C POSIX de_DE.utf8 en_US.utf8 homer:/# echo "LC_ALL=de_DE.UTF-8" >> /etc/default/locale homer:/# echo "LC_ALL=de_DE.UTF-8" >> /etc/environment homer:/# export LC_ALL=de_DE.UTF-8
Installation von GRUB
Im nächsten Schritt der Installation wollen wir GRUB, den Bootloader, installieren und konfigurieren.
homer:/# aptitude install grub homer:/# mkdir -p /boot/grub homer:/# nano /boot/grub/menu.lst
Die Konfigurationsdatei sollte z.B. wie folgt aussehen.
# menu.lst - See: grub(8), info grub, update-grub(8) # grub-install(8), grub-floppy(8), # grub-md5-crypt, /usr/share/doc/grub # and /usr/share/doc/grub-doc/. serial --unit=0 --speed=38400 ## default num # Set the default entry to the entry number NUM. Numbering starts from 0, and # the entry number 0 is the default if the command is not used. # # You can specify 'saved' instead of a number. In this case, the default entry # is the entry saved with the command 'savedefault'. default 0 ## timeout sec # Set a timeout, in SEC seconds, before automatically booting the default entry # (normally the first entry defined). timeout 5 # Pretty colours color cyan/blue white/blue ## ## End Default Options ## title Debian GNU/Linux, kernel 2.6.8 root (hd0,0) kernel /vmlinuz root=/dev/hda1 reboot=bios ramdisk_size=49152 console=ttyS0,38400n8 nokeyb initrd (hd0,0)/initrd.img savedefault boot title Debian GNU/Linux, kernel 2.6.8 root (hd0,0) kernel /vmlinuz root=/dev/hda1 console=ttyS0,38400n8 reboot=bios initrd (hd0,0)/initrd.img boot ### END DEBIAN AUTOMAGIC KERNELS LIST
Damit wir über die “serielle Konsole” auch den Bootloader benutzen können, sollte der “serial speed” gleichen den des WRAPs sein. In meinem Fall ist es die Rate 38400. Wir erstellen zwei Booteinträge. Der erste Eintrag initialisiert zusätzlich eine RamDisk und gibt die Größe (in KiloByte) an, wie viel vom Arbeitsspeicher benutzt werden darf. Die RamDisk unterstützt uns später, dass auf die CF-Karte keine Schreiboperationen mehr durchgeführt werden (Stichwort: readonly).
Installation des Kernels
Als vorletzten Schritt installieren wir den Kernel. Für die Installation benötigen wir das virtuelle Dateisystem /proc. Gleichzeitig erstellen wir die Liste (fstab) der zu mountenden Dateisysteme beinhaltet. Daraufhin können wir endlich den Kernel installieren…
homer:/# mount /proc homer:/# echo "proc /proc proc defaults 0 0" >> /etc/fstab homer:/# echo "/dev/hda1 / ext3 defaults,errors=remount-ro 1 1" >> /etc/fstab homer:/# apt-get install linux-image-2.6-686
Initiallisierung von GRUB
Als letzten Schritt der Installation müssen wir GRUB noch initialisieren. Dafür müssen wir den chroot-Käfig verlassen.
homer:/# exit homer:/# grub-install --root-directory=/mnt/wrap /dev/hdc
Nachbereitung
Nachdem die Installation fertig ist, müssen wir noch kleine Grundeinstellungen vornehmen, bevor die CF-Karte vom WRAP booten lassen. Da der WRAP kein Bildschirmanschluss hat müssen wir die Konsolen-Ausgabe auf den seriellen Ausgang umleiten. Wie bei der GRUB-Konfigurationsdatei, sollten wir den “serial speed” gleichen Wert wählen.
homer:/# echo "T0:23:respawn:/sbin/getty -L ttyS0 38400 vt100" >> /mnt/wrap/etc/inittab
Später soll der WRAP auch ohne Anschluss des Serielle Kabel laufen. Der daraus resultierte Nachteil, dass das Boot nicht mehr mitverfolgt werden kann (da z.B. der SSH-Server erst nach dem booten aktiv wird), um dies zu umgehen aktivieren wir das loggen des Bootvorgangs.
homer:/# nano /mnt/wrap/etc/default/bootlogd
In der Datei müssen wir von “NO” auf “YES” umschalten. Die Datei sollte wie folgt aussehen:
# Run bootlogd at startup ? BOOTLOGD_ENABLE=Yes
Damit der Server auch über das Netzwerk erreichbar ist, müssen wir das Netzwerk-Interface anpassen.
homer:/# nano /mnt/wrap/etc/network/interfaces
Wir sorgen dafür, dass der WRAP seine IP und Co über den DHCP-Server bekommt.
# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or # /usr/share/doc/ifupdown/examples for more information. # The loopback network interface auto lo iface lo inet loopback #allow-hotplug eth0 auto eth0 iface eth0 inet dhcp
Als letztes geben wir den neuen WRAP-Server noch ein Namen:
homer:/# echo "serverName" > /mnt/wrap/etc/hostname
Nun können wir endlich die CF-Karte in den WRAP stecken und hoffen, dass der Kleine ohne Probleme hochfährt. Fürs Debuggen brauchen wir ein Nullmodem-Kabel und ein PC mit einem Seriellen Anschluss. Mit dem Nullmodem-Kabel verbinden wir den PC mit dem WRAP. Mit einem Emulator (z.B. HyperTerminal) lauschen wir am richtigen seriellen Port. Wenn alles richtig läuft, sollten wir im Emulator sehen, wir der WRAP hochfährt.
Das System sollte jetzt läufen. In den nächsten Schritten wird auf dem WRAP einige Server installiert werden (z.B. NTP, BIND, DHCP) und die Schreibrate soll verringert bzw. readOnly gemacht werden.
Ich hoffe, euch hat das Howto geholfen bzw. angeregt und würde mich über ein Kommentar freuen, wenn ihr das Howto benutzt habt. Gefundene Fehler oder Verbesserungsvorschläge sind in den Kommentare immer willkommen.
Links:
- Projektseite:
- Hardware: http://www.pcengines.ch/wrap2e3.htm
- OS: http://www.de.debian.org
- Wiki: http://de.wikipedia.org/wiki/Debian
- Wiki: http://de.wikipedia.org/wiki/CompactFlash
- Wiki: http://de.wikipedia.org/wiki/Chroot
- Wiki: http://de.wikipedia.org/wiki/GRUB
- Wiki: http://de.wikipedia.org/wiki/Procfs
- Wiki: http://de.wikipedia.org/wiki/Fstab
- Wiki: http://de.wikipedia.org/wiki/Nullmodem-Kabel
OS Xbox Pro
Ein cooles Worklog-Video, wo eine X-Box im Zeitraffer umgebaut wird.
Für mich stellt sich am ende die Frage, warum er überhaupt die X-Box verwendet hat…
Links:
[via]
Klassen und Interfaces in PHP auflisten

Ich habe letzten eine Funktion gesucht, die mir anzeigt, was für Dateien in einem PHP-Skript geladen werden. Leider habe ich keine solche Funktion gefunden, dafür aber zwei Funktionen, die mir geladene Klassen bzw. Interfaces auflisten.
- get_declared_classes()
Gibt eine Liste alle geladene Klassen als Array zurück. - get_declared_interfaces()
Gibt eine Liste alle geladene Interfaces als Array zurück.
Die Liste zeigt leider auch Klassen bzw. Interfaces, die durch Erweiterungen (Extension) geladen werden. Dadurch ist die Länge der Liste bei den meisten unterschiedlich und teilweise unübersichtlich. Wenn man sich an den Namens Konventionen vom Zend Framework hält, sollte dies kein Problem sein.
Will man z.B. wissen, welche Klasse vom Zend Framework geladen wird, hilft folgender Code:
1 2 3 4 5 6 | foreach (get_declared_classes() as $value) { // Prüft, ob der Klassename mit "Zend" anfängt if (substr($value, 0, 4) == 'Zend') { echo $value.'<br>'.PHP_EOL; } } |
Die Funktion get_declared_classes() hat mir einiges an Arbeit erspart.
Links:






Recent Comments