Schnell und schmerzlos: Editiere das MoinMoin-Wiki mit editmoin

Ich habe nun damit begonnen auch endlich mal einen Beitrag zu Debians Wiki zu leisten. Das Ganze wird durch MoinMoin angetrieben. Nur zur Erklärung für alle, die südlich der Donau wohnen, das ist nicht nur der abstruse Morgen-, Mittag- und Abendgruß der Nordlichter, sondern auch der Name einer freien Wiki-Software.
Wie gesagt habe ich mir nun schwer vorgenommen auch ein paar Einträge dort zu hinterlassen und das Ganze etwas mit Informationen zu füllen. Mein ultimatives Ziel jedoch ist es, dass irgendwann bei jedem Spiel ein kurzer, informativer Beitrag steht. Um was geht es, wie wird es installiert und konfiguriert und wie spielt man es eigentlich. Jetzt denke man sich noch ein grafisches Feuerwerk dazu und schon entsteht das "Debian Games Portal". So oder so ähnlich.
Bevor es soweit ist, brauchte ich zuerst einmal ein schlankes Werkzeug, mit dem sich das MoinMoin-Wiki bearbeiten ließ. Womit wir bei editmoin wären.
Wer schon mal das Debian Wiki mit dem Webbrowser angesteuert hat und versucht hat Seiten darin zu editieren, bemerkt unter anderem eine extreme Verzögerung beim Aufbau der Seiten. Ich habe keine Ahnung, woran das genau liegt, aber eigentlich kommt dafür nur die Hardware in Frage (Debian kann ja nicht Schuld sein. 😉 )
Mit editmoin hingegen geht das Editieren ganz leicht von der Hand, mit Hilfe des favorisierten Editors, in diesem Fall Vim.

aptitude install editmoin
aptitude install vim-addon-manager
vim-addons install editmoin

Mit diesen Befehlen wird editmoin installiert und zugleich auch die auf Vim zugeschnittene Syntax-Datei, mit der die Wiki-Syntax farblich hervorgehoben wird.
Nun muss man nur noch die Datei ~/.moin_users editieren und die URL des Wikis und den Benutzernamen angeben.

http://wiki.debian.org DEBIANBENUTZERIN

Danach genügt einfach editmoin und die entsprechende Seite, die man bearbeiten möchte, als Aufruf.
editmoin http://wiki.debian.org/Games/Atomix
Das ist alles. Der Vorteil: Keine Verzögerungen mehr beim Aufbau der Seite und bequemes Editieren im Lieblingseditor. Gerüchten nach zu urteilen funktioniert das auch auf etwas älterer Hardware. 🙂
editmoin

I3: ein verbesserter kachelnder Fenstermanager

In den letzten Monaten dominierten drei Desktopumgebungen bzw. Fenstermanager meine Rechner.
Gnome 3, Openbox und i3.

Zu meiner Vorliebe für Openbox, wenn es um einen klassischen Fenstermanager geht, brauche ich hier nicht mehr viel zu schreiben. Auch die Gemütslage zu Gnome 3 hatte ich letztes und vorletztes Jahr ausführlich beschrieben und immer noch ist 3.4 das Maß aller Dinge hier auf Debian Testing, was den Vorteil hat, dass man kontroversen Diskussion, wie den Veränderungen von Nautilus in 3.6, ein wenig entkommen kann.
Nun also i3. Zum einen lag das daran, dass ich mir letztes Jahr einen neuen Laptop kaufen musste und später feststellte, dass der Entwickler von i3 den gleichen benutzte. Zum anderen hatte ich schon seit längerem mit dem Gedanken gespielt einen neuen Fenstermanager auszuprobieren. Zwischenzeitlich hatte ich schon Awesome, Ratpoison und DWM angetestet, die allesamt für den Inbegriff ressourcenschonender, kachelnder Fenstermanager stehen.
Während DWM einfach nur die pure Effizienz inkarniert und Awesome sich mit etwas Geschick in LUA beliebig erweitern lässt, steht i3 seit Monaten für mich für eine Sache.

Einfachheit

Leute denken immer, wenn sie kachelnde Fenstermanager sehen und davon lesen, das sei nur was für Geeks und Programmierer. Lasst euch bitte bei i3 davon nicht blenden! Es brauchte nur ein Video und das typische

aptitude install i3

