Posts mit dem Label Linux werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Linux werden angezeigt. Alle Posts anzeigen

Freitag, 10. November 2017

Debian Package Creation HowTo

Debian-Pakete zu erstellen, ist ein Prozess, der viel Wissen voraussetzt. Es geht dabei auch darum, einen hervorragenden Ruf in Bezug auf Qualität der Software und des Paketformats der Linux-Distribution aufrecht zu erhalten. In unserem Buch zu Debian-Paketmanagement wurde sicher schon deutlich, wie vielschichtig das Thema Paketverwaltung ist.



Für das Newsportal Linuxhint entstand jetzt ein Beitrag, der den Ablauf des Bauens von Paketen verständlicher macht. Der Beitrag ist keine vollständige Anleitung, erleichtert aber den Einstieg und verhilft Ihnen zu ersten Erfolgserlebnissen. Für Verbesserungen dazu bin ich dankbar. Diese können direkt an das GitHub-Archiv erfolgen.

Mittwoch, 11. Oktober 2017

Noch mehr Artikel auf StackAbuse

In den letzten Tagen sind zwei weitere Artikel von mir auf StackAbuse erschienen. Im ersten geht es um symbolische Links -- wie man dieser erstellt und validiert. Dazu gehört auch die Vorstellung des Werkzeugs symlinks.

Der zweite Beitrag widmet sich dem Thema des Findens bestimmter Inhalte in Textdateien, komprimierten Dateien sowie Archiven. Ebenfalls dürfen Rechenblätter von Tabellenkalkulationen und PDF-Dokumente nicht zu kurz kommen. Behilflich sind hierbei Werkzeuge wie zgrep, loook und pdfgrep.

Suche mittels loook
Hier geht es zu den beiden (englischsprachigen) Artikeln:

Montag, 18. September 2017

Die Ausgabe von Asciidoc nach PDF anpassen

Asciidoc ist eine textbasierte Sprache (Markup Language). Diese vereinfacht es erheblich, (Text)Dokumente zu Erstellen, zu Pflegen und deren Änderungen in Revisionskontrollsystemen wie Git nachzuverfolgen. Aufgrund der Kompaktheit und Verständlichkeit der Sprache hat Asciidoc den Prozess zur gemeinsamen Erstellung und Pflege von Büchern, Dokumentation und Schulungsmaterial erheblich erleichtert.

Bei Asciidoc handelt es sich um Plaintext mit speziellen Markierungen. Erst durch den expliziten Aufruf eines Übersetzerprogramms wandeln Sie diesen Ursprungstext über mehrere Zwischenstufen in das gewünschte Zielformat um, bspw. zu Postscript, PDF, HTML, Epub und Handbuchseiten (Manpages). Im UNIX/Linux-Werkzeugkasten finden Sie dafür bspw. Asciidoc, a2x, Asciidoctor und Asciidoctor-pdf.

Der Weg von Asciidoc nach PDF funktioniert entweder über Dblatex oder über den Apache Formatting Objects Processor -- kurz FOP. Der erste Weg setzt auf die Werkzeugkette aus DocBook, xsltproc und Dblatex, der zweite nutzt statt Dblatex die auf Java basierende Software FOP. Beide Wege werden durch das Programm a2x gekapselt, d.h. mit einem einzigen Aufruf angestoßen. Für Dblatex sieht der Aufruf wie folgt aus:

a2x -f pdf document.adoc

Der Schalter -f pdf veranlasst a2x, das Backend Dblatex zu benutzen. Für die Verwendung von FOP nutzen Sie stattdessen diesen Aufruf:

a2x --fop document.adoc

Zur Demonstration nutzen wir dieses Asciidoc-Dokument, in den beiden vorherigen Aufrufen schlicht als document.adoc bezeichnet. Der darin genutzte Text stammt nicht vom Autor selbst, sondern wurde aus dem Wikipedia-Artikel zu Kapstadt entnommen und etwas bearbeitet.

:author: Frank Hofmann

= Visiting South Africa =

== Cape Town ==

Cape Town is a port city on South Africa’s southwest coast, on a peninsula beneath the imposing Table Mountain. Slowly rotating cable cars climb to the mountain’s flat top, from which there are sweeping views of the city, the busy harbor and boats heading for Robben Island, the notorious prison that once held Nelson Mandela, which is now a living museum.

image::capetown.jpg[width=200]


