uuun de chiggiee boooob de eggggee
Ich konnt nich anders, sorry. :o(
via tagesschau.de
hatte ich schon ganz vergessen…
Korrupt verteilt hier Nerdstöcken. Ich bin zwar nich beworfen worden, werde das aber auch mal ausfüllen aus ganz trivialen Gründen: Ich schreib hier zu viel Nerdfoo :o. Dexter ist zwar wie immer ein Spielverderber und sagt das sei total 2006, aber was weiß der schon.
Geht los:
Nerd zu sein ist prima. An sich meistens, aber konkret
person.setVerbosityLevel(Verbosity.Debug)
erhöht, sondern durch gutes zureden und -hören.
Ich betreibe nun schon seit einiger Zeit, versteckt hinter einem htaccess Schutz und ordentlich verschlüsselt auf Port 443 auf meinem zuhause-immer-an-rechner einen Webaudioplayer, der mir meine Musiksammlung auf jeden beliebigen Rechner mit HTML5-fähigem Browser befördert. Zeit das Ganze doch einmal vorzustellen.
Das Projekt in seiner jetzigen Form entspringt einem für Informatiker ganz grundlegenden Bedürfnis: Programmiersprachen lernen. Konkret ging es hier um JavaScript, denn das hatte ich eh schonmal so halb gelernt, als ich 3D Scripting mit Unity gemacht habe und halbe Sachen sind ja per se sowieso und überhaupt total langweilig. Als dann eigentlich schon alles™ fertig war, kam auch noch das Bedürfnis hinzu etwas Python zu machen. Das ist aber eher nebensächlich gewesen.
Es leuchtet blau! Ein wenig zumindest.
Der Player soll eine einfache Oberfläche liefern für meine Musiksammlung zuhause. Also unterstützt die Software auch das grundlegende, was man so von einer Musiksoftware erwartet. Es listet Verzeichnisse mit Musik auf, zeigt Titelinformationen an und unterstützt manuelle Playlisten, die man auch abspeichern kann. Die Seite selbst lädt einmal, der Rest ist JavaScript. Ich mache kein Flash-Fallback, Browser die kein audio Element unterstützen oder nur unzureichend haben Pech; CSS3 ist ebenso Voraussetzung. Kurzum: Aktuell läuft das Ding quasi nur in Chrome/Chromium und wahrscheinlich noch in Safari, da ja beide WebKit nutzen.
Ganz einfach: da sitzt ein kleines Frontend und schickt per Ajax (eigentlich ist das ja kein Ajax – Asynchronous JavaScript and XML – sondern „Ajaj“ – Asynchronous JavaScript and JSON – was ich hier nutze) beständig Anfragen an ein Backend, das in Python realisiert ist. Das schickt seine Daten zurück und das wars. Die Pythonscripte selbst docken an einen Apache mittels mod_wsgi an. Man könnte allerdings auch relativ simpel eine neue index.py basteln, die CGI nutzt.
Klaro. Ne Demo gibt’s hier. Ein Vorschaubild soll auch nicht fehlen:

…von Datenschutz hält… dat is schon Bombe, ne?
Well, These New Zuckerberg IMs Won’t Help Facebook’s Privacy Problems
Dumb fuck.
Selbstgemacht. Total toll. Total Baustelle. Wer Bugs findet, darf sie posten. Hier wär toll.
Toller Header fehlt noch, lesbisch in den Häuserkampf befindet sich auf dem Weg. Spaß haben!
Vor ein paar Tagen ist mir mein NC6000 zum zweiten mal kaputt gegangen (Mainboard futsch). Da ich nicht wieder Lust hatte Geld in dieses doch schon etwas betagte Stück Technik zu investieren, ist es dann ein neues Thinkpad T400 geworden.
Die Daten brauchte ich aber trotzdem. Da ich selbst keinen entsprechenden Adapter hatte, hab ich mir von einem Freund ein Festplattenimage anlegen lassen mit dd.
dd if=/dev/sdb of=konradhdd bs=10M
Das hab ich mir dann auf meinen neuen Laptop kopiert. Nun kann man aber nicht so ohne weiteres ein komplettes Image (samt aller Partitionen) irgendwo mounten. Das Prozedere ist allerdings auch nicht fürchterlich kompliziert.
Mein Festplattenimage enthält eine NTFS Parition mit Windows XP darauf, eine Linux Boot Partition und das verschlüsselte LVM.
Zuerst brauchen wir die Offsets an denen die entsprechenden Partitionen beginnen in der Datei. Dazu eignet sich ganz hervorragend dieses Shell-Script (Script zur Ermittlung der Mountoptionen). Übergeben wird nur der Dateiname des Festplattenimages.
konrad@rumpelstilzchen:~$ ./help-mount-image.sh konradhdd konradhdd1 63 10493279 5246608+ 7 HPFS/NTFS mount -o loop,ro,offset=32256 konradhdd /mnt konradhdd2 10493280 10886399 196560 83 Linux mount -o loop,ro,offset=5372559360 konradhdd /mnt konradhdd3 10886400 58605119 23859360 5 Extended Ignoriere extended partition konradhdd5 10886463 58605119 23859328+ 83 Linux mount -o loop,ro,offset=5573869056 konradhdd /mnt
Die mount-Befehle interessieren relativ wenig. Wichtig ist das Offset. Der für mich relevante letzte Eintrag hat das Offset 5573869056. Jetzt muss die entsprechende Partition aus dem Image als Loop-Device eingebunden werden.
Zuerst muss man rausfinden, welches Loop-Device genutzt werden kann. Das geht folgendermaßen:
konrad@rumpelstilzchen:~$ sudo losetup -f /dev/loop0
Tadaa:
konrad@rumpelstilzchen:~$ sudo losetup -o 5573869056 /dev/loop0 konradhdd
An und für sich sollte man noch ein -r übergeben damit im Image nicht herumgeschrieben wird. Da ich aber weiß, dass mein Dateisystem defekt ist, hab ich das gelassen ;). Als nächstes besorgt man sich mit cryptsetup das verschlüsselte LVM.
konrad@rumpelstilzchen:~$ sudo cryptsetup luksOpen /dev/loop0 crypto Enter passphrase for /dev/loop0: dein_passwort_eingeben Key slot 0 unlocked.
Um das LVM jetzt zu aktivieren braucht man die Befehle vgscan und vgchange. Dadurch wird erst nach verfügbaren LVMs gesucht und danach werden sie aktiviert.
konrad@rumpelstilzchen:~$ sudo vgscan Reading all physical volumes. This may take a while... Found volume group "crypt" using metadata type lvm2 Found volume group "rumpelstilzchen" using metadata type lvm2 konrad@rumpelstilzchen:~$ sudo vgchange -ay 2 logical volume(s) in volume group "crypt" now active 2 logical volume(s) in volume group "rumpelstilzchen" now active
Mit:
konrad@rumpelstilzchen:~$ mkdir altesrootdateisystem konrad@rumpelstilzchen:~$ sudo mount /dev/crypt/root altesrootdateisystem/
wird jetzt ein mount Ordner erzeugt und die alte Root Partition gemountet. Die Information „crypt“ stammt aus den angaben von vgscan bzw. vgchange.
Ein:
konrad@rumpelstilzchen:~$ ls altesrootdateisystem/ bin boot cdrom dev etc home initrd.img lib lost+found media mnt opt proc root sbin selinux srv sys tmp usr var vmlinuz
offenbart jetzt das alte Dateisystem. Fertig :).