um sofort loszulegen, ohne Dokumentation zu wälzen und ohne den Fenstermanager neuzukompilieren. Ich werde an anderer Stelle noch kurz beschreiben, was man noch verändern kann und wo man ansetzen muss, um die kleinen Feinheiten herauszuarbeiten. Jedoch zum einfachen Loslegen genügt tatsächlich nur dieses Video und die Installation.

15.11.2015:
Damit die Warterei endlich ein Ende hat, hier einmal meine I3-config-Datei. Zum Ausprobieren einfach nach ~/.config/i3/ kopieren. Seit zwei Jahren hat sich hier kaum etwas bei mir verändert und ich bin immer noch mit den gleichen Einstellungen unterwegs. Interessant ist der letzte Absatz, wo ein paar zusätzliche Programme beim Einloggen gestartet werden und z.B. Chromium auf Arbeitsfläche 3 erscheint, wenn man die Supertaste+c drückt.
I3-config
Nicht vergessen auch noch i3status und i3lock zu installieren.
I3 läuft nun seit sechs Monaten auf meinem neuen Laptop und ist die Desktopumgebung meiner Wahl zum Erstellen von Debianpaketen. Man kann mit gutem Gewissen sagen: Schaut euch i3 an, ihr werdet es nicht bereuen.

http://i3wm.org/screenshots/

Das Video ist in Englisch, jedoch für Kenner der deutschen Sprache leicht zu verstehen. (Niemand möchte mein hessisches Englisch hören) 🙂
Also wenn ihr auf der Suche nach interessanten Fenstermanagern seid, vergesst nicht i3 einen Besuch abzustatten, mein persönlicher Favorit in den letzten sechs Monaten. Genug der Lobhuddelei, hier noch ein Bildschirmfoto
Fenstermanager i3

K.Mandla is back: inconsolation.wordpress.com

Sag niemals nie!. Passend zum Jahresanfang verkündete K.Mandla in seinem Blog kmandla.wordpress.com das Ende seiner Abstinenz vom Bloggen. Marlon war so freundlich und hat mich darauf auch per Mail hingewiesen, jedoch... ich war noch Abonnent seiner Posts und konnte deswegen auch sofort reagieren und das erste Kommentar im neuen Blog posten. 🙂
Warum soviel Aufhebens um ein anderes Blog? Nun, wer hier in den etwas älteren Artikeln liest, stößt immer wieder mal auf den Namen K.Mandla, dessen Blog mich inspiriert hat etwas Ähnliches zu machen und mich mehr mit älterer Hardware und Linuxanwendungen für die Konsole zu beschäftigen. Deswegen gehen eine Menge "kudos" an ihn. Bis heute habe ich noch nicht alle Ideen selbst ausprobieren können, die er in seinem alten Blog veröffentlicht hat, was ein Indiz für den immensen Output dieses Mannes ist.
In seinem neuen Blog inconsolation.wordpress.com, soll es etwas ruhiger weitergehen. Nicht mehr ganz so viele esoterische Systemeinstellungen, na wers glaubt. 😛
Wer Freude an Linux, älterer Hardware, kuriosen Systemeinstellungen und Anwendungen für die Konsole hat, sollte sich inconsolation.wordpress.com als Lesezeichen setzen.

unworkable: BitTorrent-Client für die Konsole und benutzbar

Eure guten Vorsätze für das neue Jahr? Meine, oder besser gesagt einer davon, sind: Auch mal was Kurzes schreiben. 🙂 Ich habe in letzter Zeit zu viele Ideen und eine davon war der Frage nachzugehen, was es denn sonst noch so für die Konsole an BitTorrent-Programmen gibt.
Zugegebenerweise an rTorrent kommt niemand vorbei. Ich bin nach wie vor überzeugt und fasziniert von diesem Programm. Es hat alles, was man sich von einem BitTorrent-Client wünschen kann und es kommt dazu noch mit dieser schicken Ncurses-Oberfläche.
rTorrent 2013
Übrigens enthält dieses Bild einen versteckten Fingerzeig auf ein anderes cooles Projekt. 🙂
Wieso sollte man sich also von rTorrent abwenden, wenn man eine tastengesteuerte Menüführung, mehrere Übersichtsseiten und zahllose Informationen praktisch zum Nulltarif geboten bekommt, will heißen, nichts was einen selbst 10 Jahre alten Rechner ins Schwitzen bringen könnte.
Noch mehr Minimalismus. Unworkable ist praktisch der Gegenansatz zu aria2. Während letzteres auch HTTP-, HTTPS-, FTP-, BitTorrent-Protokolle und ebenso Metalink beherrscht, konzentriert sich unworkable ausschließlich auf eine Sache - BitTorrent.

