Winternight 091201
Dec 1st
Winternight 091201, ursprünglich hochgeladen von Dratir
War soeben kurz mit der Kamera draussen, ein paar Fötteli machen. Von den wenigen Fotos die ich gemacht hab (siehe Flickr-Set) ist das hier mein Favorit.
PS: Oh, das letzte Foto in diesem Set war der 5000ste Ausloeser meiner Kamera!
Linux: Filesysteme mit LVM online vergrössern
Dec 1st
Problem
Unsere Ausgangslage ist ein Linux Server (hier: SLES10) mit LVM eingerichtet. Die Partitionstabelle schaut so aus:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/system-root
14G 4.1G 8.9G 32% /
udev 377M 136K 376M 1% /dev
/dev/sda1 69M 9.6M 56M 15% /boot
Nun haben wir aber ein Platzproblem, die Platte laeuft langsam voll. Zum Glueck haben wir vorausgedacht: auf
1 | /dev/sda |
haben wir noch 5GB ungenutzten Speicherplatz. Diesen wollen wir nun ebenfalls
1 | / |
zuweisen.
Lösung
Hinweis: Auch wenn diese Anleitung mit einem SLES10-System erstellt wurde (sorry, da kann ich auch nix dafuer, die Distributionswahl ist nicht in meiner Entscheidungsgewalt
) sollte sie fuer die meisten Linux-Distributionen gueltig sein.
Dann mal los:
Freien Speicherplatz partitionieren
Zuerst muss der freie Speicherplatz als “Linux LVM” partitioniert werden. Die ID fuer diesen Partition Type ist 8e.
Wichtig: Anschliessend muss die Partitionstabelle neu eingelesen werden, sonst ist die neue Partition nicht sichtbar. Der Befehl dazu:
1 | partprobe |
Physical Volume erstellen und in VG einbinden
Weiter gehts mit ein paar LVM-Befehlen: Zuerst muss in der neuen Partition (hier:
1 | /dev/sda5 |
) ein sog. Physical Volume eingerichtet werden:
tteam01:~ # pvcreate /dev/sda5 Physical volume "/dev/sda5" successfully created
Sodele, fast am Ziel.
Das bestehende Volume vergroessern
Dazu muss die neue Partition zuerst der VG zugewiesen werden.
tteam01:~ # vgs
VG #PV #LV #SN Attr VSize VFree
system 1 2 0 wz--n- 14.93G 28.00M
tteam01:~ #
tteam01:~ # vgextend -v system /dev/sda5
Checking for volume group "system"
Archiving volume group "system" metadata (seqno 3).
Adding physical volume '/dev/sda5' to volume group 'system'
Wiping cache of LVM-capable devices
Volume group "system" will be extended by 1 new physical volumes
Creating volume group backup "/etc/lvm/backup/system" (seqno 4).
Volume group "system" successfully extended
tteam01:~ #
tteam01:~ # vgs
VG #PV #LV #SN Attr VSize VFree
system 2 2 0 wz--n- 19.92G 5.02G
Und nun muss noch das LV vergroessert werden. Wir vergroessern das LV hier einfach auf die maximale Groesse:
tteam01:~ # lvextend -v -l +100%FREE /dev/system/root
Finding volume group system
Archiving volume group "system" metadata (seqno 10).
Extending logical volume root to 18.82 GB
Creating volume group backup "/etc/lvm/backup/system" (seqno 11).
Found volume group "system"
Found volume group "system"
Loading system-root table
Suspending system-root (253:0)
Found volume group "system"
Resuming system-root (253:0)
Logical volume root successfully resized
tteam01:~ # vgs
VG #PV #LV #SN Attr VSize VFree
system 2 2 0 wz--n- 19.92G 0
Aha, aus unsern ~15GB sind ~20GB geworden. War einfach, nicht? Aber wir sind noch nicht ganz fertig!
Die bestehende Partition vergroessern
Die Root-Partition ist nun aber immer noch auf der alten Groesse, wir haben ja nur das LV vergroessert. Auch das ist kein Problem:
tteam01:~ # ext2online -d /dev/mapper/system-root
[... viel viel Text ...]
tteam01:~ # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/system-root
19G 4.1G 14G 23% /
udev 377M 136K 376M 1% /dev
/dev/sda1 69M 9.6M 56M 15% /boot
Das wars! Cool, nicht?
Firefox blockiert Ports – Was man dagegen tun kann
Nov 30th
Problem
Man will mit Firefox ein Webinterface/SSH-Tunnel/whatever auf Port 6000 (oder sonst irgendeinem Port) ansteuern. Doch Firefox kontert mit einer haesslichen Fehlermeldung:
Fehler: Port aus Sicherheitsgründen blockiert
Die aufgerufene Adresse fordert einen Port, der normalerweise nicht zum Browsen im Web verwendet wird. Die Anfrage wurde zu Ihrem Schutz abgebrochen.
Lösung
- Die Firefox-Konfiguration oeffnen (in der Adressleiste
about:configeingeben) - Rechtsklick -> Neu -> String
- Als Eigenschaftsname wird
network.security.ports.banned.overrideangegeben - Als Wert wird der entsprechende Port (hier: 6000) angegeben
- Fertig!
Google Wave – wer hat noch nicht, wer will nochmal?
Nov 23rd
Nach 2 Wochen in der Wave habe ich nun auch einige Einladungen, die ich vergeben kann. Nach einigen, die an Freunde gegangen sind, habe ich nun noch 8 3 Einladungen zu vergeben.
Wer also noch keinen Account hat – Comment hierhin.
First come, first serve.
Nachtrag:
1) Das man sich auf 1 Comment beschränken sollte, hielt ich eigentich für selbstverständlich. Anyway, was wollt ihr mit 5 Invites??
2) Denkt dran es kann ne Weile dauern bis Google die Einladungen versendet!
3) Add me! manuel.hutter [at] googlewave.com
Neu bei Twitter: Retweets
Nov 11th
Ein weiterer de facto Standard unter den Twitterern hats zur offiziellen Twitter-Funktion geschafft (Ich hab in Erinnerung, die Replys seien auf ähnliche weise entstanden): Per Infomessage kündigt Twitter die einführung einer neuen Retweet-Funktion an:
Neuerdings haben alle Tweets neben dem Reply-Button einen Retweet-Button. Das sieht dann so aus:

Per Klick auf den Button wir der entsprechende Post SOFORT Retweetet – es gibt also keine Möglichkeit, den Text noch anzpuassen.
Die Retweets sind dann speziell markiert.
Hier einmal in meinem Profil…

… und einmal in meiner Timeline:

Ich persönlich finde es positiv zu sehen, dass sich was tut bei Twitter. Meiner Meinung nach erhöhen solche Funktionen die Attraktivität von Twitter.
Wie denkt ihr darüber? Seid ihr ähnlicher Meinung, oder denkt ihr, Twitter sollte so simpel bleiben wie es Anfangs war?
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
Ein paar Tipps zum Kauf von Fotografieausrüstung
Sep 22nd
Dieses Jahr habe ich doch schon einiges ausgegeben für Fotografieausrüstung. Immerhin bin ich ein ziemlicher Anfänger. Dabei sind mir beim Einkaufen ein paar Sachen aufgefallen, die ich andern angehenden Fotografenmit auf den Weg geben möchte.


Neuestes Gequatsche hier