Давайте теперь попробуем понять как вообще в линуксе организована система установки.
Если помните, то я говорил вам что в линуксе вы не можете просто скачать установочный файл. На самом деле это только часть правды. На самом деле можете. Просто для установки в ubuntu системы (а также всех наследников debian) существуют специальные установочные файлы, так называемые deb пакеты.
Помните мы устанавливали git, и писали
так вот есть некая заранее установленная программа apt
, с помощью которой происходит установка программ в убунте. Можно глянуть где она находится:
С помощью этой программы можно получить информацию о любом пакете который доступен в репозиториях убунты.
Можно, например, получить информацию о git, вот так
а можно взять и скачать установочный пакет, но не устанавливать его
и увидеть как у вас в папке появился файлик с расширением .deb
кстати он иногда может ругаться что не может найти пакет, в этом случае попробуйте выполнить команду sudo apt update
перед запуском apt download git
Иногда кстати и это не помогает, тогда надо удалить 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
Попробуем понять, что какие файлы значит:
- conffiles содержит список файлов, которые после установки потенциально может изменить пользователь. То есть системные файлы, которые могут отредактированы пользователем в целях поднастройки пакета. Например, во всяких СУБД это могут быть более точные настройки базы, выбор порта для запуска и т.п.
- control – содержит текст, который мы видим, когда пишем
apt show git
- md5sums – содержит чек суммы каждого файла который мы выше извлекали в папку my_git_data
- postinst – скрипт который будет вызван по завершению копирования файлов в систему
- postrm – скрипт который будет вызван после удаления пакета из системы
- preinst – скрипт который будет вызван перед установкой пакета
- prerm – скрипт который будет вызван после удаления пакета
Давайте удалим уже установленный нами git и попробуем поставить его из пакета. Удаляем
теперь запускаем установку deb пакета
sudo dpkg -i git_1%3a2.25.1-1ubuntu3_amd64.deb
Давайте попробуем поставить еще какой-нибудь пакет, например, MidnightCommander, это такой аналог проводника для консоли. Чем-то напоминает FAR, если вы с ним сталкивались.
Качаем
устанавливаем
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
который эти самые зависимости разруливает сам.
Давайте удалим пакет
И поставим по новой, но уже через apt
sudo apt install ./mc_3%3a4.8.24-2ubuntu1_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
Список репозиториев
Ну и напоследок давайте узнаем откуда apt узнает откуда качать файлы. Информация о путях к репозиториям лежит в специальных файликах, которые находятся по следующим путям
- /etc/apt/sources.list – файл с базовыми путями
- /etc/apt/sources.list.d – папка в которой лежат файлы с репозиториям, которые не входят в убунту по умолчанию, на чистой системе эта папка как правило пустая
Давайте глянем что находится в /etc/apt/sources.list
Одна такая строчка
deb http://archive.ubuntu.com/ubuntu/ focal main restricted
как раз указывается откуда брать пакеты
- deb – означает что пакеты содержат уже скомпилированный код (если присмотритесь, то увидите, что среди строчек встречаются deb-src, который означает что apt будет качать исходники пакетов и компилировать их уже прямо на вашей машине. На некоторых версиях линукса – это единственный способ поставить приложение. В целом сложность работы определяется тем насколько сложно там добавить новый пакет
- http://archive.ubuntu.com/ubuntu/ – это собственно адрес в интернете где лежат дистрибутивы пакетов
- focal – это название базовой версии убунты на которой построена наша lubutnu, а следовательно она будет использовать те же пакеты. Проверить названия базовой убунты можно следующей командой
lsb_release -cs
- main restricted – это на самом деле две категории которые будут использоваться для загрузки пакетов с сервера http://archive.ubuntu.com/ubuntu/. Вообще пакеты в убунте деляется на четыре категории
- main – официально поддерживаемые пакеты разработчиками убунты, с открытым исходным кодом. Под поддержкой понимается что как только выходит критическое обновление программы то происходит ее обновление в репозитории убунты, если обновление не критичное, то как правило пакет имеет некоторую фиксированную версию, работу которой разработчики убунты проверили на работоспособность на данной версии убунты. Пример такого пакета, например, встроенный браузер firefox или тот же git
- restricted – официально поддерживаемые пакеты разработчиками убунты, но с закрытыми исходными кодами, типа драйверов nvidia, intel, в общем всякий очень специфичный софт.
- universe – пакеты которые разрабатываются и поддерживаются сообществом, с открытым исходным кодом. Обновление пакета происходит силами самих разработчиков пакета. Причем тут могут встречаться те же пакеты, что и в main и как правило с более новыми версиями. Например, тут есть inkscape, и версия тут более новая чем в разделе main
- multiverse – все остальные пакеты, которые могут присутствовать в репозитории, но не иметь открытых исходных кодов, или иметь закрытую лицензию.
То есть
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
и для удобства разбиты на подпапки по первой букве названия пакета