Playbook установка Nginx, PHP, MySQL и Redis
Задание такое: описать конфигурацию playbook-а на Ansible по установке пакетов на сервера CentOS:
- обновление ОС;
- php7 с модулями (bcmach, imagik, pdo, amqp);
- phpmyadmin;
- nginx;
- mysql;
- redis;
- mc.
Поддержи автора статьи, просмотри рекламу ↓↓↓
В исходной позиции подготовлены три сервера на CentOS 7.5 в виде виртуальных машин.
:~$ virsh list --all Id Name State ---------------------------------------------------- 14 S-COS-03 running 15 S-COS-02 running 16 S-COS-01 running
Добавление новых серверов в окружение Ansible(основные принципы описаны )
nano /etc/ansible/hosts
192.168.1.
копирование ssh ключа для беспарольного доступа
ssh-copy-id ssh-copy-id ssh-copy-id
проверка доступности узлов через Ansible
ansible -m ping all
Поддержи автора статьи, просмотри рекламу ↓↓↓
создание playbook-а для обновление CentOS с последующей перезагрузкой
nano /etc/ansible/playbooks/cos-lemp-update.yml
--- - hosts: COS-LEMP tasks: - name: Update OS yum: name="*" state=latest - name: restart system to reboot to newest kernel shell: "sleep 5 && reboot" async: 1 poll: 0 - name: wait for 10 seconds pause: seconds: 10 - name: wait for the system to reboot wait_for_connection: connect_timeout: 60 sleep: 5 delay: 5 timeout: 120 - name: install epel-release yum: name=epel-release state=latest
вывод
nano /etc/ansible/playbooks/cos-lemp.yml
--- - hosts: COS-LEMP tasks: - name: Install PHP+Nginx+MC yum: name=` item ` state=present with_items: - 'php' - 'php-bcmath' - 'ImageMagick' - 'php-pdo' - 'php-amqp' - 'php-mysql' - 'phpmyadmin' - 'nginx' - 'redis' - 'mc' - name: Add mysql repo yum: name=http://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm state=present - name: Install MySQL yum: name="mysql-community-server" - name: start services service: name=` item ` state=started enabled=yes with_items: - 'nginx' - 'mysqld' - 'redis'
Поддержи автора статьи, просмотри рекламу ↓↓↓
Установка пакетов производилась только на двух серверах, чтобы иметь «чистую» копию в резерве. Однако с такой конфигурацией количество серверов не имеет значения, вывод
Adding Ansible command shell completion
As of Ansible 2.9, you can add shell completion of the Ansible command line utilities by installing an optional dependency called . supports bash, and has limited support for zsh and tcsh.
You can install from EPEL on Red Hat Enterprise based distributions, and or from the standard OS repositories for many other distributions.
For more information about installation and configuration, see the argcomplete documentation.
On Fedora:
$ sudo dnf install python-argcomplete
On RHEL and CentOS:
$ sudo yum install epel-release $ sudo yum install python-argcomplete
$ sudo apt install python3-argcomplete
$ python -m pip install argcomplete
There are 2 ways to configure to allow shell completion of the Ansible command line utilities: globally or per command.
Global completion requires bash 4.2.
$ sudo activate-global-python-argcomplete
This will write a bash completion file to a global location. Use to change the location.
If you do not have bash 4.2, you must register each script independently.
$ eval $(register-python-argcomplete ansible) $ eval $(register-python-argcomplete ansible-config) $ eval $(register-python-argcomplete ansible-console) $ eval $(register-python-argcomplete ansible-doc) $ eval $(register-python-argcomplete ansible-galaxy) $ eval $(register-python-argcomplete ansible-inventory) $ eval $(register-python-argcomplete ansible-playbook) $ eval $(register-python-argcomplete ansible-pull) $ eval $(register-python-argcomplete ansible-vault)
You should place the above commands into your shells profile file such as or .
See the argcomplete documentation.
See also
-
Examples of basic commands
-
Learning ansible’s configuration management language
-
Ansible Installation related to FAQs
- Mailing List
-
Questions? Help? Ideas? Stop by the list on Google Groups
-
How to join Ansible chat channels
- 1(,)
-
was included in Ansible’s prior to 2.8.
Повышение привилегий для выполнения команд с помощью sudo
Если команда или модуль, которые вы хотите выполнить на удаленных хостах, требуют расширенных системных привилегий или другого пользователя, вам нужно использовать модуль повышения привилегий Ansible, become. Этот модуль – абстракция для sudo, а также для других программ для повышения привилегий, поддерживаемых Ansible в разных ОС.
Например, вам нужно включить параметр –become, если вы хотите запустить команду tail для вывода последних сообщений из лога ошибок Nginx на server1 из инвентаря:
Это эквивалентно запуску команды sudo tail /var/log/nginx/error.log на удаленном хосте с помощью текущего пользователя локальной системы или удаленного пользователя, указанного в инвентаре.
Системы повышения привилегий, такие как sudo, часто требуют, чтобы вы подтвердили свои учетные данные. Для этого они предлагают ввести пароль. Но это может привести к тому, что Ansible не сможет выполнить команду или плейбук. Потому вы можете использовать параметр –ask-become-pass или -K, чтобы Ansible запросил у вас пароль sudo:
Управление потоками (модулями)
Модульные репозитории позволяют установить пакеты разных версий. По сути, это группы RPM-пакетов, которые должны быть установлены вместе и представляют из себя логическую единицу для установки программного продукта нужной версии. Включить можно только одну версию модуля для репозитория.
1. Вывести список доступных модулей:
dnf module list
* обозначения:
- — значения по умолчанию.
- — включенные модули.
- — отключены.
- — установленные.
В нашей системе может не быть включенных модулей. В этом случае пакеты будут устанавливаться из стандартных репозиторией.
Мы также можем посмотреть отдельные по состоянию группы модулей:
dnf module list —enabled
* включенные.
dnf module list —disabled
* отключенные.
dnf module list —installed
* установленные.
2. Вывести список возможных модулей для конкретного пакета:
dnf module list nodejs
* в данном примере для nodejs.
3. Разрешить или запретить конкретный модуль:
dnf module enable nodejs:12
dnf module disable nodejs:14
* первая команда разрешит модуль nodejs версии 12, вторая, соответственно, запрещает использование модуля nodejs версии 14.
4. Переключение модуля.
Если мы хотим изменить активный модуль, необходимо сначала отключить текущий командой dnf module reset, например:
dnf module reset php:7.3
* если попробовать включить модуль без отключения активного мы увидим ошибку:Error: It is not possible to switch enabled streams of a module.
It is recommended to remove all installed content from the module, and reset the module using ‘dnf module reset <module_name>’ command. After you reset the module, you can install the other stream.
После включаем новый поток:
dnf module enable php:7.4
Шаг 6. Создайте организацию
Организация — это логическая совокупность пользователей, команд, проектов и запасов. Это объект самого высокого уровня в иерархии объектов AWX. На левой панели навигации щелкните значок Организации . Вы обнаружите, что организация по умолчанию была создана автоматически и доступна для всех пользователей Ansible AWX.
Его можно использовать как есть или редактировать по мере необходимости. Давайте отредактируем его, изменив его имя и добавив пользователей, разрешения и многое другое.
Щелкните вкладку « Пользователи » и добавьте нового пользователя. Раньше я не создавал нового пользователя, поэтому появляется пользователь admin по умолчанию. Но вы можете создать других пользователей как общие на шаге 5 .
Если бы у вас были другие пользователи, они были бы внесены в него
При нажатии на «Пользователи» отображаются все пользователи, связанные с этой организацией. Пользователь — это лицо, имеющее доступ к Ansible AWX со связанными ролями и учетными данными. Добавление пользователя в организацию добавляет его только как участника, указав роль для пользователя, можно на вкладке « Разрешения », как показано в примере ниже:
Установка Ansible с pip ¶
Ansible можно установить с помощью , менеджера пакетов Python. Если еще не доступен в вашей системе Python, выполните следующие команды, чтобы установить его:
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py $ python get-pip.py --user
Примечание
Если у вас установлен Ansible 2.9 или более ранняя версия, вам нужно сначала использовать , чтобы удалить более старые версии Ansible перед повторной установкой. установка его.
Затем установите Ansible 1:
$ python -m pip install --user ansible
Чтобы использовать подключаемый модуль подключения или модули, требующие , установите требуемый модуль 2:
$ python -m pip install --user paramiko
Если вы хотите установить Ansible глобально, выполните следующие команды:
$ sudo python get-pip.py $ sudo python -m pip install ansible
Примечание
Запуск с внесет глобальные изменения в систему. Поскольку не координируется с системными менеджерами пакетов, он может внести изменения в вашу систему, которые оставят ее в несогласованном или нефункционирующем состоянии. Это особенно актуально для macOS. Рекомендуется установка с использованием , если вы полностью не понимаете последствия изменения глобальных файлов в системе.
Примечание
В более старых версиях по умолчанию используется http://pypi.python.org/simple, который больше не работает. Убедитесь, что у вас установлена последняя версия перед установкой Ansible. Если у вас установлена более старая версия , вы можете выполнить обновление, следуя инструкциям по обновлению pip.
Обновление Ansible с версии 2.9 и старше до версии 2.10 или новее¶
Начиная с версии 2.10, Ansible состоит из двух пакетов. Перед обновлением вам необходимо сначала удалить старую версию Ansible (2.9 или более раннюю). Если вы не удалите старую версию Ansible, вы увидите следующее сообщение, и никакие изменения не будут внесены:
Невозможно установить ansible-base с уже существующей установкой ansible == 2.x. Известно, что установка ansible-base с помощью ansible-2.9 или более ранней версии, установленной на данный момент withpip, вызывает проблемы. Удалите ansible и установите новую версию: pip uninstall ansiblepip install ansible-base ...
Как объясняется в сообщении, для обновления вы должны сначала удалить версию Установлен Ansible, а затем установите его до последней версии.
$ pip uninstall ansible $ pip install ansible
Установка разрабатываемой версии ¶
В Ansible 2.10 и более поздних версиях Ansible/ansible репозиторий содержит код для основных функций и функций, таких как копирование кода модуля на управляемые узлы. Этот код также известен как .
Примечание
Вам следует запускать только из , если вы изменяете или пробуете функции, находящиеся в стадии разработки. Это быстро меняющийся источник кода, который в любой момент может стать нестабильным.
Примечание
Если у вас Ansible 2.9 или более старые версии, вам нужно сначала использовать , чтобы удалить старые версии Ansible перед его повторной установкой.
Вы можете установить разработку версия прямо из GitHub с помощью pip.
$ python -m pip install --user https: //github.com/ansible/ansible/archive/devel.tar.gz
Заменить в указанном выше URL , с любой другой веткой или тегом на GitHub для установки более старых версий Ansible (до 2.10.). Это устанавливает весь Ansible.
$ python -m pip install --user https://github.com/ansible/ansible/archive/stable-2.9.tar.gz
См. Запуск ansible-base из источника (devel) для получения инструкций о том, как запустить непосредственно из источника, w без необходимости установки.
Запуск модулей Ansible
Модули Ansible – это фрагменты кода, которые можно вызывать из плейбука, а также из командной строки для упрощения выполнения процедур на удаленных нодах. Например, модуль apt используется для управления системными пакетами в Ubuntu, а модуль user – для управления пользователями системы. Команда ping, которую мы уже использовали в этом мануале, также является модулем, обычно он применяется для проверки соединения между главной нодой и хостами.
Ansible предоставляет широкий выбор встроенных модулей, некоторые из которых требуют установки дополнительного программного обеспечения для полноценной работы. Вы также можете создавать свои собственные пользовательские модули.
Чтобы выполнить модуль с аргументами, добавьте в команду флаг -a, а затем соответствующие параметры в двойных кавычках:
В качестве примера мы используем модуль apt для установки пакета tree на server1:
Установка Ansible в Ubuntu¶
сборки Ubuntu доступны в PPA здесь.
Чтобы настроить PPA на вашем компьютере и установить Ansible, выполните следующие команды:
$ sudo apt update $ sudo apt install software-properties-common $ sudo apt-add-repository --yes --update ppa: ansible/ansible $ sudo apt install ansible
Примечание
В старых дистрибутивах Ubuntu «общие свойства программного обеспечения» называются «python-software- свойства ». Вы можете использовать вместо в более старых версиях. Также имейте в виду, что только более новые дистрибутивы (другими словами, 18.04, 18.10 и т. Д.) Имеют флаг или , поэтому соответствующим образом настройте свой сценарий.
Пакеты Debian/Ubuntu также могут быть собраны из проверки исходного кода, запустите:
$ make deb
Настройка системы
В данном разделе мы рассмотрим процессы, которые больше подходят для категории настройки системы.
1. Добавить задание в cron.
Выполняется с помощью модуля cron:
— name: Add Job for Run Command
cron:
name: Start Script
job: «/scripts/command.sh»
user: root
minute: «0»
hour: «*/6»
day: «*»
month: «*»
weekday: «*»
* в данном примере мы создадим задание для запуска команды /scripts/command.sh каждый день, каждые 6 часов.
О cron: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/cron_module.html.
2. Добавить публичный ключ хоста в known_hosts.
Делается с помощью known_hosts. Пример из официальной документации:
— name: Tell the host about our servers it might want to ssh to
known_hosts:
path: /etc/ssh/ssh_known_hosts
name: foo.com.invalid
key: «{{ lookup(‘file’, ‘pubkeys/foo.com.invalid’) }}»
* в данном примере мы добавим ключ из файла pubkeys/foo.com.invalid в /etc/ssh/ssh_known_hosts.
О known_hosts: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/known_hosts_module.html.
3. Создание новых SSH-ключей для сервера.
Создание ключей реализуется с помощью модуля openssh_keypair:
— name: Generate New SSH Host Keys
openssh_keypair:
path: «/etc/ssh/ssh_host_` item`.`type `_key»
owner: root
state: present
type: «` item`.`type `»
size: «` item`.`size `»
force: yes
loop:
— { type: dsa, size: 1024 }
— { type: ecdsa, size: 521 }
— { type: ed25519, size: 2048 }
— { type: rsa, size: 2048 }
* в данном примере мы создадим 4 ключа разных типов: dsa, ecdsa, ed25519, rsa. Так как у каждого из них свои требования к размеру, перечень представлен в виде двумерного массива. Ключи будут созданы в каталоге /etc/ssh/.
О openssh_keypair: https://docs.ansible.com/ansible/latest/collections/community/crypto/openssh_keypair_module.html.
4. Работа с SSH authorized_key.
Данный файл содержит публичный ключ для подключения по SSH. Работа с ним через Ansible выполняется с помощью модуля authorized_key.
Пример добавления ключа:
— name: Set authorized key took from file
authorized_key:
user: root
state: present
key: ‘` item `’
with_file:
— files/key.pub
* в данном примере мы берем содержимое файла files/key.pub и устанавливаем его для пользователя root.
Об authorized_key: https://docs.ansible.com/ansible/2.4/authorized_key_module.html.
5. Создание системной учетной записи.
Для этого есть модуль user. У него много опций, но для создания системной учетной записи нам достаточно:
— name: Create User Consul
user:
name: consul
system: yes
comment: «Consul Agent»
* в данном примере будет создана учетная запись consul.
О user: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/user_module.html.
6. Работа с systemd.
Для данной настройки есть одноименный модуль systemd. Рассмотрим варианты его использования.
а) перечитать конфигурацию (необходимо делать каждый раз, когда мы меняем настройки юнита):
— name: systemd reload
systemd:
daemon_reload: yes
б) разрешить сервис (автозапуск):
— name: mysql enable
systemd:
name: mysql
enabled: yes
* для сервиса mysql.
в) перезапустить сервис:
— name: mysql reload
systemd:
name: mysql
state: restarted
* для сервиса mysql.
О systemd: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/systemd_module.html.
7. Настройка брандмауэра.
Выполняется разными модулями в зависимости от используемой системы управления netfilter:
- firewalld
- iptables
- ufw
Рассмотрим небольшие примеры.
а) firewalld:
— name: permit traffic in default zone for https service
firewalld:
service: https
permanent: yes
state: enabled
Подробнее: https://docs.ansible.com/ansible/latest/collections/ansible/posix/firewalld_module.html.
б) iptables:
— name: Block specific IP
iptables:
chain: INPUT
source: 8.8.8.8
jump: DROP
Подробнее: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/iptables_module.html.
в) UFW.
Добавить 80 порт:
— name: Allow all access to tcp port 80
ufw:
rule: allow
port: ’80’
proto: tcp
Добавить порты с циклом:
— name: Allow Ports in Firewall
ufw:
rule: allow
port: «` item`.`port `»
proto: «` item`.`proto `»
comment: «` item`.`comment `»
loop:
— { port: 5432, proto: tcp, comment: ‘PostgreSQL’ }
Подробнее: https://docs.ansible.com/ansible/latest/collections/community/general/ufw_module.html.
Finding tarballs of tagged releases
If you are packaging Ansible or wanting to build a local package yourself, and you want to avoid a git checkout, you can use a tarball of a tagged release. You can download the latest stable release from PyPI’s ansible package page. If you need a specific older version, beta version, or release candidate, you can use the pattern . VERSION must be the full version number, for example 3.1.0 or 4.0.0b2. You can make VERSION a variable in your package managing system that you update in one place whenever you package a new version.
Note
If you are creating your own Ansible package, you must also download or package (or for packages based on 2.10.x) from PyPI as part of your Ansible package. You must specify a particular version. Visit the PyPI project pages to download files for ansible-core or ansible-base.
Возможные ошибки
Рассмотрим примеры ошибок, с которыми мы можем столкнуться и способы их решения.
1. Curl error (60): SSL peer certificate or SSH remote key was not OK
Ошибка появляется при попытке выполнить операцию обновления или установки пакетов.
Причина: сертификат подключенного репозитория не проходит проверку. Возможно, он просрочен или выдан не доверенным центром сертификации.
Решение: проблему можно решить на стороне сервера (если мы являемся его администратором), например, получив правильный сертификат у Let’s Encrypt. На стороне клиента можно отключить проверку SSL для репозитория командой:
yum-config-manager —save —setopt=<имя репозитория>.sslverify=0
Или в конфигурационном файле репозитория добавить или изменить строку с sslverify:
sslverify=0
* данная опция задает необходимость проверки SSL для репозитория.
2. Error: GPG validation FAILED
Ошибка появляется при попытке установить пакет.
Причина: система не может загрузить и импортировать gpg-ключ. Это возможно в разных сценариях, например, в настройках репозитория не указан путь до него, но при этом указано, что проверка подписи необходима или ключ не удалось загрузить и импортировать.
Решение: для некоторых пакетов идет отдельная инструкция по настройке репозитория, в частности, установки ключа GPG. Или мы можем отключить проверку gpg командой:
yum-config-manager —save —setopt=<имя репозитория>.gpgcheck=0
Или через конфигурационный файл:
gpgcheck=0
Настройка параметров подключения
По умолчанию Ansible пытается подключиться к хостам через удаленного пользователя с тем же именем, что и у вашего текущего системного пользователя, используя соответствующую ему пару ключей SSH.
Чтобы подключиться как другой удаленный пользователь, добавьте команду с флагом –u, после которого укажите имя нужного пользователя:
Если вы используете пользовательский ключ SSH для подключения к удаленным серверам, вы можете предоставить его во время выполнения с помощью параметра —private-key:
После того как вы подключитесь, используя соответствующие параметры, вы сможете настроить файл инвентаря. В нем можно установить другого удаленного пользователя и закрытый ключ, если они не соответствуют значениям Ansible по умолчанию. Тогда вам не нужно будет указывать эти параметры в командной строке.
В следующем примере файла инвентаря переменная ansible_user настроена только для сервера server1:
Теперь Ansible будет использовать аккаунт 8host в качестве удаленного пользователя по умолчанию при подключении к серверу server1.
Чтобы настроить пользовательский ключ SSH, включите переменную ansible_ssh_private_key_file:
В обоих случаях мы установили собственные значения только для server1. Если вы хотите использовать одни и те же настройки для нескольких серверов сразу, используйте для этого дочернюю группу:
В этом примере пользовательские конфигурации (другой аккаунт и ключ SSH) будут применяться только для подключения к серверам группы group_a.
Создание плейбука
Создаем файл для playbook:
vi /etc/ansible/play.yml
—
— hosts: redhat-servers
become:
true
become_method:
su
become_user:
root
remote_user:
ansible
roles:
— epel
— nginx
— hosts: debian-servers
become:
true
become_method:
sudo
become_user:
root
remote_user:
ansible
roles:
— nginx
* где:
- — — начало файла YAML. Данный формат имеет строгую структуру — важен каждый пробел;
- hosts — группа хостов, к которым будут применяться правила плейбука (если мы хотим, чтобы правила применялись ко всем хостам, указываем hosts: all);
- become — указывает на необходимость эскалации привилегий;
- become_method — метод эскалации привилегий;
- become_user — пользователь под которым мы заходим с помощью become_method;
- remote_user — пользователь, под которым будем подключаться к удаленным серверам;
- roles — список ролей, которые будут применяться для плейбука.
* В данном случае мы задействуем нашу группы хостов, которые создали в самом начале; повышаем привилегии методом su под пользователем root (su — root) для группы redhat-servers и методом sudo для debian-servers; подключение к серверам выполняется от пользователя ansible; используем созданную нами роль nginx (саму роль мы создадим позже). Для систем RPM сначала выполним роль epel — она будет отвечать за установку репозитория EPEL, так как в стандартном репозитории nginx нет.
Стоит отдельно уделить внимание вопросу повышения привилегий. IT-среды могут применять разные политики относительно безопасности
Например, на серверах CentOS, по умолчанию, нет sudo и повышать привилегии нужно с помощью su. В Ubuntu наоборот — по умолчанию есть sudo, а su не работает, так как пароль на root не устанавливается. В данном случае есть несколько путей при работе с Ansible:
- Как в нашем примере, разделить группы хостов на разные семейства операционных систем и применять к ним разные методы повышения привилегий. Чтобы данный плейбук корректно отработал, учетная запись, под которой идет удаленное подключение к серверу (в нашем примере ansible) должна иметь такой же пароль, как у пользователей root на серверах семейства Red Hat. Данный метод удобен с точки зрения отсутствия необходимости приводить к единому виду безопасность серверов разного семейства. Однако, с точки зрения безопасности лучше, чтобы пароли у root и ansible были разные.
- Использовать метод для создания плейбука, как описан выше, но запускать его с ключом —limit, например, ansible-playbook —limit=debian-servers … — таким образом, мы запустим отдельные задания для каждого семейства операционных систем и сможем ввести индивидуальные пароли для каждого случая.
- Мы можем на всех серверах deb установить пароль для пользователя root, таким образом, получив возможность для become_method: su.
- И наконец, можно для серверов Red Hat установить sudo и проходить become с помощью метода sudo.
Шаг 8. Создайте новый инвентарь и добавьте его в организацию.
Инвентаризация — это набор хостов, которыми управляет Ansible. Запасы назначаются организациям, а разрешения на запуск сценариев для инвентаризации контролируются на уровне пользователя и / или команды.
Чтобы создать и просмотреть существующие запасы, щелкните значок « Запасы» на левой панели навигации. Чтобы создать новый инвентарь, нажмите кнопку добавления ( + ) и выберите «Инвентарь» в раскрывающемся списке меню.
Введите имя и организацию, которой будет принадлежать этот инвентарь. Нажмите « Сохранить », чтобы активировать другие вкладки.
В этом примере мы собираемся добавить один хост, но знаем, что вы можете создать группу, содержащую один или несколько хостов, на которых вы хотите выполнять что-либо одновременно. Щелкните вкладку « Хосты » и нажмите +, чтобы добавить новый хост.
На новой загруженной странице добавьте IP или разрешимое имя хоста и описание. Мы собираемся установить nginx на данный хост в этом примере, используя интуитивно понятное имя.
После завершения нажмите « Сохранить », и новый инвентарь должен быть создан.
Концепция групп и хостов
Обратите внимание, что инвентарь разделен на группы и хосты. Группа может представлять конкретную среду (например, « Центр обработки данных 1 » или « Стенд для тестирования »), тип сервера (например, « Веб-серверы » или « Серверы БД ») или любое другое представление вашей среды
Репозитории
Команда yum/dnf использует репозитории для своей работы
Очень важно понять, как с ними работать в системе. Конфиги репозиториев CentOS описывают пути, по которым система может брать установочные файлы для пакетов, а также правила работы с самими репозиториями
Примеры команд для управления репозиториями
1. Просмотр репозиториев.
Список включенных репозиториев:
yum repolist
Список включенных и отключенных репозиториев:
yum repolist all
Также мы можем получить подробное описание для каждого включенного репозитория:
yum repolist -v
Список отключенных репозиториев можно посмотреть отдельно командой:
yum repolist disabled
2. Добавление репозитория командой.
Для добавления репозитория мы можем воспользоваться командой yum-config-manager, для этого сначала нужно установить yum-utils:
yum install yum-utils
Теперь вводим:
yum-config-manager —add-repo <репозиторий>
Например:
yum-config-manager —add-repo https://yum.mariadb.org/10.5/centos8-amd64
* на основе ссылки https://yum.mariadb.org/10.5/centos8-amd64 будет добавлен репозиторий.
3. Добавление репозитория через файл.
Также мы можем создать конфигурационный файл с описанием репозитория. Все файлы находятся в каталоге /etc/yum.repos.d. Например, создадим файл с добавлением репозитория mariadb:
vi /etc/yum.repos.d/mariadb.repo
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos8-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
enabled=1
* где:
- name — произвольное имя репозитория.
- baseurl — путь, по которому система может забирать пакеты из репозитория.
- gpgkey — путь до открытого gpg-ключа. Нужен для проверки цифровой подписи пакетов.
- gpgcheck — нужно ли проверять цифровую подпись пакетов.
- enabled — опция включает или выключает репозиторий.
4. Временное включение и отключение репозиториев во время операций (на примере репозитория EPEL).
Отключить во время обновления:
yum update —disablerepo=epel
Включить во время обновления:
yum update —enablerepo=epel
Отключить во время установки:
yum install —disablerepo=epel
Включить во время установки:
yum install —enablerepo=epel
5. Постоянное отключение/включение репозиториев.
Мы можем отключить наш репозиторий командой:
yum-config-manager —disable <имя репозитория>
* для выполнения данной команды мы должны установить в систему пакет yum-utils.
Например:
yum-config-manager —disable yum.mariadb.org_10.5_centos8-amd64
Разрешить репозиторий можно той же командой с опцией —enable:
yum-config-manager —enable yum.mariadb.org_10.5_centos8-amd64
Также мы можем выполнить настройку в конфигурационном файле, например:
vi /etc/yum.repos.d/mariadb.repo
Находим:
enabled=1
… и меняем на:
enabled=0
* в данном примере 1 разрешает репозиторий, а 0 запрещает.
6. Настройка опций.
Наши репозитории настраиваются с помощью опций, которые перечислены в конфигурационном файле. Мы можем также их задавать командой:
yum-config-manager —save —setopt=<имя репозитория>.<имя опции>=<значение>
Например:
yum-config-manager —save —setopt=mariadb.module_hotfixes=1
Обслуживание
1. Удалить кэш для списков пакетов в репозиториях, а также загруженные исходники для пакетов:
yum clean —enablerepo=* all
Также мы можем удалить кэш только для определенных репозиториев, например:
yum clean all —disablerepo=»*» —enablerepo=»epel,nginx-thirdparty»
* обязательно, сначала должен следовать disablerepo, после enablerepo.
2. Сформировать кэш списков пакетов в репозиториях:
yum makecache