ConnochaetOS: Neue Software mit PKGBUILD selbst kompilieren

Ein Nachteil bei kleineren Linuxdistributionen ist, dass sie oftmals auf nur wenige Entwickler zurückgreifen können. Außerdem sind Webspace, Traffic und Zeit begrenzt und es fehlt einfach an Ressourcen, um jede verfügbare Software in einem Binärformat bereitstellen zu können.
Man kann dieses Problem in der Regel umgehen, indem man Werkzeuge wie Debians Alien oder Slitaz tazpkg benutzt, um Pakete fremder Distributionen in das eigene Format umzuwandeln. Das klappt bei kleineren Paketen oft sehr gut, man darf aber aber auch keine Wunder von so einer Transformation erwarten.
Bei Arch Linux und damit auch ConnochaetOS macht es keinen Sinn fremde Pakete umzuwandeln. Benutzer von Arch Linux werden mir sicher zustimmen, dass das Erstellen eigener Archpakete mit Hilfe von makepkg und dem Arch Build System(ABS) eine unkomplizierte Sache ist.
Um Pakete für ConnochaetOS zu bauen, empfand ich es am einfachsten mir das ABS zu installieren und die dort bereitgestellten PKGBUILDs an meine Bedürfnisse anzupassen.

pacman -S abs
pacman -S base-devel

Führt man danach als Benutzer root abs in einem Terminal aus, wird das Verzeichnis /var/abs mit den PKGBUILDs der verschiedenen Repos core, extra und community gefüllt. Die PKGBUILDs der Software befinden sich im namensgleichen Verzeichnis, welches nur noch auf den Rechner mit ConnochaetOS kopiert werden muss oder auch gleich an Ort und Stelle benutzt werden kann.
In meinem Fall wollte ich drei meiner Favoriten mtPaint, Irssi und C* Music Player für die i586 Architektur und ConnochaetOS übersetzen. Dazu genügt es, das sogenannte ARCH-Feld um den Eintrag 'i586' zu erweitern.
Für Irssi war das schon der einzige Trick. Mit

makepkg -s

im Verzeichnis, wo auch das PKGBUILD liegt, konnte ich dann das Paket kompilieren und mit

pacman -U Name_des_Pakets.tar.xz

installieren.
Beim C* Music Player alias cmus brauchte ich hingegen noch die Bibliothek libao und musste libpulse und libmpg als Abhängigkeiten streichen. Auf dem Thinkpad 600 benutze ich sowieso ausschließlich ALSA.
Für mtPaint wurde noch die Bibliothek lcms2 benötigt, die ich zum erfolgreichen Kompilieren zuerst übersetzen und installieren musste. Kurz zusammengefasst muss man also lediglich Pakete für i586 kompilieren und ggf. Abhängigkeiten entfernen, die man sowieso nicht gebrauchen kann. Zum Schluss kann man dann jedes beliebige Programm auch mit ConnochaetOS benutzen. Einziger Nachteil: Man muss sich in Zukunft um die Updates selbst kümmern.

Ihr könnt alle PKGBUILDs und auch noch ein paar zusätzliche von KMandla mit Hilfe des folgenden Links herunterladen.

ConnochaetOS_PKGBUILDs.tar

Hier ist noch ein PKGBUILD-Beispiel mit Irssi:

