Существует ли дистрибутивное программное обеспечение для управления конфигурацией?

7

Я не хочу маркировать себя определенными модулями менеджера конфигурации, такими как aptмодуль или yumмодуль Ansible .

Существует ли программное обеспечение для управления дистрибутивной конфигурацией или хотя бы одно с дистрибутивным кодом для установки следующих пакетов для Arch Linux ?

Я спрашиваю об этом, потому что я не нашел подходящей роли Ansible galaxy для установки LAMP на Arch Linux, и следующий скрипт Bash для Debian не подходит для 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

источник

Ответы:

11

Технически, это Ansible; потому что это без агента; Я использовал его для управления маршрутизаторами, коммутаторами, серверами и т. Д.

Кажется, вы спрашиваете, поддерживает ли packageмодуль Arch Linux? Мне лень проверять, поддерживает ли это Arch; но если этого не произойдет, всегда найдется pacmanмодуль ... И если это не сработает ... Всегда пишется собственный модуль.

Хотя вы говорите о большей проблеме с запуском нескольких разных дистрибутивов в производственной среде . Становится больно управлять долгое время. Вот почему рекомендуется не запускать несколько дистрибутивов в производственной среде, поскольку с точки зрения управления (исключительно из кода) это большая работа. Наиболее очевидный способ обойти это - использование Ansible whenв сочетании с os_family:

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

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

Я был в ситуации, когда мне приходилось управлять серверами Debian и серверами CentOS на производстве; в конце концов я выбрал чистый Debian, потому что:

  • Кодовая база для CM была разрезана пополам (вся логика для специфических особенностей дистрибутива была удалена).
  • Тестирование стало менее болезненным (если вы не тестируете свой код CM, значит, вы делаете это неправильно).

Вы также столкнетесь с серьезными различиями в любом случае; например:

  • Некоторые пакеты называются по-разному; httpd(RHEL) против apache2(Debian).
  • Различные «стандартные» каталоги конфигурации; /etc/default(Debian) против /etc/sysconfig(RHEL).
  • Различные системы инициализации; хотя в systemdзначительной степени взял на себя.
  • Нет SSH; например WinRM для Windows.

Системы управления конфигурацией - это способ абстрагирования среды в код; и они дают вам логику / условия, чтобы сделать это самостоятельно .

Джефф Шаллер
источник
1
packageМодуль просто вызывает модуль , определенный в ansible_pkg_mgrсамом деле для этой системы. Так что любая система упаковки, которую поддерживает Ansible, будет работать.
Майкл Хэмптон
6

Поддержание менеджера метапакетов кажется мне сизифовой задачей, поскольку кто- то должен был поддерживать некий «apache2» в Debian-лайках, это «httpd» в RHEL-лайках (и так далее) Розетта Стоун.

Тем не менее, существует модуль pacman для Ansible, специально предназначенный для использования Ansible (инструмента для дистогогностического управления, который вы ищете) для управления пакетами в системах типа Arch. Из раздела «Примеры» документации по связанному модулю:

- 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
источник
2

Пакет Ansible "Универсальный менеджер пакетов ОС".

Вариант будет включать в себя специфичные для ОС list_of_packages

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

и установить пакеты

- package:
    state: present
    name: "{{ item }}"
  loop: "{{ list_of_packages }}"
Владимир Ботка
источник
2

Nix - это автономный менеджер пакетов, который не привязан ни к какой операционной системе. Я использую его на MacOS, а также на Ubuntu https://nixos.org/nix/

Saltstack (Ansible compatitor) имеет более приятную абстракцию с pkg.installed, и вам не нужно заботиться о том, чтобы лежащая в основе система была apt или rpm или arch ... (все же необходимо установить имя diff pkg, если они различаются в системах, например, httpd или apache2)

HVNSweeting
источник