Вопрос или проблема
На 24.04 LTS, по какой-то причине мне нужно было проверить источник одного классического инструмента, который я запускаю, под названием wall
из пакета bsdutils
.
Я могу определить его происхождение:
$ dpkg -S $(which wall)
bsdutils: /usr/bin/wall
А затем из метаданных пакета я вижу, что его upstream находится на kernel.org
:
$ apt show bsdutils
Package: bsdutils
Version: 1:2.39.3-9ubuntu6.2
Priority: required
Essential: yes
Section: utils
Source: util-linux (2.39.3-9ubuntu6.2)
Origin: Ubuntu
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: util-linux packagers <[email protected]>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 295 kB
Pre-Depends: libc6 (>= 2.38), libsystemd0
Recommends: bsdextrautils
Homepage: https://www.kernel.org/pub/linux/utils/util-linux/
Task: minimal
Download-Size: 95,2 kB
APT-Sources: https://ubuntu.volia.net/ubuntu noble-updates/main amd64 Packages
Description: basic utilities from 4.4BSD-Lite
This package contains the bare minimum of BSD utilities needed for a Debian
system: logger, renice, script, scriptlive, scriptreplay and wall. The
remaining standard BSD utilities are provided by bsdextrautils.
И действительно, tarball-источник util-linux
v2.39.3 (который, как я предполагаю, включает bsdutils
как подпакет) — есть здесь, но без vendor patches от Ubuntu; эти -9ubuntu6.2
.
Теперь классическим способом учета этого было apt-get source — но у меня это не работает:
$ apt-get source bsdutils
Reading package lists... Done
Picking 'util-linux' as source package instead of 'bsdutils'
E: Can not find version '2.39.3-9ubuntu6.2' of package 'bsdutils'
E: Unable to find a source package for util-linux
Как это исправить?
Ubuntu унаследовал переход, который сделал Debian, от *.list
к *.sources
файлам в /etc/apt/sources.list.d/
— см. Deb822 формат.
В рамках этого перехода, скрипты обновления преобразовали встроенный источник репозитория Ubuntu из однострочного формата в Deb822 drop-in. Вы можете видеть след этого:
$ cat /etc/apt/sources.list
# Ubuntu sources have moved to /etc/apt/sources.list.d/ubuntu.sources
Наконец, перейдем к проблеме; в моем случае, автоматически перенесенный ubuntu.sources
имел это:
$ cat /etc/apt/sources.list.d/ubuntu.sources
Types: deb
URIs: https://ubuntu.volia.net/ubuntu/
Suites: noble noble-updates noble-security noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Проблема в строке Types: deb
.
Она должна содержать Types: deb deb-src
, чтобы apt-get source
работал.
После редактирования выполните apt update
для повторного получения и обновления индексов — и затем apt-get source
снова работает.
Ответ или решение
Вопрос о том, почему команда apt-get source
не может найти исходный пакет, является распространённой проблемой среди пользователей Ubuntu, особенно при работе с последними версиями операционной системы, такими как 24.04 LTS. Рассмотрим данную проблему более подробно, чтобы предоставить полное решение.
Теория
Команда apt-get source
предназначена для получения исходного кода пакета Ubuntu. Это полезно для пользователей и разработчиков, желающих изучить, модифицировать или компилировать программное обеспечение самостоятельно. Однако, если источники пакетов не настроены должным образом в системе, это может привести к ошибке, заявляющей о невозможности найти пакет или его конкретную версию.
Причина этой проблемы часто кроется в неправильно настроенных источниках пакетов в системе. Ubuntu, следуя Debian, перешла от формата .list
к формату .sources
для управления источниками пакетов. Этот переход включает использование более гибкого и расширяемого формата Deb822, который лучше совместим с современными требованиями к управлению пакетов.
Пример
Рассмотрим конкретный пример: вы хотите получить исходный код утилиты wall
из пакета bsdutils
, но при попытке выполнить apt-get source bsdutils
, команда сообщает об ошибке:
$ apt-get source bsdutils
Reading package lists... Done
Picking 'util-linux' as source package instead of 'bsdutils'
E: Can not find version '2.39.3-9ubuntu6.2' of package 'bsdutils'
E: Unable to find a source package for util-linux
Первое, на что следует обратить внимание, — это конфигурация вашего файла источников, который в Ubuntu теперь находится не в /etc/apt/sources.list
, а в /etc/apt/sources.list.d/ubuntu.sources
. Возможно, что в этом файле отсутствует ключевой элемент — типы источников.
Применение
Для решения проблемы необходимо убедиться, что источники исходных кодов (типы deb-src
) настроены в файле конфигурации источников. В вашем случае, файл /etc/apt/sources.list.d/ubuntu.sources
может выглядеть следующим образом:
Types: deb
URIs: https://ubuntu.volia.net/ubuntu/
Suites: noble noble-updates noble-security noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Как видно, в файле указан только Types: deb
, что означает, что система будет запрашивать только скомпилированные бинарные пакеты. Чтобы получить исходные коды, вы должны обновить строку Types
следующим образом:
Types: deb deb-src
После внесения этих изменений, выполните команду apt update
для обновления и повторной загрузки индексов пакетов. Теперь команда apt-get source bsdutils
должна успешно работать и предоставлять исходный код пакета.
Этот процесс обеспечивает доступ к исходным кодам и позволяет изучать и модифицировать пакеты в зависимости от потребностей.
Заключение
Неправильная конфигурация источников — частая причина ошибок при попытке получить исходный код пакетов в Ubuntu. С переходом на формат .sources
важно убедиться, что настройка включает типы источников deb-src
. Этот пример демонстрирует, как правильно скорректировать конфигурацию, чтобы использовать возможности, предоставляемые apt-get source
. Такой подход гарантирует, что вы можете свободно работать с исходным кодом, что крайне полезно для процедуры модификации и оптимизации программного обеспечения.