So füllen Sie mehrere Konfigurationsdateien mit denselben Werten

So füllen Sie mehrere Konfigurationsdateien mit denselben Werten

Ich habe viele Programme und alle haben einige identische Werte in ihren Konfigurationsdateien (die meisten, wenn nicht alle, davon befinden sich in /etc).

Nehmen wir an, es ist der Hostname, der in den Konfigurationsdateien von Apache, Postfix, SQL, ClamAV usw. gespeichert ist. Manchmal muss ich diese Werte ändern. Was ich jetzt mache, ist, alle diese Dateien zu bearbeiten und den vorherigen Wert durch den neuen zu suchen und zu ersetzen.

Ich möchte es an einer Stelle ändern und alle diese Dateien richtig einstellen. Ich habe über die exportVariable, sourceden Befehl oder etwas Ähnliches von Bash nachgedacht. Da die Konfigurationsdateien jedoch nicht ausführbar sind, glaube ich nicht, dass das funktionieren wird.

Was wäre die empfohlene Methode?

Antwort1

Natürlich müssen Sie alle Parameter identifizieren, die Sie verwalten möchten, und alle Stellen, an denen sie auftreten.  (Na klar.)   Das wussten Sie ja schon.

Hier ist ein Ansatz, der Ihnen den richtigen Start ermöglichen könnte:

  1. Wählen Sie eine Zeichenfolge, die niemals in einer der Konfigurationsdateien erscheinen wird. (Das klingt, als ob Siemusses gleich beim ersten Versuch richtig machen. Das stimmt nicht wirklich; wenn Sie eine Zeichenfolge auswählen (z. B. @@) und diese Zeichenfolge später in einer der Dateien verwenden müssen, können Sie das Problem beheben. Sie müssen nur einen Großteil dieser Einstellungen erneut vornehmen.)

    Beispielsweise hatte Unix vor langer Zeit ein Versionskontrollsystem namens Source Code Control System (SCCS); es verwendete die Zeichenfolge @(#)als Zeichenfolge, die natürlicherweise nie in einer Datei vorkommen würde. Soweit ich weiß, wird SCCS nicht mehr verwendet (zumindest nicht mehr viel), daher sollte die Verwendung sicher sein @(#). Oder Sie könnten etwas wie verwenden !user2461440?oder wie auch immer Ihr richtiger Name lautet. Sie könnten Steuerzeichen einfügen, z. B. Ctrl+ Aoder Ctrl+ G.

  2. Wählen Sie eine Namenskonvention für Parameterplatzhalter. Dies kann etwas Einfaches und Direktes wie @(#){HOSTNAME}, @(#){IP}, @(#){GATEWAY}, usw. sein.

  3. Erstellen Sie Vorlagenversionen aller Ihrer Konfigurationsdateien, wie apache.template, usw. Bearbeiten Sie diese Vorlagen, um alle Vorkommen der Parameter, die Sie bearbeiten möchten, durch die entsprechenden Parameterplatzhalter (aus dem vorherigen Absatz) zu ersetzen. Sie sollten diese (und die folgenden) an einem sicheren, abgelegenen Ort ablegen, beispielsweise in einem Unterverzeichnis von /root.

  4. Schreiben Sie ein Skript wie dieses:

    HOST=Zanzibar
    IP=10.11.12.42
    LOG=/var/log/lumber
    
    fullpath[apache]=/etc/apache.conf
    fullpath[postfix]=/etc/postfix/configuration
    
    for file in apache postfix …
    do
        path=${fullpath[$file]}
        sed -e "s/@(#){HOSTNAME}/$HOST/g" \
            -e "s/@(#){IP}/$IP/g" \
            -e "s|@(#){LOG}|$LOG|g" \
            "$file.template" > "$path.new"  &&
            mv "$path" "$path.bak"          &&
            mv "$path.new" "$path"
    done
    

    Beachten Sie, dass der Unterbefehl, der @(#){LOG}durch ersetzt $LOG , ein anderes Trennzeichen ( |) verwendet, da der $LOGWert /s enthält. Beachten Sie, dass die @(#)Zeichenfolge daher dieses Trennzeichen ( ) nicht enthalten darf |. (Und natürlich darf sie nicht das Standardtrennzeichen ( /) enthalten.)

  5. Arrays (z. B. fullpath[apache]) funktionieren nicht in allen Shells. Wenn Sie weder Bash noch eine andere Shell haben, die Arrays unterstützt, muss das Skript angepasst werden, um sie zu simulieren oder zu umgehen.

  6. Möglicherweise müssen Sie dem Skript Befehle hinzufügen, chownum chmoddie Systemattribute der Dateien richtig einzustellen. Oder, wenn Sie wirklichWirklichWenn Sie sicher sind, dass das Skript richtig funktioniert, können Sie es so ändern, dass die vorhandenen Dateien überschrieben werden, wie in

        sed  …      > "$path"
    

    Dadurch werden der Inode und seine Attribute beibehalten und der mvBefehl oder die .newund .bakDateien werden nicht verwendet.

  7. Wenn Sie einen der Parameter ändern möchten, die Sie zur Automatisierung ausgewählt haben, bearbeiten Sie die entsprechende Zuweisungsanweisung (z. B. HOST=Wonderland) am Anfang des Skripts. Wenn Sie das Skript nicht bearbeiten möchten, teilen Sie es in zwei Dateien auf: eine, die die Parameterwerte enthält ( HOST=…, IP=…, usw.) und eine, die die gesamte Handhabung der Konfigurationsdateien übernimmt. Das zweite Skript wäre sourcedas erste, das die Parameterwerte abruft. Auf diese Weise müssen Sie bei einer Änderung eines Parameterwerts nur die (Skript-)Datei bearbeiten, die die Werte enthält, und nicht das Hauptskript.

  8. Achten Sie darauf, die vorhandenen Dateien nicht manuell zu bearbeiten, da diese Änderungen beim nächsten Ausführen des Parametrisierungsskripts überschrieben werden. Bearbeiten Sie stattdessen die entsprechende Vorlagendatei und führen Sie das Skript erneut aus. Sie können Kommentare in die Dateien einfügen, um sich daran zu erinnern. (Wenn Ihnen die Idee, alle Konfigurationsdateien für eine Änderung, die nur eine davon betrifft, neu zu generieren, nicht gefällt, können Sie das Skript so ändern, dass es nur ausgewählte Dateien neu generieren kann.)

verwandte Informationen