Unschlagbare Kombination: Cowbuilder, Eatmydata und ccache

Ich hatte gerade einen fürchterlichen Einleitungssatz mit Kühen und Essen im Kopf, deshalb versuche ich es im zweiten Anlauf mit diesem Klassiker.
Mit welcher Formel kann man das Volumen einer Pizza mit dem Radius z und der Dicke a beschreiben?
Pi * z * z * a
Wer auch nur ein bißchen geschmunzelt hat, sollte sich Kalkofe und die "Jean Pütz"-Folge anhören oder Debian-Entwickler werden, die so etwas in ihren Signaturen stehen haben. 😉
Nachdem ich in den vergangenen Wochen mich mehr und mehr mit den ganzen Geek-Werkzeugen zur Debian-Entwicklung auseinandergesetzt hatte, wollte ich an dieser Stelle kurz drei sehr nützliche Programme vorstellen, die man als Paketbauer für Debian gut gebrauchen kann. Nach und nach hat sich herausgestellt, dass diese drei ausreichend sind, um ein Paket sauber, reproduzierbar und schnell erstellen zu können.
Mein Frage war, wie ich das Kompilieren von Debian-Paketen innerhalb einer Chroot-Umgebung beschleunigen kann, die mit Hilfe von Pbuilder oder besser noch Cowbuilder erstellt werden und schließlich wurde ich im Pbuilder-Howto von Ubuntu.com fündig. Pbuilder funktionierte schon letztes Jahr beim Kompilieren von DWM sehr gut und mit diesen zwei Skripten könnt ihr sofort loslegen.
Zum Optimieren des Vorgangs benötigt ihr Cowbuilder, einen Wrapper um Pbuilder, der das Anlegen der Chroot-Umgebung beschleunigt, indem Hardlinks auf schon bestehende Daten verweisen. Der zeitraubendste Prozess beim Bauen in einer Chroot-Umgebung ist jedoch das Installieren der Abhängigkeiten. Apt oder besser dpkg synchronisiert jeden Schreibzugriff auf der Festplatte und wartet bis das System erfolgreich zurückmeldet, dass das Paket auch tatsächlich ordnungsgemäß installiert wurde. Für eine normale Ubuntu- oder Debianinstallation ist das sinnvoll.
Jedoch bei einer Chroot-Umgebung, die nach jedem (hoffentlich) erfolgreichen Bauen des Pakets wieder zerstört wird, kann man auf diese Verzögerung verzichten. Signalisieren wir dem System einfach, dass der Schreibvorgang immer erfolgreich ist.
Hier kommt Eatmydata ins Spiel. Der Name ist Programm. In der .pbuilderrc muss folgendes eingetragen werden.

Eatmydata

EXTRAPACKAGES="eatmydata ccache"
if [ -z "$LD_PRELOAD" ]; then
  LD_PRELOAD=/usr/lib/libeatmydata/libeatmydata.so
else
  LD_PRELOAD="$LD_PRELOAD":/usr/lib/libeatmydata/libeatmydata.so
fi
export LD_PRELOAD

In die Chroot-Umgebung lässt sich auch manuell wechseln und eatmydata installieren.
DIST=sid ARCH=amd64 cowbuilder --login --save
apt-get install eatmydata

ccache

Ccache speichert die Ergebnisse des Kompilierens zwischen. Das Ergebnis spürt man, wenn man das gleiche Paket mehrmals hintereinander neu erstellen möchte, weil Veränderungen notwendig waren.
In der .pbuilderrc steht wiederum:

sudo mkdir -p /var/cache/pbuilder/ccache
sudo chmod a+w /var/cache/pbuilder/ccache
export CCACHE_DIR="/var/cache/pbuilder/ccache"
export PATH="/usr/lib/ccache:${PATH}"
BINDMOUNTS="${CCACHE_DIR}"

Ein Cowbuilder-Chroot erstellt ihr dann mit
DIST=sid ARCH=amd64 cowbuilder --create
Pakete werden mit
DIST=sid ARCH=amd64 cowbuilder --build meinPaket.dsc
gebaut. Kombiniert das ganze mit dem gestern vorgestellten Schroot und ihr habt die perfekte Ausgangsbasis um Pakete sauber und ohne Ballast für euer normales Produktivsystem zu erstellen.

Schroot(e) dein Linux: Debian in Ubuntu installieren Teil 2

Letztes Jahr hatte ich mir zu Testzwecken ein Debian-System innerhalb von Ubuntu 10.10 mit Hilfe von Debootstrap installiert, um in diesem abgeschotteten Bereich einen Linuxkernel zu kompilieren. Damit das funktionierte griff ich auf eine typische Linuxfunktion, chroot, zurück.
Der Nachteil des Ganzen war, dass nur Root in so eine Chroot-Umgebung wechseln durfte und ich manuell /proc und /dev hinein mounten musste. Das alles geht einfacher und zwar mit Schroot.
Schroot nimmt einem die ganze Arbeit ab. Ab sofort kann man als normaler Benutzer in die Chroot-Umgebung wechseln und das manuelle Einbinden von Partitionen und Dateisystemen entfällt. Benutze ich einen kachelnden Fenstermanager befindet sich meine Entwicklungsumgebung (Debian Sid) im Terminalfenster auf der linken Seite und Debian Stable oder Testing auf der rechten. Ich kann Pakete innerhalb von Schroot kompilieren und das Experimentelle von meinem stabilen System trennen, muss mich aber nicht verrenken, um Dateien zwischen beiden auszutauschen, denn das beste von allem ist, sowohl die Schroot-Umgebung als auch die reguläre Arbeitsumgebung greifen auf das gleiche Home-Verzeichnis zurück.

Schritte um Schroot einzurichten

  1. aptitude install debootstrap schroot
  2. mkdir -p /home/chroot/sid-amd64
  3. cd /home/chroot/
  4. debootstrap --include=zsh --arch amd64 sid sid-amd64 http://ftp.de.debian.org/debian
  5. Kaffee holen.
  6. vim /etc/schroot/schroot.conf
    [sid]
    description=Debian sid (unstable)
    directory=/home/chroot/sid-amd64
    type=directory
    root-users=apo
    groups=sbuild
    root-groups=root,sbuild
    aliases=unstable,default
    
  7. schroot -c sid

