Winternight 091201

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

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 :P ) 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

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

  1. Die Firefox-Konfiguration oeffnen (in der Adressleiste about:config eingeben)
  2. Rechtsklick -> Neu -> String
  3. Als Eigenschaftsname wird network.security.ports.banned.override angegeben
  4. Als Wert wird der entsprechende Port (hier: 6000) angegeben
  5. Fertig!

Quelle: Mozilla Port Blocking @ mozilla.org

Google Wave – wer hat noch nicht, wer will nochmal?

08-invitationsNach 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

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:

New! Retweet to share tweets (BETA)

New! Retweet to share tweets (BETA)

Neuerdings haben alle Tweets neben dem Reply-Button einen Retweet-Button. Das sieht dann so aus:

Retweet Button

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…

Retweet Example

… und einmal in meiner Timeline:

Retweet 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

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

symfony

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

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…. :P

Desweiteren versuche ich, hier in nächster Zeit wieder regelmässiger zu posten :S

Dancing Ghosts



Dancing Ghosts, ursprünglich hochgeladen von Dratir

Auch in meinem flickr-Stream: Dancing Ghosts II

Ein paar Tipps zum Kauf von Fotografieausrüstung

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.

Read the rest of this entry »