Vereinigen Sie benutzerdefinierte Skripte systemweit mit Drehzahl auf Red Hat/CentOS

Vereinigen Sie benutzerdefinierte Skripte systemweit mit Drehzahl auf Red Hat/CentOS

Zielsetzung

Unser Ziel besteht.

Betriebssystem- und Softwareversionen

  • Betriebssystem: Red Hat Enterprise Linux 7.5
  • Software: RPM-Build 4.11.3+

Anforderungen

Privilegierter Zugriff auf das System zur Installation, normaler Zugriff für den Build.

Schwierigkeit

MITTEL

Konventionen

  • # - erfordert, dass gegebene Linux -Befehle mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mit Verwendung von ausgeführt werden können sudo Befehl
  • $ - Angegebene Linux-Befehle, die als regelmäßiger nicht privilegierter Benutzer ausgeführt werden sollen

Einführung

Eines der Kernmerkmale jedes Linux -Systems ist, dass sie für die Automatisierung erstellt wurden. Wenn eine Aufgabe möglicherweise mehr als einmal ausgeführt werden muss - selbst wenn sich ein Teil davon beim nächsten Lauf ändert - wird ein Sysadmin mit unzähligen Tools zur Automatisierung aus einfacher Stelle versorgt Hülse Skripte, die von Hand auf Anfrage ausgeführt werden (somit Tippfehler beseitigen oder nur einige Tastaturschläge speichern) in komplexen Skriptsystemen, an denen Aufgaben aus ausgeführt werden Cron Zu einer bestimmten Zeit, die miteinander interagieren, mit dem Ergebnis eines anderen Skripts arbeiten, das möglicherweise von einem zentralen Managementsystem usw. gesteuert wird usw.

Während diese Freiheit und dieses reiche Toolset tatsächlich die Produktivität beiträgt, gibt es einen Haken: Als Sysadmin schreiben Sie ein nützliches Skript auf ein System, das sich als nützlich für ein anderes erweist. Daher kopieren Sie das Skript über über. Auf einem dritten System ist das Skript auch nützlich, aber mit geringfügiger Änderungen - möglicherweise nur eine neue Funktion, die nur in diesem System nützlich ist, mit einem neuen Parameter erreichbar. Durch die Verallgemeinerung erweitern Sie das Skript, um die neue Funktion bereitzustellen, und erledigen Sie auch die Aufgabe, für die es geschrieben wurde. Jetzt haben Sie zwei Versionen des Skripts, das erste ist in den ersten beiden Systemen, die zweite im dritten System.

Sie haben 1024 Computer im Rechenzentrum, und 256 von ihnen benötigen einen Teil der Funktionalität, die dieses Skript bereitstellt. Mit der Zeit haben Sie überall 64 Versionen des Skripts, jede Version, die ihren Job macht. Bei der nächsten Systembereitstellung benötigen Sie eine Funktion, an die Sie sich in einer Version codiert haben, aber welche? Und auf welchen Systemen sie sind?

Auf RPM -basierten Systemen wie Red Hat -Aromen kann ein Sysadmin den Paketmanager nutzen, um in den benutzerdefinierten Inhalten Reihenfolge zu erstellen, einschließlich einfacher Shell -Skripte, die möglicherweise sonst noch die Tools bieten, die der Administrator für den Einfachheit halber schrieb.

In diesem Tutorial erstellen wir eine benutzerdefinierte Drehzahl für Red Hat Enterprise Linux 7.5 mit zwei verprügeln Skripte, Parselogs.Sch Und PulleNews.Sch Um eine Möglichkeit zu bieten, wie alle Systeme die neueste Version dieser Skripte in der /usr/local/sbin Verzeichnis und damit auf dem Weg eines Benutzers, der sich beim System anmeldet.



Verteilungen, Haupt- und Nebenversionen