Bedienung?

unworkable Pfad zur Torrent-Datei
Kein Ncurses. Jedoch kann unworkable natürlich auch seeden. Standardmäßig jedoch werden eingehende BitTorrent-Verbindungen unterbunden und müssen erst mit der -p Option freigeschaltet werden. Das erhöht ein wenig die Sicherheit und trägt noch mehr zum minimalistischen Charme bei. Wer also nur ein BitTorrent-Programm für die Konsole sucht, das einzig und allein auf einen Zweck getrimmt ist und sehr ressourcenschonend ist, findet hier alles was er braucht.

ZNC: Ein funktionsreicher IRC-Bouncer – mit Anleitung

Was macht man, wenn man nicht nur eine Mailingliste verfolgen, sondern auch einem IRC-Channel beitreten soll, um dort über die aktuellsten Geschehnisse des Debian-Games-Teams auf dem Laufenden zu bleiben? Man greift zu ZNC, einem IRC-Proxy oder auch Bouncer genannt. Das tolle daran ist, dass die Verbindung zum Channel nie unterbrochen wird und man von überall, unterwegs und mit verschiedenen IRC-Klienten gleichzeitig sich zum Bouncer verbinden kann, der unter anderem die Fähigkeit besitzt den eigenen Channel-Nick zu reservieren und die Konversationen der letzten Stunden wiederzugeben, so dass man nichts verpasst.
In diesem Beitrag geht es um die Inbetriebnahme von ZNC auf einem vServer (natürlich funktioniert auch jeder Heimserver) für ein Netzwerk (irc.oftc.net) und mehrere Channel.

Installation

Wie immer einfach.
aptitude install znc

Konfiguration

Die Konfiguration ist genauso geradlinig. Immer wenn es in dem animierten GIF etwas schneller geht, müsst ihr nur die Standardeinstellung mit ENTER bestätigen.
ZNC-Anleitung
Der Port auf dem ZNC lauschen soll lässt sich beliebig festlegen. Sollte der IRC-Server, wie dies bei irc.debian.org der Fall ist, SSL unterstützen, muss ein Pluszeichen vor den Port des IRC-Servers gestellt werden. Ob es IPv4 oder doch schon IPv6 sein soll, Benutzername und Passwort, ist natürlich individuell verschieden.
Wer sich nicht sofort für das Aktivieren von zusätzlichen Modulen entscheiden möchte, kann das später immer noch nachholen. Dazu müsst ihr lediglich

/msg *status help

in eurem favorisierten IRC-Client eingeben, sobald ihr euch mit ZNC verbunden habt. Mit Befehlen wie

/msg *status ListAvailMods
/msg *status LoadMod Name-des-Moduls

erhaltet ihr Hilfe und könnt euren bevorzugten IRC-Gehilfen nachladen. Für mich war z.B. die log-Funktion wichtig, damit ich Nachrichten später noch lesen konnte. Für ZNC gibt es selbstverständlich auch ein Wiki, wo sich viele Hinweise und Antworten finden lassen und auch die obligatorische FAQ für ZNC.

Beispielkonfiguration mit Irssi

Wenn ZNC erst einmal auf dem Heim- oder vServer läuft, muss nur noch der favorisierte IRC-Klient so eingerichtet werden, dass dieser sich nun zuerst mit ZNC verbindet.
Für Irssi genügt z.B. folgender Eintrag in $HOME/.irssi/config:

servers = (
{
    address = "123.123.123.123";
    chatnet = "OFTC";
    port = "55555";
    use_ssl = "yes";
    ssl_verify = "no";
    autoconnect = "yes";
    password = "Apo:meingeheimesPasswort";
}

Die Adresse des ZNC-Servers, Port, Netzwerk, Benutzername und Passwort, das wars. Nach dem Start verbindet sich dann Irssi sofort verschlüsselt via SSL mit dem Bouncer, der wiederum eine verschlüsselte Verbindung zum IRC-Server irc.debian.org aufgebaut hat.
Wer sich E-Mail lesen gar nicht abgewöhnen kann, darf auch einen Cronjob einrichten und danach Logrotate anweisen einem die tägliche IRC-Logdatei per Mail zukommen zu lassen. 😉

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.

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

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. 🙂

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. 🙂