是否有与发行版无关的配置管理软件?


7

我不想将自己标记为特定的配置管理器模块,例如Ansible的apt模块或yum模块。

是否有与发行版无关的配置管理软件,或者至少有一个具有发行版不可知代码的软件来为Arch Linux安装以下软件包?

我问这个问题是因为找不到适合在Arch Linux上安装LAMP的Ansible星系角色,并且以下Debian的Bash脚本不适用于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

Answers:


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;例如Windows的WinRM。

配置管理系统是一种将环境抽象为代码的方法。他们给您逻辑/条件来自己做。


1
package模块仅调用ansible_pkg_mgr事实中为该系统定义的模块。因此,Ansible支持的任何包装系统都可以使用。
迈克尔·汉普顿

6

维护一个元包经理对我来说似乎是一个永远做不完的任务,因为有人将不得不保持某种“的Apache2”的Debian的喜欢是“的httpd”,在RHEL-喜欢(等等)罗塞塔石碑。

但是,有一个用于Ansible 的pacman模块,该模块专门用于使用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

2

软件包是Ansible“通用OS软件包管理器”。

一种选择是包括特定于操作系统的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.installer,具有更好的抽象性,您无需关心基础系统是apt还是rpm或arch ...(如果它们在系统上进行比较,例如httpd或apache2,则仍然需要设置diff pkg名称)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.