package linuxmodules import ( "fmt" "rubric/utils" ) var PackagesModule = Module{ Key: "packages", Aliases: []string{"pkg", "dnf", "apt", "пакеты"}, Title: "Пакетный менеджер", Description: "Тема 47: dnf (RHEL/Fedora) и apt (Debian/Ubuntu)", Run: showPackages, } func showPackages() { utils.Header("Linux — Пакетный менеджер") utils.Section("47. Пакетные менеджеры: dnf и apt") utils.Println("Пакетный менеджер — инструмент установки, обновления и удаления ПО.") utils.Println("Решает зависимости автоматически, загружает из репозиториев.") fmt.Println() utils.Println(utils.ColorBold + "Семейства дистрибутивов и их менеджеры:" + utils.ColorReset) utils.Code(`RHEL / CentOS / Fedora / Rocky / AlmaLinux: dnf (современный) / yum (устаревший) Формат пакетов: .rpm Репозитории: /etc/yum.repos.d/*.repo Debian / Ubuntu / Linux Mint: apt (фронтенд) / dpkg (низкий уровень) Формат пакетов: .deb Репозитории: /etc/apt/sources.list, /etc/apt/sources.list.d/ Arch Linux: pacman Alpine Linux: apk`) // ─── dnf ────────────────────────────────────────────────────── utils.Section("dnf — RHEL / Fedora / CentOS") utils.Println(utils.ColorBold + "Основные операции:" + utils.ColorReset) utils.Command("dnf search nginx", "поиск пакета") utils.Command("dnf info nginx", "информация о пакете") utils.Command("dnf install nginx", "установить") utils.Command("dnf install nginx -y", "без подтверждения") utils.Command("dnf remove nginx", "удалить") utils.Command("dnf update", "обновить все пакеты") utils.Command("dnf update nginx", "обновить конкретный") utils.Command("dnf upgrade --refresh", "обновить с принудительным обновлением метаданных") utils.Command("dnf check-update", "показать доступные обновления") fmt.Println() utils.Println(utils.ColorBold + "Запросы и история:" + utils.ColorReset) utils.Command("dnf list installed", "установленные пакеты") utils.Command("dnf list available", "доступные пакеты") utils.Command("dnf list | grep nginx", "найти в списке") utils.Command("dnf provides /usr/bin/python3", "какой пакет предоставляет файл") utils.Command("dnf provides '*/Makefile'", "поиск по glob") utils.Command("rpm -ql nginx", "файлы установленного пакета") utils.Command("rpm -qf /etc/nginx/nginx.conf", "какому пакету принадлежит файл") utils.Command("rpm -qi nginx", "информация об установленном пакете") utils.Command("dnf history", "история операций") utils.Command("dnf history undo 5", "отменить операцию №5") fmt.Println() utils.Println(utils.ColorBold + "Группы пакетов:" + utils.ColorReset) utils.Command("dnf group list", "список групп") utils.Command("dnf group info 'Development Tools'", "информация о группе") utils.Command("dnf group install 'Development Tools'", "установить группу") utils.Command("dnf group remove 'Development Tools'", "удалить группу") fmt.Println() utils.Println(utils.ColorBold + "Репозитории:" + utils.ColorReset) utils.Code(`# Список репозиториев: dnf repolist dnf repolist all # включая отключённые # Включить/выключить репозиторий: dnf config-manager --enable epel dnf config-manager --disable crb # Добавить репозиторий: dnf install epel-release # EPEL (Extra Packages for Enterprise Linux) dnf config-manager --add-repo https://rpm.example.com/example.repo # Установить из конкретного репозитория: dnf install nginx --repo=epel # Файл репозитория (/etc/yum.repos.d/myrepo.repo): [myrepo] name=My Repository baseurl=https://repo.example.com/rhel/$releasever/$basearch/ enabled=1 gpgcheck=1 gpgkey=https://repo.example.com/RPM-GPG-KEY-myrepo`) utils.Println(utils.ColorBold + "Кэш и модули:" + utils.ColorReset) utils.Command("dnf clean all", "очистить кэш") utils.Command("dnf makecache", "обновить кэш метаданных") utils.Command("dnf autoremove", "удалить ненужные зависимости") utils.Command("dnf module list", "список модулей (AppStream)") utils.Command("dnf module install nodejs:18", "установить модуль nodejs версии 18") utils.Command("dnf module enable postgresql:15", "включить модуль") // ─── apt ────────────────────────────────────────────────────── utils.Section("apt — Debian / Ubuntu") utils.Println(utils.ColorBold + "Основные операции:" + utils.ColorReset) utils.Command("apt search nginx", "поиск пакета") utils.Command("apt show nginx", "информация о пакете") utils.Command("apt install nginx", "установить") utils.Command("apt install nginx -y", "без подтверждения") utils.Command("apt remove nginx", "удалить (конфиги остаются)") utils.Command("apt purge nginx", "удалить с конфигами") utils.Command("apt update", "обновить индекс репозиториев (метаданные)") utils.Command("apt upgrade", "обновить установленные пакеты") utils.Command("apt full-upgrade", "обновить, может удалять и устанавливать новые") utils.Command("apt dist-upgrade", "аналог full-upgrade") utils.Command("apt autoremove", "удалить ненужные зависимости") utils.Command("apt clean", "очистить кэш скачанных пакетов") utils.Command("apt autoclean", "очистить устаревший кэш") fmt.Println() utils.Println(utils.ColorBold + "Запросы:" + utils.ColorReset) utils.Command("apt list --installed", "установленные пакеты") utils.Command("apt list --upgradable", "пакеты с доступными обновлениями") utils.Command("dpkg -l nginx", "статус установленного пакета") utils.Command("dpkg -L nginx", "файлы установленного пакета") utils.Command("dpkg -S /etc/nginx/nginx.conf", "какому пакету принадлежит файл") utils.Command("dpkg -s nginx", "информация об установленном пакете") fmt.Println() utils.Println(utils.ColorBold + "Репозитории (Debian/Ubuntu):" + utils.ColorReset) utils.Code(`# Конфиг: /etc/apt/sources.list # Ubuntu 22.04: deb http://ru.archive.ubuntu.com/ubuntu jammy main restricted deb http://ru.archive.ubuntu.com/ubuntu jammy-updates main restricted deb http://security.ubuntu.com/ubuntu jammy-security main restricted # Добавить PPA (Ubuntu): add-apt-repository ppa:ondrej/php apt update apt install php8.3 # Добавить сторонний репозиторий (пример nginx): # 1. Импортировать GPG-ключ: curl -fsSL https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ -o /etc/apt/keyrings/nginx.gpg # 2. Добавить репозиторий: echo "deb [signed-by=/etc/apt/keyrings/nginx.gpg] \ http://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" \ > /etc/apt/sources.list.d/nginx.list # 3. Обновить и установить: apt update && apt install nginx # Файл в /etc/apt/sources.list.d/: формат .list или .sources (deb822)`) utils.Println(utils.ColorBold + "Низкоуровневые операции (dpkg):" + utils.ColorReset) utils.Code(`# Установить .deb файл: dpkg -i package.deb apt install -f # исправить зависимости после dpkg # Удалить: dpkg -r package # без конфигов dpkg -P package # с конфигами (purge) # Reconfigure (перенастроить): dpkg-reconfigure tzdata dpkg-reconfigure locales`) utils.Println(utils.ColorBold + "Общие инструменты управления ПО:" + utils.ColorReset) utils.Code(`# Snap (Ubuntu, кросс-дистрибутивный): snap install code --classic snap list snap remove code snap refresh # Flatpak (кросс-дистрибутивный): flatpak install flathub org.gimp.GIMP flatpak run org.gimp.GIMP flatpak list # pip (Python): pip install requests pip install -r requirements.txt pip list # npm (Node.js): npm install -g pm2 npm list -g`) utils.Footer() }