skweez.net

Alles skweez?

1001111001000010011001001111000

20.09.2011

Ergänzung: Grub 2 in GPT/BIOS-Systemen

von mks.

Dieser Artikel ist eine kurze Ergänzung zu meinem Artikel über GUID-Partitionstabellen auf BIOS-Systemen.

Ich habe festgestellt, dass die Unterstützung für extlinux unter Ubuntu (10.04 „Lucid“) eher … naja … mau ist. Wenn man auf einem so installierten System stattdessen Grub benutzen will, benötigt man eine kleine Partition, z.B. von einem MB Größe, mit dem Partitionstyp EF02 („BIOS-Boot-Partition“).

Hintergrund: Da Grub zu groß ist, um komplett in den Boot-Sektor zu passen, ist er in einen Stage 1 und einen Stage 2-Loader aufgeteilt. Der Stage 2-Loader wird normalerweise in einen kleinen freien Bereich zwischen Master Boot Record und erster Partition geschrieben. Da es diesen Bereich aber auf einem GPT-System nicht gibt, quittiert Grub den Versuch einer Installation mit der Warnmeldung:

Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged.

Hat man die o.g. extra Partition angelegt, kann man Grub wie gewohnt mit grub-install installieren.

13.07.2011

Selling GPL’ed software

von mks.

Apparently someone is trying to make money with an Android application that I wrote a month ago. At first I was really mad about people ripping off others by making money of other people’s work. But today I actually feel it is a bit of a compliment. At least this guy thinks, my little app is worth some money. ;-)

But seriously, of course I complained about it to Google with their DMCA form.

Regarding the GPL and selling software: this is actually possible, as long as you respect the terms of the license. Paragraph 4 of the GPL says:

You may convey verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.

Update: Google removed the App. And it seems to me that they removed the vendor’s account all together.

Update 2: After Google removed it the first time, the guy created a new merchant account and uploaded my app again. I filed a DMCA complain again and Google took down the app and his account a second time. But this guy is really persistent: On August 16th he uploaded the app AGAIN. Remember: He has to pay 25 US$ everytime he creates a new account. And he does this to try selling an app (of about 50 LoC) for 2$, that I give away for free. How stupid can one single person be? I would have thought you’d need at least ten *really* stupid people to gather that amount of idiocy.

09.07.2011

Eclipse, Android and Git submodules

von mks.

Because I couldn’t find any info on how to use sub-projects (that is sub folders in a project) as libraries within the ADT in Eclipse, here’s a short how-to:

Use submodules as you normally would, e.g. when cloning a project with sub-projects use this:

git submodule init
git submodule update

Then in Eclipse you can create a new Android project with the wizard from the existing source (and pointing the location to the sub directory).

When you reference the sub-project as a library for the main project, it will magically point to the correct directory inside the main project.

The yaxim Jabber client for Android for example uses this to depend on the MemorizingTrustManager (see the screenshot).

07.07.2011

BIOS wiederherstellen mit Arduino

von mks.

Vor einiger Zeit habe ich mein nur wenige Monate altes Mainboard gebrickt, indem ich versehentlich eine falsche BIOS-Version eingespielt habe. Leider kam die Erleuchtung zu spät: Never change a running system! Gut, dass ich noch ein Notebook habe und dass ich eh schon immer mal etwas mit einem Arduino machen wollte. Jetzt schien mir die richtige Gelegenheit dafür.

Warnung: Der Artikel ist etwas lang. Für Individuen der Twitter-Generation mit einer auf 140 Zeichen verkürzten Aufmerksamkeitsspanne hier die Kurzform:

Hab es geschafft: #bios #flashen mit #Arduino https://github.com/michaelkanis/arduino_bios_flash

Vorbereitung

