apt
나는 Ansible의 모듈 과 같은 특정 구성 관리자 모듈로 자신을 라벨링하고 싶지 않습니다 yum
.
배포에 구애받지 않는 구성 관리 소프트웨어가 있습니까? 아니면 적어도 하나가 있습니까?릴리스 독립적인 코드다음 패키지를 설치하십시오.아키텍처Linux게다가?
Arch Linux에 LAMP를 설치하는 데 적합한 Ansible Galaxy 역할을 찾지 못했고 다음 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
답변1
기술적으로 Ansible은 다음과 같습니다. 에이전트가 없기 때문에 라우터, 스위치, 서버 등을 관리하는 데 사용합니다.
당신이 요구하는 것은 다음과 같습니다package
기준 치수아치 리눅스가 지원되나요? 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
주로 사용되었습니다. - 예를 들어 Windows용 WinRM은 SSH가 없습니다.
구성 관리 시스템은 환경을 코드로 추상화하는 방법으로 이를 수행하기 위한 논리/조건을 제공합니다.당신 자신.
답변2
제 생각에는 메타 패키지 관리자를 유지하는 것은 Sisyphean 작업입니다.누구Debian 클래스에서는 일종의 "apache2"가 유지되어야 하고, RHEL 클래스 등에서는 Rosetta Stone에서 "httpd"가 유지되어야 합니다.
그러나 하나가 있습니다팩맨귀하가 찾고 있는 disto-agnostic 관리 도구인 Ansible을 사용하여 Arch와 유사한 시스템에서 패키지를 관리하도록 특별히 설계된 Ansible용 모듈입니다. 링크된 모듈 문서의 예제 섹션에서:
- 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
답변3
팩Ansible은 "범용 운영 체제 패키지 관리자"입니다.
한 가지 옵션은 운영 체제별 항목을 포함하는 것입니다.패키지 목록
- 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 }}"
답변4
Nix는 어떤 운영 체제에도 밀접하게 연결되지 않은 독립형 패키지 관리자입니다. MacOS와 Ubuntu에서 사용합니다.https://nixos.org/nix/
Saltstack(Ansible compatitor)은 pkg.installed에 대해 더 나은 추상화를 제공하므로 기본 시스템이 apt, rpm 또는 arch인지 신경 쓸 필요가 없습니다. (시스템에서 다른 경우에도 diff pkg를 설정해야 합니다. 이름(예: httpd 또는 apache2 )