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

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

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

кстати он иногда может ругаться что не может найти пакет, в этом случае попробуйте выполнить команду sudo apt update
перед запуском apt download git
Иногда кстати и это не помогает, тогда надо удалить git
и затем по новой поставить
и после этого уже стягивать пакет
В общем этот файлик git_1%3a2.30.2-1+deb11u2_amd64.deb
и есть установочный файл в debian.
Он представляет собой архив который состоит из двух частей. Первая – это собственно сами файлы которые входят в пакет, как правило если программа сложная там целая куча этих файлов. А вторая часть – это всякая мета информация и скрипты для установки.
Файлы принято хранить таким образом, чтобы их просто можно было скопировать в корень системы, и они сразу оказались на нужном месте.
Эти файлы можно посмотреть. Для этого надо воспользоваться еще одной встроенной в линукс утилитой dpkg
, собственно с помощью неё apt и устанавливает пакеты в систему.
И так, давайте разархивируем содержимое пакета в папку
dpkg -x git_1%3a2.30.2-1+deb11u2_amd64.deb my_git_data

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

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

то есть когда вы запускаете установку пакета эти файлы просто копируются по указанными местам. Тут в отличие от виндоуз нет никаких секретных реестров, из которых не понятно, как вычистить тот или иной пакет. То есть всегда известно где что лежит.
Помимо самих файлов, в архиве лежит еще дополнительная информация о пакетах, а также некоторых дополнительных bash скриптов, которые вызываются во время установки/удаления приложения.
Эту информацию можно извлечь с помощью похожей команды только вместо флага –x
использовать флаг -e
dpkg -e git_1%3a2.30.2-1+deb11u2_amd64.deb my_git_META

Попробуем понять, что какие файлы значит:
- conffiles содержит список файлов, которые после установки потенциально может изменить пользователь. То есть системные файлы, которые могут отредактированы пользователем в целях поднастройки пакета. Например, во всяких СУБД это могут быть более точные настройки базы, выбор порта для запуска и т.п.
- control – содержит текст, который мы видим, когда пишем
apt show git
- md5sums – содержит чек суммы каждого файла который мы выше извлекали в папку my_git_data
- postinst – скрипт который будет вызван по завершению копирования файлов в систему
- postrm – скрипт который будет вызван после удаления пакета из системы
- preinst – скрипт который будет вызван перед установкой пакета
- prerm – скрипт который будет вызван после удаления пакета
Давайте удалим уже установленный нами git и попробуем поставить его из пакета. Удаляем

теперь запускаем установку deb пакета
sudo dpkg -i git_1%3a2.30.2-1+deb11u2_amd64.deb

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

устанавливаем
sudo dpkg -i mc_3%3a4.8.26-1.1_amd64.deb

О ошибка, приехали =)
В общем проблема dpkg в том, что он не умеет управлять зависимостями. Если вызывать информацию о пакете
dpkg -I mc_3%3a4.8.26-1.1_amd64.deb

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

И поставим по новой, но уже через apt
sudo apt install ./mc_3%3a4.8.26-1.1_amd64.deb
тут уже за вас будут установлены все зависимости, и проблем возникнуть не должно.

в принципе что-то похожее происходит, когда мы просто пишем sudo apt install mc
, только он еще и пакет за нас скачивает
Теперь можно запустить mc и посмотреть, как он работает
увидим что-то такое

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

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

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

это более удобный способ перемещения по папкам чем через cd
Ну и чтобы выйти надо нажать Alt+0
Список репозиториев
Ну и напоследок давайте узнаем откуда apt узнает откуда качать файлы. Информация о путях к репозиториям лежит в специальных файликах, которые находятся по следующим путям
- /etc/apt/sources.list – файл с базовыми путями
- /etc/apt/sources.list.d – папка в которой лежат файлы с репозиториям, которые не входят в дебиан по умолчанию, на чистой системе эта папка как правило пустая
Давайте глянем что находится в /etc/apt/sources.list

Одна такая строчка
deb http://deb.debian.org/debian/ bullseye main contrib non-free
как раз указывается откуда брать пакеты
- deb – означает что пакеты содержат уже скомпилированный код (если присмотритесь, то увидите, что среди строчек встречаются deb-src, который означает что apt будет качать исходники пакетов и компилировать их уже прямо на вашей машине. На некоторых версиях линукса – это единственный способ поставить приложение. В целом сложность работы определяется тем насколько сложно там добавить новый пакет

- http://deb.debian.org/debian/ – это собственно адрес в интернете где лежат дистрибутивы пакетов
- bullseye – это название версии debian, на которой построен наша sparky, а следовательно он будет использовать те же пакеты. Проверить названия используемой версии дебиан можно следующей командой
lsb_release -cs

- main contrib non-free – это на самом деле две категории которые будут использоваться для загрузки пакетов с сервера http://deb.debian.org/debian/. Вообще пакеты в дебиан делятся на четыре категории
- main – официально поддерживаемые пакеты разработчиками дебиан, с открытым исходным кодом, которые построены на других пакетах с открытой лицензией. Под поддержкой понимается что как только выходит критическое обновление программы то происходит ее обновление в репозитории дебиан, если обновление не критичное, то как правило пакет имеет некоторую фиксированную версию, работу которой разработчики дебиан проверили на работоспособность на данной версии дебиан. Пример такого пакета, например, встроенный браузер firefox или тот же git
- contrib – пакеты которые имеют открытую лицензию, но зависят от пакетов с закрытой лицензией.
- non-free – все остальные пакеты, которые могут присутствовать в репозитории, но не иметь открытых исходных кодов, или иметь закрытую лицензию. Например драйвера nvidia
То есть
deb http://deb.debian.org/debian/ bullseye main contrib non-free
говорит, что с помощью apt можно будет качать пакеты которые находятся на сервере http://deb.debian.org/debian/, для версии дебина bullseye, использовать категории main contrib non-free
Вообще, можно зайти на указанный сервер и там покопаться в папках

Сами пакеты лежат в папке pool
и для удобства разбиты на подпапки по первой букве названия пакета
В папке dists – лежат так называемые индексы, то специальные файлы в которых хранятся название пакетов (те самые которые скачивает линукс когда вы пишите команду apt update), их версии, а также пути от куда их можно скачать.