Zunächst war ich mal erleichtert, als ich gesehen habe, dass der Chip gesockelt und nicht gelötet ist. Das machte das Vorhaben um einiges einfacher. Den Aufkleber des Mainboard-Herstellers vom Chip entfernt, gibt dieser seine Typenbezeichnung preis. Wenn man ein bisschen nach den vielen Nummern googlet, findet man schnell raus, um welchen Chip es sich handelt. Meiner ist ein Macronix MX25L8006E. Eine Makroaufnahme mit einer einfachen Digicam hilft, die winzige Schrift lesbar zu machen.

Das Datenblatt des Herstellers erwies sich als sehr hilfreich. Erste Erkenntnis: der Chip wird per Serial Peripheral Interface (SPI) angesprochen. Der Arduino unterstützt dieses Protokoll ebenfalls von Haus aus. Würde er das nicht, könnte man es per Bit-Banging implementieren.

Mein größtes Problem war nun, dass der Arduino mit 5V-Pegeln arbeitet, der Macronix-Chip aber nur 3,3V-Pegel unterstützt. Das Risiko, den Chip durch eine zu hohe Spannung zu zerstören, wollte ich angesichts der schweren Beschaffbarkeit in Deutschland nicht eingehen. Allerdings bin ich Software-Entwickler und kenne mich im Prinzip überhaupt nicht mit Elektronik aus. Das nur als Anmerkung, falls jemand meine Lösungsversuche saudämlich findet. :-)

Meine grundlegende Vorgehensweise sollte so aussehen: Schaltung aufbauen. Software schreiben in drei Schritten: Chip auslesen, löschen, neu beschreiben. (EEPROM-Chips werden in zwei Schritten zunächst gelöscht und können dann erst neu beschrieben werden)

Erster Versuch: Spannungsteiler

Eine einfache Möglichkeit, aus einer höheren Spannung eine Niedrigere zu machen, ist ein Spannungsteiler. Weil ich mehrere Leitungen absenken musste, entschied ich mich, stattdessen den Ground-Level zu erhöhen. Da der erhöhte Ground-Level nun die LOW-Spannung auf ca. -1,7V abgesenkt hat, habe ich Dioden eingebaut, die daraus wieder 0V machen sollten. Nach einigem Basteln hatte ich nun eine scheinbar funktionstüchtige Schaltung. Natürlich habe ich den Chip erst eingesteckt, nachdem ich mit dem Multimeter sämtliche Spannungen an allen Pins (mehrmals) überprüft hatte.

Das Schreiben der Software zum Auslesen des Chips ging relativ flott, hier war ich wieder in “meinem Element”. Zunächst sah es auch so aus, als wäre ich am Ziel. Das Auslesen klappte. Meistens. Manchmal. Irgendwie nicht zuverlässig. Bits gingen verloren. Mist.

Die Lösung: Zufall

Durch Zufall fand ich heraus, dass mein Arduino auf den 5V-Leitungen nur 3,3V ausgibt, wenn man ihn mit einem Netzteil statt über USB mit Strom versorgt, obwohl das Netzteil auch 5V hat. Ob das ein Bug oder ein Feature ist, weiß ich nicht, für mich ist es ein Feature. Da ich die USB-Verbindung trotzdem brauchte, um die BIOS-Datei zum Arduino zu übertragen, kappte ich in einem USB-Kabel die 5V-Leitung. Dann entfernte ich den Spannungsteiler und schloss den Chip direkt an den Arduino an. Jetzt klappte das Auslesen reproduzierbar perfekt. Was ich jetzt noch brauchte, war ein Stück Software auf Laptop-Seite, dass dem Arduino das BIOS in kleinen Happen schickt und wartet, da der BIOS-Chip zum flashen eine gewisse Zeit braucht. Nach ca. 10 Minuten war der Chip neu geflasht und mein Rechner startete wieder. Die Performance wäre vielleicht noch ausbaufähig, aber ich war ja am Ziel. Deswegen ist die Software auch nicht sonderlich schön. Insbesondere fehlt jede Fehlerbehandlung. Ich stelle sie trotzdem auf Github, vielleicht kann sie ja mal noch jemand gebrauchen. Lizenz: Beerware. Tut damit, was Ihr wollt und flattrt mir ein Bier, wenn Ihr mögt. Oder auch nicht. Gewähr gibt es natürlich keine, wenn ihr damit mehr kaputt macht, seid ihr selbst Schuld. :-)

