Ubuntu 14.04 Trusty Tahr
Rex - in Eigenschreibweise (R)?ex - ist ein Werkzeug für Administratoren zum zentralen Konfigurationsmanagement. Es ist in Perl geschrieben und auch die Syntax der Konfigurationsdateien orientiert sich stark an Perl.
Der Aufbau ist folgendermaßen: Es gibt einen (R)?ex-Master, welcher über die Konfigurationsdateien verfügt. Diese werden "auf Knopfdruck" per SSH an festgelegte Nodes verteilt. Dies können Konfigurationen, aber auch Kommandos wie z.B. apt-get update
sein. Die Bedienung erfolgt ausschließlich über die Kommandozeile.
Zur Kommunikation mit den zu verwaltenden Computern wird ein SSH-Server auf allen Client-Rechnern vorausgesetzt. Auf dem Verwaltungsrechner wird außerdem Perl benötigt - das bei Ubuntu aber bereits vorinstalliert ist.
Das Programm ist ab Ubuntu 15.10 in den offiziellen Paketquellen vorhanden [1]:
rex (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install rex
sudo aptitude install rex
Bei älteren Ubuntu-Installationen erfolgt die Installation über eine Fremdquelle. Diese liefert im Gegensatz zu den offiziellen Paketquellen die jeweils aktuellste Version. Das Einbinden der Fremdquelle erfolgt in drei Schritten:
Zuerst installiert man folgendes Paket als Abhängigkeit:
apt-transport-https
mit apturl
Paketliste zum Kopieren:
sudo apt-get install apt-transport-https
sudo aptitude install apt-transport-https
Um aus der Fremdquelle zu installieren, muss man die folgenden Paketquellen freischalten:
Zusätzliche Fremdquellen können das System gefährden.
deb https://rex.linux-files.org/ubuntu/ VERSION rex
Um die Fremdquelle zu authentifizieren, kann man entweder den Signierungsschlüssel herunterladen und in der Paketverwaltung hinzufügen oder folgenden Befehl ausführen:
wget -q https://rex.linux-files.org/DPKG-GPG-KEY-REXIFY-REPO -O- | sudo apt-key add -
Nach dem Aktualisieren der Paketquellen erfolgt die Installation wie oben angegeben.
Das Programm kann dann sofort gestartet werden [2]. Die allgemeine Syntax lautet:
rex [OPTIONEN]
rex -h
zeigt die Hilfe an. Um (R)?ex starten zu können benötigt man ein Rexfile (siehe Beispiele) im aktuellen Verzeichnis (oder man spezifiziert dieses mit dem Parameter -f DATEINAME
).
Die zentrale Konfigurationsdatei ist eine Datei namens Rexfile. Diese muss an einem Ort der eigenen Wahl angelegt werden und mindestens mit folgendem Inhalt befüllt werden:
use Rex -feature => [ '1.3' ]; user "root"; password "Passwort oder SSH-Key-Passphrase" group myservers => "localhost, host1, host2, host3" group localhost => "localhost"
Hier wird also festgelegt, dass man (R)?ex in der Version 1.3 verwenden will, Kommandos mit Root-Rechten ausführen will und es werden zwei Gruppen festgelegt, welche von (R)?ex angesprochen werden sollen: myservers
mit den Hosts localhost
, host1
, host2
und host3
sowie eine zweite Gruppe namens localhost
.
Als Beispiel soll auf allen Servern der Gruppe myservers
der Befehl apt-get update && apt-get upgrade
ausgefuehrt werden.:
use Rex -feature => [ '1.3' ]; user "root"; password "Passwort oder SSH-Key-Passphrase" group myservers => "localhost, host1, host2, host3" desc "Update"; task "update", group => "myservers", sub { my $output = run "apt-get update"; say $output; }; desc "Upgrade"; task "upgrade", group => "myservers", sub { my $output = run "apt-get upgrade"; say $output; };
desc
ist hierbei eine Beschreibung des Tasks, task "upgrade"
bezeichnet das Target, group
die Server, auf die der Task angewendet werden soll. Schlussendlich wird in einer Funktion deklariert, was überhaupt geschehen soll. In diesem Fall soll der Befehl apt-get update
und apt-get upgrade
ausgeführt und die Ausgabe dieser Kommandos angezeigt werden.
Hat man das Konfigurationsfile erstellt, kann dieses mittels der Befehle
rex update rex upgrade
angewandt werden. (R)?ex verbindet sich dann nacheinander mit den festgelegten Hosts via SSH und führt die jeweiligen Befehle aus.
Dies war ein einfaches Beispiel zur Ausführung von Kommandos. Man kann jedoch noch viel mehr mit (R)?ex verwirklichen, zum Beispiel Dienste installieren und konfigurieren. Im nächsten Beispiel soll der Apache-Webserver auf allen Servern der Gruppe myservers
in Betrieb genommen werden. Hierzu legt man zunächst eine Library an:
mkdir -p ~/lib/Services/Apache/files/etc
Ist dies geschehen, so muss die neue Library dem Rexfile bekannt gemacht werden:
require Service::Apache;
Dies wird einfach in das Rexfile
am Anfang eingetragen. Danach legt man eine Datei ~/lib/Service/Apache/__module__.pm
an, welche die Konfiguration der Library enthält:
desc "Prepare Frontend Server"; task "prepare", group => "myservers", sub { pkg "apache2", ensure => "latest"; service "apache2", ensure => "started"; }; desc "Keep Configuration in sync"; task "configure", group => "myservers", sub { prepare(); file "/etc/apache2/apache2.conf", source => "files/etc/apache2/apache2.conf", on_change => sub { service apache2 => "reload"; }; };
Der Task prepare
sorgt dafür, dass der Apache-Webserver installiert wird und anschließend neu gestartet wird. Mit dem Befehl pkg "paketname"
und ensure => "latest"
trägt man dafür Sorge, dass Apache2 in der neuesten Version installiert wird. Der Befehl pkg
steht nicht für alle Distributionen zur Verfügung, hier muss dann eine Funktion verwendet werden (siehe Beispiel 1).
Die Apache-Konfiguration wird dann in einem zweiten Schritt vorgenommen, der configure
heisst. In einem ersten Schritt wird zunächst der Task prepare
(s.o.) aufgerufen, um nochmals sicher zu gehen, dass alle Hosts über den Apache-Server verfügen. Danach wird festgelegt, dass auf den Hosts die Datei /etc/apache2/apache2.conf vorhanden sein soll, wobei diese der Angabe files/etc/apache2/apache2.conf
(~/lib/Service/Apache/files/etc/apache2/apache2.conf auf dem Server) entspricht. Außerdem wird festgelegt, was passiert, wenn sich diese Datei ändert: dann wird der Apache-Webserver neu gestartet.
Documentation - häufige Fragen und Antworten sowie Tutorials
Rechner verwalten mit Rex - Admin-Magazin, 05/2012
Diese Revision wurde am 6. Januar 2016 20:05 von aasche erstellt.