Shell-Script
是否有與發行版無關的配置管理軟體?
我不想將自己標記為特定的配置管理器模組,例如 Ansible 的
apt
模組或yum
模組。是否有與發行版無關的配置管理軟體,或者至少有一個與發行版無關的程式碼也可以為Arch Linux安裝以下軟體包?
我問這個是因為我沒有找到合適的 Ansible galaxy-role 來在 Arch Linux 上安裝 LAMP,並且以下 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
從技術上講,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。
配置管理系統是將環境抽象為程式碼的一種方式;他們給你邏輯/條件來自己做。