Falls jemand mit Ahnung von Elektronik das hier liest: Warum klappt es mit dem Spannungsteiler nicht? Ist da ein Bauteil zu langsam? Ich habe auch gelesen, dass man aus so einer Schaltung nicht viel Strom ziehen darf. Könnte es daran liegen?

Könnte man stattdessen in jeder Leitung drei Silizium-Dioden in Reihe vorschalten, um die Spannung um (3 * 0,6V) = 1,8V auf 3,2V zu verringern?

11.05.2011

CLEAN-FEED WordPress plugin

von elm.

I wrote a litte plugin for WordPress that removes certain tags from the blogs feed. I needed this, because some tags were redundant and made the feed bad looking in some feed readers. Maybe someone can use this.

The plugin can be found on github: https://github.com/elm/clean-feed

Feel free to fork and customize.

04.05.2011

Repair a SuperDrive that won’t read any disk

von elm.

If your SuperDrive is broken and spits out every disk you would like to feed it, it might be possible that your drive just needs a little love on the inside. In some cases the laser lens is dirty and that is the reason, the drive does not detect any disk. To clean the lens you can use a cleaning CD or you can open your super drive and clean the lens manually. A guide how to get to your SuperDrive out of your Mac can be found at iFixit.

When you have your SuperDrive in your hands you need to open it carefully (like we ever do anything :) ) and clean the lens, e.g. with a cotton bud. If the dust on the lens is the problem you should clearly see a difference between the lens covered in dust and after you cleaned it. Anyways, you might give it a try as your drive failed and if you read this you are probably out of warranty.

20.04.2011

Dokumente in Dropbox verschlüsseln

von mks.

Wie viele andere auch, verwende ich Dropbox, um Daten zwischen meinem Laptop und dem Desktop-Rechner abzugleichen. Außerdem bietet es eine einfache Möglichkeit, schnell mal jemandem eine Datei zur Verfügung zu stellen oder mit Freunden zusammen zu arbeiten.

Nun habt ihr in den letzten Tagen sicher mitbekommen, dass der Anbieter seine AGB geändert hat, die es nun erlauben, dass US-Behörden darauf Zugriff erlangen können.

Diese Gelegenheit möchte ich nutzen, um euch zu zeigen, wie ihr sehr schnell und einfach mit Ubuntu-Bordmitteln einzelne Ordner in eurer Dropbox verschlüsseln könnt. Nachdem euch ubuntuusers-Blogger benni schon gezeigt hat, wie es mit TrueCrypt geht, zeige ich euch den Weg mit EncFS. Ich nutze das konkret so: die Dropbox enthält einen Dokumente-Ordner, in dem die verschlüsselten Daten liegen. Ohne das zugehörige Passwort kann auf diese Daten niemand zugreifen. Das schützt natürlich nicht vor Entführung in einen Folterknast. Dieser Ordner ist in den normalen Dokumente-Ordner im Home eingehängt.

Und so gehts

Ihr braucht lediglich 5 Minuten Zeit und encfs aus dem Software Center (falls nicht ohnehin installiert).

