Was: Zeugs. Thema: Alles mögliche.
Archive for October, 2009
Howto: Disk-Images erstellen unter Linux
Oct 30th
Aus aktuellem Anlass: Wie erstelle ich von meiner Disk ein (komrpimiertes) Image?
Update: Anstatt mit dd lässt sich das auch mit Umleitungen machen! Siehe Variante 2.
Ausgangslage:
Angenommen ich will meine /boot-Partition sichern, bzw ein Image davon erstellen.
1 2 3 4 5 | (14:14)mhutter@ganymede:~$ df -h Filesystem Size Used Avail Use% Mounted on *schnipp* /dev/md0 221M 31M 179M 15% /boot |
Hinweis: Die meisten dd-Befehle müssen mit Root-Rechten ausgeführt werden.
Variante 1: Ohne Komprimierung
(NICHT empfohlen)
1 2 3 4 5 6 7 8 9 | (14:21)root@ganymede:~# dd if=/dev/md0 of=/backup/boot.img bs=4M 58+1 records in 58+1 records out 246611968 bytes (247 MB) copied, 0.366272 s, 673 MB/s (14:22)root@ganymede:~# ls -lah /backup total 236M -rw-r--r-- 1 root root 236M 2009-10-30 14:22 boot.img |
Das ging zwar sehr schnell (0,3sek), aber das Image ist so gross wie die ganze Partition! Klar kann man nachträglich noch gzippen oder so, aber ich bevorzuge
Variante 2: Direkt komprimieren
(empfohlen!)
1 2 3 4 5 6 7 8 9 10 11 12 13 | (14:24)root@ganymede:~# dd if=/dev/md0 | gzip -c > /backup/boot.img.gz 481664+0 records in 481664+0 records out 246611968 bytes (247 MB) copied, 3.52991 s, 69.9 MB/s # NACHTRAG! Das geht auch einfacher! # Das Ergebnis ist genau dasselbe: gzip -c < /dev/md0 > /backup/boot.img.gz # Ende Nachtrag (14:25)root@ganymede:~# ls -lah /backup total 29M -rw-r--r-- 1 root root 29M 2009-10-30 14:25 boot.img.gz |
Das hat jetzt zwar rund 10mal länger gedauert, aber siehe da: Das Image ist nur noch 29MB gross! Win!
Zusatzinfo
Images entpacken und mounten
Das Entpacken klappt einfach mit gunzip boot.img.gz Und so wird nachher gemountet:
1 2 3 | mount -o loop /backup/boot.img /mnt/boot/ # Manchmal muss man auch den Dateisystemtyp angeben: mount -o loop -t ext2 /backup/boot.img /mnt/boot/ |
Symfony HowTo: Fileupload mit sfWidgetFormInputFileEditable
Oct 12th

Für Formulare mit Dateiupload bietet Symfony ja das praktische Widget sfWidgetFormInputFileEditable an. Besagtes Widget (und der dazugehörige Validator sfValidatorFile) überprüft die Datei, speichert sie am angegebenen Ort mit einem einmaligen Dateinamen, und hinterlegt diesen in der Datenbank.
Zuerst also das Widget anlegen:
1 2 3 4 5 6 7 8 | // lib/form/doctrine/DeinForm.class.php $this->widgetSchema['img_normal'] = new sfWidgetFormInputFileEditable(array( 'label' => 'Mitgliederportrait', 'file_src' => '/uploads/mitglieder/'.$this->getObject()->getImgNormal(), 'is_image' => true, 'edit_mode' => !$this->isNew(), 'template' => '%file% %input% %delete% %delete_label%' )); |
file_src und template werden für die Anzeige im Formular benötigt. Der in file_src definierte Pfad wird dann zur Anzeige im Browser verwendet.
Der Rest sollte eigentlich selbsterklärend sein.
Als Nächstes ist der Validator dran:
1 2 3 4 5 | $this->validatorSchema['img_normal'] = new sfValidatorFile(array( 'required' => false, 'path' => sfConfig::get('sf_upload_dir').'/mitglieder', 'mime_categories' => 'web_images' )); |
Und für die Option, die bestehende Datei zu löschen:
1 | $this->validatorSchema['img_normal_delete'] = new sfValidatorPass(); |
Soweit, sogut.
Nun haben wir aber noch ein Problem. Wir können zwar Dateien hochladen, die werden von Symfony auch schön brav am richtigen Ort abgelegt, und in der DB sind immer die richtigen Dateinamen. ABER: Mit der Zeit werdet ihr feststellen, dass sich im angegebenen Uploadordner (hier: /uploads/mitglieder/) jede menge Dateileichen ansammeln. Symfony löscht zwar den Dateinamen aus der DB, versäumt es aber, veraltete Dateien zu löschen (das trifft auch zu wenn die Datei nur ersetzt wird).
Dazu müssen wir die funktion doSave() unserer Formularklasse anpassen:
1 2 3 4 5 6 7 8 9 10 11 | // lib/form/doctrine/DeinForm.class.php public function doSave($con = null) { if ($this->getValue('img_normal') || $this->getValue('img_normal_delete')) { $p = sfConfig::get('sf_upload_dir').'/mitglieder/'.$this->getObject()->getImgNormal(); if (file_exists($p)) unlink($p); } return parent::doSave($con); } |
Eh Voila!
Shoppingtour
Oct 6th
Habe gestern und heute endlich endlich die Hardware für mein Projekt Homeserver bestellt.
Wesentlich wollte ich ein kleines Case, in das aber trozdem mindestens 3 Festplatten reinpassen (Raid 5), mit günstiger ( != billiger) “Innenausstattung”. Nun, daraus geworden ist das hier: Homeserver @ Digitec
Zu meinen genauen Plänen gibts an dieser Stelle später mehr! Ich sag nur mal: DNS, DHCP, HTTP+PHP, FTP, SSH, SVN, WebDAV?, ETC….
Desweiteren versuche ich, hier in nächster Zeit wieder regelmässiger zu posten :S
Gequatsche