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

Лабораторная работа по теме “Управление пакетами в ОС 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. Выполните команду для обновления списка пакетов из репозиториев. Эта команда не обновляет сами программы, а только информацию о доступных версиях.

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

    1sudo apt upgrade
    

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

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

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

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

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

    1apt-cache search 7zip
    

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

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

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

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

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

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

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

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

    1htop
    

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

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

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

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

    1dpkg -l | grep mc
    

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

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

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

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

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

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

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

    1sudo apt autoremove
    

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

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

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

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

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

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

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

    1code --version
    

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

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

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

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

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

    1sudo 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?
← Лаб. работа "Управление файловой системой в … Лаб. работа "Сетевые инструменты в Linux" →