Как уже отметили другие, убедитесь, что для каждой записи deb-src ...
в /etc/apt/sources.list
и /etc/apt/sources.list.d/*
, у вас есть соответствующая запись deb-src ...
. Остальная часть строки должна быть идентичной. Запись deb
предназначена для двоичных пакетов (т.е. готовых к установке), запись deb-src
предназначена для пакетов исходного кода (т.е. готовых к компиляции). Причина, по которой эти два вида исходных текстов разделены, заключается в том, что они управляются очень по-разному: двоичные пакеты имеют механизм отслеживания зависимостей и список установленных в данный момент пакетов, в то время как пакеты исходных текстов отслеживаются только для того, чтобы их можно было удобно загрузить. Заметьте, что при обсуждении репозиториев пакетов слово source означает две несвязанные вещи: исходный текст как в месте загрузки пакетов, и пакет исходного текста, а не двоичный пакет.
libgtk2.0-0
- это имя двоичного пакета. Он собран из пакета исходных текстов под названием gtk+2.0
. Причина, по которой имена исходных текстов и двоичных пакетов не всегда совпадают, заключается в том, что сборка пакета исходных текстов может привести к появлению нескольких двоичных пакетов; например, gtk+2.0
- это исходный текст для 14 пакетов, так как он разбит на две библиотеки (libgtk2. 0
, libgail), соответствующие пакеты для сборки программ с использованием этих библиотек (
...-dev), документация для разработчиков (
...-doc), сопутствующие программы (
libgtk2.0-bin`) и др.
Имя пакета исходных текстов, соответствующего двоичному пакету, можно посмотреть в строке Source: ...
в выводе dpkg -s BINARY_PACKAGE_NAME
(если пакет установлен) или apt-cache показать BINARY_PACKAGE_NAME
. Вы можете перечислить бинарные пакеты, созданные пакетом исходных текстов с помощью функции aptitude search '?source-package(^SOURCE_PACKAGE_NAME$)
.
Команда apt-get source
загружает пакет с исходным кодом. Если вы даете ей аргумент, который не является известным пакетом исходных текстов, она ищет его в базе данных устанавливаемых двоичных пакетов и пытается загрузить соответствующий пакет исходных текстов. Команда apt-get build-dep
следует тому же подходу для вычисления имени пакета исходных текстов, затем запрашивает базу данных пакета исходных текстов для получения списка двоичных пакетов (список в поле Build-Dep:
) и устанавливает эти двоичные пакеты.
В графическом интерфейсе Software Sources установлен флажок "включить репозитории с исходным кодом" для официальных репозиториев, убедитесь, что он отмечен галочкой. Если вы добавляете репозитории сторонних производителей вручную, убедитесь, что вы добавили обе строки deb-src
и deb
.
Благодаря @steeldriver я понял, что делать.
В мой /etc/apt/sources.list
просто нужно было добавить следующее ling:
deb-src ftp://ftp.de.debian.org/debian/ stable main contrib
deb-src репозитории содержат пакеты исходных текстов (в отличие от бинарных, готовых к установке пакетов), необходимых для компиляции.
Правка: После добавления вы должны выполнить sudo apt-get update
CLI-метод
sudo sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list
sudo apt-get update
Протестировано на образе Docker Ubuntu 18.04. После этого изменения я могу успешно сделать, например,:
sudo apt-get build-dep hello
а до изменения выдавало ошибку:
E: You must put some 'source' URIs in your sources.list
software-properties-gtk
опция "Исходный код"
Из графического интерфейса можно запустить:
software-properties-gtk
затем на вкладке «Программное обеспечение Ubuntu» нажмите «Исходный код»:
Это добавило несколько строк deb-src
под /etc/apt/sources.list
, и теперь я могу сделать sudo apt-get build-dep <package>
.
Проверено на Ubuntu с 16.04 по 18.04.