使用Ansible自动化配置Debian/Ubuntu apt源

使用Ansible自动化配置Debian/Ubuntu apt源

发布时间:2024-10-14 14:53:22

步骤

  1. 创建ansible playbook文件,例如configure_apt_sources.yml:
yaml

---
- hosts: all
become: yes
vars:
debian_codename_mapping:
'8': 'jessie'
'9': 'stretch'
'10': 'buster'
'11': 'bullseye'
'12': 'bookworm'
ubuntu_codename_mapping:
'18.04': 'bionic'
'20.04': 'focal'
'22.04': 'jammy'
'23.10': 'mantic'

tasks:
- name: determine os family
ansible.builtin.set_fact:
os_family: "{{ ansible_facts['os_family'] }}"

- name: configure debian sources
ansible.builtin.template:
src: debian_sources.list.j2
dest: /etc/apt/sources.list
when: os_family == "debian" and ansible_distribution != "ubuntu"

- name: configure ubuntu sources
ansible.builtin.template:
src: ubuntu_sources.list.j2
dest: /etc/apt/sources.list
when: os_family == "debian" and ansible_distribution == "ubuntu"

- name: update apt cache
ansible.builtin.apt:
update_cache: yes

  1. 创建debian的模板文件 debian_sources.list.j2:
 

{% set codename = debian_codename_mapping[ansible_distribution_major_version] | default(ansible_distribution_release) %}
deb http://deb.debian.org/debian {{ codename }} main
deb-src http://deb.debian.org/debian {{ codename }} main

deb http://deb.debian.org/debian-security/ {{ codename }}-security main
deb-src http://deb.debian.org/debian-security/ {{ codename }}-security main

deb http://deb.debian.org/debian {{ codename }}-updates main
deb-src http://deb.debian.org/debian {{ codename }}-updates main

  1. 创建ubuntu的模板文件 ubuntu_sources.list.j2:
 

{% set codename = ubuntu_codename_mapping[ansible_distribution_version] | default(ansible_distribution_release) %}
deb http://archive.ubuntu.com/ubuntu/ {{ codename }} main restricted
deb-src http://archive.ubuntu.com/ubuntu/ {{ codename }} main restricted

deb http://archive.ubuntu.com/ubuntu/ {{ codename }}-updates main restricted
deb-src http://archive.ubuntu.com/ubuntu/ {{ codename }}-updates main restricted

deb http://archive.ubuntu.com/ubuntu/ {{ codename }} universe
deb-src http://archive.ubuntu.com/ubuntu/ {{ codename }} universe
deb http://archive.ubuntu.com/ubuntu/ {{ codename }}-updates universe
deb-src http://archive.ubuntu.com/ubuntu/ {{ codename }}-updates universe

deb http://archive.ubuntu.com/ubuntu/ {{ codename }} multiverse
deb-src http://archive.ubuntu.com/ubuntu/ {{ codename }} multiverse
deb http://archive.ubuntu.com/ubuntu/ {{ codename }}-updates multiverse
deb-src http://archive.ubuntu.com/ubuntu/ {{ codename }}-updates multiverse

deb http://archive.ubuntu.com/ubuntu/ {{ codename }}-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ {{ codename }}-backports main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu {{ codename }}-security main restricted
deb-src http://security.ubuntu.com/ubuntu {{ codename }}-security main restricted
deb http://security.ubuntu.com/ubuntu {{ codename }}-security universe
deb-src http://security.ubuntu.com/ubuntu {{ codename }}-security universe
deb http://security.ubuntu.com/ubuntu {{ codename }}-security multiverse
deb-src http://security.ubuntu.com/ubuntu {{ codename }}-security multiverse

  1. 运行playbook:
 
ansible-playbook -i inventory_file configure_apt_sources.yml

故障排查

  1. 版本不匹配:
    • 问题: 如果遇到 "no mapping found for x version" 的错误。
    • 解决: 检查 debian_codename_mappingubuntu_codename_mapping 是否包含目标系统的版本。如果没有,添加相应的映射。
  2. 权限问题:
    • 问题: 无法写入 /etc/apt/sources.list
    • 解决: 确保playbook中设置了 become: yes,或者使用 ansible-playbook 命令时加上 -b--become 参数。
  3. 模板文件不存在:
    • 问题: "template source not found" 错误。
    • 解决: 确保模板文件 (debian_sources.list.j2ubuntu_sources.list.j2) 在正确的位置,通常是在playbook同一目录下的 templates 文件夹中。
  4. 网络问题:
    • 问题: 无法更新apt缓存或下载包。
    • 解决: 检查目标系统的网络连接,确保能够访问配置的apt源。可能需要配置代理或使用本地镜像。
  5. 不支持的发行版:
    • 问题: playbook在非debian/ubuntu系统上失败。
    • 解决: 添加条件检查,只在debian系列系统上执行相关任务。
  6. apt锁定:
    • 问题: 无法获取apt锁,更新失败。
    • 解决: 确保目标系统上没有其他进程正在使用apt。可以添加重试逻辑或手动清理锁文件。

记得定期更新映射以支持新的发行版本。对于生产环境,建议使用官方支持的长期支持(lts)版本。

这个ansible playbook和相关模板文件为您提供了一个自动化配置debian和ubuntu系统apt源的框架。它使用版本映射来确保为不同的系统版本选择正确的代号(codename)。

主要步骤包括:

  1. 定义版本到代号的映射
  2. 根据操作系统类型选择适当的模板
  3. 应用模板生成新的sources.list文件
  4. 更新apt缓存

我还提供了一些常见问题的故障排查建议,涵盖了版本不匹配、权限问题、模板文件缺失、网络问题等情况。

感谢:www.05vm.com www.nj0827.net