Die erzeugten Ergebnisse in der Ausgabe fallen durch die verwendeten Stilvorlagen recht unterschiedlich aus. Während der Weg über Dblatex sowohl ein Titelblatt, die Revisionshistorie des Dokuments sowie ein Inhaltsverzeichnis produziert, ist die Ausgabe via FOP deutlich kompakter.

Das erzeugte PDF via Dblatex

Das erzeugte PDF via FOP
Dblatex bietet eine Reihe von Schaltern, um die Elemente der Ausgabe zu verändern. Möglich sind zum Beispiel diese hier:

BedeutungParameter
kein Inhaltsverzeichnis-P doc.toc.show=0
nur Tabellenverzeichnis -P doc.lot.show=table
nur Abbildungsverzeichnis -P doc.lot.show=figure
Überschriftenebene -P doc.section.depth=5
keine Versionshistorie -P latex.output.revhistory=0
blau hinterlegte Links -P latex.hyperparam=colorlinks,linkcolor=blue
als Encoding Latin1 nutzen -P latex.encoding=latin1
Papiergröße Letter -P paper.type=letterpaper
Wasserzeichen einfügen -P draft.watermark=1
Schneidemarken einfügen -P crop.marks=1

Im Aufruf sieht das dann wie folgt aus, um weder eine Revisionshistorie zu erhalten und lediglich eine Liste der Tabellen:

a2x -f pdf --dblatex-opts "-P latex.output.revhistory=0 -P doc.lot.show=table" document.adoc

Am besten legen Sie das in einem Shellskript ab. Das erleichtert nicht nur das Experimentieren mit den Parametern, sondern auch die spätere Automatisierung im Übersetzungsprozess.

Automatisierung als Shellskript
Das obige Skript erwartet einen zusätzlichen Parameter im Aufruf. Dieser beinhaltet den Namen ihres Dokuments, welches Sie nach PDF übersetzen möchten. Benennen Sie ihr Skript convert2pdf.sh und übersetzen ihr Dokument namens document.adoc, sieht der Aufruf wie folgt aus:

./convert2pdf.sh document.adoc

Das fertige PDF-Dokument liegt dann im lokalen Verzeichnis vor.

Montag, 3. Juli 2017

Mageia Linux 6 RC mit Kindersicherung

Wie bereits berichtet, finalisieren derzeit die Entwickler von Mageia ihre nächste Veröffentlichung -- die Release 6. Nach den bisherigen Tests zur urteilen läuft das Gesamtsystem ausgesprochen stabil und ist tauglich für die angepeilte Gruppe der Ein- und Umsteiger (Endbenutzer). Es ist schnörkellos, einfach zu bedienen und übersichtlich.

Geeignet ist es nicht nur für Nutzer, die (noch) keine Technikfreaks oder Linux-Profis sind, aber mehr als nur die Auswahl von Ubuntu haben wollen und sich trotzdem nicht scheuen, zu verstehen, wie das alles funktioniert und zusammenhängt.

Kindersicherung in Mageia 6

Bemerkenswert ist die integrierte Kindersicherung. Obwohl bereits in den vorherigen Veröffentlichungen enthalten, verfügt unseres Wissens nach keine andere Mainstream-Distribution über ein solches Feature.

Sie erreichen diese Einstellungsoption im Control Center unter den Netzwerkeinstellungen. Darüber legen Sie pro Benutzer fest, welche Programme und Dienste dieser verwenden und wie lange und innerhalb welcher Zeiten er bspw. im Internet surfen darf. Somit haben Sie ihren Nachwuchs und dessen Internetkonsum stets im Blick.

Mittwoch, 28. Juni 2017

PDF-Dokumente auseinanderzupfen

Jeder von uns kennt das -- wir bekommen ein PDF-Dokument und benötigen nur eine bestimmte Seite daraus. Nachfolgend stehen zwei Möglichkeiten im Fokus, das Ziel ohne viel Tamtam zu realisieren.

Variante 1 ist Gimp. Öffnen Sie ihr PDF-Dokument mit dem Bildbearbeitungsprogramm, erhalten Sie ein Dialogfenster, aus welchem Sie die gewünschte Seite auswählen. Diese Seite speichern Sie dann über den Menüpunkt Exportieren als ... unter einem neuen Namen.

Auswahl der einzelnen Seite in Gimp
Variante 2 geht über das Werkzeug pdfseparate aus dem Paket poppler-utils. Mit dem Aufruf 

pdfseparate document.pdf page-%d.pdf

auf der Kommandozeile zerlegen Sie das Originaldokument namens document.pdf in alle Einzelseiten. Jede Seite wird als PDF mit der entsprechenden Seitennummer gespeichert, so finden Sie bspw. die Seite 1 in page-1.pdf. 

Benötigen Sie nur ausgewählte Seiten, kommen zwei Schalter ins Spiel. Über die beiden Schalter -f (für first) und -l (für last) grenzen Sie ein, welches die erste bzw. letzte extrahierte Seite werden soll. Hiermit erhalten Sie die nur die dritte bis fünfte Seite:

pdfseparate -f 3 -l 5 document.pdf page-%d.pdf

 

Donnerstag, 8. Juni 2017

Mageia Linux 6 RC

Control Center im Mageia 6 (XFCE-Design)
Stets im Sommer erscheint eine neue Version der französischen Linux-Distribution Mageia. 2010 geforkt vom Mandriva-Projekt, hat sich die Distribution mittlerweile einen guten Ruf erarbeitet. Der erste Test des RC für die Version 6 war sehr positiv. Mehr dazu in Kürze.

Dienstag, 30. Mai 2017

Cubietruck im Alltagsbetrieb

Cubieboard 3 (Cubietruck) im Test
Vor über einem Jahr liefen mehrere Tests mit dem Cubieboard 3 (Cubietruck) sehr erfolgreich. Seitdem war das Board vorrangig als Fileserver auf der Basis des Debian-Derivats Armbian für Schulungszwecke im Einsatz. Bei meinen Linux-Trainings ließ sich leistungsstarke Board zum Mitbringen immer wieder gut in Szene setzen.

Inzwischen bekam das Board ein mattschwarzes Gehäuse, was es gegen Staub schützt und zudem auch leichter transportabel macht. Es bleibt darin genügend Platz für eine 2.5"-Festplatte, die das Leistungsspektrum des Cubietruck nochmal steigert.

Gehäuse für das Cubietruck
Ordentlich bedruckt macht das Gehäuse einen professionellen Eindruck und ist somit auch endkundentauglich. Die Reaktionen darauf waren bislang nur positiv.

Das Gehäuse mit den sauber ausgeführten Anschlüssen
Derzeit entsteht in Zusammenarbeit mit dem Berliner Kooperationspartner Zugangswerk e.V. ein Prototyp für eine Aufzeichnungssoftware, die auf dem Cubieboard aufsetzt. Grundlage dafür bildet wiederum ein Etherpad Lite, welches auf die speziellen Bedürfnisse von den Nutzern -- hier Dolmetschern -- angepaßt wird. Jetzt stehen intensive Tests an, um noch störende Bugs zu beseitigen.

Sonntag, 28. Mai 2017

Analyse der Ausführungszeit eines Kommandos in der bash

Für diesen Anwendungsfall -- das Messen der Ausführungszeit eines Programms -- existiert das UNIX-Kommando time. Es ermittelt diese drei Werte:
  • real: die gesamte, tatsächliche Ausführungszeit (elapsed real time)
  • user: die Zeit, in der die CPU tatsächlich den (User-)Code des Programms ausführt (Total number of CPU-seconds that the process spent in user mode)
  • sys: jene Zeit, in der die CPU mit Ausführung von Kernel-Code für das Programm beschäftigt ist (Total number of CPU-seconds that the process spent in kernel mode) 

Beispiel 1

Um die Zeit zu ermitteln, rufen Sie time vor ihrem eigentlichen Kommando auf:

$ time find . -user frank
...
real   0m3.681s
user   0m0.248s
sys    0m0.916s
$

Das Beispiel ermittelt alle Dateien, die dem Benutzer frank gehören. time rechnet aus, dass find dafür 3.6s benötigt.

Skripting in der Praxis

Spannender wird die Zeitmessung, wenn mehrere Kommandos zusammenspielen, bspw. in einem Shellskript. Nachfolgend geht es darum, die User ID und den dazugehörigen Namen des UNIX-Nutzers zu ermitteln, der ein Skript gerade aufruft. Variante 1 greift auf interne Variablen und das Kommando whoami zurück:

#!/bin/bash
userId=$UID
userName=$(whoami)
echo "the script runs as user $userName with UNIX id $userId"

Variante 2 nutzt stattdessen grep und cut:

#!/bin/bash
userId=$UID 
userName=$(grep ":$UID:" /etc/passwd | cut -d: -f 1)
echo "the script runs as user $userName with UNIX id $userId"

In Variante 3 kommen grep und awk zum Einsatz:

#!/bin/bash
userId=$UID
userName=$(grep ":$UID:" /etc/passwd | awk -F : '{ print $1 }')
echo "the script runs as user $userName with UNIX id $userId"

