Das Tool Nummer eins um Daten von A nach B zu spiegeln ist rsync
.
Es kann über Rechnergrenzen hinweg eingesetzt werden (z.B. via ssh
), beherrscht inkrementelles Kopieren und vieles mehr.
Schlagwort: Linux
Linux Pakete mit fpm bauen
Software installieren
Unter den meisten Linux Distributionen wird Software zumeist via Paketmanager
installiert.
Gerade in der Software-Entwicklung kommt es aber immer wieder dazu, dass
man selbstkompilierte oder selbstentwickelte Software installieren muss.
Der übliche "Installationsmechanismus" via
./configure && make && make install
führt jedoch dazu, dass die Software unversioniert installiert wird und eine
Deinstallation nur in mühseliger Handarbeit möglich ist.
Auch die Installation auf mehreren Rechner erfordert immer wieder den selben
Aufwand und eine Updatemöglichkeit gibt es ebenfalls nicht.
Pakete
Die optimale Lösung für unser Problem ist natürlich die Erstellung eines
eigenen Pakets:
Das Paket wird ein einziges Mal gebaut, kann jederzeit deinstalliert werden
und die Version des Pakets ist ebenfalls protokolliert, so dass später Updates
möglich sind.
Das Problem daran ist, dass das Entwickeln von Paketen recht Aufwändig ist.
Eine Abhilfe schafft hierbei das
Werkzeug fpm.
Installation
Zunächst stellen wir sicher, dass auf unserem Rechner das Paket ruby-dev
installiert ist:
Bei auf Debian basierenden Systemen (z.B. Ubuntu):
sudo apt-get install install ruby-dev
Bei auf RedHat basierenden Systemen (z.B. CentOS):
sudo yum install fpm
Nun können wir mit dem Ruby Paketinstaller gem
das Programm installieren:
gem install fpm
Nun sollte das Programm fpm
auf der Kommandozeile zur Verfügung stehen.
Paket bauen
Wir haben nun unsere Software wie zuvor und bauen diese - jedoch mit einem
Präfix, z.B.:
mkdir /tmp/place_to_install
./configure && make && make install DESTDIR=/tmp/place_to_install
Wenn wir nun an den Ort /tmp/place_to_install
schauen, sehen wir dort die
installierten Daten. Diese sollen nun in unser Paket kommen.
Diese bauen wir mit:
fpm -s dir -t rpm -n myprogram -v 0.1.2 -C /tmp/place_to_install bin lib
Hierbei stehen die Parameter für:
-s dir
: Das Paket wird aus einem Verzeichnis gebaut (andere Möglichkeiten u.a. Python Module, rpm Dateien usw.)-t rpm
: Es soll ein rpm-Paket gebaut werden. Auch deb-Pakete sind möglich-n myprogram
: Der Name des Pakets-v 0.1.2
: Die Version des Pakets-C /tmp/place_to_install
: Das Verzeichnis, in dem sich die Dateien befindenbin lib
: Die Dateien/Verzeichnisse in dem Verzeichnis, welche auch wirklich im Zielsystem installiert werden sollen
Nach kurzer Wartezeit purzelt aus dem Werkzeugs ein installierbares Paket heraus.
Fazit
Mit fpm lassen sich bequem, schnell und einfach Pakete bauen.
Natürlich berücksichtigt das hier erstellte Paket keinerlei Abhängigkeiten und
es werden auch nicht alle Möglichkeiten und Funktionen des Paketmanagements genutzt, aber
in der Praxis erleichtert dies die Installation von Software - gerade in Teams
ungemein.
Jetzt nur noch ein Repository-Server aufgesetzt - und schon hat man im Team
eine komfortablen Weg Software bereit zu stellen.
Myrepos: Alle meine Repositories
Repository-Zentrale
Dank VCSH habe ich all meine Dotfiles hübsch in Git-Repositories verpackt.
Das Einbinden eines einzelnen Repositories geht nun zwar schnell von der Hand,
aber wenn nun für vim
und mutt
und emacs
und und und ... lauter
Repositories vorliegen wird es unbequem.
Auch das updaten (pull
) jedes einzelnen Repos ist sehr mühselig und damit
fehleranfällig.
Abhilfe schafft hier myrepos (kurz mr
),
dass es erlaubt Aktionen auf mehreren Repositories auszuführen.
Shift Lock sinnvoll nutzen
Shift-Lock
Die Shift-Lock Taste alias "Feststelltaste" ist für die meisten Menschen ein Ärgernis und
Relikt aus der Zeit der Schreibmaschinen.
Doch anstatt die Taste zu deaktivieren oder gar auszubauen kann die Taste auch gut für andere
Zwecke verwendet werden.
Ich habe die Shift-Lock Taste auf die "Ctrl" (Steuerung) Taste gemappt, was Shortcuts wie Ctrl+C in vim deutlich attraktiver macht
So gehts
Konfigurationsdateien verwalten mit VCSH
Einstellungen
Was ist der erste Schritt bei der Benutzung eines Autos, einer Stereoanlage oder eines Schreibtischstuhls?
Die Einstellungen!
Natürlich will man gut aus dem Fahrzeug sehen können, der Lieblings-Musik lauschen und bequem sitzen.
Doch auch Software hat Einstellungen:
- Welchen Editor setze ich als Standard?
- Welche Shell-Erweiterungen lade ich in
oh-my-zsh
? - Welches
color-theme
lade ich in vim? - Welche Accounts habe ich in
mutt
?
Praktischerweise liegen all diese Einstellungen in Dateien (sogenannten "Dotfiles"), welche sich einfach von A nach B kopieren lassen.
Da ich jedoch regelmässig auf unterschiedlichen Rechnern arbeite, möchte ich diese aktuell halten.
Dropbox
Mein erster Ansatz war es, alle Dateien in einen zentralen Dropbox Ordner zu verschieben und Links zu erstellen nach folgendem Schema
~/.vimrc -> ~/Dropbox/config/vimrc
Meine .vimrc
wurde durch den Dropbox-Dienst nun auf allen Rechnern synchronisiert und immer aktuell.
Richtete ich einen neuen Rechner ein, so musste ich "nur" Dropbox und den Link erstellen.
Dieser Ansatz hat jedoch einige Nachteile:
- Ich bin von der Verfügbarkeit von Dropbox abhängig (ist ok für mich)
- Ich muss auf allen Rechnern Dropbox installieren (ist auch noch so ok)
- Ich muss alle Dateien händisch verlinken (nicht ok!)
- Die Änderungen sind nicht dokumentiert bzw. haben keine definierten Zwischenstände (nicht ok!)
- Alle Änderungen werden sofort bei allen Systemen aktualisiert (außer ich stoppe Dropbox)
VCSH
Ich wünschte mir ein System, welches die Versionierung der Konfigurationsdaten übernimmt und bin dabei auf VCHS gestoßen.
Das schöne an VCSH: Es baut einfach auf git auf und bietet somit einerseits ein vertrautes Interface. Zudem kann ich meine Konfigurationsdateien nun einfach in ein zentrales Repository (z.B. auf Github oder auf einem eigenen Server) ablegen.
Installieren
Installieren erfolgt aus dem Repository, Debian/Ubuntu also per
apt-get install vcsh
oder bei Arch Linux via aur (hier mit yaourt)
yaourt -S vcsh
Anlegen
Ich empfehle pro Werkzeug (z.B. emacs, mutt, ...) ein eigenes Repository anzulegen um die Übersicht zu behalten.
Die Syntax hierbei entspricht der von git, jedoch mit Namen des Werkzeugs vorangestellt, also vcsh WERKZEUG GIT-BEFEHL
(Ausnahme: init
-Befehl)
Wir initialisieren uns erstmal ein Repository für unsere Vim-Einstellungen...
vcsh init vim
... fügen die Datei(en) hinzu, die wir verwalten wollen ...
vcsh vim add ~/.vimrc
... machen unseren ersten commit ...
vcsh vim commit -m "Mein erster Vim-commit"
... und pushen diesen auf unseren Git-Server (z.B. Github)
vcsh vim remote add git@MEINGITSERVER:vim.git
vcsh vim push -u origin master
Klonen
Auf einem neuen Rechner können wir uns die Konfiguration einfach holen:
vcsh clone git@MEINGISERVER:vim.git
.gitignore
Da sich unsere Konfigurationsdateien im Home-Verzeichnis des Users befinden, hat VCSH (bzw. git) keine Chance zu wissen welche Dateien definitiv zu dem Projekt gehören und welche nicht.
Also schaffen wir mit einer .gitignore-Datei Abhilfe: Alle Dateien und Verzeichnisse sollen ignoriert werden, außer den Projektdateien/Ordnern.
Diese erstellen wir automatisch via
vcsh write-gitignore vim
Wie fügen die ignore-Datei selbst auch dem Projekt hinzu...
vcsh vim add -f ~/.gitignore.d/vim
... und schreiben die Datei erneut.
vcsh write-gitignore vim
Nun kontrollieren wir die Datei ~/.gitignore.d/vim
ob sie nicht Dateien ignoriert, welche wir versionieren wollen;
Wenn nicht: Ab damit ins Repository!
vcsh vim add ~/.gitignore.d/vim
Alle weiteren Aktionen können wir nun in gewohnter git-manier (commit push pull) erledigen.
Fazit
VCSH erlaubt es bequem Dotfiles zu organisieren und diese versioniert abzulegen.
Im Alltag hilft mir es enorm meine Konfigurationsdateien auf einem Stand zu halten und Änderungen dokumentiert.
Ergänzend zu VCSH bietet sich die Benutzung von myrepos
ab um mehrere Repositories gleichzeitig zu verwalten.
Touch Display auf Raspberry Pi mit Arch Linux
Auf der Suche nach einem kleinen Display bin ich auf ein Display von Watterott gestoßen.
Um das Gerät auf dem Raspberry Pi unter Arch Linux zu betreiben sind einige Schritte notwendig.