Erstellen eines Skripts zum automatischen Installieren einer Perl-Anwendung und ihrer Abhängigkeiten

7

Ich habe eine Perl-Anwendung, die viele Abhängigkeiten benötigt, die ich auf zahlreichen Servern bereitstellen muss

Ich möchte ein Skript erstellen, das diese Perl-Anwendung automatisch und schnell installiert.

Um schneller zu sein, möchte ich die meisten meiner Abhängigkeiten mit meinem Paketmanager installieren, anstatt sie mit CPAN zu installieren

Gibt es eine Möglichkeit, anhand einer Liste von Perl-Modulen automatisch festzustellen, ob es ein Debian-Paket dafür gibt? Und wenn es eines gibt, installieren Sie das Paket, wenn nicht, installieren Sie das Perl-Modul von CPAN?

Vincent Membré
quelle
Haben Sie die Werkzeuge von cpan ausprobiert? Was hast du versucht?
F. Hauri
Im Moment benutze ich cpan, um alle Module zu installieren, aber ich würde es vorziehen, die Pakete zu installieren, wenn sie existieren (schneller, perfekt in mein System integriert)
Vincent Membré
Um schneller zu sein, verwenden Sie cpanm, aber es ist immer noch nicht so schnell wie die Pakete
Vincent Membré
Hem ... Und was ist dein System?
F. Hauri
Debian Squeeze zum größten Teil von ihnen
Vincent Membré

Antworten:

2

Hmm, eine Möglichkeit wäre, einen Wrapper um den Systempaket-Manager zu schreiben, dh apt-get, und wenn Pakete nicht zurückgegeben werden, installieren Sie sie mit cpan, cpanm usw.

sub check_pre_req_package {
  mein $ package = shift;
  System ("dpkg -s $ package> / dev / null 2> & 1");
  if ($ ?! = 0) {
    system ("apt-get -y installiere $ package> / dev / null 2> & 1");
      if ($ ?! = 0) {
        System ("cpanm $ package");
      }}
  }}
  elsif ($? == 0) {
    print "Paket $ Paket ist bereits installiert \ n";
  }}
}}

meine @pre_req_packages = qw (strace nmap gcc);

foreach (@pre_req_packages) {
  check_pre_req_package ($ _);
}}

Auf diese Weise müssten Sie natürlich zwischen Groß- und Kleinschreibung unterscheiden (oder die Groß- und Kleinschreibung ändern), da ich glaube, dass Debian in Kleinbuchstaben ein Format von lib (Paketname) -perl verwendet und cpan ein anderes Format usw. wünscht. Außerdem ist dieser Code ungetestet und etwas, das gerade zusammengewürfelt wurde.

Dann gibt es gute alte Bash-Skripte, zum Teufel habe ich in diesem Beispiel Systembefehle verwendet

Mein bester Vorschlag ist, dass Sie sich mit der Verwendung von Cfengine oder Puppet und / oder einem anderen System befassen, von dem ich sicher bin, dass es ein Systemkonfigurationsmanagement gibt. Verwenden Sie dann svn oder git oder so ..., um Änderungen an einem Repo vorzunehmen, das auf allen Ihren Servern bereitgestellt wird. Wenn Sie die Änderungen an "zahlreichen" Servern verwalten und vornehmen möchten, erleichtert cfengine / puppet / etc Ihr Leben nach der Einrichtung erheblich. nur meine zwei.

Ryan
quelle
0

