Кафедра ИСиТ УО ВГТУ
  • Специальности
    • Экономика электронного бизнеса
    • Информационные системы
    • Information Control Systems
  • Каталог
  • Сайт кафедры
  • Сервисы
    • GitLab
    • JupyterHub
    • Soft
  1. ИСиТ
  2. ИППРПО
  3. Практика
  4. Лаб. работа “Управление пакетами в ОС Linux”
  • ИСиТ
    • АОС
      • Теория
        • Введение в операционные системы
        • Управление памятью
        • Управление процессами
        • Система ввода-вывода
        • Информационная безопасность
        • Виртуализация
      • Практика
    • РВПсИПП
      • Теория
        • Настройка среды разработки для PHP
        • Разработка web-приложений на базе фреймворков
        • Основы Laravel
        • Шаблоны в Laravel
        • Модели и базы данных в Laravel
        • Формы и валидация в Laravel
        • Аутентификация и авторизация в Laravel
        • Создание REST API в Laravel
        • Работа с файлами и изображениями в Laravel
        • Тестирование и отладка в Laravel
        • Введение в фреймворк Symfony
        • Маршруты и контроллеры в Symfony
        • Шаблоны и Twig в Symfony
        • Формы и валидация в Symfony
        • Доступ к базам данных в Symfony
        • Аутентификация и авторизация в Symfony
        • Сервисы и зависимости в Symfony
        • Создание REST API в Symfony
        • Работа с файлами и медиа в Symfony
        • Сравнение и выбор фреймворка
        • Развертывание веб-приложения
      • Практика
        • Лаб. работа 1 “Создание нового приложения Laravel”
        • Лаб. работа 2 “Добавление главной страницы и базовых маршрутов”
        • Лаб. работа 3 “Создание моделей, миграций и сидеров”
        • Лаб. работа 4 “Создание индексных страниц и пагинация”
        • Лаб. работа 5 “Создание форм для работы с сущностями”
        • Лаб. работа 6 “Работа с файлами (эмуляция S3-хранилища)”
        • Лаб. работа “Создание маршрутов в Laravel”
        • Лаб. работа “Работа с базами данных в Laravel”
        • Лаб. работа “Работа с формами в Laravel”
        • Лаб. работа “Аутентификация и авторизация в Laravel”
        • Лаб. работа “Работа с файлами в Laravel”
        • Лаб. работа “Тестирование и оптимизация в Laravel”
        • Лаб. работа “Создание REST API в Laravel”
        • Лаб. работа “Основы Symfony”
        • Лаб. работа “Шаблоны и представления в Symfony”
        • Лаб. работа “Работа с базами данных в Symfony”
        • Лаб. работа “Фомы и аутентификация в Symfony”
        • Лаб. работа “Сервисы и зависимости в Symfony”
        • Лаб. работа “REST API в Symfony”
        • Лаб. работа “Работа с медиа контентом в Symfony”
        • Лаб. работа “Создание и развертывание проекта”
        • Расчетно-графическая работа: Разработка веб-приложения с использованием Laravel
          • Методические рекомендации по выполнению работы
          • Варианты заданий для расчетно-графической работы
    • ПСП
      • Теория
        • Введение
        • Протокол HTTP
        • Программирование с использованием сокетов
        • Введение в PHP
        • Работа с базами данных в PHP
        • Объектно-ориентированные возможности PHP
        • Настройка среды разработки для PHP
        • Разработка web-приложений на базе фреймворков
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб. работа “Массивы в PHP”
        • Лаб. работа “Создание веб-приложений с использованием Slim”
      • Темы курсовых проектов по дисциплине “Программирование сетевых приложений”
    • Компьютерные сети
      • Теория
        • Введение в компьютерные сети
        • Топологии сетей
        • Кодирование и мультиплексирование
        • Стеки протоколов
        • Адресация в компьютерных сетях
        • Система доменных имен (DNS)
        • Программирование с использованием сокетов
        • Введение в PHP
        • Протокол HTTP
        • Введение в компьютерные сети
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб работа “Массивы в PHP”
    • РиОИИС
      • Теория
        • Классификация оптимизационных задач
        • Генетические алгоритмы
        • Системы массового обслуживания
        • Теория игр
        • Машинное обучение
        • Глубокое обучение (Deep learning)
        • Основы функционального программирования
        • Основы программирования на Haskell
        • Введение в логическое программирование
        • Инференция и рассуждения в логическом программировании
        • Разработка экспертных систем
        • Интеллектуальные системы и их архитектура
        • Веб-скрэйпинг
        • Сбор данных с открытых API
      • Практика
        • JupyterHub
        • Лаб. работа "Методы одномерной оптимизации"
          • Лаб. работа “Методы одномерной оптимизации”
        • Лаб. работа “Методы многомерной оптимизации”
        • Лаб. работа “Основы программирования на Python”
        • Лаб. работа “Функции в Python”
        • Лаб. работа “Рекурсия в Python”
        • Лаб. работа “Итераторы в Python”
        • Лаб. работа “Генетические алгоритмы”
        • Лаб. работа “Haskell”
        • Лаб. работа “Логическое программирование”
        • Лаб. работа “Сбор данных с помощью веб-скрейпинга”
        • Лаб. работа “Предобработка данных”
        • Лаб. работа “Машинное обучение: классификация”
        • Лаб. работа “Создание и обучение простейших нейронных сетей”
        • Лаб. работа “Системы массового обслуживания”
        • Лаб. работа “Обработка естественного языка”
        • Лаб. работа “Компьютерное зрение”
        • Лаб. работа “Нейросети и глубокое обучение”
    • КСКР
      • Практика
        • Лаб. работа “Одномерные и двумерные массивы в C#”
        • Лаб. работа “Обращение матриц в C#”
    • Системное программирование
      • Теория
        • Управление памятью в Windows
        • Файловые операции в Windows
        • Управление процессами в Windows
        • Графический интерфейс Windows
        • ОС Unix
      • Практика
        • Лаб. работа “Работа с динамической памятью в Windows”
        • Лаб. работа “Операции с файлами в Windows”
        • Лаб. работа “Управление процессами в Windows”
        • Лаб. работа “Работа с виртуальной машиной Linux”
        • Лаб. работа “Язык командного энтерпритатора Shell”
        • Лаб. работа “Работа с файлами в Linux”
        • Лаб. работа “Работа с процессами в Linux”
    • ИППРПО
      • Теория
      • Практика
        • Лаб. работа “Язык командного энтерпритатора Shell”
        • Лаб. работа “Управление процессами в Shell”
        • Лаб. работа “Управление файловой системой в Shell”
        • Лаб. работа “Управление пакетами в ОС Linux”
        • Лаб. работа “Сетевые инструменты в Linux”
        • Лаб. работа “Мониторинг и анализ системы Linux”
        • Лаб. работа “Основы Docker. Управление контейнерами”
        • Лаб. работа “Docker: Сети”
        • Лаб. работа "Docker: Образы"
        • Лаб. работа “Docker Compose: Управление многоконтейнерными приложениями”
        • Лаб. работа “CI/CD с GitLab”

