Cómo completar muchos archivos de configuración con los mismos valores

Cómo completar muchos archivos de configuración con los mismos valores

Tengo muchos programas y todos ellos tienen valores idénticos en sus archivos de configuración (la mayoría, si no todos, están en formato /etc).

Digamos que es el nombre de host, que se almacena en los archivos de configuración de Apache, Postfix, SQL, clamAV, lo que sea... A veces necesito cambiar esos valores. Lo que hago ahora es editar todos esos archivos y buscar y reemplazar el valor anterior por el nuevo.

Me gustaría cambiarlo en un solo lugar y configurar todos esos archivos correctamente. Pensé en exportla variable, sourceel comando o algo similar de bash; sin embargo, dado que los archivos de configuración no son ejecutables, no creo que funcione.

¿Cuál sería el método recomendado?

Respuesta1

Evidentemente, debes identificar todos los parámetros que quieres gestionar y todas las ubicaciones donde aparecen.  (Duh.)   Eso ya lo sabías.

He aquí un enfoque que podría ayudarle a empezar por el camino correcto:

  1. Elija una cadena de caracteres que nunca jamás aparecerá en uno de los archivos de configuración. (Eso hace que suene como sidebehacerlo bien en el primer intento. Eso no es realmente cierto; Si elige una cadena (por ejemplo, @@) y luego necesita usar esa cadena en uno de los archivos, puede arreglarlo. Simplemente tendrás que rehacer gran parte de esta configuración).

    Por ejemplo, hace mucho tiempo, Unix tenía un sistema de control de versiones llamado Sistema de control de código fuente (SCCS); usó la cadena @(#)como una cadena que nunca aparecería naturalmente en un archivo. Hasta donde yo sé, SCCS ya no se usa (al menos no mucho), por lo que debería ser seguro de usar @(#). O podrías usar algo como !user2461440?o cualquiera que sea tu nombre real. Podría incluir caracteres de control; por ejemplo, Ctrl+ Ao Ctrl+ G.

  2. Elija una convención de nomenclatura para los marcadores de posición de parámetros. Esto podría ser algo simple y directo como @(#){HOSTNAME},,, etc.@(#){IP}@(#){GATEWAY}

  3. Cree versiones de plantilla de todos sus archivos de configuración, como apache.template, etc. Edite esas plantillas para reemplazar todas las apariciones de los parámetros que desea manipular con sus correspondientes marcadores de posición de parámetros (del párrafo anterior). Debes colocarlos (y los siguientes) en un lugar seguro y apartado, como un subdirectorio de /root.

  4. Escribe un guión como este:

    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
    

    Observe que el subcomando que reemplaza @(#){LOG}con $LOG usa un delimitador diferente ( |), porque el $LOGvalor contiene /s. Tenga en cuenta que, por lo tanto, la @(#)cadena no debe contener este delimitador ( |). (Y, por supuesto, no debe contener el /delimitador estándar ( ).)

  5. Las matrices (por ejemplo, fullpath[apache]) no funcionan en todos los shells. Si no tiene bash u otro shell que admita matrices, será necesario adaptar el script para simularlos o solucionarlos.

  6. Es posible que necesite agregar comandos chowny chmodal script para configurar correctamente los atributos del sistema de los archivos. O, si realmente eresen realidadAsegúrese de que el script funcione correctamente, puede modificarlo para sobrescribir los archivos en su lugar, como en

        sed  …      > "$path"
    

    conservando así el inodo y sus atributos, y no utilizar el mvcomando ni los archivos .newand .bak.

  7. Cuando desee cambiar uno de los parámetros que ha elegido automatizar, edite la instrucción de asignación correspondiente (por ejemplo, HOST=Wonderland) al principio del script. Si no desea tener que editar el script, divídalo en dos archivos: uno que contenga los valores de los parámetros ( HOST=…,, IP=…etc.) y otro que se encargue de todo el manejo de los archivos de configuración. El segundo script sería sourceel primero en obtener los valores de los parámetros. De esa manera, cuando el valor de un parámetro cambia, necesitará editar solo el archivo (script) que contiene los valores, y no el script principal.

  8. Asegúrese de no editar manualmente los archivos existentes, ya que esos cambios se sobrescribirán la próxima vez que ejecute el script de parametrización. En su lugar, edite el archivo de plantilla correspondiente y vuelva a ejecutar el script. Es posible que desees poner comentarios en los archivos para recordarte esto. (Si no le gusta la idea de regenerar todos los archivos de configuración para un cambio que afecta solo a uno de ellos, puede modificar el script para que tenga la capacidad de regenerar solo los archivos seleccionados).

información relacionada