Für Puristen ist die Variante 4 -- diese nutzt ausschließlich awk:

#!/bin/bash
userId=$UID
userName=$(awk -F : '/:'$userId':/ { print $1 }' /etc/passwd)
echo "the script runs as user $userName with UNIX id $userId"

Das das auch mit einer Skriptsprache wie Perl geht, zeigt das Variante 5:

#!/usr/bin/perl -w
$username=$ENV{'LOGNAME'};

# read /etc/passwd
open(FH, "/etc/passwd") || die "Cannot open /etc/passwd: $!";
{
  while(<FH>) {
    # look for the user name
    if (m/^${username}:/) {
      @fields=split(/:/, $_); 
 
      # extract user id
      $uid=$fields[2];
      print "the script runs as user $username with UNIX id $uid\n";
     }
   }
}
close(FH);

Auswertung der Laufzeit

Nun wird es spannend, welche der fünf Varianten am flinkesten ist. Rufen Sie die Konstrukte alle einzeln auf, liefert time bei allen einen Wert von etwa 1s. Um die Unterschiede deutlicher sichtbar werden zu lassen, bauen wir eine Schleife drumherum und lassen das ganze 10000 Mal durchlaufen:

#!/bin/bash
# define loops
loops=10000

time {
  for((i=$loops; i>0; i--))
  do
    userId=$UID
    userName=$(whoami)
    echo "the script runs as user $userName with UNIX id $userId"
  done
} | grep "real"

Analog erfolgt das auch für die Varianten 2 bis 5. Folgendes Ergebnis wird sichtbar:

Variante Ausführungszeit
Variante 1 mit whoami 8.25s
Variante 2 mit grep und cut 11.03s
Variante 3 mit grep und awk 17.1s
Variante 4 nur mit awk 13.9s
Variante 5 mit Perl 15.22s

Fazit

Eindeutiger Gewinner ist Variante 1, gefolgt Variante 2 und Variante 4. Es hilft also doch, bei der Programmierung stets die Laufzeit im Blick zu behalten.

Links

Samstag, 27. Mai 2017

Beweiszettel. Linux-Zertifizierungen kurz angerissen

Bücher zur Vorbereitung -- eine kleine Auswahl.
Beschäftigen Sie sich mit dem freien Betriebssystem Linux, rutschen Sie heute vielfach noch in die Kategorie der Exoten. Dabei ist Linux inzwischen ein Vierteljahrhundert alt und gehört in der IT-Welt zum Alltag. Damit werden nicht nur vereinzelte Endgeräte betrieben, sondern komplette Rechenzentren gefüllt.

Mit Linux nur zu arbeiten, ist das eine. Hingegen mehr davon zu verstehen und es auch produktiv nutzen zu können, das andere. Ein guter Weg, nachzuweisen, dass Sie mehr als nur der Oberflächenklicker sind, ist ein Zertifikat. Dieses steht dann für eine oder mehrere Prüfungen.

Grundsätzlich sortieren sich die Zertifizerungen in zwei Klassen ein -- distributionsübergreifend und distributionsspezifisch. Als Anbieter umfaßt das auf der einen Seite das Linux Professional Instititute (LPI), die Linux Foundation und die Computing Technology Industry Association (CompTIA). Auf der anderen Seite stehen die Hersteller bzw. Distributoren RedHat und SuSe.

Diese Prüfungen für Zertifikate werden derzeit angeboten:

Form Anbieter/Programm Zertifikat (Auswahl)
distributionsübergreifend LPI, Linux Foundation, CompTIA
distributionsspezifisch RedHat, SuSe
Aufgrund der längeren Marktpräsenz gelten die LPIC-Zertifikate als etabliert und werden bspw. auch durch die Bundesagentur für Arbeit öffentlich gefördert.
Weitaus seltener unterstützt werden RHCE/RHCSA sowie die SUSE-Prüfungen, nicht zuletzt weil sie herstellerspezifisch sind.

Im Prinzip erst seit 2017 am deutschen Markt vertreten und daher noch nicht so bekannt in Deutschland sind die Abschlüsse der Linux Foundation. Neben einem ansehnlichen Angebotsumfang kann es mit zwei großen Namen auftrumpfen -- Linus Torvalds und Microsoft. CompTIA ist zwar ebenfalls schon lange in Deutschland vertreten, tritt aber weniger als Linux-Spezialist auf.

Montag, 1. Mai 2017

Training Linux/Programmierung mit der bash in Hamburg 6.+7. Juni 2017

