[[Vorlage(Archiviert)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] }}} [[Inhaltsverzeichnis(1)]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] [http://www.rexify.org/ Rex] {en} - 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. = Voraussetzungen = 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. = Installation = Das Programm ist ab [:Wily:Ubuntu 15.10] in den offiziellen Paketquellen vorhanden [1]: {{{#!vorlage Paketinstallation rex, universe }}} == Fremdquelle == 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: 1. Zuerst installiert man folgendes Paket als Abhängigkeit: {{{#!vorlage Paketinstallation apt-transport-https }}} 1. [[Vorlage(Fremdquelle, https://rex.linux-files.org/ubuntu/, xenial rex)]] 1. [[Vorlage(Fremdquelle-auth, https://rex.linux-files.org/DPKG-GPG-KEY-REXIFY-REPO)]] Nach dem Aktualisieren der Paketquellen erfolgt die Installation wie oben angegeben. = Bedienung = Das Programm kann dann sofort gestartet werden [2]. Die allgemeine Syntax lautet: {{{#!vorlage Befehl 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`). == Kommandos ausführen == 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`. = Beispiele = 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 {{{#!vorlage Befehl 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. == Dienste installieren und konfigurieren == 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: {{{#!vorlage Befehl 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. = Links = * [http://www.rexify.org/ Projektseite] {en} * [http://www.rexify.org/docs/ Documentation] {en} - häufige Fragen und Antworten sowie Tutorials * [man:rex:Manpage] {en} * [github:RexOps/Rex:Quellcode] {en} * [http://www.admin-magazin.de/Das-Heft/2012/05/Rechner-verwalten-mit-Rex Rechner verwalten mit Rex] {de} - Admin-Magazin, 05/2012 # tag: Netzwerk, System, Server, Fernwartung