Gibt es eine distro-agnostische Konfigurationsverwaltungssoftware?

7

Ich möchte mich nicht auf bestimmte Konfigurationsmanager-Module wie Ansibles aptModul oder yumModul beschränken.

Gibt es eine distro-agnostische Konfigurationsverwaltungssoftware oder mindestens eine mit distro-agnostischem Code , um die folgenden Pakete auch für Arch Linux zu installieren ?

Ich frage dies, weil ich keine geeignete Ansible-Galaxienrolle für die Installation von LAMP unter Arch Linux gefunden habe und das folgende Bash-Skript für Debian nicht für Arch geeignet ist:

#!/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

quelle

Antworten:

11

Technisch gesehen ist Ansible das; weil es agentenlos ist; Ich habe es verwendet, um Router, Switches, Server usw. zu verwalten.

Sie fragen anscheinend, ob das packageModul Arch Linux unterstützt? Ich bin zu faul, um zu testen, ob das Arch unterstützt. aber wenn nicht, gibt es immer das pacmanModul ... Und wenn das nicht funktioniert ... wird immer ein eigenes Modul geschrieben.

Sie sprechen jedoch von einem größeren Problem beim Ausführen mehrerer verschiedener Distributionen in einer Produktionsumgebung . Es wird schmerzhaft, langfristig zu verwalten. Aus diesem Grund empfiehlt es sich, nicht mehrere Distributionen in der Produktion auszuführen, da dies aus Managementsicht (nur aus Code) eine Menge Arbeit bedeutet. Der naheliegendste Weg, dies zu umgehen, ist die Verwendung von Ansible whenin Kombination mit os_family:

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

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

Ich war in einer Situation, in der ich Debian-Server und CentOS-Server in der Produktion verwalten musste. Schließlich entschied ich mich für Debian, weil:

  • Die Codebasis für CM wurde halbiert (die gesamte Logik für distro-spezifische Macken wurde entfernt).
  • Das Testen wurde weniger schmerzhaft (wenn Sie Ihren CM-Code nicht testen, machen Sie es falsch).

Sie werden sowieso auch auf große Unterschiede stoßen; zum Beispiel:

  • Einige Pakete haben einen anderen Namen. httpd(RHEL) gegen apache2(Debian).
  • Verschiedene "Standard" -Konfigurationsverzeichnisse; /etc/default(Debian) gegen /etc/sysconfig(RHEL).
  • Verschiedene Init-Systeme; obwohl systemdweitgehend übernommen hat.
  • Kein SSH; Zum Beispiel WinRM für Windows.

Konfigurationsmanagementsysteme sind eine Möglichkeit, die Umgebung in Code zu abstrahieren. und sie geben dir Logik / Bedingungen, um das selbst zu tun .

Jeff Schaller
quelle
1
Das packageModul ruft nur das Modul auf, das in der ansible_pkg_mgrTatsache für dieses System definiert ist. So funktioniert jedes von Ansible unterstützte Verpackungssystem.
Michael Hampton
6

Die Pflege eines Meta-Paket-Managers scheint mir eine Sisyphus-Aufgabe zu sein, da jemand eine Art "Apache2" in Debian-Likes pflegen müsste, ist "httpd" in RHEL-Likes (und so weiter) Rosetta Stone.

Es gibt jedoch ein Pacman- Modul für Ansible, das speziell für die Verwendung von Ansible (dem von Ihnen gesuchten disto-agnostischen Verwaltungstool) zum Verwalten von Paketen auf Arch-ähnlichen Systemen entwickelt wurde. Aus dem Abschnitt Beispiele in der Dokumentation des verknüpften Moduls:

- 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
quelle
2

Paket ist Ansible "Generic OS Package Manager".

Eine Option wäre, betriebssystemspezifische list_of_packages einzuschließen

- 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"

und installieren Sie die Pakete

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

Nix ist ein eigenständiger Paketmanager, der nicht fest an ein Betriebssystem gebunden ist. Ich benutze es unter MacOS und auch unter Ubuntu https://nixos.org/nix/

Saltstack (Ansible Compatitor) hat eine schönere Abstraktion mit pkg.installed und Sie müssen sich nicht darum kümmern, dass das zugrunde liegende System apt oder rpm oder arch ist ... (es ist immer noch erforderlich, den diff pkg-Namen festzulegen, wenn sie sich auf Systemen unterscheiden, z. B. httpd oder apache2).

HVNSweeting
quelle