# $Id: PKGBUILD 125226 2011-05-25 19:11:10Z foutrelis $
# Maintainer: Giovanni Scafora <giovanni@archlinux.org>
# Contributor: Dan McGee <dan@archlinux.org>
pkgname=irssi
pkgver=0.8.15
pkgrel=5
pkgdesc="Modular text mode IRC client with Perl scripting"
arch=('i586')
url="http://irssi.org/"
license=('GPL')
depends=('glib2' 'openssl' 'perl')
optdepends=('perl-libwww: for the scriptassist script')
backup=(etc/irssi.conf)
source=(http://irssi.org/files/${pkgname}-${pkgver}.tar.bz2)
options=('!libtool')
md5sums=('1dcb3f511b88df94b0c996f36668c7da')
build() {
  cd "${srcdir}/${pkgname}-${pkgver}"
  ./configure --prefix=/usr
              --enable-ipv6
	      --with-proxy
	      --sysconfdir=/etc
	      --with-perl-lib=vendor
  make
  make DESTDIR="${pkgdir}" install
}

Irssi: Benutzerdefinierten Sound bei Benachrichtigung abspielen

Gibt es noch jemanden da draußen, der das Modul pcspkr standardmäßig deaktiviert? Während es sich danach definitiv entspannter auf der Konsole leben lässt, vermisse ich bei meinem IRC-Klienten Irssi jedoch die hörbare Benachrichtigung, wenn mein Chatname in irgendeinem Kanal erwähnt wird. Die Anleitung mit Tips&Tricks zu Irssi ist in Sachen Benachrichtung ziemlich eindeutig. Innerhalb von Irssi genügt es

/set beep_when_window_active ON
/set beep_when_away ON
/set beep_msg_level MSGS NOTICES DCC DCCMSGS HILIGHT
/set bell_beeps ON

auszuführen und wenn man gleichzeitig noch Screen benutzt ist STRG+a STRG+g ausreichend, um von einer visuellen Nachricht auf die hörbare umzuschalten.
Nur ohne das Modul pcspkr wird kein Systemklang abgespielt, weswegen ich mir das Perl-Skript beep.pl von der offiziellen Irssi-Homepage heruntergeladen habe. Um es automatisch zu starten, muss es nach ~/.irssi/scripts/autorun verschoben werden. Alternativ kann man es auch nach ~/.irssi/scripts/ kopieren und von dort einen Symlink nach autorun anlegen.
Mit

/set beep_command aplay /home/apo/alarm.wav

wird der benutzerdefinierte Abspielbefehl festgelegt. In meinem Fall wird mit aplay eine Wav-Datei abgespielt. Gleichzeitig kann man auch mit

/set beep_when_not_away ON

jederzeit und nicht nur bei Abwesenheit mit dem Beepbefehl geweckt werden.
Wer noch rätselt, ob es für diese Zwecke Fanfaren- oder Vuvuzelaklänge sein sollen, kann es auch ganz retro angehen lassen und auf den algorithmischen Symphonieeinzeiler zurückgreifen, den ich vor ein paar Monaten hier mal vorgestellt habe. 😀

rTorrent: Multiple watch-Ordner und fertige Downloads managen

Wenn wir heute schon beim Thema sind, möchte ich an dieser Stelle noch auf einen Tipp aus dem Wiki von Arch Linux zum Thema rTorrent hinweisen. Ich wusste, dass rTorrent verschiedene Ordner auf Torrents überwachen konnte. Mit einer weiteren Einstellung lassen sich die heruntergeladenen Dateien nach einem bestimmten Download/Upload-Verhältnis dann in vorher definierte Ordner verschieben.
Was mir jedoch fehlte, war die Möglichkeit einen schon fertigen Download nach einer Weile erneut zu seeden, indem ich lediglich den Torrent in den "watch"-Ordner kopierte und dann die komplette Datei von rTorrent automatisch erkannt und entsprechend verschoben wurde. Problematisch ist bei diesem Client jedoch, dass eine 100% fertige Datei, auf die rTorrent nachträglich aufmerksam gemacht wird, nicht automatisch verschoben werden kann. Dachte ich bis vor kurzem.
Für dieses spezielle Problem gibt es aber seit Version 0.8.6 eine Lösung. Ich bin mir nicht sicher, ob der Patch damals schon Eingang in Debian Squeeze gefunden hat, mit der aktuellen 0.8.9 Version in Unstable funktioniert es aber prächtig.
In der .rtorrent.rc sollten folgende Zeilen zu dem schon vorgestellten Setup hinzugefügt werden und ggf. meine alte system.method Zeile deaktiviert werden.

schedule = watch_directory_1,10,10,"load_start=~/downloads/watch/*.torrent,d.set_custom1=~/downloads/fertig/"
schedule = watch_directory_2,10,10,"load_start=~/downloads/watch/linux/*.torrent,d.set_custom1=~/downloads/fertig/Linux/"
system.method.insert=checkdirs1,simple,"not="$equal={d.get_custom1=,d.get_base_path=}""
system.method.insert=movecheck1,simple,"and={checkdirs1=,d.get_complete=,d.get_custom1=}"
system.method.insert=movedir1,simple,"d.set_directory=$d.get_custom1=;execute=mv,-u,$d.get_base_path=,$d.get_custom1=;d.set_custom1=;d.stop=;d.start="
system.method.set_key=event.download.hash_done,move_hashed1,"branch={$movecheck1=,movedir1=}"

Die Konfiguration scheint auf den ersten Blick etwas kryptisch zu sein, im Prinzip macht sie aber nur folgendes:
Zeile 1+2: Hier werden zwei verschiedene Ordner auf neue Torrents überwacht. Sobald hier ein neues Torrent hin verschoben wird und rTorrent läuft, beginnt automatisch der Download/Upload-Vorgang. Nach der Fertigstellung wird das Ergebnis je nach dem in welchem Ordner die Torrents gespeichert wurden, nach ~/downloads/fertig/ oder ~/downloads/fertig/Linux/ gespeichert.
Zeile 4: Überprüft ob das Torrent sich schon im Ziel Ordner befindet (false) oder eben woanders liegt (true).
Zeile 5: Überprüft ob das Torrent zu 100% komplett ist, der Wert aus Zeile 4 true zurückliefert und die Variable custom1 (der Zielpfad) existiert.
Zeile 6: Auf Basis der Ergebnisse aus Zeile 4+5 wird die fertige Datei in den Zielordner verschoben, rTorrent erkennt, dass das geschehen ist und verteilt den Download ab sofort aus dem neuen Zielordner.
Zeile 7: Wenn ein Torrent gehasht wird und in Ordnung ist, wird Zeile 6 ausgeführt. Zeile 7 ist also wichtig, falls eine Überprüfung des Torrents stattfindet. Alle Zeilen davor funktionieren auch, wenn kein Hashing mehr notwendig ist.
Mit diesen Zeilen kann ich also ein fertiges Linux ISO in den "todo"-Ordner verschieben und rTorrent erkennt an dem Ort der Torrent-Datei, wohin diese fertige Datei verschoben werden muss und seedet danach entsprechend meiner Einstellung weiter.

Transmission: BitTorrent mit Daemon und Konsole

Versprochen ist versprochen. Im letzten August hatte ich geschrieben, dass Transmission neben rTorrent mein Favorit und bevorzugter grafischer Client für Bittorrent ist. Doch wenn es auch ohne GUI gehen soll, lässt einem Transmission nicht im Stich. Kurz entschlossen installierte ich den Transmission Daemon, damit ich die gesamte Anwendung über ein Webinterface oder die Konsole steuern konnte.
Damals funktionierte leider die Ncurses-Oberfläche nicht, die ich vorstellen wollte, doch mit Transmission 2.33 in Unstable und dem letzten Stand des Konsolenclients transmission-remote-cli, lassen sich nun alle Aufgaben mit Ncurses auch über einen Terminal erledigen.

Installation

aptitude install transmission-daemon

Konfiguration

Die Konfiguration des Daemons findet bei Debian und Ubuntu in /etc/transmission-daemon/settings.json statt. Die einzelnen Optionen und was sie bewirken, werden ausführlich im Transmission-Wiki unter der Rubrik EditConfigFiles beschrieben. Erklärt wird dort auch, wo sich die Konfigurationsdateien bei Debian&Co finden lassen.
Die voreingestellten Werte garantieren schon den unkomplizierten Zugriff auf den Server und die Bedienung mit Hilfe der verschiedenen Frontends. Das gilt aber nur, wenn man sowohl Client als auch Server auf dem gleichen Rechner sehen will. Wer hingegen den Transmission-Daemon fernsteuern möchte, sollte noch die IP-Adresse der zugreifenden Clients mit Hilfe der Einstellung rpc-whitelist in settings.json hinzufügen. Wildcards sind ebenso möglich.

"rpc-whitelist": "127.0.0.*,192.168.*.*"

Man muss nur beachten, dass der Daemon-Prozess vorher mit
/etc/init.d/transmission-daemon stop
beendet worden ist, da ansonsten die Einstellungen automatisch wieder auf den vorherigen Zustand zurückgesetzt werden.

transmission-remote-cli

Es gibt danach verschiedene Möglichkeiten auf Transmission ohne grafische Oberfläche zuzugreifen. Die einfachsten Werkzeuge sind transmission-cli und transmission-remote, mit denen man lokal oder entfernt Befehle an den Daemon delegieren kann. Wer eine an rTorrent angelehnte Ncurses-Oberfläche sucht, sollte sich das in Python geschriebene transmission-remote-cli von github herunterladen.
Befindet sich der Client schließlich auf der Whitelist, muss man nur noch in einem Terminal
python transmission-remote-cli.py -c Benutzername:Passwort@IP-Adresse:Port
ausführen, um sich mit dem Server zu verbinden. In meinem konkreten Beispiel also:

python transmission-remote-cli.py -c transmission:transmission@192.168.0.105:9091



Die Bedienung erklärt sich mit der ? Taste von selbst. Transmission-remote-cli beherrscht die üblichen Fähigkeiten eines BitTorrent-Clients, darunter die Justierung für die Up- und Downloadrate, Start und Pause, Verifizierung des Torrents und gewährt auch Einblick darüber, was man gerade herunterlädt. Die Torrents lassen sich schnell mit s nach Alter, Seedern, Leechern, Ratio, Größe und mehr sortieren. Mit f kann man zwischen den gleichen Ansichten wie bei rTorrent umschalten. Das Einzige was mich gestört hat, war die fehlende Tab-Vervollständigung beim Hinzufügen von Torrents mit der Taste a.
Fazit für alle Transmission-Fans: Wer Transmission gut findet und den BitTorrent-Client auf einem Server fernsteuern möchte, hat gleich mehrere Optionen zur Hand, Webinterface, pure Konsole oder die Ncurses Schnittstelle. Anforderungen an die Hardware? Der Server ist der knapp 11 Jahre alte Inspiron 4000, als Client benutzte ich für diesen Test den 14 Jahre alten Thinkpad 600. Jetzt muss nur noch jemand den Python-Client für Debian packen. 😉

NFS-Dateiserver mit Slitaz

Im Hintergrund wird fleißig an Slitaz 4.0 gewerkelt und vielleicht gerade weil die letzte Cooking-Version vom Mai letzten Jahres stammt, gibt es trotzdem noch ein paar gute Gründe mit der aktuellen stabilen Ausgabe einige Aufgaben zu lösen. Ich habe mich etwas umgesehen und einen NFS-Server mit Slitaz 3.0 eingerichtet, mit dem ich Dateien zwischen den Clients im lokalen Netzwerk, sprich dieser kleinen Hardwaresammlung hier, austauschen kann.
Damit es halbwegs spannend wurde, habe ich den Toshiba Satellite 220CS zum NFS-Server umfunktioniert. Klingt beim ersten Lesen dramatischer als es ist, zum Schluss musste ich nur zwei Pakete installieren und ein Paar Textdateien bearbeiten.

Secure Shell - SSH

Beim lokalen Datenaustausch kommt bei mir im Regelfall immer SSH zum Einsatz und auch für einen sftp-Server finde ich ab und an Verwendung. Wenn ich Zugriff per SSH häufiger benötige, setze ich auch sshfs ein, wodurch sich entfernte Dateisysteme genauso problemlos wie Festplatten oder USB-Sticks einbinden lassen.
Die Secure Shell stellt bei älteren Rechnern eine wahrnehmbare Anforderung an CPU und Arbeitsspeicher, was außer für den Satellite 220CS bisher aber noch kein wirkliches Problem war. Erst bei einem Pentium I mit 16 MB RAM halte ich es für sinnvoll von OpenSSH zu Dropbear zu wechseln, weil man hier die bessere Performance tatsächlich spüren kann.

Network File System - NFS

Benötigt man hingegen keinen vollständigen Zugriff auf einen Rechner, lässt sich auch sehr gut mit dem Network File System leben, das nur geringe Anforderungen an die Hardware stellt. In Slitaz stabilen Repositorien existiert nur das Paket unfs3, welches den NFS-Server für den User Space mit der älteren Version 3 des Protokolls anbietet. Bei Debian hat sich hier seit längerem schon der nfs-kernel-server durchgesetzt, der zuverlässiger und schneller funktionieren soll. Unfs3 hingegen wurde 2010 aus Testing entfernt.
Er wird scheinbar auch nicht mehr weiterentwickelt. Das letzte Update auf sourceforge stammt aus 2009, dennoch eignet sich die Slitaz-Version noch für ein privates Heimnetzwerk mit einer überschaubaren Anzahl von Rechnern, denen man vertrauen kann. Die Installation ist denkbar einfach:

Installation

tazpkg get-install unfs3


Gleichzeitig wird portmap als Abhängigkeit mitinstalliert.

Konfiguration

Damit der NFS-Server beim Booten schon gestartet wird, muss die Datei /etc/rcS.conf editiert werden und in der Zeile RUN_DAEMONS noch die Dienste portmap und unfsd hinzugefügt werden. Meine Einstellungen sehen so aus.

RUN_DAEMONS="dropbear portmap unfsd "

Der NFS Server lässt sich auch manuell mit
/etc/init.d/unfsd start
starten.
Schließlich werden die Pfade zu den Ordnern, die man freigeben möchte, in /etc/exports eingetragen und dort die entsprechenden Zugriffsrechte gesetzt.

#/home/tux/musik nur lesend für jeden Rechner freigeben
/home/tux/musik     (ro)

#/home/tux/downloads lesend und schreibend freigeben
/home/tux/downloads     (rw)

#/home/tux nur lesend für den Rechner 192.168.0.207 freigeben
/home/tux/     192.168.0.207(ro)

Die weiteren Optionen für die Freigabe werden gut im Artikel NFS im Wiki von ubuntuusers.de beschrieben. Um nicht in jeder Konfigurationsdatei mit einer statischen IP-Adresse zu hantieren, lohnt es sich auch einmalig in /etc/hosts einen Rechnernamen für eine IP festzulegen und nur noch mit diesem Namen zukünftig zu arbeiten. Ändert sich aus irgendwelchen Gründen die IP, muss sie nur noch in /etc/hosts geändert werden.

Zugriff als Client

Auf Debian basierenden Systemen lässt sich eine Freigabe mit folgendem Befehl manuell in ~/nfs einhängen, wenn der Server mit der IP 192.168.0.100 erreichbar ist. Zuvor muss das Paket nfs-common installiert worden sein.
mount 192.168.0.100:/home/tux/musik ~/nfs
Wer gerne automatisch diese Freigabe einbinden möchte, kann dies in der /etc/fstab festlegen. Über nützliche Optionen hierzu, gibt das ubuntuusers.de Wiki ebenfalls Aufschluss.
Mit

showmount -e 192.168.0.100

erhält man als root auch die Liste der Freigaben des Servers.

Fazit

NFS ist selbst auf dem 16 Jahre alten Laptop noch performant genug, um Musikdateien über das Netzwerk verzugslos abspielen zu können. Einen NFS-Server für den Hausgebrauch einzurichten ist gar nicht so schwierig. Fortgeschrittene Optionen wie Kerberos-Unterstützung wird man hier kaum brauchen. Gerade für ein homogenes Netzwerk, in dem UNIX/Linux Rechner zum Einsatz kommen, lohnt sich NFS als unkomplizierte Möglichkeit zur Dateifreigabe.

VLC und der Framebuffer

Die besten Multimedia-Abspieler der Welt sind Freie Software. Seit Anfang an benutze ich entweder Totem mit Xine oder Gstreamer, VLC und natürlich Mplayer. Heute ist es in der Regel so, dass ich Totem wegen Gnome 3 noch standardmäßig installiert habe, ansonsten aber nur noch den ausgezeichneten Mplayer verwende. Nach zahlreichen Selbstversuchen hat sich hier einfach herausgestellt, dass Mplayer gerade auf älteren Rechnern den Unterschied ausmacht. Verzichte auf die GUI und steuere ihn über die Konsole und Tastatur, wende ein paar Tricks&Tipps an und schon sind selbst h264-Videos auf dem Inspiron 4000 möglich.
Das Debian-Paket für Mplayer ist schon vollkommen ausreichend, man kann ihn auch speziell für den Framebuffer selbst kompilieren und jegliche Abhängigkeit zu X entfernen. Einfacher geht es auch mit deb-multimedia.org, wo ein mplayer-nogui Paket schon bereitgestellt wird.
Zum Vergleich habe ich mir VLC für den Framebuffer angeschaut, den ich bis vor 2-3 Jahren regelmäßig benutzt habe und ihn auf dem Thinkpad 600 mit Squeezes vlc-nox Paket, also ohne X Ballast, installiert.
VLC lässt sich wie gewohnt über die Kommandozeile bedienen und hat auch ein Ncurses Interface, das sich mit nvlc oder vlc -I ncurses aufrufen lässt.

Einen Überblick über die Tastaturbelegung liefert h. Wenn man mit B den Dateibrowser aufruft, kann man schnell zum Musik- oder Videoordner navigieren und mit Enter den Track hinzufügen. Einmal noch die Leertaste betätigen und das Lied wird abgespielt.
Im Gegensatz zu cmus bietet die Ncurses-Schnittstelle nicht das gleiche Maß an Übersichtlichkeit und Funktionen. Hier lässt sich mit cmus deutlich mehr machen.
Bei der Videowiedergabe mit VLC hatte ich zuerst ein Problem, was dazu führte, dass Videos nicht richtig skaliert wurden. Die Fehlermeldung besagte:

swScaler: pal8 is not supported as output pixel format

Nach einer kurzen Suche stellte sich heraus, dass einige inoffizielle Pakete von deb-multimedia.org die Ursache waren. Nach einer Deinstallation von VLC und dem Deaktivieren der Quellen in der sources.list, installierte ich vlc-nox erneut, wonach keine Probleme mehr mit Software Scaling auftraten. Das ist das erste Mal in zehn Jahren, dass die Repos von Christian Marillat hier ein Problem verursacht haben, man muss vielleicht nur lange und tief graben.
Zwar war es nun möglich ein älteres 320x240 großes MPEG-1 Video abzuspielen, leider konnte ich VLC nicht dazu bewegen den Vollbildmodus zu verlassen. Mplayer hingegen stellt das Video standardmäßig in seiner Originalgröße dar, was sich vollkommen ruckelfrei noch auf dem Pentium II Laptop ansehen lässt.
Scheinbar ist es mit dem Fbdev-Ausgabetreiber nicht möglich auf die Vorteile von Hardwarebeschleunigung zurückzugreifen. Alles wird mit Hilfe der Software berechnet, was die CPU dann an ihre Grenzen führt. Die Musik wird hier noch problemlos abgespielt, Bild und Ton sind aber nicht mehr synchron. Vollbild im Framebuffer lässt sich mit Mplayer so erreichen:

mplayer -vo fbdev -fs -vf scale=1024:-3 Name_des_Videos.mkv

  • -vo fbdev: Der Framebuffer Videoausgabetreiber
  • -fs: Vollbild
  • -vf scale: 1024 für die maximale Breite des Videos und meiner maximalen Auflösung auf dem Thinkpad entsprechend und -3 zwingt Mplayer dazu die Höhe proportional zur Größe des ursprünglichen Videos anzupassen.

Mit VLC versuchte ich so ziemlich alles zusätzlich zu --vout fb, aber weder --autoscale, --scale, --width und --height bewirkten hier etwas und die VLC Kommandozeilen-Hilfe brachte keine entscheidenden Hinweise.
Mein Fazit momentan ist, dass cmus zum Musikabspielen flexibler und ressourcenschonender ist und deutlich weniger Abhängigkeiten installiert. Mit Mplayer habe ich selbst im Framebuffer noch die Möglichkeit das Video mit den gewohnten Tastaturkürzeln zu steuern, wohingegen VLC lediglich die eingeschränkten Möglichkeiten der Ncurses-Schnittstelle bietet.
Möglicherweise wurde das Paket auch ohne QT4-Unterstützung kompiliert, was die begrenzten Möglichkeiten mit dem Framebuffer erklären könnte, wenn ich die Aussage des VLC-Entwicklers im Forum richtig verstehe.
Doch am Ende denke ich, dass Mplayer und cmus für mich diese Aufgabe einfacher besser erledigen.

Newsbeuter: Auf der Jagd nach den Feeds

Zum Lesen von Feeds benutze ich seit geraumer Zeit canto, ein in Python geschriebener Feedreader für die Konsole. In den letzten Monaten hat sich meine Liste mit Feeds immer mehr vergrößert und nun stellte ich fest, dass das Lesen von Feeds auf dem Thinkpad 600 nur verzögert möglich war und beim Scrollen Canto förmlich "laggte".
Als Alternative erwähnte ich schon Newsbeuter, den ich deswegen auf dem Laptop und dem Core Duo installiert habe. Newsbeuter bezeichnet sich selbst als Mutt der Feedreader. Wer jetzt schlucken musste und an komplizierte Konfiguration dachte kann aber aufatmen. Im Gegenteil lässt sich damit die tägliche Dosis Nachrichten und Information mit Hilfe der guten Dokumentation schnell einrichten.

Installation

aptitude install newsbeuter

Feeds hinzufügen

vim ~/.newsbeuter/urls

https://www.gambaru.de/blog/feed/ linux
http://www.heise.de/newsticker/heise-atom.xml itnews
http://distrowatch.com/news/dwd.xml linux

Mit einem Texteditor trägt man die verschiedenen URLs der Feeds ein und kann sie gleichzeitig mit einem Schlagwort versehen, welches durch ein Leerzeichen getrennt angehängt wird. Die Datei urls lässt sich auch innerhalb von Newsbeuter mit der Taste E editieren.

Konfiguration

vim ~/.newsbeuter/config

max-items 20
browser elinks

Diverse Einstellungen und Kommandos lassen sich in der config-Datei an die eigenen Wünsche anpassen. Eine Übersicht bietet die Tabelle "Configuration Commands". Mir genügt es die maximale Anzahl der dargestellten Nachrichten auf 20 zu begrenzen.
Mit dem browser-Kommando lässt sich der Browser, in dem die Artikel geöffnet werden, beliebig festlegen. In der Standardeinstellung berücksichtigt Newsbeuter die globale "x-www-browser"-Variable, so dass ich außer max-items überhaupt nichts zu ändern brauchte.

Bedienung

Mit newsbeuter wird der Feedreader von der Konsole aufgerufen. Mit R werden alle Feeds aktualisiert, r hingegen erneuert nur ausgewählte Listen. Ein N symbolisiert neue Nachrichten, die sich mit A als gelesen markieren lassen.
Mit Enter werden die Einträge in Newsbeuter geöffnet und man kann mit o den Artikel im Browser aufrufen. Zur Tag Ansicht kommt man mit t, wo die Feeds gemäß den Einträgen in der Datei urls dargestellt werden.


Das war im Prinzip auch schon das ganze Geheimnis. Möchte man wie bei Canto noch die Möglichkeit haben Bilder innerhalb von Newsbeuter anzuzeigen, sollte man sich noch diese Zeile in die Config-Datei eintragen und feh und iceweasel durch die eigenen Favoriten für Bildbetrachter und Browser ersetzen.

macro i set browser "feh %u"; open ; set browser "iceweasel %u"

Innerhalb von Newsbeuter gelangt man mit u zur URL-Ansicht. Navigiert man auf den Link zur Bilddatei und drückt hintereinander , i wird das Makro ausgeführt, das Bild in feh angezeigt und anschließend die Browservariable wieder auf iceweasel gesetzt. Alles weitere lässt sich durch ? erfahren oder in der offiziellen Dokumentation nachschlagen.
Newsbeuter kann man auch zum Anschauen von Podcasts benutzen, wozu er mit podbeuter gestartet wird. Weitere hilfreiche Informationen dazu gibt es im Wiki auf ubuntuusers.de.
Insgesamt existieren noch zahlreiche weitere Konfigurationsmöglichkeiten, doch zur schnellen Jagd auf Feeds, lässt sich mit wenigen Einstellungen schon auskommen.

Zsh und vils: Leerzeichen von Dateinamen in Vim durch Unterstriche ersetzen

Ich habe vor einiger Zeit aus Neugier die Bash mit Zsh ersetzt und dabei auf die sehr nützliche Konfiguration von .zshrc und .zshrc.local von Grml zurückgegriffen. Seitdem habe ich auf jedem Rechner mit Ausnahme des Toshiba Satellite 220cs, dort läuft immer noch die ash von Busybox, die Shell ausgetauscht.
An dieser Stelle will ich nicht lange über Zsh schwärmen und davon erzählen, warum euer Leben sinnlos ist, solange ihr Zsh nicht selbst ausprobiert habt. (Es gibt genug Seiten, die das tun.) Nein, womöglich kommt man als normaler Mensch auch wunderbar mit der Bash aus, sowie das bei mir jahrelang der Fall war. Dennoch...der Austausch war einfach und ich konnte mir das Installieren der bash-completion und die farbenfrohe Veränderung der Bash dank Grml sparen.
Abgesehen davon, dass ich nun eine phänomenale Tab-Vervollständigung habe und nicht mehr nur eine großartige, dass meine Tippfehler praktischerweise korrigiert werden und ich mit Hilfe von vils problemlos Dateien und Ordner in Vim umbenennen kann, musste ich mich bisher auch kaum umstellen.
Mehr über vils lässt sich auf freshports.org erfahren, wo es zwei Links zum Herunterladen dieses kleinen Skripts gibt.

Das Skript sollte man mit chmod u+x ausführbar machen und am besten gleich nach /usr/local/bin kopieren, damit man es im $PATH benutzen kann.
Die Bedienung ist simpel. Man führt es im Verzeichnis aus, indem man die Dateien oder Unterverzeichnisse umbenennen möchte, wodurch alle Namen in Vim importiert werden und dann beliebig geändert werden können. Speichert man danach, werden alle Dateien und Ordner dementsprechend umbenannt.
Als Hinweise werden im Skript genannt:

  1. Man solle die Nummern vor jeder Zeile nicht entfernen.
  2. Wenn man eine Zeile löscht und abspeichert, wird die Datei nicht gelöscht.
  3. Man kann jedes Zeichen zum Ersetzen benutzen, nur muss man doppelt angeben.
  4. Es wird vor dem Überschreiben gleichlautender Dateinamen gefragt.
  5. Man kann den Dateinamen von zwei oder mehr Dateien nicht austauschen.
  6. Man kann gezielt einzelne oder mehrere Dateinamen in Vim laden, indem sie auf der Kommandozeile übergeben werden. (vils datei1 datei2 datei3)

Leerzeichen mit Unterstriche tauschen

Ich entferne im Visual-Block-Modus immer die vorangestellten Nummern und füge sie nach der Umbenennung wieder ein. STRG+v, dann d zum Löschen und später p zum Einfügen. Das ist ein Weg um zu verhindern, dass das erste Leerzeichen zwischen der Nummer und dem Dateinamen durch einen Unterstrich ersetzt wird. Danach genügt im Normalmodus:
:%s/ /_/g
Nachdem die Nummern wieder eingefügt und alles abgespeichert wurde, sind sämtliche Leerzeichen durch Unterstriche ersetzt worden.
Wenn man sich nun noch ein paar Reguläre Ausdrücke vorstellt, lässt sich so ziemlich jedes Umbenennungsproblem innerhalb von Vim mit Hilfe von vils lösen und man kann auf diese Lösung, die aber ebenso gut funktioniert, verzichten.

FreeDOS: Multiboot-System mit dem Toshiba Satellite 220cs

Es macht Spaß FreeDOS in einer virtuellen Maschine unter Linux auszuprobieren oder das sehr praktische DOSEMU zum Starten von DOS-Programmen und Spielen zu benutzen. Ich denke, das ist die einfachste Möglichkeit um mit FreeDOS den Einstieg in die DOS-Welt zu wagen. Natürlich war mein nächstes Ziel das Freie Betriebssystem auch auf dem Toshiba Satellite 220cs zum Laufen zu bringen, was schon fast als logische Konsequenz für einen Laptop aus dem Jahr 1996 mit 16 MB RAM anmutet.

Installation

Ich habe mich erneut für die Installation mit Qemu entschieden, die Festplatte des 220cs ausgebaut und mit Hilfe des USB-IDE-Adapters und mit dd ein Abbild der Festplatte erzeugt. Der große Vorteil liegt darin, dass man gleichzeitig ein Backup hat und bedenkenlos experimentieren kann. Eine einfache Lösung ist sicherlich ein leeres Raw-Image zu erstellen, FreeDOS zu installieren und mit dd auf die Festplatte zu schreiben. Wie es geht, hatte ich bei meiner Vorstellung von FreeDOS gezeigt.
Da ich die bestehenden Betriebssysteme Slitaz und KolibriOS behalten wollte, habe ich das Dateisystem meiner Slitazinstallation verkleinert und anschließend die Partition mit fdisk verändert. Mit Hilfe der Debian Netzinstallations-CD habe ich im Rettungsmodus folgendes gemacht.

e2fsck - f /dev/hda2
resize2fs -p /dev/hda2 600M


Mit fdisk wurde die Partition hda2 neu angelegt und auf 700M verkleinert und zusätzlich hda3 als dritte primäre Partition mit W95 FAT32 erstellt. Nach einem Neustart in Slitaz konnte ich dort erneut

resize2fs -p /dev/hda2


ausführen, damit das Dateisystem exakt an die neue Partitionsgröße angepasst wurde. Bei der Operation muss auf jeden Fall das Dateisystem vor der Partitionierung verkleinert werden, ansonsten kommt es zum Datenverlust. Mit dem zusätzlichen "resize2fs"-Schritt ohne Angabe der Größe wird das Dateisystem schließlich exakt an die Partitionsgröße angepasst.
Hat man diese Vorbereitungen abgeschlossen, kann man FreeDOS mit Hilfe von Qemu installieren, wobei das Installationsprogramm automatisch die erste FAT32-Partition als Laufwerk C: erkennt. Wem das nicht geheuer ist, kann es auch mit xfdisk überprüfen.

qemu -hda toshiba.img -cdrom fdfullcd.iso -boot d

Da ich schon ein vollständiges FreeDOS-Abbild hatte, verzichtete ich dieses Mal auf die meisten zusätzlichen Anwendungen und installierte nur base, games und media.

GRUB-Menü in Slitaz anpassen

Slitaz 3.0 benutzt noch GRUB 1. Meine /boot/grub/menu.lst sieht momentan so aus.

title Slitaz GNU/Linux (Kernel 2.6.30.6-slitaz)
root (hd0,1)
kernel /boot/vmlinuz-2.6.30.6-slitaz root=/dev/hda2 vga=788
title KolibriOS
root (hd0,1)
kernel /boot/memdisk
initrd /boot/kolibri/kolibri.img
title FreeDOS
rootnoverify (hd0,2)
chainloader +1
makeactive

FreeDOS-Einstellungen

Ein paar Änderungen der Voreinstellungen halfen mir auf dem 220cs Laptop weiter. Wer gerne Startzeiten von Betriebssystemen vergleicht, wird sich bei FreeDOS über die 2 Sekunden von GRUB bis zum Prompt freuen. Dazu sollte in der fdconfig.sys
MENUDEFAULT=3,0
stehen. Dabei stellt die Zahl 3 sicher, dass FreeDOS mit dem HIMEM-XMS-Memory-Treiber geladen wird, um Programme im erweiterten Speicher ausführen zu können und mit 0 wird die Verzögerung bei der Wahl des Menüpunkts auf 0 Sekunden gesetzt.
Standardmäßig werden zwei Treiber in den XMS-Speicher geladen, die 12 MB von 16 MB RAM belegten. Um später das Musikprogramm Mpxplay starten zu können, musste ich zumindest einen davon in der fdconfig.sys für Auswahl 3 deaktivieren.
12?DEVICEHIGH=C:FDOSbincdrcache.sys FDC0001 CDRCACH0 6000
Erwähnenswert ist auch, dass man die Energiesparfunktionen mit fdapm APMbios oder fdapm APMoff des BIOS ein- und ausschalten kann, was verhindert, dass die Festplatte nach jedem Kommando in den Ruhezustand versetzt wird. FreeDOS APM-Modus lässt sich mit fdapm APMdos wieder einschalten.

Mpxplay

FreeDOS bringt das Freie Musikprogramm Mpxplay mit, mit welchem sich zahlreiche Formate wie z.B. mp3, ogg oder FLAC abspielen lassen. Damit Mpxplay funktionierte, änderte ich die DMA-Einstellung für den Soundblaster-Treiber in der autoexec.bat für die Yamaha-Opl3sa2-Soundkarte von 1 auf 0.
SET BLASTER A220 I5 D0 H5 P330
Soundkarte und Lautsprecher des Toshiba Laptops sind zwar nach wie vor vermutlich nicht die beste Lösung für eine audiophile Umgebung, um einen Raum zu beschallen sind sie aber ausreichend. Leider habe ich noch nicht das Screenshotprogramm gefunden, deswegen hier nur ein Foto. Ich bin auf jeden Fall beeindruckt. MP3- und OGG-Dateien ließen sich problemlos abspielen.

USB und Netzwerk

USB und Internet waren in den 80igern und Anfang der 90iger noch in weiter Ferne. Erst mit Windows 95 gab es später eher schlecht als recht USB-Support. Umso mehr überrascht es deswegen vielleicht, dass es sowohl USB-Support als auch Netzwerkunterstützung für FreeDOS gibt. Im folgenden finden sich einige Links zu Seiten, die ich für lesenswert halte und für die Zukunft hier dokumentiere.

  • USB with DOS - Ein Artikel von 2003 zum USB Support mit DOS
  • cholla.mmto.org - Englischer Beitrag zum Thema Netzwerken mit DOS
  • FreeDOS on a Compaq Contura Aero - Englische Anleitung zur FreeDOS Installation auf einem Compaq Laptop von Ulrich Hansen (empfehlenswert)
  • Networking FreeDOS - Ulrich Hansens 40 Seiten umfassende Arbeit zum Thema FreeDOS und Networking im Wiki Format (beeindruckend, sehr empfehlenswert, es gibt auch ein nahezu identisches pdf Dokument namens dosnet.pdf, welches sich leicht im Netz finden lässt)
  • Das Dokument wurde auch ins Deutsche übersetzt und befindet sich in der FreeDOS Hilfe und lässt sich dort als Netzwerken unter FreeDOS finden.
  • FreeDOS Hilfe in Deutsch

Scheinbar wird darin sogar die Inbetriebnahme einer meiner 3com-Netzwerkkarten beschrieben, weswegen ich zuversichtlich bin, dass ich später einmal mit FreeDOS im Internet unterwegs bin. 😉
Ich denke die Installation der Treiber und das Einrichten des Netzwerks ist momentan mit Slitaz zwar einfacher. KolibriOS und FreeDOS ergänzen den Laptop jedoch um einige coole Funktionen. Die Installation von FreeDOS empfand ich als eher einfach, die Soundkarte war mit einer kleinen Änderung sofort einsatzbereit und zahllose Spiele für FreeDOS gibt es obendrauf. Für ein Multibootsystem auf jeden Fall mehr als einen Blick wert.

Mehrere Pbuilder und Hooks: rxvt-unicode-256color von Debian Sid nach Squeeze backporten

Mit Pbuilder wollte ich noch den Terminalemulator rxvt-unicode-256color von Debian Sid nach Debian Squeeze zurückporten. Dabei sind ein paar Probleme aufgetreten und die Lösungen zum Nachschlagen habe ich hier verewigt.
Wie ich hierhin gekommen bin, habe ich in den Artikeln zum Paketbau mit Debian, Mplayer für den Framebuffer, einen Backportversuch mit Pbuilder und den Beitrag zum maßgeschneiderten DWM-Fenstermanager niedergeschrieben. Du kannst dich natürlich auch sofort in die Details stürzen.
Nachdem ich DWM und Surf erfolgreich mit pbuilder kompiliert und in ein Deb-Paket verschnürt hatte, machte ich guten Mutes mit rxvt-unicode-256color weiter. Das Paket ließ sich ebenfalls problemlos übersetzen, doch als ich es auf dem Thinkpad mit Debian Squeeze installieren wollte, fehlte mir eine aktuellere Abhängigkeit von ncurses-term.
Um aber ncurses-term erfolgreich zu bauen, brauchte ich wiederum die aktuelle Version von debhelper aus dem offiziellen Backports-Archiv.

Wie man einen Backport von rxvt-unicode-256color erstellt

apt-get source rxvt-unicode-256color
apt-get source ncurses-term

Randbemerkung: Beim Verändern meiner Tastaturbelegung mit xmodmap habe ich einen 5 Jahre alten Debian Bug ausgegraben. Scheinbar löst die Tastenkombination Strg+Shift ein ISO14755 Feature aus und ein nicht zu übersehendes Rechteck wird auf dem Bildschirm angezeigt. Der Bug ist wohl in rxvt-unicode-lite behoben, in 256color aber absichtlich nicht.
Das Verhalten lässt sich ausschalten, indem man die Option --enable-iso14755 in debian/rules auf --disable-iso14755 setzt. Quellpaket danach mit dpkg -b source aktualisieren!

Kopiert man dann die unten beschriebenen Skripte bzw. Konfigurationsdatei an die richtige Stelle lassen sich DEB-Pakete für i386 und Squeeze mit dem folgenden Befehl bauen. Beim ersten Mal noch --override-config anhängen, damit die geänderte config eingelesen wird!

ARCH=i386 DIST=squeeze pbuilder build ncurses_5.9-4.dsc
ARCH=i386 DIST=squeeze pbuilder build rxvt-unicode_9.12-1.dsc

Die fertigen Pakete befinden sich danach in /var/cache/pbuilder/squeeze-i386/result
Die folgenden Skripte und Konfigurationen wurden mit geringen Änderungen aus dem Pbuilder Howto auf ubuntu.com übernommen. Empfehlenswert zum Nachlesen! Außerdem hilft man pbuilder weiter.
Hat man Pbuilder einmal so eingerichtet, lassen sich damit auch von einem Debiansystem Pakete für Ubuntu und umgekehrt erstellen, womit man ab sofort Software für 2/3 aller Linuxdistributionen leicht selbst übersetzen kann. 😉

Hooks

apt-preferences

Mit sogenannten Hooks lässt sich Pbuilder dazu bewegen, gewisse Prozesse und Abläufe mit Hilfe von Skripten automatisch während des Paketbaus oder davor und danach auszuführen. Mein Hook-Verzeichnis ist /var/cache/pbuilder/hook.d
Mit dem folgenden ausführbaren Skript E01apt-preferences wird den Paketen debhelper und lintian aus dem offiziellen Backport-Archiv eine höhere Pin-Priorität zugewiesen als den regulären Squeeze-Paketen. Damit werden beide Pakete automatisch aus Backports installiert, falls diese angefordert werden. Apt-Pinning hatte ich schon einmal allgemein vorgestellt, diese Methode hier demonstriert das Anpinnen von zwei spezifischen Paketen in /etc/apt/preferences innerhalb der Build-Umgebung von Pbuilder.

#!/bin/sh
set -e
STABLE_VERSION_REGEX='^6.0.[0-9]+

Es wird empfohlen das Verwenden von Backports auf das absolut notwendige Minimum zu begrenzen und so weit es geht auf die reinen Squeeze-Pakete zurückzugreifen.

Eine Shell ausführen, wenn das Bauen fehlschlägt

Das Skript wird als C10Shell in /var/cache/pbuilder/hook.d abgespeichert. Laut Pbuilder-Howto soll es für alle ausführbar sein (a+x). Ich muss hier in Zukunft einmal genauer nachforschen, ob das tatsächlich immer notwendig ist und ob man Pbuilder auch problemlos im User Mode Linux (UML) betreiben kann.

#!/bin/sh
# Shell aufrufen, wenn das Bauen fehlschlägt
apt-get install -y --force-yes vim less bash
cd /tmp/buildd/*/debian/..
/bin/bash < /dev/tty > /dev/tty 2> /dev/tty

Multiple Pbuilder und Archive: Konfiguration für pbuilderrc

HOOKDIR="/var/cache/pbuilder/hook.d/"
OTHERMIRROR="deb http://backports.debian.org/debian-backports squeeze-backports main"
# Codenamen für die verschiedenen Debian Versionen.
# Einfach editieren, falls die Codenamen sich in Zukunft ändern
UNSTABLE_CODENAME="sid"
TESTING_CODENAME="wheezy"
STABLE_CODENAME="squeeze"
STABLE_BACKPORTS_SUITE="$STABLE_CODENAME-backports"
# Liste der Debian Versionen.
DEBIAN_SUITES=($UNSTABLE_CODENAME $TESTING_CODENAME $STABLE_CODENAME
    "unstable" "testing" "stable")
# Liste der Ubuntu Versionen.
UBUNTU_SUITES=("natty" "maverick" "lucid" "karmic" "jaunty" "intrepid" "oneiric")
# Debian-Spiegel
DEBIAN_MIRROR="ftp.de.debian.org"
UBUNTU_MIRROR="mirrors.kernel.org"
# Falls die Version nicht zu ermitteln ist, durchsuche das Changelog nach Hinweisen
if [ -z "${DIST}" ] && [ -r "debian/changelog" ]; then
    DIST=$(dpkg-parsechangelog | awk '/^Distribution: / {print $2}')
    # Benutze die Unstable Version für bestimmte Versions Werte
    if $(echo "experimental UNRELEASED" | grep -q $DIST); then
        DIST="$UNSTABLE_CODENAME"
    fi
    # Benutze die Stable Version für Backports.
    if $(echo "$STABLE_BACKPORTS_SUITE" | grep -q $DIST); then
        DIST="$STABLE"
    fi
fi
# Optional: Standard Distribution/Version angeben
# z.B (${DIST:="unstable"}).
: ${DIST:="$(lsb_release --short --codename)"}
# Optional: Debians generische Namen(stable, testing, unstable) in die jeweiligen Codenamen umändern
case "$DIST" in
    unstable)
        DIST="$UNSTABLE_CODENAME"
        ;;
    testing)
        DIST="$TESTING_CODENAME"
        ;;
    stable)
        DIST="$STABLE_CODENAME"
        ;;
esac
# Optional: Die Standardarchitektur angeben. Z.B. (${ARCH:="i386"}).
: ${ARCH:="$(dpkg --print-architecture)"}
NAME="$DIST"
if [ -n "${ARCH}" ]; then
    NAME="$NAME-$ARCH"
    DEBOOTSTRAPOPTS=("--arch" "$ARCH" "${DEBOOTSTRAPOPTS[@]}")
fi
BASETGZ="/var/cache/pbuilder/$NAME-base.tgz"
# Optional: BASEPATH (und nicht BASETGZ) setzen, wenn man cowbuilder benutzt
# BASEPATH="/var/cache/pbuilder/$NAME/base.cow/"
DISTRIBUTION="$DIST"
BUILDRESULT="/var/cache/pbuilder/$NAME/result/"
APTCACHE="/var/cache/pbuilder/$NAME/aptcache/"
BUILDPLACE="/var/cache/pbuilder/build/"
BINDMOUNTS="/var/cache/archive"
if $(echo ${DEBIAN_SUITES[@]} | grep -q $DIST); then
    # Debian configuration
    MIRRORSITE="http://$DEBIAN_MIRROR/debian/"
    COMPONENTS="main contrib non-free"
    DEBOOTSTRAPOPTS=("${DEBOOTSTRAPOPTS[@]}" "--keyring=/usr/share/keyrings/debian-archive-keyring.gpg")
    #OTHERMIRROR="deb file:///var/cache/archive $DIST/"
elif $(echo ${UBUNTU_SUITES[@]} | grep -q $DIST); then
    # Ubuntu configuration
    MIRRORSITE="http://$UBUNTU_MIRROR/ubuntu/"
    COMPONENTS="main restricted universe multiverse"
    DEBOOTSTRAPOPTS=("${DEBOOTSTRAPOPTS[@]}" "--keyring=/usr/share/keyrings/ubuntu-archive-keyring.gpg")
   #OTHERMIRROR="deb file:///var/cache/archive $DIST/"
else
    echo "Unknown distribution: $DIST"
    exit 1
fi
if $(cat "/etc/debian_version" | grep -q -e "$STABLE_VERSION_REGEX"); then cat > "/etc/apt/preferences" << EOF Package: debhelper Pin: release a=squeeze-backports Pin-Priority: 999 Package: lintian Pin: release a=squeeze-backports Pin-Priority: 999 EOF fi

Es wird empfohlen das Verwenden von Backports auf das absolut notwendige Minimum zu begrenzen und so weit es geht auf die reinen Squeeze-Pakete zurückzugreifen.

Eine Shell ausführen, wenn das Bauen fehlschlägt

Das Skript wird als C10Shell in /var/cache/pbuilder/hook.d abgespeichert. Laut Pbuilder-Howto soll es für alle ausführbar sein (a+x). Ich muss hier in Zukunft einmal genauer nachforschen, ob das tatsächlich immer notwendig ist und ob man Pbuilder auch problemlos im User Mode Linux (UML) betreiben kann.

Multiple Pbuilder und Archive: Konfiguration für pbuilderrc