In der schroot.conf lassen sich nach diesem Schema weitere Umgebungen definieren, z.B. für Ubuntu! oder ein i386-System. Da ich [sid] mit dem Alias default versehen habe, kann ich auch direkt nur mit dem Befehl schroot in die Umgebung gelangen. Ich verwende ZSH als Shell und habe mir dieses Paket schon bei der Installation mit Debootstrap hinzugefügt. Ob ihr Gruppen für euren Benutzer oder gar mehrere anlegt ist Geschmackssache. Zur Zeit experimentiere ich ein wenig damit.
Die Sid-Umgebung lässt sich genauso konfigurieren, wie ihr das von eurem normalen System auch gewohnt seid. Das liegt vor allem daran, dass Schroot die ganze Arbeit erledigt und die Konfiguration in /etc/schroot/default bei diesem Setup abarbeitet. Mein Home-Verzeichnis wird ebenfalls direkt in diesen eigenständigen Bereich eingebunden, so dass ich mich nicht lange mit Kleinarbeit aufhalten muss.
Schroot bietet noch viele weitere interessante Optionen und Möglichkeiten. Siehe auch man schroot und man schroot.conf. Ich muss noch herausfinden, wie ich X-Anwendungen an mein normales System weiterleiten kann. Zum Kompilieren von Paketen ist diese (S)chroot-Umgebung aber schon jetzt eine sehr praktische und auch performante Erleichterung, die eine virtuelle Maschine für die gleiche Aufgabe ersetzen kann.

MediathekView 3.0 und Wbar 2.3.4 auf dem Weg nach Debian!?

