Esiste un software di gestione della configurazione distro-agnostico?


7

Non voglio etichettarmi su specifici moduli di gestione della configurazione come il aptmodulo o il yummodulo di Ansible .

Esiste un software di gestione della configurazione distro-agnostica o almeno uno con codice distro-agnostico per installare i seguenti pacchetti anche per Arch Linux ?

Lo chiedo perché non ho trovato un ruolo galassia Ansible adatto per installare LAMP su Arch Linux e il seguente script Bash per Debian non è adatto per 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

Risposte:


11

Tecnicamente, Ansible è quello; perché è privo di agenti; L'ho usato per gestire router, switch, server, ecc.

Quello che sembra chiedere è se il packagemodulo supporta Arch Linux? Sono troppo pigro per testare se supporta Arch; ma in caso contrario c'è sempre il pacmanmodulo ... E se non funziona ... C'è sempre la scrittura del proprio modulo.

Quello di cui stai parlando è un problema più grande con l'esecuzione di più diverse distribuzioni in un ambiente di produzione . Diventa doloroso gestire a lungo termine. Questo è il motivo per cui è buona norma non eseguire più distribuzioni in produzione, poiché dal punto di vista gestionale (puramente dal codice), è un sacco di lavoro. Il modo più ovvio per ovviare a questo è con Ansible usando whenin combinazione con os_family:

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

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

Sono stato in una situazione in cui dovevo gestire i server Debian e i server CentOS in produzione; alla fine ho fatto la scelta di diventare puro Debian perché:

  • La base di codice per CM è stata tagliata a metà (è stata rimossa tutta la logica per le stranezze specifiche della distro).
  • Il test è diventato meno doloroso (se non stai testando il tuo codice CM, allora lo stai facendo male).

Incontrerai comunque anche differenze importanti; per esempio:

  • Alcuni pacchetti hanno un nome diverso; httpd(RHEL) vs apache2(Debian).
  • Diverse directory di configurazione "predefinite"; /etc/default(Debian) vs /etc/sysconfig(RHEL).
  • Diversi sistemi init; sebbene systemdabbia ampiamente preso il sopravvento.
  • No SSH; ad esempio WinRM per Windows.

I sistemi di gestione della configurazione sono un modo per astrarre l'ambiente in codice; e ti danno la logica / i condizionali per farlo da solo .


1
Il packagemodulo chiama semplicemente il modulo definito nel ansible_pkg_mgrfatto per quel sistema. Quindi qualsiasi sistema di packaging supportato da Ansible funzionerà.
Michael Hampton,

6

Mantenere un gestore di meta-pacchetti mi sembra un compito di Sisifo, dal momento che qualcuno dovrebbe mantenere una sorta di "apache2" nei like di Debian è "httpd" nei like di RHEL (eccetera) Rosetta Stone.

Tuttavia, esiste un modulo pacman per Ansible che è stato creato appositamente per l'utilizzo di Ansible (lo strumento di gestione distingnale che stai cercando) per gestire i pacchetti su sistemi simili ad Arch. Dalla sezione Esempi della documentazione del modulo collegato:

- 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

2

il pacchetto è Ansible "Gestore di pacchetti SO generico".

Un'opzione sarebbe quella di includere list_of_packages specifici 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 installa i pacchetti

- package:
    state: present
    name: "{{ item }}"
  loop: "{{ list_of_packages }}"

2

Nix è un gestore di pacchetti autonomo che non si lega strettamente a nessun sistema operativo. Lo uso su MacOS e anche su Ubuntu https://nixos.org/nix/

Saltstack (Ansible compatitor) ha un'astrazione migliore con pkg.installato e non è necessario preoccuparsi che il sistema sottostante sia apt o rpm o arch ... (ancora necessario impostare il nome diff pkg se differiscono sui sistemi, ad esempio httpd o apache2)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.