freebsd_packages
freebsd_packages
Роль Ansible. FreeBSD. Настройка репозиториев. Установка, обновление и апгрейд пакетов.
Не стесняйтесь оставлять свои отзывы и сообщать о проблемах.
Требования
Коллекции
- community.general >= 9.3.0
Переменные
Смотрите настройки по умолчанию и примеры в vars
.
Рабочий процесс
- Измените оболочку на удалённом хосте на /bin/sh, если это необходимо
shell> ansible host -e 'ansible_shell_type=csh ansible_shell_executable=/bin/csh' -a 'sudo pw usermod user -s /bin/sh'
- Установите роль и коллекцию
shell> ansible-galaxy role install vbotka.freebsd_packages
Установите коллекцию, если это необходимо
shell> ansible-galaxy collection install community.general
- Измените переменные под свои нужды.
При желании, получите словари списков пакетов. Смотрите:
Положите их, например, в group_vars/all
shell> ls -1 group_vars/all/
pkgdict_amd64.yml
pkgdict_arm64.yml
pkgdict_arm.yml
pkgdict_i386.yml
pkgdict_versions.yml
- Создайте плейбук
shell> cat freebsd-packages.yml
- hosts: srv.example.com
roles:
- vbotka.freebsd_packages
- Управляйте пакетами
Проверьте синтаксис
shell> ansible-playbook freebsd-packages.yml --syntax-check
Выводите переменные
shell> ansible-playbook freebsd-packages.yml -e pkg_debug=true -t pkg_debug
Сделайте пробный запуск плейбука и отобразите изменения
shell> ansible-playbook freebsd-packages.yml --check --diff
При желании, настройте репозитории на отдельном шаге. Это позволит отобразить фактический пробный запуск установки
shell> ansible-playbook freebsd-packages.yml -t pkg_conf
Сделайте пробный запуск установки пакетов
shell> ansible-playbook freebsd-packages.yml -e pkg_dryrun=true
Если всё выглядит правильно, управляйте пакетами
shell> ansible-playbook freebsd-packages.yml
Подсказка: Есть много пропущенных задач. Чтобы сделать вывод плейбука более удобочитаемым:
Используйте плагин обратного вызова community.general.yaml
Отключите пропущенные хосты и включите отладку
shell> ANSIBLE_DISPLAY_SKIPPED_HOSTS=false ansible-playbook freebsd-packages.yml -e pkg_debug=true
Обновление пакетов
С версии community.general 9.3.0 можно обновлять (state=latest) пакеты в формате «категория/порт», также известном как «pkg-origin». Вам нужно отключить шаблоны (use_globs=false). Смотрите параметр use_globs
shell> ansible-playbook freebsd-packages.yml -e pkg_state=latest -e pkg_use_globs=false
Репозитории
Параметр pkgsite модуля community.general.pkgng говорит:
укажите имя репозитория, настроенного в /usr/local/etc/pkg/repos
Репозиторий по умолчанию
Модуль community.general.pkgng будет использовать репозиторий по умолчанию FreeBSD, объявленный в /etc/pkg/FreeBSD.conf, если другие репозитории не настроены в /usr/local/etc/pkg/repos
shell> cat /etc/pkg/FreeBSD.conf
# $FreeBSD$
#
# Чтобы отключить этот репозиторий, вместо изменения или удаления этого файла,
# создайте файл /usr/local/etc/pkg/repos/FreeBSD.conf:
#
# mkdir -p /usr/local/etc/pkg/repos
# echo "FreeBSD: { enabled: no }" > /usr/local/etc/pkg/repos/FreeBSD.conf
#
FreeBSD: {
url: "pkg+http://pkg.FreeBSD.org/${ABI}/quarterly",
mirror_type: "srv",
signature_type: "fingerprints",
fingerprints: "/usr/share/keys/pkg",
enabled: yes
}
Отобразите настроенный репозиторий
# pkg -vv
...
Репозитории:
FreeBSD: {
url : "pkg+http://pkg.FreeBSD.org/FreeBSD:13:amd64/quarterly",
enabled : yes,
priority : 0,
mirror_type : "SRV",
signature_type : "FINGERPRINTS",
fingerprints : "/usr/share/keys/pkg"
}
Пользовательские репозитории
Вы можете отключить репозиторий по умолчанию и объявить другие репозитории. Например, создайте словарь
pkg_repos_conf:
- name: FreeBSD
conf:
- {key: enabled, value: 'no'}
- name: FreeBSD_quarterly
conf:
- {key: url, value: '"pkg+http://pkg.FreeBSD.org/${ABI}/quarterly"'}
- {key: mirror_type, value: '"srv"'}
- {key: signature_type, value: '"fingerprints"'}
- {key: fingerprints, value: '"/usr/share/keys/pkg"'}
- {key: enabled, value: 'yes'}
- name: FreeBSD_latest
conf:
- {key: url, value: '"pkg+http://pkg.FreeBSD.org/${ABI}/latest"'}
- {key: mirror_type, value: '"srv"'}
- {key: signature_type, value: '"fingerprints"'}
- {key: fingerprints, value: '"/usr/share/keys/pkg"'}
- {key: enabled, value: 'yes'}
И создайте конфигурационные файлы
shell> ansible-playbook -t pkg_conf freebsd-packages.yml
Посмотрите на файлы
shell> cat /usr/local/etc/pkg/repos/FreeBSD.conf
# Управляется Ansible
FreeBSD: {
enabled: no
}
# EOF
shell> cat /usr/local/etc/pkg/repos/FreeBSD_quarterly.conf
# Управляется Ansible
FreeBSD_quarterly: {
url: "pkg+http://pkg.FreeBSD.org/${ABI}/quarterly",
mirror_type: "srv",
signature_type: "fingerprints",
fingerprints: "/usr/share/keys/pkg",
enabled: yes
}
# EOF
shell> cat /usr/local/etc/pkg/repos/FreeBSD_latest.conf
# Управляется Ansible
FreeBSD_latest: {
url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
mirror_type: "srv",
signature_type: "fingerprints",
fingerprints: "/usr/share/keys/pkg",
enabled: yes
}
# EOF
И отобразите настроенные репозитории
shell> pkg -vv
...
Репозитории:
FreeBSD_latest: {
url : "pkg+http://pkg.FreeBSD.org/FreeBSD:13:amd64/latest",
enabled : yes,
priority : 0,
mirror_type : "SRV",
signature_type : "FINGERPRINTS",
fingerprints : "/usr/share/keys/pkg"
}
FreeBSD_quarterly: {
url : "pkg+http://pkg.FreeBSD.org/FreeBSD:13:amd64/quarterly",
enabled : yes,
priority : 0,
mirror_type : "SRV",
signature_type : "FINGERPRINTS",
fingerprints : "/usr/share/keys/pkg"
}
Примеры
Дано такой список
pkg_list: [bash]
- Установите bash из репозитория по умолчанию
shell> ansible-playbook -t pkg_packages_install_list -e pkg_debug=true freebsd-packages.yml
...
ok: [srv.exmple.org] =>
результат:
попытки: 1
изменено: false
неудачи: false
сообщение: пакет(ы) уже присутствуют
stderr: ''
stderr_lines: []
stdout: |-
Обновление каталога репозитория FreeBSD_latest...
Репозиторий FreeBSD_latest актуален.
Обновление каталога репозитория FreeBSD_quarterly...
Репозиторий FreeBSD_quarterly актуален.
Все репозитории актуальны.
...
- Установите bash из репозитория FreeBSD_latest
shell> ansible-playbook -t pkg_packages_install_list -e pkg_debug=true -e pkg_pkgsite=FreeBSD_latest freebsd-packages.yml
...
ok: [srv.example.org] =>
результат:
попытки: 1
изменено: false
неудачи: false
сообщение: пакет(ы) уже присутствуют
stderr: ''
stderr_lines: []
stdout: |-
Обновление каталога репозитория FreeBSD_latest...
Репозиторий FreeBSD_latest актуален.
Все репозитории актуальны.
...
- Установите последнюю версию пакета bash из репозитория FreeBSD_latest
shell> ansible-playbook -t pkg_packages_install_list -e pkg_debug=true -e pkg_pkgsite=FreeBSD_latest -e pkg_state=latest freebsd-packages.yml
...
ok: [srv.example.org] =>
результат:
попытки: 1
изменено: false
неудачи: false
сообщение: пакет(ы) уже последние
stderr: ''
stderr_lines: []
stdout: |-
Обновление каталога репозитория FreeBSD_latest...
Репозиторий FreeBSD_latest актуален.
Все репозитории актуальны.
...
- Установите последние пакеты из минимального списка из репозитория FreeBSD_latest
Получите словари pkgdict_* с GitHub ansible-freebsd-postinstall/defaults/main и объявите список
pkg_dict_select: [minimal]
Установите пакеты
shell> ansible-playbook -t pkg_packages_install_selected -e pkg_debug=true -e pkg_pkgsite=FreeBSD_latest -e pkg_state=latest freebsd-packages.yml
...
ok: [srv.example.org] =>
результат:
изменено: true
сообщение: Все элементы завершены
результаты:
- ansible_loop_var: item
попытки: 1
изменено: true
неудачи: false
вызов:
аргументы_модуля:
аннотация: null
автозамена: false
кеш: false
chroot: null
игнорировать_osver: false
тюрьма: null
имя:
- shells/bash
- devel/git
- archivers/gtar
- ports-mgmt/pkg
- ports-mgmt/portmaster
- ports-mgmt/portupgrade
- net/rsync
- ftp/wget
pkgsite: FreeBSD_latest
rootdir: null
state: latest
элемент:
пакеты:
- shells/bash
- devel/git
- archivers/gtar
- ports-mgmt/pkg
- ports-mgmt/portmaster
- ports-mgmt/portupgrade
- net/rsync
- ftp/wget
pkglist: minimal
сообщение: обновлено 4 пакета
stderr: ''
stderr_lines: []
stdout: |-
Обновление каталога репозитория FreeBSD_latest...
Репозиторий FreeBSD_latest актуален.
Все репозитории актуальны.
Следующие 4 пакета(ов) будут затронуты (из 0 проверенных):
Установленные пакеты, которые будут УЛУЧШЕНЫ:
git-tiny: 2.41.0 -> 2.42.0 [FreeBSD_latest]
gtar: 1.34_1 -> 1.35 [FreeBSD_latest]
portmaster: 3.26 -> 3.27 [FreeBSD_latest]
portupgrade: 2.4.16,2 -> 2.4.16_1,2 [FreeBSD_latest]
Количество пакетов для обновления: 4
5 MiБ будет загружено.
[1/4] Загружается git-tiny-2.42.0.pkg: .......... завершено
[2/4] Загружается portupgrade-2.4.16_1,2.pkg: ......... завершено
[3/4] Загружается gtar-1.35.pkg: ........ завершено
[4/4] Загружается portmaster-3.27.pkg: .... завершено
Проверка целостности... завершено (0 конфликтов)
[1/4] Обновление git-tiny с 2.41.0 до 2.42.0...
===> Создание групп.
Использование существующей группы 'git_daemon'.
===> Создание пользователей
Использование существующего пользователя 'git_daemon'.
[1/4] Распаковка git-tiny-2.42.0: .......... завершено
[2/4] Обновление portupgrade с 2.4.16,2 до 2.4.16_1,2...
[2/4] Распаковка portupgrade-2.4.16_1,2: .......... завершено
[3/4] Обновление gtar с 1.34_1 до 1.35...
[3/4] Распаковка gtar-1.35: .......... завершено
[4/4] Обновление portmaster с 3.26 до 3.27...
[4/4] Распаковка portmaster-3.27: ........ завершено
...
- Установите минимальный список пакетов на хостах в группе test
- hosts: test
gather_facts: true
become: true
vars:
pkg_dict_select:
- минимальный
roles:
- vbotka.freebsd_packages
Ansible lint
Используйте конфигурационный файл .ansible-lint.local при запуске ansible-lint. Некоторые правила могут быть отключены, а некоторые предупреждения могут быть проигнорированы. Смотрите заметки в конфигурационном файле.
shell> ansible-lint -c .ansible-lint.local
Ссылки
- Руководство FreeBSD: Использование pkg для управления бинарными пакетами
- Руководство FreeBSD: Создание пакетов с помощью poudriere
- man pkg.conf
- pkg - бинарный менеджер пакетов для FreeBSD
Лицензия
Информация об авторе
FreeBSD. Configure repositories. Install, update, and upgrade packages.
ansible-galaxy install vbotka/ansible-freebsd-packages