# Dokumente sichern, wenn ihr schon einen solchen Ordner habt
mv Dokmente Dokumente.bak
# Hier landen die verschlüsselten Daten:
mkdir Dropbox/Dokumente
# Und hier könnt ihr ganz normal drauf zugreifen:
mkdir Dokumente
encfs Dropbox/Dokumente Dokumente
→ p für Paranoiamodus ;)
→ 2x Passwort eingeben
# Jetzt noch die alten Dokumente verschieben, Fertig!
mv Dokumente.bak/* Dokumente/
# Ggfs. Versteckte Dateien nicht vergessen!

Achtung, im Paranoiamodus funktionieren Hardlinks nicht!

Sieht aus wie Datenschrott: EncFS bei der Arbeit

EncFS vs. TrueCrypt

Bei Lösungen wie TrueCrypt legt man einen Container an, ein verschlüsseltes Festplatten-Image, wenn man so will. EncFS dagegen verschlüsselt transparent einzelne Dateien. Beides hat Vor- und Nachteile. Da der TrueCrypt-Container auf Dateisystemebene als eine Datei erscheint, muss auch immer der ganze Container synchronisiert werden, sobald sich ein Teil seines Inhalts ändert. In den Kommentaren haben mich zwei aufmerksame Leser darauf hingewiesen, dass Dropbox von einem TrueCrypt-Container auch nur die veränderten Teile abgleicht, allerdings erst, nachdem der Container ausgehängt wurde. Da EncFS die einzelnen Dateien verschlüsselt, können diese auch einzeln synchronisiert werden.

Und sonst …

EncFS gibt es dank MacFUSE auch für Mac OS X. Für Windows gibt es ein kommerzielles Produkt namens BoxCryptor, dass angeblich kompatibel zu EncFS ist. Vom Einsatz einer Closed-Source-Software für diesen Zweck würde ich aber aus nahe liegenden Gründen abraten.

Update: Ich möchte noch auf zwei verwandte Projekte hinweisen, auf die ich direkt oder indirekt dank der Kommentare gekommen bin. Das eine ist gnome-encfs, welches EncFS-Passwörter im Schlüsselbund speichert und die Dateisysteme beim Login automatisch mounten kann. Das andere ist eCryptfs, das EncFS nicht ganz unähnlich zu sein scheint, aber als Dateisystem im Kernel implementiert ist.

Danke für’s Lesen und bis zum nächsten Mal. Kommentare sind wie immer kostenlos und herzlichst willkommen. ;)

20.04.2011

Tonspuren vertauschen

von ritze.

Seit einiger Zeit habe ich ein Video auf meiner Festplatte herumliegen, dessen zwei Tonspuren vertauscht sind. Das heißt konkret, dass die erste Tonspur die Englische und die zweite die Deutsche ist. Nun möchte ich aber, dass die erste Tonspur die Deutsche ist und die zweite die Englische. Was also tun? Zuerst versuchte ich es mit dem Videobearbeitungswerkzeug Avidemux. Schnell musste ich jedoch feststellen, dass diese Funktion leider noch nicht im Programm implementiert ist und nur über Umwege erreichbar ist. Als weiteres mögliches Werkzeug ffmpeg ein. Der Vorteil, den man unter Linux zu schätzen gelernt hat: Es läuft alles komplett im Terminal ab.

Nach mehrmaligem Nachschlagen im Handbuch von ffmpeg und ein paar hoffnungslosen Versuchen hatte ich die benötigten Optionen zusammen:

ffmpeg -i input.avi -vcodec copy -acodec copy -map 0:0 -map 0:2 -map 0:1 output.avi -acodec copy -newaudio

Dabei wird nichts anderes gemacht, als dass der Videostream und die beiden Audiostreams kopiert werden und der zweite Audiosteam an der Stelle des Ersten verrückt wird (-map 0:2) und den ersten Audiostream dafür an zweiter Stelle (-map 0:1). -map 0:0 ist der Videosteam und -newaudio am Ende der Zeite ist nötig, damit das neue Video output.avi zwei Tonspuren besitzt.

Soweit, so gut. Die neue Videodatei hatte alle Kriterien erfüllt. Die Sache hatte jedoch einen Haken: Sowohl die Deutsche als auch die Englische Tonspur wurden mit dem VLC Media Player alles andere als normal wiedergegeben. Ich meine, in meinen Nachforschungen in den Tiefen des Internets auch irgendwo sogar gelesen zu haben, dass das ein Bug von ffmpeg sei. Leider habe ich die Seite nicht mehr parat.

Bekanntermaßen sind aller guten Dinge drei. Demzufolge weiter zum dritten Anlauf: Zuerst exportiere ich die erste Tonspur, danach die zweite und erst dann wird das neue Video mit den zwei exportierten Tonspuren erstellt. Fragt mich nicht warum. Aber dieser Weg ist im Gegensatz zum ersten Anlauf mit ffmpeg geglückt.

ffmpeg -i input.avi -vn -acodec copy audio1.mp3
ffmpeg -i Sinput.avi -vn -acodec copy -map 0:2 audio2.mp3
ffmpeg -i input.avi -vcodec copy -i audio2.mp3 -acodec copy -i audio1.mp3 output.avi -acodec copy -newaudio

08.04.2011

Backups mit Back In Time in Linux

von christoph.

Bildschirmfoto nach Backup

Irgendwann ist es bei jedem Computer so weit: Man braucht einen neuen. Nur meistens kündigt der Computer nicht davor an: “Kopiere die Daten auf eine externe Festplatte, nächste Woche gehe ich kaputt.” :)
Um zu vermeiden, dass auf einmal alle persönlichen Dateien verloren gehen, sollte man regelmäßig Backups der Festplatte anlegen. Doch bei regelmäßigen Sicherungen von Hand ist das Problem, dass man immer wieder alle Daten kopieren muss und die alten Backups, falls man nicht sehr viel Speicherplatz verbrauchen will, löschen muss.

Aus diesem Grund habe ich das Backup-Tool Back In Time (das auch u.a. in den Standardpaketquellen von Ubuntu als “backintime-gnome” und “backintime-kde” verfügbar ist) getestet und möchte hier kurz meine Erfahrungen schildern.

Gestartet habe ich das Programm mit root-Rechten, um auch andere Verzeichnisse als das home-Verzeichnis sichern zu können.

Achtung: Ein Programm mit root-Rechten zu starten bringt immer gewisse Risiken mit sich!

Beim Start wird außer dem Hauptfenster auch ein Einstellungsfenster geöffnet. In diesem Fenster muss folgendes geändert werden:

Konfiguration: Speicherort für Festplatte
Konfiguration: Zeitplan: ich habe mich für “Deaktiviert” entschieden, weil ich meine externe Festplatte nicht immer angeschlossen habe
Einbeziehen: hier habe ich mich für mein home-Verzeichnis, /opt und /etc entschieden.
Ausschließen: In meinem Fall ist das einzige, das nicht gesichert werden soll, die virtuelle Festplatte von Windows-XP, das ich mit VirtualBox benutze. Die würde bei jedem Backup immer wieder neu kopiert werden und das würde zu viel Speicherplatz verbrauchen. Diese Daten kann man ja immer noch direkt in XP sichern.
Automatisch entfernen: hier habe ich das Häkchen vor “Älter als:” entfernt.

Nachdem man auf “OK” und dann im Hauptfenster auf den Knopf links oben geklickt hat, wird das Backup erstellt. Nach einiger Zeit (~45min) war das Backup bei mir fertig. Bei einem Blick auf /media/<Festplatte>/backintime kann man sehen, dass die Dateien beim ersten Backup “einfach” kopiert werden und bei Bedarf so auch ohne installiertes Back In Time eingesehen werden können.

Fazit: Back In Time ist ein einfach zu bedienendes Backup-Programm. Es hat (anscheinend) keine Möglichkeit, das Verzeichnis auf der Festplatte zu verschlüsseln oder zu komprimieren. Und ohne (komprimierte) Archive kann man auch leichter ohne installiertes Back In Time in anderen Betriebssystemen auf das Backup zugreifen.
Die Wiederherstellungsfunktion habe ich noch nicht getestet, hoffentlich werde ich das auch nicht so bald tun müssen. :)

12.03.2011

No Windows or Ubuntu on my MacBook

von elm.

Today, I tried to install Windows 7 Professional 64bit and Ubuntu 10.10 Alternate amd64 on my MacBook. Here are the results:

First windows:
"Select CD-ROM Boot Type:"
The keyboard is not working. The internet says it’s a bug in the Windows 7 efi boot loader.

Now Ubuntu:
"Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)"

Did not search for solutions. Both are not working. Glory new world. Dreck.