После свежей установки Debian обычно приходится устанавливать несколько пакетов. Вместо того чтобы устанавливать их по одному вручную, мы сохраняем их в простом Bash-скрипте и устанавливаю все одной командой.
Для меня это простое и эффективное решение для базовой установки пакетов. Нет необходимости использовать какую-либо платформу автоматизации только для установки списка пакетов.
Вот что мы делаем после установки Debian:
- Запускаю простой Bash-скрипт после установки,
- Устанавливаю все необходимые пакеты.
Мой скрипт довольно прост и содержит два типа пакетов:
- Базовые инструменты, которые пригодятся практически на любом рабочем столе
- Пакеты для личного рабочего стола, которые нужны именно мне
Если в дальнейшем настройка выходит за рамки установки пакетов и включает в себя конфигурацию системы, мы переходим к Ansible.
Обратите внимание, что эта статья предназначена именно для после установочной настройки пакетов, а не для полной/общей настройки Debian или Ubuntu после установки.
1. Создание простого скрипта после установки Bash для Debian/Ubuntu
Удобно хранить все скрипты в одном каталоге. Поэтому мы создадим каталог scripts:
mkdir -p ~/scripts
Создать скрипт:
nano ~/scripts/install-deb-essential-packages.sh
Добавить:
#!/usr/bin/env bash
set -euo pipefail
PACKAGES=(
# Основные инструменты
git
curl
wget
ca-certificates
unzip
build-essential
# Пакеты для персональных настольных компьютеров
firmware-cirrus
papirus-icon-theme
timeshift
gnome-shell-extension-manager
vim
gnome-shell-extension-dashtodock
gnome-themes-extra
flatpak
gnome-software-plugin-flatpak
steam-installer
)
echo "Обновление списков пакетов..."
sudo apt update
echo "Установка пакетов..."
sudo apt install -y "${PACKAGES[@]}"
echo "Сделано."
Обратите внимание, что некоторые пакеты доступны только для определенной платформы. Поэтому вам может потребоваться отредактировать этот скрипт и добавить или удалить пакеты в зависимости от вашего дистрибутива Linux. После добавления всех необходимых пакетов для установки сохраните скрипт и закройте его.
Сделайте его исполняемым:
chmod +x* ~/scripts/install-deb-essential-packages.sh
Запустите скрипт для одновременной установки всех необходимых пакетов в вашей системе Debian/Ubuntu:
~/scripts/install-deb-essential-packages.sh
Этот же скрипт можно использовать для других систем на основе Debian, таких как Ubuntu и ее производные, например Linux Mint, Pop!_OS, ElementaryOS и Zorin OS.
Как уже было сказано, некоторые пакеты могут быть доступны только для определенной версии. Просто убедитесь, что пакеты в скрипте доступны для вашего дистрибутива Linux.
2. Почему выбраны именно эти базовые пакеты?
Первая группа намеренно небольшая.
git
Полезно для клонирования репозиториев и управления файлами конфигурации.
git clone ...
curl
Универсальный инструмент командной строки для передачи данных по сетевым протоколам. Используется во многих инструкциях по установке и скриптах.
wget
Еще один полезный загрузчик из командной строки.
ca-certificates
Предоставляет доверенные сертификаты центров сертификации, используемые программным обеспечением для HTTPS/TLS-соединений.
unzip
Полезно, поскольку загружаемое программное обеспечение и проекты часто поставляются в виде .zip архивов.
build-essential
Предоставляет стандартный базовый набор инструментов для компиляции, включая такие инструменты, как gcc и make. Debian особо выделяет его как ключевой пакет для базовой среды сборки.
build-essentialне является обязательным для каждого пользователя настольного компьютера. Если я знаю, что не буду компилировать программное обеспечение, я могу его удалить. Он включен в список, потому что это полезная базовая система для персонального компьютера, ориентированного на разработку.
3. Зачем использовать массив Bash?
Вместо того чтобы запускать вручную:
sudo apt install git sudo apt install curl sudo apt install wget sudo apt install unzip
Мы введем один список:
PACKAGES=( git curl wget unzip )
Затем устанавливаю все с помощью:
sudo apt install -y "${PACKAGES[@]}"
Это:
- Быстрее
- Проще в обслуживании
- Легко модифицировать
- Легко использовать повторно после переустановки Debian
Добавить пакет так же просто, как добавить еще одну строку:
PACKAGES=( git curl wget neovim )
4. Почемуset -euo pipefail?
Как вы могли заметить, скрипт начинается с:
set -euo pipefail
Это делает скрипт более безопасным.
В частности, -e останавливает скрипт при сбое команды вместо продолжения работы вслепую.
Для небольшого персонального скрипта настройки это хорошее значение по умолчанию.
5. Храните персональные пакеты отдельно.
По мере роста списка может оказаться полезным проводить различие между инструментами общего назначения и вещами, специфичными для моей установки.
Например:
PACKAGES=( # Основные инструменты git curl wget ca-certificates unzip build-essential # Рабочий стол firmware-cirrus papirus-icon-theme gnome-shell-extension-manager gnome-shell-extension-dashtodock gnome-themes-extra # Приложения timeshift flatpak gnome-software-plugin-flatpak steam-installer # Редактор vim )
Это упрощает понимание скрипта в дальнейшем.
6. Когда использовать Ansible?
Некоторые из вас задаются вопросом, почему бы просто не использовать платформы автоматизации, такие как Ansible, и на этом остановиться. Я не использую Ansible только для составления списка пакетов. Ansible становится полезным, когда мы начинаем делать что-то вроде:
- Установить пакеты
- Настроить Git
- Создать файлы конфигурации
- Настроить Vim
- Включить службы
- Настроить GNOME
- Применить системные настройки
Или когда мне нужна одинаковая конфигурация на нескольких компьютерах.
Для простой установки пакета я использую Bash. Для повторяемой настройки системы я захожу в Ansible.
7. Установите Ansible
Ansible — это инструмент автоматизации ИТ с открытым исходным кодом и командной строкой, написанный на Python. Он может настраивать системы, развертывать программное обеспечение и организовывать расширенные рабочие процессы для поддержки развертывания приложений, системных обновлений и многого другого.
Он известен как «безагентный», что означает, что он управляет удаленными машинами по стандартным протоколам подключения без установки на них постоянного программного обеспечения.
Как это работает
Вы пишете удобочитаемые инструкции на языке YAML (так называемые плейбуки), которые определяют желаемое состояние ваших серверов. Ansible подключается через SSH (для Linux/Unix) или WinRM (для Windows), проверяет текущее состояние и вносит изменения только в том случае, если они соответствуют вашим инструкциям. На управляемых узлах не требуется установка дополнительных агентов или демонов.
Ключевые моменты
- Архитектура без агентов: В отличие от инструментов, требующих наличия постоянного агента на каждом сервере, Ansible использует для передачи данных существующий SSH-демон (или WinRM для Windows). Это снижает затраты на обслуживание и избавляет от необходимости следить за обновлениями и совместимостью программного обеспечения агентов.
- Идемпотентность: Это один из основных принципов. Модули Ansible по возможности идемпотентны, то есть вносят изменения в систему только в том случае, если желаемое состояние не достигнуто. При многократном запуске одного и того же плейбука результат будет одинаковым. Примечание. Некоторые модули (например,
commandиshell) изначально не поддерживают такое поведение и требуют принудительного применения. - Простота благодаря YAML: плейбуки пишутся на YAML — языке, понятном человеку. Это означает, что ваш код автоматизации часто выглядит как документация, что делает его доступным даже для тех, кто не является профессиональным программистом.
- Модель с отправкой данных: вы запускаете Ansible с центрального «контрольного узла», который отправляет изменения конфигурации на «управляемые узлы» по протоколу SSH (или WinRM для Windows).
Один интересный факт об Ansible
Несмотря на то, что Ansible известен как «безагентный» инструмент, на самом деле он использует крошечный эфемерный агент — но только временно. Для выполнения каждой задачи Ansible подключается к управляемым узлам и отправляет на них небольшие программы, называемые модулями Ansible.
Эти программы представляют собой ресурсные модели желаемого состояния системы. Затем Ansible запускает эти модули (по умолчанию через SSH) и удаляет их после завершения. После этого сервер будет выглядеть точно так же, как до автоматизации, без установленного программного обеспечения Ansible.
Чтобы установить Ansible в Debian / Ubuntu, выполните следующие действия:
sudo apt update sudo apt install ansible
Проверьте его версию:
ansible --version
Пример вывода:
ansible [core 2.16.3] config file = None configured module search path = ['/home/ostechnix/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3/dist-packages/ansible ansible collection location = /home/ostechnix/.ansible/collections:/usr/share/ansible/collections executable location = /usr/bin/ansible python version = 3.12.3 (main, Apr 10 2024, 05:33:47) [GCC 13.2.0] (/usr/bin/python3) jinja version = 3.1.2 libyaml = True
8. Создайте проект Ansible
Для персонального компьютера:
mkdir -p ~/ansible/debian-desktop cd ~/ansible/debian-desktop
Инициализация Git:
git init
Начальная структура:
debian-desktop/ ├── inventory.ini └── site.yml
9. Создание инвентаря
Создать файл inventory.ini:
inventory.ini
Добавить:
[desktop] localhost ansible_connection=local
Это указание Ansible на локальное управление моим текущим компьютером.
Протестируйте с помощью команды:
ansible -i inventory.ini desktop -m ping
Пример вывода:
localhost | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}10. Создайте плейбук
Создайте файл site.yml:
nano site.yml
Добавьте следующие строки:
---
- name: Configure my Debian desktop
hosts: desktop
become: true
tasks:
- name: Update apt cache
ansible.builtin.apt:
update_cache: true
- name: Install desktop packages
ansible.builtin.apt:
name:
- git
- curl
- wget
- ca-certificates
- unzip
- build-essential
- firmware-cirrus
- papirus-icon-theme
- timeshift
- gnome-shell-extension-manager
- vim
- gnome-shell-extension-dashtodock
- gnome-themes-extra
- flatpak
- gnome-software-plugin-flatpak
- steam-installer
state: present
Снова добавьте в приведенный выше плейбук пакеты, поддерживаемые вашей платформой. Сохраните и закройте его.
Запустите плейбук:
ansible-playbook -i inventory.ini site.yml --ask-become-pass
Пример вывода:
BECOME password: PLAY [Configure my Debian desktop] ******************************************************************************************************************************************************************************************************** TASK [Gathering Facts] ******************************************************************************************************************************************************************************************************************** ok: [localhost] TASK [Update apt cache] ******************************************************************************************************************************************************************************************************************* changed: [localhost] TASK [Install desktop packages] *********************************************************************************************************************************************************************************************************** changed: [localhost] PLAY RECAP ******************************************************************************************************************************************************************************************************************************** localhost : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
11. Разница между Bash-скриптом и Ansible
Bash обычно говорит: Выполните эти команды.
Ansible обычно говорит: Сделайте так, чтобы машина выглядела вот так.
Например:
- name: Install Vim
ansible.builtin.apt:
name: vim
state: present
Если Vim не установлен, Ansible дает системе команду установить его. Если Vim уже установлен, система просто выдает сообщение ничего не делать.
Это называется идемпотентностью.
12. Добавление конфигурации
После успешной установки пакета Ansible может управлять и конфигурацией.
Например:
- name: Create Vim configuration
ansible.builtin.copy:
content: |
set number
set relativenumber
syntax on
dest: "{{ ansible_facts.user_dir }}/.vimrc"
mode: "0644"
Теперь Ansible не просто устанавливает программное обеспечение. Он настраивает машину.
13. Разбивайте задачи, если плейбук становится слишком большим
Не беспокойтесь о ролях Ansible сразу.
Если site.yml становится слишком большим, вы можете разделить задачи на отдельные файлы:
debian-desktop/ ├── inventory.ini ├── site.yml ├── packages.yml ├── git.yml └── desktop.yml
site.yml Это основной плейбук. Он импортирует и запускает задачи из других файлов:
--- - name: Настройка моего рабочего стола Debian hosts: desktop become: true tasks: - ansible.builtin.import_tasks: packages.yml - ansible.builtin.import_tasks: git.yml - ansible.builtin.import_tasks: desktop.yml
Отдельные файлы предназначены для определенных целей:
packages.yml— содержит задачи по установке пакетов APT и управлению ими.git.yml— содержит задачи по настройке Git.desktop.yml— содержит задачи по настройке GNOME и других параметров рабочего стола.
Например, packages.yml может содержать:
---
- name: Install required packages
ansible.builtin.apt:
name:
- git
- curl
- wget
- vim
- flatpak
state: present
Это позволяет сохранить site.yml небольшим и упрощает понимание и поддержку конфигурации.
14. В конечном итоге используйте Ansible-роли для сложной настройки
Если проект станет намного больше, вы можете внедрить Ansible-роли.
В конечном итоге структура может выглядеть так:
debian-desktop/ ├── inventory.ini ├── site.yml └── roles/ ├── packages/ ├── git/ ├── vim/ └── gnome/
Каждая роль объединяет все задачи, файлы, шаблоны, переменные и настройки, связанные с одной конкретной областью.
Например:
packages— управляет установленными пакетами.git— управляет конфигурацией Git.vim— управляет конфигурацией Vim.gnome— управляет конфигурацией GNOME и рабочего стола.
Не начинайте с ролей. Для персонального компьютера начните с одного site.yml. Если он станет слишком большим, разделите его на файлы, например packages.yml, git.yml, и desktop.yml. Вводите должности только тогда, когда проект достаточно разросся и они приносят реальную пользу.
15. Полезные команды Ansible
Тестирование Ansible:
ansible -i inventory.ini desktop -m ping
Запуск плейбука:
ansible-playbook -i inventory.ini site.yml --ask-become-pass
Пробный запуск:
ansible-playbook -i inventory.ini site.yml --check --ask-become-pass
Больше вывода:
ansible-playbook -i inventory.ini site.yml --ask-become-pass -v
16. Сохраните настройки в Git
Для Bash-скрипта:
cd ~/scripts git init
Для проекта Ansible:
cd ~/ansible/debian-desktop git init
В конечном итоге проект Ansible может стать каноническим описанием моего рабочего стола.
17. А как насчет Fedora или дистрибутивов на базе RHEL?
Структуру Bash скрипта можно использовать в Fedora и других дистрибутивах на базе RHEL, но не стоит думать, что достаточно просто заменить apt на dnf .
В Debian:
sudo apt update
sudo apt install -y "${PACKAGES[@]}"
В системах на базе Fedora / RHEL установка пакетов обычно использует:
sudo dnf install -y "${ПАКЕТЫ [@]}"
Однако, имена пакетов могут отличаться в разных дистрибутивах.
Например:
Debian Fedora/RHEL ------- ---------- git git curl curl wget wget ca-certificates ca-certificates unzip unzip build-essential gcc gcc-c++ make
Некоторые пакеты могут иметь совершенно другие названия, предоставляться из разных репозиториев или существовать в другой форме.
Поэтому для индивидуальной настройки обычно удобнее использовать отдельные скрипты:
install-debian-essential-packages.sh install-fedora-essential-packages.sh
Скрипт для Debian может использовать:
sudo apt update
sudo apt install -y "${PACKAGES[@]}"
а скрипт для Fedora может использовать:
sudo dnf install -y "${PACKAGES[@]}"
со списком пакетов для Fedora.
Почему бы не сделать один скрипт для всего?
Можно определить дистрибутив:
if command -v apt >/dev/null 2>&1; then
sudo apt update
sudo apt install -y "${PACKAGES[@]}"
elif command -v dnf >/dev/null 2>&1; then
sudo dnf install -y "${PACKAGES[@]}"
else
echo "Unsupported package manager."
exit 1
fi
Но все усложняется, когда названия пакетов различаются.
Для простой индивидуальной настройки отдельные скрипты проще в понимании и обслуживании.
Если конфигурация в конечном итоге должна будет поддерживать несколько дистрибутивов и станет намного сложнее, стоит рассмотреть Ansible.
18. Заключение
Как видите, мы можем использовать простой Bash-скрипт для установки после завершения сборки, чтобы не устанавливать одни и те же пакеты вручную, один за другим. Если вы хотите автоматизировать и воспроизвести конфигурацию всей системы, можно использовать Ansible.
Не внедряйте Ansible до тех пор, пока проблема не станет достаточно масштабной.
Не усложняйте. Начните с простого. Автоматизируйте то, что повторяется. Используйте Ansible, когда нужно управлять конфигурацией.
Часто задаваемые вопросы
Да. Для этого можно создать список необходимых пакетов и передать его менеджеру пакетов APT. Например, достаточно сохранить названия программ в текстовый файл и выполнить команду sudo apt install $(cat packages.txt). APT автоматически загрузит пакеты из репозиториев и установит необходимые зависимости.
Список пакетов позволяет быстро настроить новую систему после переустановки Linux, переноса на другой компьютер или создания нового сервера. Вместо ручного поиска каждой программы достаточно выполнить одну команду и восстановить привычное рабочее окружение.
Набор зависит от задач пользователя. Для обычного рабочего компьютера часто добавляют браузеры, архиваторы, медиаплееры, редакторы, сетевые утилиты и инструменты разработки. Для сервера могут понадобиться SSH, Git, редакторы конфигурации, средства мониторинга и диагностики.
Да, перед установкой рекомендуется обновить список доступных пакетов и установить последние обновления безопасности:
sudo apt update
sudo apt upgradeКоманда apt update обновляет информацию о доступных пакетах из репозиториев, а apt upgrade устанавливает доступные обновления.
Метод подходит для обеих систем. Ubuntu построена на базе Debian и использует тот же формат пакетов DEB и менеджер APT, поэтому большинство команд установки пакетов одинаковы в обоих дистрибутивах.
Если APT сообщает, что пакет не найден, необходимо проверить правильность названия программы или убедиться, что нужный репозиторий подключен. Некоторые приложения могут отсутствовать в стандартных репозиториях и требуют установки через сторонний источник, Snap, Flatpak или официальный пакет разработчика.
Да. В Debian и Ubuntu можно получить список установленных пакетов, сохранить его в файл и использовать для восстановления программ на другом компьютере. Например:
dpkg --get-selections > packages.txtПосле переноса файла список можно использовать для автоматической установки программ на новой системе.
При установке нескольких пакетов одной командой APT самостоятельно рассчитывает зависимости и выполняет все необходимые операции за один процесс. Это экономит время и снижает вероятность ошибок при настройке новой системы.
Да. Если у вас есть файл со списком пакетов, можно передать его содержимое команде установки:
sudo apt install $(cat packages.txt)Такой подход часто используется для быстрого восстановления рабочего окружения после переустановки Linux.
Для удаления неиспользуемых зависимостей можно выполнить:
sudo apt autoremoveКоманда удалит пакеты, которые были установлены автоматически и больше не нужны другим программам.
Да, если список содержит проверенные программы из официальных репозиториев Debian или Ubuntu. Перед подтверждением установки рекомендуется просмотреть перечень пакетов, который покажет APT, чтобы убедиться, что не будут удалены важные компоненты системы.
