Все труды человека — для рта его, а душа его не насыщается (Соломон).

Как установить все свои основные пакеты сразу в Debian и Ubuntu


Как установить все свои основные пакеты сразу в Debian и Ubuntu

После свежей установки 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, чтобы убедиться, что не будут удалены важные компоненты системы.

Редактор: AndreyEx

Если статья понравилась, поделитесь ей в социальных сетях

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Это может быть вам интересно


Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала