¿Existe un software de administración de configuración distro-agnóstico?

7

No quiero etiquetarme a módulos específicos del administrador de configuración como el aptmódulo o yummódulo de Ansible .

¿Existe un software de administración de configuración distro-agnóstico, o al menos uno con código distro-agnóstico para instalar también los siguientes paquetes para Arch Linux ?

Pregunto esto porque no encontré un rol de galaxia Ansible adecuado para instalar LAMP en Arch Linux y el siguiente script Bash para Debian no es apto para Arch:

#!/bin/bash

apt update -y
apt upgrade ufw sshguard unattended-upgrades wget curl git zip unzip tree -y

ufw --force enable
ufw allow 22,25,80,443

apt upgrade lamp-server^ ssmtp  -y
apt upgrade python-certbot-apache  -y
apt upgrade php-{cli,curl,mbstring,mcrypt,gd} phpmyadmin  -y

fuente

Respuestas:

11

Técnicamente, Ansible es eso; porque es sin agente; Lo he usado para administrar enrutadores, conmutadores, servidores, etc.

Lo que parece que estás preguntando es si el packagemódulo es compatible con Arch Linux. Soy demasiado vago para probar si eso es compatible con Arch; pero si no es así, siempre está el pacmanmódulo ... Y si eso no funciona ... Siempre está escribiendo su propio módulo.

Sin embargo, de lo que está hablando es de un problema mayor con la ejecución de múltiples distribuciones diferentes en un entorno de producción . Se vuelve doloroso manejarlo a largo plazo. Es por eso que es una buena práctica no ejecutar múltiples distribuciones en producción, ya que desde una perspectiva de gestión (puramente de código), es mucho trabajo. La forma más obvia de evitar esto es con Ansible whenen combinación con os_family:

    apt:
      name: apache2
    when: ansible_facts['os_family'] == "Debian"

    pacman:
      name: nginx
    when: ansible_facts['os_family'] == "Archlinux"

He estado en una situación en la que tuve que administrar servidores Debian y servidores CentOS en producción; Finalmente tomé la decisión de usar Debian puro porque:

  • La base de código para CM se redujo a la mitad (se eliminó toda la lógica de las peculiaridades específicas de la distribución).
  • Las pruebas se volvieron menos dolorosas (si no está probando su código CM, entonces lo está haciendo mal).

También te encontrarás con grandes diferencias de todos modos; por ejemplo:

  • Algunos paquetes tienen nombres diferentes; httpd(RHEL) vs apache2(Debian).
  • Diferentes directorios de configuración "predeterminados"; /etc/default(Debian) vs /etc/sysconfig(RHEL).
  • Diferentes sistemas de inicio; aunque en systemdgran medida se ha hecho cargo.
  • Sin SSH; por ejemplo WinRM para Windows.

Los sistemas de gestión de configuración son una forma de abstraer el entorno en código; y te dan lógica / condicionales para hacerlo tú mismo .

Jeff Schaller
fuente
1
El packagemódulo solo llama al módulo definido en el ansible_pkg_mgrhecho para ese sistema. Por lo tanto, cualquier sistema de embalaje que sea compatible con Ansible funcionará.
Michael Hampton
6

Mantener un meta-package-manager me parece una tarea de Sisyphean, ya que alguien debería mantener algún tipo de "apache2" en Debian-likes es "httpd" en RHEL-likes (etcétera) Rosetta Stone.

Sin embargo, hay un módulo pacman para Ansible que está diseñado específicamente para usar Ansible (la herramienta de administración de disto-agnóstico que está buscando) para administrar paquetes en sistemas tipo Arch. De la sección de ejemplos de la documentación del módulo vinculado:

- name: Install package foo
  pacman:
    name: foo
    state: present

- name: Upgrade package foo
  pacman:
    name: foo
    state: latest
    update_cache: yes

- name: Remove packages foo and bar
  pacman:
    name: foo,bar
    state: absent

- name: Recursively remove package baz
  pacman:
    name: baz
    state: absent
    recurse: yes
DopeGhoti
fuente
2

paquete es Ansible "Generic OS package manager".

Una opción sería incluir list_of_packages específicos del sistema operativo

- include_vars: "{{ item }}"
   with_first_found:
     - files:
         - "{{ ansible_distribution }}-{{ ansible_distribution_release }}.yml"
         - "{{ ansible_distribution }}.yml"
         - "{{ ansible_os_family }}.yml"
         - "default.yml"
       paths: "{{ role_path }}/vars"

e instalar los paquetes

- package:
    state: present
    name: "{{ item }}"
  loop: "{{ list_of_packages }}"
Vladimir Botka
fuente
2

Nix es un administrador de paquetes independiente que no se une estrechamente a ningún sistema operativo. Lo uso en MacOS y también en Ubuntu https://nixos.org/nix/

Saltstack (compatibilizador Ansible) tiene una abstracción más agradable con pkg. Instalado y no necesita preocuparse de que el sistema subyacente sea apt o rpm o arch ... (todavía necesita establecer el nombre de diff pkg si difieren en los sistemas, por ejemplo, httpd o apache2)

HVNSweeting
fuente