Bevor es hier gleich mit einem anderen Zwischenfazit weitergeht, wie steht es um MediathekView und Wbar?
Entwicklung braucht Zeit. Einen Sponsor zu finden, der die Sache ins Archiv hochlädt, ist ein Geduldsspiel. Es gibt an die 30000 Pakete in Debian aber nur ca. 1000 Debian-Entwickler, die die Berechtigung besitzen Pakete überhaupt in das Archiv zu befördern, wo die FTP-Master mit Argusaugen über jeden Neuzugang wachen.
Tausend Leute, das klingt eigentlich gar nicht so schlecht. Manche davon kümmern sich jedoch um 100 verschiedene Pakete gleichzeitig und Debian ist nicht nur Softwareentwicklung. Es gibt Teams, die sich um die Übersetzung der Software und die Gestaltung und Aufrechterhaltung der Webpräsenz und von Mailinglisten kümmern. Und dann soll man auch noch die Verantwortung für unbekannte Neuentwickler übernehmen, sie anleiten und deren Pakete auf Korrektheit überprüfen? Wenn so ein Neuer Schaden anrichtet und man hat es vorher nicht gesehen...
Klingt nicht nach der dankbarsten Aufgabe, aber es gibt Freiwillige, die sich darum kümmern. Vor wenigen Tagen habe ich nach genau so einem Sponsor oder Mentor für Wbar gesucht (#688310). Mittlerweile ist sogar Version 2.3.4. erschienen und meine eingesandten Patches wurden freundlicherweise berücksichtigt. Etwas überrascht war ich dann doch als Bart Martens, seines Zeichens Debian-Entwickler und sehr aktiv bei den Mentoren Bug #575087 auf Schweregrad "Grave" hochgesetzt hat und mich gebeten hat diesen für Wheezy zu fixen.
Nun würde Version 2.3.4 von Wbar das Problem lösen, aber aus der kurzen Nachricht von Bart konnte ich nur entnehmen, dass ich wohl einen gezielten Fix für das aktuelle Paket in Wheezy einspielen soll. Wer sich nun fragt, warum Wbar plötzlich unbrauchbar wurde, der findet die Lösung vielleicht, wenn er versucht Wbar ohne empfohlene Pakete zu installieren. Die Schnellstartleiste verweigert ihren Dienst, weil der Pfad zu den Icons und/oder der Schrift dann den Rückgabewert NULL liefert. Kurzum das Ding startet nicht.
Also meine bescheidene Meinung ist: Wer Schellstartleisten ohne den korrekten Pfad zu den Symbolen startet, muss mindestens zweimal von e^(i*pi)+1 bis Unendlich zählen. Jedoch ganz abwegig ist der Fehlerbericht natürlich nicht und ja in Version 2.3.4. darf man auch den falschen Pfad zu seinen Symbolen und der Schrift angeben und das (transparente) Hintergrundbild von Wbar ist trotzdem zu sehen. 🙂
Ich denke jedoch, dass das kein veröffentlichungskritischer Fehler ist und werde das so auch noch einmal in den Fehlerbericht schreiben. Ist natürlich ein doofer Einstieg in Debian, wenn man erst einmal anderer Meinung als der Debianentwickler ist. 😐
MediathekView ist meiner Meinung nach in einem vorzeigbaren Zustand und wartet darauf einmal gründlich analysiert zu werden. Mittlerweile haben sogar zwei DDs Interesse daran bekundet. Der Witz daran ist, dass es bisher dabei geblieben ist. Die ganze Geschichte lässt sich in Fehlerbericht #681680 nachlesen. Ich bin aber weiterhin guter Hoffnung und ja 2.6.1 wurde aufgegeben, entweder schafft es 3.0.0 nach Wheezy oder gar nichts.
Ich habe die Downloadlinks von Mediathekview und Wbar aktualisiert. Wer also die Zeit verkürzen möchte, findet dort die entsprechenden Debianpakete. Danke auch an das bisherige Feedback zu MediathekView. Ich habe den Pfad zum flv.sh-Skript angepasst. Auch die Idee mit dem Shellskript halte ich weiterhin für gut. Vielleicht lässt sich damit in der Zukunft tatsächlich die Mediathek komplett ohne den Umweg über Java auf die Konsole holen. 😉

ganbatte kudasai: Das Open-Source-Blog-Netzwerk

Open-Source-Blog-Netzwerk
Seit letzter Woche bin ich Mitglied im Open-Source-Blog-Netzwerk (OSBN). Mit einem dezenten Button auf der rechten Seite, habe ich das seit heute auch deutlicher gemacht. In was für eine Sekte hat es ihn nun verschlagen? Nun das Ganze muss man sich als einen losen Zusammenschluss von Weblogs vorstellen, die hautpsächlich über das Thema Open Source und Freie Software bloggen und deren Feeds an einer zentralen Stelle aggregiert werden. Also genau das, was z.B. der Planet von ubuntuusers.de auch macht. Wo liegt also der große Unterschied?
Zum einen macht es ein loser und unabhängiger Bund etwas einfacher eigene Schwerpunkte zu setzen. Manche fühlen sich vielleicht auch weniger durch Vorgaben wie beim Planeten eingeschränkt, wobei mich die Regeln dort in keinster Weise stören. Grundsätzlich sind dort Themen über Freie Software sehr willkommen, ohne dass jeder Artikel speziell Ubuntu thematisieren müsste. Und mal ganz ehrlich: Mich würde es auch stören, wenn jemand nur über seinen Hamster oder die politischen Weltanschauungen schreiben würde.
Ich sehe das OSBN daher mehr wie eine zusätzliche Ergänzung, ein Experiment und etwas, was man weiterentwickeln kann, ohne dass einer der Teilnehmer hier irgendwelchen Zwängen unterworfen wäre. Zugegeben die Aufrechterhaltung der Infrastruktur, die Pflege der Startseite und des Forums machen Arbeit. Der Grundgedanke ist, dass eine Plattform geschaffen wird, wo sich Blogger und Leser gleichermaßen austauschen können und man neue interessante Artikel, Informationen und Menschen finden kann, z.B. wenn man den OSBN-Feed liest.
OSBN wurde durch Valentin von picomol.de ins Leben gerufen. Das Open-Source-Blog-Netzwerk ist dabei eine Art Weiterentwicklung seines weiteren Projekts ubuntunews.de, das Newsfeeds aus der Ubuntu-verwandten Sphäre zusammenführt. Mich persönlich interessiert auch die dahinter steckende Technik. Alles ist mit PHP, HTML5, CSS und Simple Pie verwirklicht worden.
Die Hoffnungen für das Netzwerk gehen dahin, dass es Leser einfacher haben interessante Themen und Artikel zu entdecken und wir Blogger, nun ja, Leser gewinnen, die unsere bedruckten T-Shirts und Kaffeetassen kaufen. Außerdem mag ich kleine und unbekannte Netzwerke, die (noch) niemand kennt.
Warum ich bei OSBN bin und nicht einmal einen Button für Facebook, Twitter und Google+ in meinem Blog untergebracht habe? Der Grund ist,...kommt noch. 🙂

Wie man veröffentlichungskritische Bugs in Debian beseitigt

Es hält sich hartnäckig das Gerücht, dass es so etwas wie einen Konkurrenzkampf zwischen Debian und Ubuntu gebe. Tatsächlich ermutigt Ubuntu jedoch neue Software über Debian einzubringen. Im Umkehrschluss heißt das auch, dass jeder Beitrag zu Debian auch ein Beitrag zu Ubuntu ist.
In diesem Artikel geht es darum, dass auch ein kleiner Beitrag der gesamten Distribution weiterhelfen kann und dass das Beseitigen von Bugs, Modifizieren von Quelltext und die Neuerstellung des Pakets kein Hexenwerk sein muss. Besonders hilfreich ist das Beseitigen von sogenannten veröffentlichungskritischen Bugs, kurz RC-Bugs genannt.

Der grobe Ablauf

  1. Finde einen RC-Bug, der dich interessiert.
  2. Erstelle einen Patch für das Problem.
  3. Schicke die Lösung an die Fehlerdatenbank von Debian.
  4. Finde jemanden, der das Paket hochladen kann.

Finde einen RC-Bug

Erster Anlaufpunkt um einen RC-Bug zu finden ist die Ultimative Debian Datenbank (UDD). Hier lässt sich mit Hilfe verschiedener Filteroptionen die Suche exakt einschränken. Für den angehenden Kammerjäger ist diese Ansicht die zur Zeit beste. Wichtig ist, dass man alle schon mit Patch markierten Bugs und alle die neuer als 7 Tage sind ignorieren kann, da es bei ersteren eine Lösung gibt und bei letzteren dem Paketverwalter zumindest eine Chance eingeräumt werden sollte, das Problem selbst zu lösen.
Ein hilfreiches Werkzeug ist das Programm rc-alert, welches sich im Paket devscripts befindet und anzeigt, welche Software auf dem eigenen Rechner kritische Fehler aufweist. Ein Bonus von rc-alert ist, dass es nach Debtags filtern kann.
Mit dem nachfolgenden Befehl werden nur Debian Testing und Unstable nach Bugs durchsucht und geflickte und kurz vor dem Upload stehende Pakete ausgelassen. Zusätzlich wird nur jene Software aufgelistet, die in Perl oder Python implementiert worden ist.
rc-alert --include-dists TU --exclude-tags P+ --debtags implemented-in::perl,implemented-in::python
Multi Disk Error

Erstelle einen Patch

In vielen Fällen benötigt man nicht einmal Kenntnisse in einer Programmiersprache, sondern es genügt mit einem Texteditor umgehen zu können. In Bug #675220, #685959 und #685958 geht es schlicht darum, dass die E-Mail-Adresse des Paketverwalters ungültig ist, was gegen die Paketrichtlinien von Debian verstößt. Genauso gut kann aber auch eine Abhängigkeit falsch sein, wodurch das Paket sich nicht mehr kompilieren lässt. Diese Art von Fehler haben zwar ernste Auswirkungen, lassen sich jedoch in der Regel leicht beheben.
Zum Arbeiten mit Quellpaketen solltet ihr euch das Paket build-essential oder, wenn ihr Gefallen an der Sache gefunden habt, packaging-dev installieren.
apt-get source textedit.app
Mit Hilfe von dpkg-dev wird automatisch das Quellpaket entpackt. Nachdem man in das entpackte Quellverzeichniss gewechselt ist, sollte man zuerst einen neuen Changelog-Eintrag anlegen und deutlich machen, dass man hier eine Änderung als Nicht-Paketverwalterin vornimmt.
dch --nmu
Hierdurch wird automatisch das Changelog mit dem richtigen Eintrag geöffnet. Da der Patch für Unstable gedacht ist (der Regelfall) sollte das UNRELEASED dementsprechend in unstable umgeändert werden. Noch eine kurze Beschreibung, was ihr geändert habt und ein wichtiger Schritt für einen Non-Maintainer-Upload (NMU) ist getan.

textedit.app (4.0+20061029-3.4) unstable; urgency=low
  * Non-maintainer upload.
  * Fix invalid maintainer email address. (Closes: #675220)

Der wichtigste Anlaufpunkt im Quellpaket ist das Debian-Verzeichnis. In debian/control lassen sich z.B. allgemeine Paketinformationen wie die E-Mail-Adresse des Maintainers, Abhängigkeiten oder auch die empfohlenen Pakete in einer einfachen Textdatei definieren. Der "Fix" für die vorher erwähnten Bugs war es, das Maintainer-Feld zu aktualisieren. Gäbe es noch weitere Änderungen zu machen, könnte man mit
dch -a
weitere Einträge zum Changelog hinzufügen und die entsprechende Textdateien innerhalb des Debian-Verzeichnisses ändern.

Einen Patch mit Quilt erstellen

Müsst ihr hingegen den Quellcode selbst patchen und entspricht das Paket dem neuen Format 3.0 (quilt), könnt ihr quilt zum Patchen benutzen. Ob ein Paket dies unterstützt findet ihr heraus, indem ihr einen Blick in die Datei debian/source/format werft. Raphaël Hertzog hat die Bedienung von quilt in einem sehr guten Artikel auf den Punkt gebracht.
Der grobe Ablauf ist, dass ihr innerhalb des Debian-Verzeichnisses einen Ordner patches erstellen müsst, falls er nicht vorhanden ist und dann nach diesem Schema Patches erzeugt.

  • Erstellt einen neuen Patch
    quilt new NamedesPatches
  • Verändert eine oder mehrere Dateien nach Belieben
    quilt edit Datei
  • Wendet den Patch auf die Originaldatei an
    quilt push
  • Erneuert den Patch, wenn er schon existiert.
    quilt refresh

Einen Patch importieren

quilt import -P NamedesPatches /Pfad-zum-Patch.patch
quilt push
Häufig kommt es auch vor, dass schon jemand einen Patch hinterlassen hat und man ihn selbst ausprobieren oder testen möchte.

Schicke den Patch an die Fehlerdatenbank

Ist man der Meinung alles erledigt zu haben, sollte man zuerst alle Patches wieder zurücksetzen und das Quellpaket neu bauen.
Innerhalb des Quellverzeichnisses:
quilt pop -a
Dann

cd ..
dpkg-source -b textedit.app-4.0+20061029

Wenn ihr alles richtig gemacht habt, müsste nun eine weitere .dsc-Datei entstanden sein. Mit Hilfe von debdiff, dass sich auch im Paket devscripts befindet, lassen sich nun alle gemachten Unterschiede als Diff in eine neue Datei ausgeben, der Patch.
Allgemein:

debdiff altesPaket.dsc neuesPaket.dsc > Paket.debdiff

Im Speziellen:

debdiff textedit.app_4.0+20061029-3.3.dsc textedit.app_4.0+20061029-3.4.dsc > textedit.app.debdiff

Diese Datei muss jetzt nur noch per Mail an den Fehlerbericht geschickt werden und dieser mit dem passenden Tag patch markiert werden. Die Anleitung zur Bedienung der Fehlerdatenbank verrät alle Details. Zum Markieren als Patch genügt eine Mail an control@bugs.debian.org mit folgendem Inhalt, wobei nnnnnn für die Fehlernummer steht

tags nnnnnn patch
thanks

Einen Sponsor finden

Im Regelfall sollte das Anhängen des Patches an den Fehlerbericht mehr als ausreichend sein. Es besteht jedoch auch die Möglichkeit das Paket direkt zu mentors.debian.net hochzuladen, wo ihr Hilfe von Debianentwicklern erhalten könnt. Vorher müsst ihr noch wissen, wie man Debianpakete aus den Quellen baut, was auch zum Testen des Patches nützlich ist.
Habt ihr einen Account bei den Mentoren erstellt und seid ihr den Regeln für einen Non-Maintainer-Upload gefolgt, sind die Aussichten gut dort jemanden zu finden, der das gepatchte Paket in das Archiv hochladen kann. Vorausgesetzt natürlich, es löst tatsächlich das Problem.

Lesenswerte und inspirierende Links

Ein Blick in den Abgrund

Ein ziemlich Aufmerksamkeit erheischender Titel, jedoch stammt er nicht von mir, sondern aus Benjamin Ottes Blog und wurde dort als "staring into the abyss" veröffentlicht. Anhand der Kommentare zum Artikel kann man erkennen, dass der Beitrag sicherlich durch einige prominente Newsseiten gewandert ist. Beinahe typisch für mich, stieß ich beim Durchstöbern der verwaisten Debianpakete auf ein Programm namens Byzanz, das eben von jenem Benjamin Otte entwickelt worden ist.
Schon wenig später entdeckte ich bei der Suche nach Informationen hierzu diesen Blogeintrag, der mich ein wenig zum Nachdenken brachte.
Das ist nicht der typische "Ich-sehe-alles-Schwarz-Post" irgendeines Bloggers, sondern er kommt immerhin von einem der Core-Entwickler von Gnome. Er kritisiert zum einen, dass Gnome unterbesetzt sei und hauptsächlich durch Entwickler von Red Hat getragen werde. Seine wichtigsten Kritikpunkte sind aber, dass es dem gesamten Gnome-Projekt an einem Ziel oder einer Vision mangele und dass wichtige Distributionen oder Anwendungen sich von Gnome abwenden oder abspalten (Unity und Cinnamon) anstatt mit Gnome zusammenzuarbeiten.
Mein Highlight aus diesem Post war jedoch die Aussage, dass Benjamin Otte der einzige Vollzeit-Entwickler für GTK ist. Also immerhin die Bibliothek, die für die Darstellung aller Anwendungen bei Gnome, Cinnamon und Unity verantwortlich ist.
In Zahlen: 1
Aber genau diese Tatsache, dass GTK ein Teil von Gnome ist und andere Projekte trägt, geht in seinem Post auch ein wenig unter. Wann ist der Punkt erreicht, wenn andere Projekte hier aushelfen werden und wie viele Freiwillige leisten zwar nur einen kleinen, jedoch entscheidenden Beitrag.
Der Artikel sollte auf jeden Fall aufrütteln und auch ein wenig Dampf ablassen. Man kann nicht bestreiten, dass seit der Veröffentlichung von Gnome 3 ein Bruch im ohnehin winzigen Markt des Linuxdesktops eingetreten ist. Wie können wir es uns eigentlich bei einer so kleinen Community leisten mit Gnome 3, KDE, Xfce, LXDE, Cinnamon und Unity sechs verschiedene Desktopumgebungen anzubieten? MATE und über vierzig verschiedene Fenstermanager nicht mitgezählt.
Fakt ist auch, dass man Vollzeit-Entwickler bezahlen muss, wenn man qualitativ hochwertige Software unterhalten möchte. Freie Software ist nicht kostenlos. Es macht einen Unterschied, ob ich den zwanzigsten Musikplayer oder grundlegende Systembibliotheken zu Standardanwendungen entwickle.
Ich denke, wir tun uns keinen Gefallen, wenn wir versuchen jedes Benutzerszenario immer und überall erfüllen zu wollen. Jedoch glaube ich auch fest daran, dass sich das System von selbst reguliert. Sowohl Ubuntu als auch Linux Mint profitieren von Gnome-Technologien. Sollte also Gnome eines fernen Tages abgewickelt werden, stehen besagte Distributionen ziemlich im Regen. Ist das ein realistisches Szenario? Eher nein.
Auch im September 2012 hat sich bei Debian nicht viel geändert. Spannend bleibt höchstens ob Gnome 3.4 oder Xfce der neue Standarddesktop wird. Es gab aber schon größere Probleme.
Cinnamon wartet immer noch auf seine Aufnahme. Von MATE ist weit und breit nichts zu sehen. Möglicherweise wird aber Fedora 18 MATE in die Distribution aufnehmen.
Ein Blick in den Abgrund, Gnome 3 strauchelt. Möglicherweise ist es jedoch gar nicht so schlimm, es verfehlt die spitzen Speere und wird von DWM gefressen. 😈

Wbar 2.3.1 mit lxde-icon-theme und fonts-liberation

Ich bin einen großen Schritt weitergekommen und das Einzige was mich davon abhält, Wbar einem Sponsor für Debian anzutragen, ist die fehlende Veröffentlichung von Version 2.3.2. Zur Zeit sind die Veränderungen nur in Subversion sichtbar, aber zum ersten Mal seit drei Jahren sind Code und Inhalt wieder mit Debians Gesellschaftsvertrag kompatibel.
Das Problem mit den Icons habe ich durch das Empfehlen des Pakets lxde-icon-theme gelöst. Als Standardschrift verwende ich fonts-liberation. Sowohl Icons als auch Schrift lassen sich beliebig ersetzen.
Zwar hatte ich in der Zwischenzeit herausgefunden, dass viele der alten Pixmaps unter der GPL2-Lizenz standen, dennoch war es einfacher und langfristig wohl auch sinnvoller sich unabhängig von einem spezifischen Set von Icons zu machen.
Wbar 2.3.1
Die Leiste macht einen guten Eindruck unter Lubuntu und Wbar ist generell eine gute Alternative für Fenstermanger. Nur bei älteren Rechnern wie dem Toshiba Portégé 3110CT, sollte man damit rechnen, dass die CPU bei der Animation der Icons ins Schwitzen gerät. Meist hilft hier aber schon eine geringere Auflösung bei den verwendeten Symbolen.
Einen Downloadlink gibt es weiterhin im alten Beitrag zur Entwicklung von WBar.

Reprepro: Das eigene Paketarchiv für Debian und Ubuntu

Archivbild von Politikaner Wikipedia.org
Ich bin in den letzten Wochen zum ersten Mal mit der Situation konfrontiert worden, ein Repositorium für meine eigenen Debianpakete erstellen zu wollen. Davor beschränkten sich meine Experimente z.B. auf das Erstellen eines Backports für den DWM-Fenstermanager oder ein schnell gebasteltes Paket für den Cube-Server-Lister. Mit Reprepro existiert die Möglichkeit ein eigenes Paketarchiv für Deb-Pakete aufzusetzen und sie lokal mit Hilfe von Apt zu installieren oder Freunden, Testern, der Firma oder schlicht der ganzen Welt zur Verfügung zu stellen. Und das geht so.

Vorbedingungen

Ihr benötigt:

  1. Einen gültigen GPG-Schlüssel
  2. Eigene Deb-Pakete
  3. Reprepro
  4. Einen Web- oder FTP-Server

Ein gültiger GPG-Schlüssel

Führt das folgende Kommando aus:
gpg --gen-key
Die folgenden Dialoge sind selbsterklärend und die Voreinstellungen sinnvoll. Wählt den RSA-Schlüssel (1) und mindestens 2048bit Schlüssellänge.
Die ID eures öffentlichen Schlüssels (pub) erfahrt ihr mit
gpg --list-keys
In meinem Fall wäre das 475C34B9. Mit dem GPG-Schlüssel werden später die Deb-Pakete und das Reprepro-Archiv signiert, so dass ihr anhand der Signatur die Authentizität der heruntergeladenen Pakete erkennen könnt. Damit jemand anders dies auf dem eigenen Rechner überprüfen kann, muss der öffentliche Schlüssel in den Schlüsselring von Debian oder Ubuntu importiert werden.
gpg --output gambaru_archiv.asc --armor --export 475C34B9
Mit diesem Befehl wird der öffentliche Schlüssel im ASCII-Format in die Datei gambaru_archiv.asc exportiert.
wget https://www.gambaru.de/blog/wp-content/uploads/2012/09/gambaru_archiv.asc
Nach dem Herunterladen wird er mit
sudo apt-key add gambaru_archiv.asc
in den Schlüsselring importiert und
sudo apt-key list
verrät, ob er tatsächlich im Schlüsselring angekommen ist.

Eigene Deb-Pakete

Dieser Abschnitt könnte leicht Bücherwände füllen. Für den Anfang tun es aber auch "Wie man Debian-Pakete aus den Quellen baut" oder ihr schaut euch am besten Pbuilder an, womit sich Pakete in einer "Reinraumumgebung" für unterschiedliche Architekturen und sowohl für Ubuntu und Debian bauen lassen und das vollkommen unabhängig von eurer Ubuntuversion. Es lohnt sich das Pbuilder-Howto auf ubuntu.com zu studieren.
Die fertigen Pakete können auch nachträglich mit
debsign Paketname.changes
debsign Paketname.dsc
dpkg-sig --sign builder mediathekview_3.0.0-1_all.deb
signiert werden.

Reprepro

Reprepro ist ein Werkzeug, mit dem sich ein eigenes lokales Repository anlegen lässt, das dem offiziellen Debian Archive Kit in kaum einer Beziehung nachsteht. Es gibt weitere Alternativen, jedoch überzeugt mich Reprepro nicht nur durch seinen großen Funktionsumfang, sondern es kommt auch ohne Datenbankserver aus und lässt sich schnell einrichten. Das Handbuch von Reprepro sowie man reprepro helfen bei der Inbetriebnahme weiter.

Schritt 1:

Zuerst muss ein beliebiges Basisverzeichnis angelegt werden.
mkdir -p ~/reprepro/debian
Im Debian-Verzeichnis wird danach ein Unterordner namens conf angelegt und in diesem die Dateien distributions und options.

Schritt 2:

Der Inhalt von distributions.

Origin: gambaru.de
Codename: experimental
Architectures: i386 amd64 source
Components: main
Description: Private Debian-Pakete von http://gambaru.de
SignWith: yes
Origin: gambaru.de
Codename: wheezy
Architectures: i386 amd64 source
Components: main
Description: Private Debian-Pakete von http://gambaru.de
SignWith: yes

Diese Datei ist als einzige wirklich notwendig. In ihr werden die Distributionen definiert, für die die selbsterstellten Pakete gedacht sind. Ich habe sowohl eine für Experimental als auch Wheezy angelegt. Für Ubuntu lässt sich Wheezy auch durch Precise oder Quantal ersetzen oder ihr könnt euch einen komplett eigenen Codenamen ausdenken. Tatsächlich benötigt ihr nur die Felder Codename, Components und Architecture. Meine Pakete sind DFSG-frei und landen deswegen in Main. Ich stelle sie für die Architekturen i386 und amd64 und natürlich als Quellpakete zur Verfügung. Die Option SignWith: yes führt dazu, dass das gesamte Archiv mit dem zuerst gefundenen GPG-Schlüssel signiert wird. Anstelle von yes kann hier auch die Key-ID stehen.
Der Inhalt der Datei options.

verbose
ask-passphrase

Wenn diese Datei existiert wird jede Zeile als zusätzliches Argument beim Aufruf von Reprepro übergeben, wobei Parameter, die manuell per Kommandozeile übergeben werden, Vorrang genießen. Verbose sorgt für gesprächigere Statusmeldungen und bei ask-passphrase erwartet Reprepro die Eingabe des Passworts für den GPG-Schlüssel, um das Archiv zu signieren.
Nur der Vollständigkeit halber: Es existieren noch die Konfigurationsdateien updates, pulls und incoming, die man für weitergehende Studien im Hinterkopf behalten sollte, hier aber nicht gebraucht werden.

Beispiele

Fügt das Paket mediathekview_3.0.0-1_all.deb dem Archiv experimental hinzu, welches sich im Basisverzeichnis ~/reprepro/debian befindet.
reprepro -b ~/reprepro/debian includedeb experimental /var/cache/pbuilder/sid-amd64/result/mediathekview_3.0.0-1_all.deb
Fügt das Quellpaket mediathekview_3.0.0-1.dsc dem Archiv experimental hinzu, welches sich im Basisverzeichnis ~/reprepro/debian befindet.
reprepro -b ~/reprepro/debian includedsc experimental /var/cache/pbuilder/sid-amd64/result/mediathekview_3.0.0-1.dsc
Allgemein:
reprepro -b [Basisverzeichnis] includedeb|includedsc ARCHIV [Pfad zum Deb-Paket]
Die Eingabe des Basisverzeichnisses kann man weglassen, wenn man eine Umgebungsvariable exportiert oder die nachfolgende Zeile in seine .zshrc einträgt. Z.B.
export REPREPRO_BASE_DIR='/home/apo/reprepro/debian'
Danach lassen sich Pakete mit
reprepro includeb experimental Mein-Paket.deb
von überall hinzufügen.
Entfernen lassen sich Pakete aus dem Archiv mit:
reprepro remove experimental Mein-Paket
Und mehr müsst ihr nicht wissen. Ein Tipp noch am Rande: Damit ihr das GPG-Passwort nicht permanent neu eingeben müsst, solltet ihr Programme wie Gnome-Keyring oder Keychain und gnupg-agent installiert haben, womit das Passwort zwischengespeichert wird.

Das eigene Deb-Archiv lokal verfügbar machen

Am einfachsten ist es nun auf das lokal erstellte Paketarchiv zuzugreifen, wozu lediglich diese Einträge der /etc/apt/sources.list hinzugefügt werden müssen.

deb file:///home/apo/reprepro/debian/ experimental main
deb-src file:///home/apo/reprepro/debian/ experimental main

Zur Sicherheit solltet ihr die Pin-Priorität dieser Pakete absenken, indem ihr einen Eintrag zur Datei /etc/apt/preferences hinzufügt. Im Regelfall muss sie zuerst angelegt werden. Mit ihr lässt sich präzise das Mischen von mehreren Paketquellen steuern. (Stichwort Apt-Pinning, siehe auch man apt_preferences.)

Package: *
Pin: release o=gambaru.de
Pin-Priority: 1

Da es sich bei meinen Paketen um experimentelle Pakete handelt, ist es am besten die Priorität auf 1, einen sehr niedrigen Wert, zu setzen. Ihr könnt das Ergebnis vorher und nachher mit
apt-cache policy
überprüfen.
Danach genügt wie immer
aptitude update
aptitude -t experimental mediathekview
um das eigene Paket via Apt mit allen Abhängigkeiten zu installieren.

Reprepro: Repository weltweit freigeben

Mit Hilfe eines Web- oder FTP-Servers lässt sich das eigene Archiv auch weltweit und nicht nur lokal verteilen. Die Konfiguration eines Webservers wie Lighttpd war mir schon einen eigenen Beitrag wert. Reprepro funktioniert natürlich auch mit Nginx und Apache.
Ich habe mich jedoch für einen FTP-Server entschieden. Hierzu benutze ich vsftpd. Die Anleitung für die Konfiguration im Zusammenspiel mit OpenArena lässt sich ganz einfach auch auf Reprepro übertragen.
In diesem Fall betreibt ihr den FTP-Server ausschließlich anonym ohne Schreibrechte. Ich habe den kompletten Debian-Ordner des Basisverzeichnisses von Reprepro mittels SCP hochgeladen und die Unterordner db und conf aus Sicherheitsgründen entfernt. Um die Paketquellen von gambaru.de einzubinden, müsstet ihr folgendes in der /etc/apt/sources.list eintragen und den gambaru_archiv-Schlüssel eurem Schlüsselring hinzugefügt haben.

deb ftp://46.182.19.209/debian experimental main
deb-src ftp://46.182.19.209/debian experimental main

Fazit

PPAs waren gestern, heute baut man sich sein eigenes Paketarchiv. 😉 Es gibt noch viele weitere Optionen von Reprepro zu entdecken. Unter anderem ist die automatische Verarbeitung von "incoming queues" möglich und das Spiegeln des kompletten Debian- und Ubuntu-Archivs! Wenn ihr häufig Deb-Pakete herunterladet und Bandbreite sparen wollt, hilft eventuell auch Apt-Cacher-NG, ein Proxy-Server, weiter.
Jeder, der bis hierhin gelesen hat, hat sich automatisch als Tester für zwei Pakete qualifiziert, an denen ich gerade arbeite und hoffe sie als Paketverwalter weiterpflegen zu dürfen. Bitte Bugs direkt hier oder in den alten Posts zu Mediathekview und Wbar melden. 🙂

Wbar: Wie nennt man eine Schnellstartleiste ohne Icons?

Es kann ziemlich viel Spaß machen für ein Debianpaket selbst verantwortlich zu sein. Fairerweise muss ich dazu sagen, dass Wbar nicht das komplexeste Paket ist und es da noch ein paar Steigerungsmöglichkeiten gibt bis man schließlich Paketverwalter des Apache- oder X-Servers ist oder gar das Linuxkernel-Paket betreut.
Nachdem ich damit begonnen hatte ein aktuelles Paket für Wbar auf Basis der Version 2.3.0 aus dem SVN-Repo zu bauen, schrieb ich ein paar Patches, die ein paar Rechtschreib- und Grammatikfehler und den Originalautor korrigierten, die Desktop-Datei modifizierten und die standardmäßige Symbolgröße auf 64 erhöhten. Schon zwei Tage später hatte Rodolfo Granata alle Patches berücksichtigt und eine neue Version 2.3.1 veröffentlicht, die nun keine unfreien Symbole mehr enthält.
Leider enthielt diese Version nun gar keine Icons mehr, was mich vor ein Problem stellte. Wie sollte ich eine Schnellstartleiste ohne Icons als "cool eye-candy" vermarkten? 😯
Debian besitzt einige Pakete, die ausschließlich aus Icons bestehen und die Themen für Desktopumgebungen wie LXDE, Gnome und KDE liefern. Der alte Paketverwalter von Wbar hatte noch auf die gnome-extra-icons zurückgegriffen. Diese sehen aber nach mehr als 10 Jahren im Archiv etwas altbacken aus. Außerdem liegen sie nur in einer geringen Auflösung vor, wodurch man beim Skalieren jeden Pixel sehen kann.
Danach habe ich mir noch kde-icons-crystal, kde-icons-nuvola und schließlich gnome-colors-common angesehen. Dabei fiel mir auf, dass in diesem Paket nahezu alle Icons aus der alten Wbar-Version 2.3.0 enthalten waren. Hier kamen sie also her.
Ich denke es war richtig die Icons zuvor zu entfernen, solange man ihre Lizenz nicht kennt. Da ich nun weiß, dass sie alle unter der GPL2 verfügbar sind, die gleiche Lizenz, die übrigens auch Wbar benutzt, sollte die Aufnahme in das Paket kein Problem darstellen. Ich dachte auch zuerst daran es einfach beim Installieren zu empfehlen, jedoch liegen die hochauflösenden Symbole als SVG-Dateien vor, die Wbar nicht darstellen kann.
Im Prinzip muss ich also jetzt die Copyright-Datei von Debian auf den neusten Stand bringen und die Autoren von gnome-colors-common ordentlich darin aufführen. Als Schrift werde ich fonts-liberation empfehlen, womit Wbar aus dem Stand funktionieren sollte.
Persönlich könnte ich auch ohne vorinstallierte Icons leben, denn mit wbar-config geht das Hinzufügen neuer Symbole im Handumdrehen. Auf der anderen Seite ist der erste Eindruck entscheidend und erfahrene Anwender installieren Wbar sowieso mit
aptitude install wbar -R
Jetzt muss ich nur noch den Entwickler überzeugen die alten Icons wieder in Wbar aufzunehmen. 🙄
P.S.: Ich warte immer noch darauf, dass jemand den ITP für das faenza-icon-theme durchzieht. Also wer sich berufen fühlt... 😉

Xclip: Copy&Paste mit Rxvt-Unicode, Vim, Elinks und der Konsole

Text kopieren von X nach Konsole ist manchmal keine ganz triviale Aufgabe. Umgekehrt leider auch nicht. Etwas einfacher macht es Xclip.
Im Regelfall lassen sich Texte mit der Maus markieren und mit einem Klick auf die mittlere Maustaste (bei nur zwei Maustasten beide simultan gedrückt halten) an einer anderen Stelle wieder einfügen (Primäre Auswahl). Ebenso funktioniert z.B. in Rxvt-Unicode die Tastenkombination Shift+Einfg. Ich stellte jedoch immer wieder fest, dass Text falsch formatiert in einer Konsolenanwendung gelandet ist.
Xclip ist da der ideale Helfer, wenn man in einer X-Anwendung, z.B. einem Browser, Text markiert und in der Zwischenablage (Clipboard) speichert und ihn dann in ein Konsolenprogramm mit STRG+v oder ALT+v einfügen möchte. Hier sind ein paar Ideen Xclip mit bekannter Software für die Konsole einzusetzen.

Xclip im Terminal und in Skripten

Z.B. Quellcode markieren und in der Datei clipboard ausgeben. Der Parameter -o gibt den Inhalt der primären Zwischenablage nach STDOUT aus.
xclip -o > clipboard
Xclip eignet sich auch hervorragend für Pipe-Konstruktionen. Hier wird z.B. die Ausgabe von dmesg | grep eth0 in die primäre Zwischenablage kopiert, die sich mit der mittleren Maustaste in jede X-Anwendung einfügen lässt.
dmesg | grep eth0 | xclip
Siehe auch man xclip.

Xclip und VIM

Glücklich darf man sich schätzen, wenn man nicht nur auf GRMLs ZSH-Konfiguration, sondern auch GRMLs .vimrc gestoßen ist. Der Tipp stammt ursprünglich aus dem Vim-Wiki.

:map <F7> :w !xclip<CR><CR>
:vmap <F7> "*y
:map <S-F7> :r!xclip -o<CR>

Wenn SHIFT-F7 im Terminal der Wahl nicht funktioniert und "*y den Text ebenfalls nicht wie vorgesehen in den Buffer von Vim kopiert, kann man noch eine andere Variante aus den Kommentaren zum Tipp benutzen.

vmap <F6> :!xclip -f -sel clip
map <F7> mz:-1r !xclip -o -sel clip`z

Sobald sich etwas in Vims Buffer befindet, lässt sich mit F6 dieser Inhalt in die Zwischenablage kopieren und wie gewohnt mit STRG+V in eine X-Anwendung einfügen. Anders herum geht es mit F7 innerhalb von Vim, wenn man zuvor einen Text in einer grafischen Anwendung kopiert hat.

Xclip und Elinks

Ich will nun niemanden zu Textbrowsern wie Elinks bekehren, aber es gibt auch Anwendungsfälle, in denen sie sich sehr gut mit grafischen Browsern und anderen Anwendung ergänzen. Es gibt leider Webseiten, die lassen sich selbst mit modernen Rechnern nur schwerfällig betrachten, wenn Javascript und Flash die Überhand zu nehmen scheinen. Ich benutze deswegen zum Download und Anschauen von Youtube-Videos gerne auch Elinks in Kombination mit Youtube-dl und dem MPlayer. Die Konfiguration funktioniert nicht nur mit betagten Oldtimern, sondern spart mir auch die Zeit beim Auffinden von neuen Videos.
Durch die Brille eines Textbrowsers betrachtet ist Youtube nur eine Ansammlung von Links zu mehr oder weniger gut gelungenen Videos. Im alten Beitrag benutze ich die y-Taste zum Download oder Abspielen eines markierten Links und Alt-y um das Video der aktuell aufgerufenen Seite zu verarbeiten.
Mit Elinks lässt sich ein Link natürlich nicht nur an Youtube-dl oder Mplayer delegieren. Nicht ganz einfach ist es, die Adresse der gerade besuchten Seite in Elinks an die Zwischenablage zu übergeben und den Link anschließend weiterzureichen. Benutzt man jedoch Xclip ist nur ein weiterer Eintrag im Optionsmanager notwendig.

Taste O -> Dokumente -> URI-Delegierung

Jetzt nur noch einen neuen Eintrag namens "Zwischenablage" hinzufügen, der den folgenden Befehl ausführt.
echo -n %c | xclip -i -selection clipboard
Bedeutet nichts anderes, als dass der Link an Xclip übergeben und in die Zwischenablage kopiert wird, von wo er mit STRG+v in jede X- oder Konsolenanwendung eingefügt wird. Je nach dem, ob nun die y-Taste oder Alt-y aufgerufen wird, lässt sich so der Link der gerade besuchten Webseite oder irgendein beliebiger Link auf einer Seite, der gerade ausgewählt ist, in die Zwischenablage kopieren und dort weiterverarbeiten.
Klingt nach einer esoterischen Lösung, jedoch ist sie außerordentlich schnell. Am besten behält man sie im Hinterkopf, wenn man wieder einmal Elinks, Irssi, Mplayer, Youtube-dl, Wget, Aria2 und andere bekannte Applikationen für die Konsole benutzt.

Rxvt-Unicode

Zum Schluss: Rxvt-Unicode oder kurz urxvt. Ein schlanker Terminal-Emulator, der über Unicode- und Perl-Unterstützung verfügt. Bert Münnich hat eine nette Sammlung von nützlichen Perl-Erweiterungen für urxvt zur Verfügung gestellt, darunter auch das Clipboard-Skript. Welche Veränderungen man dafür in der .Xdefaults/.Xresources vornehmen muss, steht z.B. im Gentoo-Wiki.
Mit Xclip und der Perl-Erweiterung ist es danach möglich auch Text in die Zwischenablage zu kopieren und umgekehrt auch von X-Anwendungen mit Control-v in Rxvt-Unicode einzufügen.
Kopiert das Clipboard-Skript nach /usr/lib/urxvt/perl, um es global verfügbar zu machen. Meine Optionen für die .Xdefaults sind dann:

urxvt*perl-lib:         /usr/lib/urxvt/perl
urxvt*perl-ext-common:  default,clipboard
urxvt.keysym.A-c:     perl:clipboard:copy
urxvt.keysym.A-v:     perl:clipboard:paste
urxvt.keysym.A-C-v:   perl:clipboard:paste_escaped
urxvt.clipboard.copycmd:  xclip -i -selection clipboard
urxvt.clipboard.pastecmd: xclip -o -selection clipboard

Hier wird der Pfad zu den Perl-Erweiterungen definiert und die neue Erweiterung clipboard freigeschaltet. Die restlichen Zeilen legen die Tastenkombinationen fest, mit denen man Text vom Terminal in die Zwischenablage kopieren und umgekehrt auch wieder einfügen kann. Wichtig ist auch hier, dass sowohl für das Kopieren als auch für das Einfügen Xclip verwendet wird.

Fazit

Ich bin mir sicher, jeder stößt im Laufe der Zeit auf das Kopieren-und-Einfügen-Problem. Zwar ist die Standardlösung mit dem Markieren von Text mit der Maus und dem Einfügen mit der mittleren Maustaste sehr bequem und dazu auch noch äußerst schnell ausgeführt, jedoch funktioniert das bei umfangreich formatiertem Text nicht immer bestens. Mit Xclip gibt es ein sehr leichtgewichtiges Programm, dass das Leben auf der Konsole auf jeden Fall angenehmer macht. 🙂