Разработка под linux / Устройство deb пакетов. Установка стороних приложений

Давайте теперь попробуем понять как вообще в линуксе организована система установки.

Если помните, то я говорил вам что в линуксе вы не можете просто скачать установочный файл. На самом деле это только часть правды. На самом деле можете. Просто для установки в ubuntu системы (а также всех наследников debian) существуют специальные установочные файлы, так называемые deb пакеты.

Помните мы устанавливали git, и писали

sudo apt install git

так вот есть некая заранее установленная программа apt, с помощью которой происходит установка программ в убунте. Можно глянуть где она находится:

С помощью этой программы можно получить информацию о любом пакете который доступен в репозиториях убунты.

Можно, например, получить информацию о git, вот так

apt show git

а можно взять и скачать установочный пакет, но не устанавливать его

apt download git

и увидеть как у вас в папке появился файлик с расширением .deb

кстати он иногда может ругаться что не может найти пакет, в этом случае попробуйте выполнить команду sudo apt update перед запуском apt download git

Иногда кстати и это не помогает, тогда надо удалить git

sudo apt purge git

и затем по новой поставить

sudo apt install git

и после этого уже стягивать пакет

apt download git

В общем этот файлик git_1%3a2.25.1-1ubuntu3_amd64.deb и есть установочный файл в ubuntu. Он представляет собой архив который состоит из двух частей. Первая – это собственно сами файлы которые входят в пакет, как правило если программа сложная там целая куча этих файлов. А вторая часть – это всякая мета информация и скрипты для установки.

Файлы принято хранить таким образом, чтобы их просто можно было скопировать в корень системы, и они сразу оказались на нужном месте.

Эти файлы можно посмотреть. Для этого надо воспользоваться еще одной встроенной в линукс утилитой dpkg, собственно с помощью неё apt и устанавливает пакеты в систему.

И так, давайте разархивируем содержимое пакета в папку

dpkg -x git_1%3a2.25.1-1ubuntu3_amd64.deb my_git_data

если глянуть что в папке, то увидим там тьму файлов. Я не буду выводить все, выведу основные папки.

Найдите на картинке файл git и вы увидите что по структуре он находится в папке /usr/bin

Мы можем запросить у линукса где находится программа git и увидеть

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

Помимо самих файлов, в архиве лежит еще дополнительная информация о пакетах, а также некоторых дополнительных bash скриптов, которые вызываются во время установки/удаления приложения.

Эту информацию можно извлечь с помощью похожей команды только вместо флага –x использовать флаг -e

dpkg -e git_1%3a2.25.1-1ubuntu3_amd64.deb my_git_META

Попробуем понять, что какие файлы значит:

Давайте удалим уже установленный нами git и попробуем поставить его из пакета. Удаляем

sudo apt purge git

теперь запускаем установку deb пакета

sudo dpkg -i git_1%3a2.25.1-1ubuntu3_amd64.deb 

Давайте попробуем поставить еще какой-нибудь пакет, например, MidnightCommander, это такой аналог проводника для консоли. Чем-то напоминает FAR, если вы с ним сталкивались.

Качаем

apt download mc

устанавливаем

sudo dpkg -i mc_3%3a4.8.24-2ubuntu1_amd64.deb

О ошибка, приехали =)

В общем проблема dpkg в том, что он не умеет управлять зависимостями. Если вызывать информацию о пакете

dpkg -I mc_3%3a4.8.24-2ubuntu1_amd64.deb

а это значит, что у нас два варианта, либо поставить зависимости вручную. То есть выкачать пакет mc-data и поставить его через dpkg. Либо использовать apt который эти самые зависимости разруливает сам.

Давайте удалим пакет

sudo dpkg -r mc

И поставим по новой, но уже через apt

sudo apt install ./mc_3%3a4.8.24-2ubuntu1_amd64.deb 

тут уже за вас будут установлены все зависимости, и проблем возникнуть не должно.

в принципе что-то похожее происходит, когда мы просто пишем sudo apt install mc

Теперь можно запустить mc и посмотреть, как он работает

mc

увидим что-то такое

в общем вполне себе такой проводник. В него встроена поддержка просмотра содержимого deb пакетов, вы просто выбираете файл и нажимаете enter

Также есть возможность просмотреть содержимое файла, не открывая его через нажать Ctrl+X а затем Q, справа откроется окно в котором будет видно текст файла. Закрывается это окно повторным нажатием Ctrl+X Q

Можно копировать файлы из одной панельки в другую с помощью F5, перемещать файлы с помощью F6, удалять с помощью F8 или delete. Можно открыть файл для редактирования через F4. Первый раз вас скорее всего попросят выбрать редактор файлов по умолчанию

просто тыкайте enter, и он выберет уже привычный нам nano

Еще есть прикольная возможность переключаться между папкой и терминалом прямо в mc, просто тыкаете Ctrl+O (тут буква О)

это более удобный способ перемещения по папкам чем через cd

Список репозиториев

Ну и напоследок давайте узнаем откуда apt узнает откуда качать файлы. Информация о путях к репозиториям лежит в специальных файликах, которые находятся по следующим путям

Давайте глянем что находится в /etc/apt/sources.list

Одна такая строчка

deb http://archive.ubuntu.com/ubuntu/ focal main restricted

как раз указывается откуда брать пакеты

То есть

deb http://archive.ubuntu.com/ubuntu/ focal main restricted

говорит, что с помощью apt можно будет качать пакеты которые находятся на сервере http://archive.ubuntu.com/ubuntu/, для версии убунты focal, испльзовать только категории main и restricted

А вообще если проскроллить файлик ниже, то вы найдете там

deb http://archive.ubuntu.com/ubuntu/ focal universe

то есть пакеты развиваемые сообществам там тоже есть.

А еще можно зайти на указанные сервер и там покопаться в папках

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

Сами пакеты лежат в папке pool и для удобства разбиты на подпапки по первой букве названия пакета

2.1

Написать программу которая по названию пакета разберет содержимое deb пакета и сгенерирует markdown отчет

Отчет должен выглядить как-то так: посмотреть

Для генерации ascii графики используйте утилиту figlet (вызывать так figlet -f banner git), не забудьте ее поставить сначала. Флаг f это название шрифта. Чтобы посмотреть все доступные шрифты вызовите команду showfigfonts

Чтобы текст из apt show выдало с переносами для markdown надо написать такую команду

apt show git 2>/dev/null | sed 's/$/  /'

если хотите выделять жирным шрифтом ключи в описании то пишите так

apt show git 2>/dev/null | sed 's/$/  /' | sed -E 's/(^\b.+?:) /**\1** /g'

в вариантах задания, я прописал список пакетов на которых можно потестить

выбрать вариант