Mein Vorschlag:

  • Schauen Sie sich zunächst das .bash_historybereits installierte Ziel an. Es besteht die große Chance, dass Sie viele bereits geschriebene, gebrauchsfertige Zeilen Ihres Skripts finden, mit denen Sie eine Perl-Anwendung und ihre Abhängigkeiten automatisch installieren können

    Dann können Sie ein Ziel installieren, indem Sie nur ein Terminal verwenden (achten Sie darauf, keine andere Sitzung auf demselben Ziel zu verwenden, um sicherzustellen, dass alle Aktionen korrekt protokolliert werden) und den scriptBefehl verwenden.

    script -t install-perl 2>install-perl.t

    Versuchen Sie, keine interaktiven Befehle zu verwenden oder jede Aktion in einer anderen Textdatei auf Ihrem Schreibtisch zu protokollieren.

    Von dort aus müssen Sie in der Lage sein, den gesamten Prozess fein nachzuvollziehen

    scriptreplay install-perl.t install-perl

    und um ein Shell-Skript zu erstellen, selbst durch Filtern der Ergebnisdatei install-perloder einfach der Zieldatei .bash_history.

  • Zwischenweg Führen Sie eine korrekte Installation durch, bevor Sie sie mit replizieren tar. Manchmal ist es einfacher zu handeln, da alle nicht in Debian verpackten Adds beschränkt sind /usr/local.

    Oder noch einfacher, wenn /usr/localauf einer separaten Partition alle Ziele gemeinsam genutzt und im schreibgeschützten Modus bereitgestellt werden .

  • Endlich mehr Debian : Erstellen Sie aus dieser korrekten Installation (könnte als Master bezeichnet werden ) ein Debian-Paket und installieren Sie es in Ihrem eigenen Unternehmens-Repository (einfaches Verzeichnis in einem internen Web- oder FTP-Server, das die genaue Verzeichnisstruktur und einen öffentlichen Schlüssel enthält, den Sie haben machen.). Verweisen Sie auf dieses Reposit in Ihren Zielen und pflegen Sie Ihren Master korrekt.

    Hinweis: Idealerweise müssen Sie ein Paket pro verwendeter Perl-Bibliothek (oder eines pro Bibliotheksfamilie) erstellen. Dies kann jedoch zusätzliche Arbeit verursachen und wird nicht wirklich benötigt, es sei denn, Sie möchten Debian-Paketierer freigeben oder Beiträge dazu leisten.

Nota: Diese letzte Lösung sieht ein wenig übertrieben aus (impliziert etwas Lernen für den Maintener), aber in Ordnung:

  1. Dies ist nur einmal zu lernen und geht nach dem zweiten, vielleicht dritten Upgrade sehr schnell.
  2. Dies ist die effizienteste und skalierbarste Lösung.
  3. Dies muss bei bereits vorhandenen Arbeiten durchgeführt werden, ohne dass erneut daran herumgebastelt werden muss.
  4. Wenn dies gut gemacht wird, kann dies länger dauern als die Hardware, für die dies alles getan wird.
F. Hauri
quelle
0

Könnte ich vorschlagen, Perlbrew zu verwenden . Im Allgemeinen habe ich im Laufe der Jahre festgestellt, dass wenn Sie eine Anwendung haben, die von einem bestimmten Interpreter abhängt: Ruby, Perl, Python usw. Es ist normalerweise eine bessere Idee, eine dedizierte Installation des Interpreters für Ihre Anwendung einzurichten, als sich darauf zu verlassen diejenigen, die in einer bestimmten Distribution enthalten sind.

Perlbrew verwaltet eine vollständige Installation von Perl in Ihrem $HOMEVerzeichnis. Tatsächlich können Sie mehrere Versionen von Perl zusammen mit seinen Bibliotheken haben, damit Sie Tests durchführen können, bevor Sie ein vollständiges Upgrade von einer Version zur nächsten durchführen. Auf diese Weise wird Ihre Anwendung vollständig von Upgrades getrennt, die auftreten können, wenn Sie sich auf die Perl-Version Ihrer Distribution verlassen.

Auszug aus der Perlbrew-Webseite:

perlbrew ist ein Tool zum Verwalten mehrerer Perl-Installationen in Ihrem $ HOME-Verzeichnis. Sie sind vollständig isolierte Perluniversen. Dieser Ansatz hat viele Vorteile:

  • Sie müssen sudo nicht mehr ausführen, um CPAN-Module zu installieren.
  • Probieren Sie die monatlich veröffentlichten neuen Perls aus.
  • Lernen Sie neue Sprachfunktionen.
  • Testen Sie Ihren Produktionscode anhand verschiedener Perl-Versionen.
  • Lassen Sie Vendor Perl (das mit dem Betriebssystem gelieferte) in Ruhe.

Die Installation ist ein Kinderspiel

curl -kL http://install.perlbrew.pl | bash

Verwendungszweck

# Pick a preferred CPAN mirror
% perlbrew mirror

# See what is available
% perlbrew available

# See full help
% perlbrew help

# Install some Perls
% perlbrew install 5.14.0
% perlbrew install perl-5.8.1
% perlbrew install perl-5.13.6

# See what were installed
% perlbrew list

# Switch perl in the $PATH
% perlbrew switch perl-5.12.2
% perl -v

# Temporarily use another version only in current shell.
% perlbrew use perl-5.8.1
% perl -v

Ressourcen

slm
quelle