Содержание

  • Лабораторная работа по теме “Управление пакетами в ОС Linux”
    • Цель работы
    • Краткие теоретические сведения
    • Необходимое ПО и окружение
    • Ход работы
    • Задания для самостоятельного выполнения
    • Контрольные вопросы
  1. ИСиТ
  2. ИППРПО
  3. Практика
  4. Лаб. работа “Управление пакетами в ОС Linux”

Лаб. работа “Управление пакетами в ОС Linux”

Инструменты промышленной разработки
Практика
Автор

Бизюк Андрей

Дата публикации

15 октября 2025 г.

Лабораторная работа по теме “Управление пакетами в ОС Linux”


Цель работы

  • Изучить основные принципы работы системы управления пакетами в Debian.
  • Получить практические навыки использования утилит apt, apt-cache и dpkg для поиска, установки, обновления и удаления программного обеспечения.
  • Научиться работать с репозиториями и разрешать проблемы зависимостей.

Краткие теоретические сведения

Система управления пакетами — это фундамент любого современного дистрибутива Linux. Она обеспечивает целостность, безопасность и стабильность системы, автоматизируя установку, обновление и удаление ПО.

Архитектура системы управления пакетами Debian

Систему управления пакетами в Debian можно представить в виде двух уровней:

  1. Низкий уровень: dpkg (Debian Package Manager)
    • Это базовый инструмент, который непосредственно работает с файлами пакетов (.deb).
    • Его основные функции: установка из локального файла, удаление, получение информации о уже установленном пакете, просмотр списка файлов в пакете.
    • Ключевое ограничение dpkg: он не умеет работать с сетью и репозиториями. Он не может самостоятельно скачивать пакеты и, что более важно, не разрешает зависимости автоматически. Если для установки пакета А требуется пакет Б, dpkg просто выдаст ошибку и остановится.
  2. Высокий уровень: apt (Advanced Packaging Tool)
    • Это надстройка над dpkg, созданная для решения его ограничений. apt — это основной инструмент, с которым взаимодействует пользователь.
    • Ключевые возможности apt:
      • Работа с репозиториями: apt получает информацию о доступных пакетах из списков, хранящихся в сети (репозиториях).
      • Автоматическое разрешение зависимостей: При установке пакета А apt анализирует его зависимости, находит в репозиториях пакеты Б и В, скачивает их и передает dpkg для установки в правильном порядке.
      • Управление обновлениями: apt отслеживает новые версии пакетов в репозиториях и позволяет легко обновить всю систему.