Diese bash -- immer muss ich da so viel eintippen! Wenn das nicht alles irgendwie einfacher gehen würde. Aber das geht tatsächlich und Sie können das auch erlernen. Aber es ist eine ganze Menge an Stoff.

Hier findet der nächste Kurs statt -- es gibt noch freie Plätze:

dama.go Hamburg, Süderstraße 77, 20097 Hamburg
Dienstag, den 6. und Mittwoch, den 7. Juni 2017
9h00-16h30

Kontakt und Anmeldung zum bash-Kurs:
Stefanie Johannsen Cömert
Telefon: (040) 254 133 950

Und das steht bisher als Themen auf dem Plan:

  • Die bash im Detail
  • Die bash als Programmiersprache
  • Praktische Shellskripte
  • Interaktive Shellskripte
  • Der Stromeditor sed
  • Die Programmiersprache awk

Die Schulung findet auf einem Debian GNU/Linux statt.

Mittwoch, 11. Januar 2017

Auswertung mit NumPy, Pandas und Matplotlib

Die drei Python-Bibliotheken NumPy, Pandas und Matplotlib erlauben eine Datenauswertung mit graphischer Darstellung. Die Ausgabe der Wegstrecken für 2016 ergibt nachfolgende Grafik. Jeder enthaltene Staffelbalken repräsentiert dabei einen Monat.

Darstellung als Staffelbalken mit Legende

Die Legende in obiger Abbildung wird automatisch erzeugt, ist hier aber noch nicht optimal. Gleiches gilt für die verwendeten Farben in der Darstellung. Ideal wäre, wenn jede Wegstrecke eine eigene, unverwechselbare Farbe hätte.

Zur Erzeugung der Grafik kommt zunächst dieser Aufruf zum Einsatz:

df = pd.DataFrame(distances, index=month,columns=pd.Index(travelDescription))
df.plot(kind='barh', stacked=True)

df ist ein DataFrame aus der Pandas-Bibliothek. Dieser wird gefüttert mit den Distanzen, den Zeitintervallen und den Beschreibungen der jeweiligen Wegstrecke. plot() berechnet daraus die horizontalen Balken, der Parameter stacked=True sorgt für die Staffelung.

Die Methode plot() kennt einen weiteren Parameter namens colormap, mit der Sie die Farbauswahl steuern. Zur Auswahl stehen über ein dutzend Farbsets, bspw. Blues, Pastel1, Pastel2, spectral oder auch autumn. Je nach Farbset ist es ein Übergang zwischen zwei einzelnen Farben oder ein mehrstufiges Spektrum. Eine genaue Übersicht liefert Ihnen dazu das SciPy Cookbook. Die nachfolgende Abbildung benutzt das Farbset Set1 und macht die Darstellung schon aussagekräftiger. Folgender Aufruf wird dazu genutzt:

df.plot(kind='barh', stacked=True, colormap='Set1')


Darstellung als Staffelbalken mit Farbset Set1 und Legende

Freitag, 30. Dezember 2016

Veröffentlichungen 2016

Einige der LinuxUser-Ausgaben mit den Veröffentlichungen

Das Jahr 2016 war thematisch vielfältig, interessant und arbeitsintensiv. Spaß gemacht hat es in jedem Fall. Veröffentlicht wurden diese Beiträge:

Großen Dank gebührt Axel Beckert, Wolfram Eifler, Mathias Stürmer (Forschungsstelle Digitale Nachhaltigkeit der Universität Bern), Martin Ebnöther, Benjamin Seibel (Technologiestiftung Berlin), Guus Hoekman (Code for South Africa, Kapstadt), Werner Heuser, Mandy Neumeyer, Thomas Partzsch, Uwe Berger,  Jim Schimpf,  Thomas Osterried, Wolfram Schneider, Arne Wichmann, Sebastian Andres, Sven Guckes, Gerold Rupprecht, Dirk Deimeke und Martin Manns für deren kritische Anmerkungen und Kommentare im Vorfeld der Artikel.

Hinweis: alle o.g. Beiträge sind in der gedruckten Version verfügbar. Ein Teil der Beiträge sind derzeit online nur kostenpflichtig vollständig zugänglich.

Darüberhinaus haben Axel Beckert und ich unser Buch Debian-Paketmanagement weiter vervollständigt. Mit großer Freude vermelden wir die Aufnahme als offizielles Debianpaket. Somit ist es ab Debian 9 Stretch offizieller Bestandteil der Linux-Distribution.