Im Allgemeinen sollte die Neben- und Hauptversion der Build -Maschine mit den Systemen übereinstimmen, die das Paket bereitstellen soll, sowie die Verteilung, um die Kompatibilität sicherzustellen. Wenn es verschiedene Versionen einer bestimmten Verteilung oder sogar verschiedene Verteilungen mit vielen Versionen in Ihrer Umgebung gibt (oh, Freude!), für jeden sollten Sie Build -Maschinen einrichten. Um die Arbeit kurz zu verkürzen, können Sie einfach die Build -Umgebung für jede Verteilung und jede Hauptversion einrichten und auf der niedrigsten Minorversion in Ihrer Umgebung für die angegebene Major -Version vorhanden sind. Von Ursache müssen sie keine physischen Maschinen sein und müssen nur zum Zeitpunkt der Erstellung ausgeführt werden, damit Sie virtuelle Maschinen oder Behälter verwenden können.

In diesem Tutorial sind unsere Arbeit viel einfacher. Wir stellen nur zwei Skripte bereit, die überhaupt keine Abhängigkeiten haben (außer dass verprügeln), so werden wir bauen Keinarch Pakete, die für „Nicht architekturabhängig“ stehen, werden wir auch nicht die Verteilung angeben, für die das Paket erstellt wurde. Auf diese Weise können wir sie auf jeder Verteilung installieren und aktualisieren, die verwendet Drehzahl, und zu jeder Version - wir müssen nur sicherstellen, dass die Build -Maschine der Baumaschine RPM-Build Das Paket befindet sich in der ältesten Version in der Umgebung.

Bauumgebung einrichten

Um benutzerdefinierte Drehzahlpakete zu erstellen, müssen wir die installieren RPM-Build Paket:

# YUM Installation RPM-Build

Von nun an, wir verwende nicht Wurzel Benutzer und aus gutem Grund. Das Bau von Paketen erfordert nicht Wurzel Privileg, und Sie möchten Ihre Gebäudemaschine nicht brechen.

Erstellen der ersten Version des Pakets

Erstellen wir die zum Aufbau erforderliche Verzeichnisstruktur:

$ mkdir -p rpmbuild/Spezifikationen

Unser Paket heißt Admin-Skripts, Version 1.0. Wir schaffen a Speclefile Das gibt die Metadaten, Inhalte und Aufgaben an, die von der Packung ausgeführt werden. Dies ist eine einfache Textdatei, die wir mit unserem bevorzugten Texteditor erstellen können, z vi. Die zuvor installierten rpmbuild Das Paket füllt Ihre leere Spezifile mit Vorlagendaten, wenn Sie verwenden vi Um ein leeres zu erstellen, aber für dieses Tutorial die folgende Spezifikation berufen admin-scripts-1.0.Spezifikation:



Name: Admin-Scripts Version: 1 Release: 0 Zusammenfassung: Foobar Inc. Es Abteilung. Admin -Skript Packager: John Doe Group: Anwendung/andere Lizenz: GPL URL: www.Foobar.com/admin-scripts source0: %name- %Version.Teer.GZ Buildarch: Noarch %Beschreibung Paket Installation der neuesten Version Die von der IT -Abteilung verwendeten Admin -Skripte. %Prep %Setup -q %Build %Installieren Sie RM -rf $ rpm_build_root mkdir -p $ rpm_build_root/usr/local/sbin cp scripts/* $ rpm_build_root/usr/local/sbin/ %rm -r (-, root, root,-) %Dir/usr/local/sbin/usr/local/sbin/parselogs.sh/usr/local/sbin/pullnews.SH %doc %ChangeLog * Mi 1. August 2018 John Doe - Release 1.0 - Erstveröffentlichung 
Kopieren

Platzieren Sie den Specfile in die rpmbuild/spec Verzeichnis, das wir früher erstellt haben.

Wir brauchen die in der verwiesenen Quellen Speclefile - In diesem Fall die beiden Shell -Skripte. Erstellen wir das Verzeichnis für die Quellen (als Paketname bezeichnet, das mit der Hauptversion angehängt ist):

$ MKDIR -P RPMBUILD/Quellen/Admin-Scripts-1/Skripte

Und kopieren/verschieben Sie die Skripte in sie:

$ ls rpmbuild/Quellen/admin-scripts-1/scripts/parselogs.sh Pullnews.Sch 
Kopieren

Da es in diesem Tutorial nicht um Shell -Skripting geht, ist der Inhalt dieser Skripte irrelevant. Da werden wir eine neue Version des Pakets erstellen und die PulleNews.Sch Ist das Skript, mit dem wir demonstrieren, es ist Quelle in der ersten Version wie unten:

#!/bin/bash echo "news gezogen" beenden 0 
Kopieren

Vergessen Sie nicht, den Dateien in der Quelle die entsprechenden Rechte hinzuzufügen - in unserem Fall, Ausführung Recht:

CHMOD +X RPMBUILD/QUELLEN/admin-scripts-1/scripts/*.Sch


Jetzt erstellen wir eine Teer.gz Archiv aus der Quelle im selben Verzeichnis:

CD rpmbuild/ Quellen/ && tar -czf admin-scripts-1.Teer.GZ Admin-Scripts-1
Kopieren

Wir sind bereit, das Paket zu erstellen:

rpmbuild-BB RPMBUILD/Spezifikationen/Admin-Scripts-1.0.Spezifikation

Wir erhalten eine Ausgabe über den Build, und wenn etwas schief geht, werden Fehler angezeigt (z. B. fehlende Datei oder Pfad). Wenn alles gut geht, wird unser neues Paket im RPMS -Verzeichnis angezeigt, das standardmäßig unter dem generiert ist rpmbuild Verzeichnis (sortiert in Unterverzeichnisse nach Architektur):

$ ls rpmbuild/rpms/noarch/admin-scripts-1-0.Keinarch.Drehzahl

Wir haben ein einfaches und dennoch voll funktionsfähiges RPM -Paket erstellt. Wir können es für alle Metadaten, die wir zuvor geliefert haben, abfragen:

$ rpm -qpi rpmbuild/rpms/noarch/admin-scripts-1-0.Keinarch.RPM-Name: Admin-Scripts Version: 1 Release: 0 Architektur: Noarch Installation Datum: (nicht installiert) Gruppe: Anwendung/andere Größe: 78 Lizenz: GPL Signature: (keine) Quelle RPM: Admin-Scripts-1-0.src.Drehzahl erstellen Datum: 2018. August. 1., Mi, 13.27.34 CEST Build Host: Build01.Foobar.Com -Verschiebungen: (nicht verlängerbar) Packager: John Doe URL: www.Foobar.COM/Admin-Scripts Zusammenfassung: Foobar Inc. Es Abteilung. Admin -Skripts Beschreibung: Paket Installation der neuesten Version Die von der IT -Abteilung verwendeten Admin -Skripts. 
Kopieren


Und wir können es installieren (mit Wurzel Privilegien):

Installieren Sie benutzerdefinierte Skripte mit RPM

Während wir die Skripte in ein Verzeichnis installiert haben, das auf jedem Benutzern steht $ Path, Sie können sie als Benutzer im System aus jedem Verzeichnis ausführen:

$ Pullnews.SH News gezogen 
Kopieren


Das Paket kann so verteilt werden, wie es ist, und kann in Repositorys, die einer beliebigen Anzahl von Systemen zur Verfügung stehen. Dies zu tun ist aus dem Rahmen dieses Tutorials - das Erstellen einer anderen Version des Pakets ist jedoch sicherlich nicht.

Erstellen einer anderen Version des Pakets

Unser Paket und die äußerst nützlichen Skripte darin werden in kürzester Zeit populär, wenn man bedenkt, dass sie überall mit einem einfachen erreichbar sind yum installieren admin-scripts Innerhalb der Umgebung. Es wird bald viele Anfragen nach Verbesserungen geben - in diesem Beispiel stammen viele Stimmen von glücklichen Benutzern, dass die PulleNews.Sch Sollte eine andere Zeile für die Ausführung drucken, würde diese Funktion das gesamte Unternehmen retten. Wir müssen eine andere Version des Pakets erstellen, da wir kein anderes Skript installieren möchten, sondern eine neue Version davon mit demselben Namen und demselben Weg, da die Sysadminen in unserer Organisation bereits stark darauf angewiesen sind.

Zuerst ändern wir die Quelle der PulleNews.Sch in den Quellen zu etwas noch Komplexerem:

#!/bin/bash echo "news gezogen" echo "eine andere Zeile gedruckt" beenden 0 

Wir müssen den Teer neu erstellen.GZ mit dem neuen Quellinhalt - wir können den gleichen Dateinamen wie beim ersten Mal verwenden, da wir die Version nicht ändern, nur veröffentlichen (und so die Quelle0 Referenz ist noch gültig). Beachten Sie, dass wir zuerst das vorherige Archiv löschen:

CD RPMBUILD/ Quellen/ && rm -f admin-scripts-1.Teer.gz && tar -czf admin-scripts-1.Teer.GZ Admin-Scripts-1
Kopieren

Jetzt erstellen wir eine weitere Specfile mit einer höheren Versionszahl:

CP RPMBuild/Specs/Admin-Scripts-1.0.Spezifische RPMBuild/Specs/Admin-Scripts-1.1.Spezifikation
Kopieren

Wir ändern uns nicht viel auf dem Paket selbst, daher administrieren wir einfach die neue Version, wie unten gezeigt:

Name: Admin-Skripts Version: 1 Veröffentlichung: 1 Zusammenfassung: Foobar Inc. Es Abteilung. Admin -Skript Packager: John Doe Group: Anwendung/andere Lizenz: GPL URL: www.Foobar.com/admin-scripts source0: %name- %Version.Teer.GZ Buildarch: Noarch %Beschreibung Paket Installation der neuesten Version Die von der IT -Abteilung verwendeten Admin -Skripte. %Prep %Setup -q %Build %Installieren Sie RM -rf $ rpm_build_root mkdir -p $ rpm_build_root/usr/local/sbin cp scripts/* $ rpm_build_root/usr/local/sbin/ %rm -r (-, root, root,-) %Dir/usr/local/sbin/usr/local/sbin/parselogs.sh/usr/local/sbin/pullnews.sh %doc %ChangeLog * Mi 22. August 2018 John Doe  - Release 1.1 - Pullnews.Sh v1.1 druckt eine andere Zeile * Mi 1. August 2018 John Doe - Veröffentlichung 1.0 - Erstveröffentlichung 


Alles fertig, können wir eine andere Version unseres Pakets erstellen, die das aktualisierte Skript enthält. Beachten Sie, dass wir auf die SpeciLe mit der höheren Version als Quelle des Builds verweisen:

rpmbuild-BB RPMBUILD/Spezifikationen/Admin-Scripts-1.1.Spezifikation

Wenn der Build erfolgreich ist, haben wir jetzt zwei Versionen des Pakets unter unserem RPMS -Verzeichnis:

LS RPMBUILD/RPMS/NOARCH/admin-scripts-1-0.Keinarch.RPM Admin-Scripts-1-1.Keinarch.Drehzahl 
Kopieren

Und jetzt können wir das "erweiterte" Skript installieren oder ein Upgrade aktualisieren, wenn es bereits installiert ist.

Upgrade benutzerdefinierte Skripte mit RPM

Und unsere Sysadminen können sehen, dass die Feature -Anfrage in dieser Version gelandet ist:

rpm -q -changelog admin -scripts * Mi 22. August 2018 John Doe -Release 1.1 - Pullnews.Sh v1.1 druckt eine weitere Zeile * Mi Aug 01 2018 John Doe - Release 1.0 - Erstveröffentlichung 

Abschluss

Wir haben unsere benutzerdefinierten Inhalte in versionierte RPM -Pakete eingeschlossen. Dies bedeutet. RPM bietet die Möglichkeit, alte Dinge zu ersetzen, die nur in früheren Versionen benötigt werden, können benutzerdefinierte Abhängigkeiten hinzufügen oder einige Tools oder Dienste bereitstellen, auf die unsere anderen Pakete angewiesen sind. Mit Anstrengung können wir fast jeden unserer benutzerdefinierten Inhalte in RPM -Pakete einpacken und diese nicht nur mit Leichtigkeit, sondern auch mit Konsistenz über unsere Umgebung verteilen.

Verwandte Linux -Tutorials:

  • Dinge zu installieren auf Ubuntu 20.04
  • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
  • Linux -Konfigurationsdateien: Top 30 am wichtigsten
  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • Linux -Download
  • Kann Linux Viren bekommen?? Erforschung der Verwundbarkeit von Linux…
  • Dinge zu tun nach der Installation Ubuntu 22.04 Jammy Quallen…
  • Beste Linux -Distribution für Entwickler
  • Ubuntu 20.04 Leitfaden
  • Wie man von CentOS nach Almalinux migriert