Репозитории и их структура

Репозиторий — это структурированное хранилище пакетов на удаленном сервере. Система узнает, какие репозитории использовать, из файлов конфигурации:

  • /etc/apt/sources.list — основной файл.
  • /etc/apt/sources.list.d/*.list — каталог для добавления сторонних репозиториев, что является предпочтительной практикой.

Строка в sources.list имеет четкий формат: deb http://deb.debian.org/debian/ bookworm main contrib non-free

  • deb: Тип репозитория (бинарные пакеты). Бывает еще deb-src для исходного кода.
  • http://deb.debian.org/debian/: URL-адрес репозитория.
  • bookworm: Название (кодовое имя) вашего выпуска Debian.
  • main contrib non-free: Компоненты (секции) репозитория.
    • main: Полностью свободное ПО, составляющее ядро дистрибутива.
    • contrib: Свободное ПО, которое зависит от несвободного.
    • non-free: Несвободное ПО (проприетарные драйверы, прошивки и т.д.).

Жизненный цикл и состояния пакета

Команда dpkg -l показывает состояние пакетов. Первые две буквы в строке означают:

  • Желаемое состояние: i (install), r (remove), p (purge), h (hold).
  • Текущее состояние: n (not-installed), i (installed), c (config-files), u (unpacked), f (failed-config).

Самые частые комбинации:

  • ii: Пакет успешно установлен (installed).
  • rc: Пакет был удален (remove), но его конфигурационные файлы остались (config-files).
  • un: Пакет никогда не был установлен (unknown/not-installed).

Необходимое ПО и окружение

  • Операционная система Debian или любой дистрибутив на его основе (например, Ubuntu).
  • Доступ к сети Интернет.
  • Права суперпользователя (sudo).

Ход работы

Задание 1. Обновление информации о пакетах и обновление системы

Первый шаг перед установкой любого ПО — это синхронизация локального списка пакетов с репозиториями и установка доступных обновлений.

  1. Откройте терминал.

  2. Выполните команду для обновления списка пакетов из репозиториев. Эта команда не обновляет сами программы, а только информацию о доступных версиях.

    sudo apt update
  3. Выполните команду для обновления установленных пакетов до последних версий.

    sudo apt upgrade

    Проанализируйте вывод команды. Система покажет, какие пакеты будут обновлены, и запросит подтверждение. Согласитесь на обновление (введите Y или Д).

Задание 2. Поиск пакетов

Часто точное имя пакета неизвестно. Для поиска можно использовать ключевые слова.

  1. Найдите пакет, связанный с системным мониторингом. Например, htop — это интерактивный просмотрщик процессов.

    apt-cache search htop
  2. Найдите пакет для работы с архивами, например, p7zip.

    apt-cache search 7zip

    Запишите в отчет полные имена пакетов, которые вы нашли (htop и p7zip-full).

Задание 3. Просмотр информации о пакете

Перед установкой полезно изучить информацию о пакете: его описание, версию, зависимости.

  1. Получите подробную информацию о пакете htop.

    apt-cache show htop
  2. Проанализируйте вывод. Обратите внимание на поля Version, Depends и Description. Запишите в отчет, от каких пакетов зависит htop.

Задание 4. Установка пакета

  1. Установите пакет htop с помощью apt.

    sudo apt install htop
  2. После завершения установки убедитесь, что программа работает. Запустите ее в терминале.

    htop

    Для выхода из htop нажмите q или F10. Сделайте скриншот работающей программы для отчета.

Задание 5. Просмотр списка установленных пакетов

  1. Выведите список всех пакетов, установленных в системе, и найдите среди них htop, используя утилиту grep.

    dpkg -l | grep htop
  2. Аналогично проверьте, установлен ли пакет mc (файловый менеджер Midnight Commander).

    dpkg -l | grep mc

Задание 6. Удаление пакета

Существует два основных способа удаления пакета.

  1. Удалите пакет htop, сохранив его конфигурационные файлы.

    sudo apt remove htop
  2. Убедитесь, что пакет удален, повторив команду из Задания 5.1.

  3. Теперь установите пакет mc.

    sudo apt install mc
  4. Удалите пакет mc вместе со всеми его конфигурационными файлами.

    sudo apt purge mc
  5. Иногда после удаления пакетов в системе остаются зависимости, которые больше не нужны. Выполните команду для их автоматической очистки.

    sudo apt autoremove

Задание 7. Работа с .deb файлами напрямую

Иногда необходимо установить ПО, которого нет в стандартных репозиториях. В этом случае можно скачать .deb файл и установить его с помощью dpkg.

  1. Загрузите .deb пакет популярного редактора кода Visual Studio Code с официального сайта. Используйте wget для загрузки из командной строки.

    wget -O vscode.deb "https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64"
  2. Попробуйте установить его с помощью dpkg.

    sudo dpkg -i vscode.deb
  3. Скорее всего, команда завершится с ошибкой, сообщив о неудовлетворенных зависимостях. Это нормальное поведение dpkg.

  4. Теперь используйте apt для автоматического исправления этой проблемы. Эта команда найдет недостающие зависимости в репозиториях и установит их вместе с пакетом, установка которого провалилась.

    sudo apt install -f
  5. После успешного завершения команды убедитесь, что code (исполняемый файл VS Code) установлен и запускается.

    code --version

Задания для самостоятельного выполнения

Эти задания требуют самостоятельного поиска информации и применения знаний, полученных в ходе основной части работы. Используйте man apt, man dpkg и веб-поиск для нахождения нужных команд и опций.

Задание 8. Управление версиями: “заморозка” пакета

Сценарий: В вашем проекте используется утилита jq (обработчик JSON) строго определенной версии, например, 1.6. Обновление системы не должно затрагивать этот пакет, чтобы не нарушить совместимость.

  1. Установите пакет jq.

    sudo apt install jq
  2. Найдите команду, которая позволяет “заморозить” (удержать) пакет jq на текущей версии, запретив его обновление.

  3. Примените эту команду.

  4. Проверьте, что пакет jq теперь находится в состоянии “hold”. Это можно увидеть, например, с помощью dpkg -l | grep jq или другой специализированной команды.

  5. Выполните sudo apt upgrade. Убедитесь, что система игнорирует обновления для jq (даже если они доступны).

  6. Найдите и выполните команду, которая “размораживает” пакет, снова разрешая его обновление.

  7. Приведите в отчете все использованные команды и их вывод, подтверждающий смену статуса пакета.

Задание 9. Исследование пакетов

Сценарий: Вам нужно понять, из каких файлов состоит установленный пакет и какому пакету принадлежит конкретный файл в системе.

  1. Установите пакет tree, если он еще не установлен.
  2. Используя утилиты dpkg, найдите, какой пакет является “владельцем” файла /bin/ls.
  3. Найдите команду, которая выводит полный список файлов, устанавливаемых пакетом tree, и их расположение в файловой системе.
  4. Проанализируйте вывод. Какие типы файлов входят в пакет, кроме исполняемого (/usr/bin/tree)? (Например, документация, man-страницы).
  5. Приведите в отчете команды и результаты их выполнения.

Задание 10. Работа со сторонним репозиторием

Сценарий: Вам необходимо установить ПО, которого нет в официальных репозиториях Debian, например, систему контейнеризации Docker. Для этого нужно добавить официальный репозиторий Docker.

  1. Найдите в интернете официальную инструкцию по установке Docker на Debian (“Install Docker Engine on Debian”).
  2. Следуя инструкции, выполните шаги для добавления репозитория Docker в вашу систему. Обычно это включает:
    • Установку пакетов-зависимостей (ca-certificates, curl и др.).
    • Добавление GPG-ключа репозитория для проверки подлинности пакетов.
    • Создание файла в /etc/apt/sources.list.d/ с адресом репозитория Docker.
  3. После добавления репозитория обновите список пакетов с помощью sudo apt update.
  4. Убедитесь, что пакеты Docker теперь доступны для установки, выполнив поиск (apt-cache search docker-ce).
  5. Установите пакет docker-ce.
  6. В отчете опишите последовательность выполненных действий и приложите содержимое созданного вами файла в /etc/apt/sources.list.d/.

Контрольные вопросы

  1. В чем разница между командами apt update и apt upgrade?
  2. Что такое “зависимость” пакета? Приведите пример из вашей работы.
  3. Какая команда позволяет найти пакет по ключевому слову, не зная его точного имени?
  4. В чем разница между apt remove и apt purge?
  5. Опишите ситуацию, в которой установка пакета через dpkg -i может завершиться ошибкой. Как исправить эту ситуацию?
  6. В каком файле хранится основной список репозиториев пакетов в Debian?
Наверх
Лаб. работа “Управление файловой системой в Shell”
Лаб. работа “Сетевые инструменты в Linux”