Как сделать так, чтобы самодельный пакет мог обработаться apt-rdepends? (чтобы apr-rdepends считал сборочные зависимости)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
жучара
Сообщения: 1091
ОС: астралинукс

Как сделать так, чтобы самодельный пакет мог обработаться apt-rdepends?

Сообщение жучара »

Друзья! Конкретнее если, у самодельного пакета есть исходники и есть сборочные зависимости. Соответственно, необходимо как-нибудь запихать чё-нибудь в кэш, чтобы apt-rdepends из кэша прочла сборочные зависимости (да и просто зависимости) и выдала на гора.

Чё могу. Исходники пакета foo кропаю так (официальная инфа!):

Shell

$ equivs-control x.ctl
$
x.ctl это прообраз *control* файлов. Внесём туда имя foo пакета. Теперь x.ctl выглядит так

Shell

$ cat x.ctl
Section: misc
Priority: optional
Standards-Version: 3.9.2

Package: foo
Description: <short description; defaults to some wise words>
long description and info
.
second paragraph
$
Теперь скропаем исходники foo:
equivs-build -s x.ctl
$ equivs-build -s x.ctl
dpkg-buildpackage: инфо: пакет исходного кода foo
dpkg-buildpackage: инфо: версия исходного кода 1.0
dpkg-buildpackage: инфо: дистрибутив исходного кода unstable
dpkg-buildpackage: инфо: исходный код изменён Equivs Dummy Package Generator <user@debian>
dpkg-source --before-build .
debian/rules clean
dh clean
dh_clean
dpkg-source -b .
dpkg-source: инфо: используется формат исходника «3.0 (native)»
dpkg-source: инфо: сборка foo в foo_1.0.tar.xz
dpkg-source: инфо: сборка foo в foo_1.0.dsc
dpkg-genbuildinfo --build=source -O../foo_1.0_source.buildinfo
dpkg-genchanges --build=source -O../foo_1.0_source.changes
dpkg-genchanges: инфо: в закачку включён весь исходный код
dpkg-source --after-build .
dpkg-buildpackage: инфо: закачка только пакетов исходного кода: родной пакет Debian

The package has been created.
Attention, the package has been created in the current directory,
not in ".." as indicated by the message above!
$
Смотрим, что получилось:

Shell

$ ls
foo_1.0.dsc foo_1.0_source.buildinfo foo_1.0_source.changes foo_1.0.tar.xz x.ctl
$
Чудненько. Теперь добавим в исходники сборочные зависимости. (Одна штатная сборочная зависимость сейчас прописана в файле foo_1.0.dsc:

Shell

$ cat foo_1.0.dsc
Format: 3.0 (native)
Source: foo
Binary: foo
Architecture: all
Version: 1.0
Maintainer: Equivs Dummy Package Generator <user@debian>
Standards-Version: 3.9.2
Build-Depends: debhelper-compat (= 12)
Package-List:
foo deb misc optional arch=all
Checksums-Sha1:
8a7e3d520cbf526338918c6aa605b2e9e57b2ad2 1684 foo_1.0.tar.xz
Checksums-Sha256:
be8b70393f4d61dbadab4923ed98c340eec712a5088af5198a0a3c70b5a01b09 1684 foo_1.0.tar.xz
Files:
6d37c918daf93c89f1d088dd596c4bb9 1684 foo_1.0.tar.xz
$
А мы для эксперимента своих добавим ещё.) Для этого правильно распакуем исходники:

Shell

$ dpkg-source -x foo_1.0.dsc
dpkg-source: предупреждение: распаковка неподписанного пакета с исходным кодом (foo_1.0.dsc)
dpkg-source: инфо: извлечение foo в foo-1.0
dpkg-source: инфо: распаковывается foo_1.0.tar.xz
$
Смотрим управляющий файл:

Shell

$ cat foo-1.0/debian/control
Source: foo
Section: misc
Priority: optional
Maintainer: Equivs Dummy Package Generator <user@debian>
Build-Depends: debhelper-compat (= 12)
Standards-Version: 3.9.2
Rules-Requires-Root: no

Package: foo
Architecture: all
Multi-Arch: foreign
Description: <short description; defaults to some wise words>
long description and info
.
second paragraph
$
Добавим левых пакетов в поле Build-Depends; также для чистоты эксперимента добавим зависимость какую-нибудь. У меня стоит пакет tree, его и добавим. Окончательный вариант файла foo-1.0/debian/control:

Shell

$ cat foo-1.0/debian/control
Source: foo
Section: misc
Priority: optional
Maintainer: Equivs Dummy Package Generator <user@debian>
Build-Depends: debhelper-compat (= 12), cafe, babe
Standards-Version: 3.9.2
Rules-Requires-Root: no

Package: foo
Architecture: all
Depends: tree
Multi-Arch: foreign
Description: <short description; defaults to some wise words>
long description and info
.
second paragraph
$
Соберём пакет foo. Коль скоро у нас сборочные зависимости левые (то есть пакетов с именами cafe и babe) нет и быть не может, нужно использовать опцию -d:
тут сборка пакета foo
$ cd foo-1.0/
foo-1.0$ dpkg-buildpackage -us -uc -d
dpkg-buildpackage: инфо: пакет исходного кода foo
dpkg-buildpackage: инфо: версия исходного кода 1.0
dpkg-buildpackage: инфо: дистрибутив исходного кода unstable
dpkg-buildpackage: инфо: исходный код изменён Equivs Dummy Package Generator <user@debian>
dpkg-buildpackage: инфо: архитектура узла amd64
dpkg-source --before-build .
debian/rules clean
dh clean
dh_clean
dpkg-source -b .
dpkg-source: инфо: используется формат исходника «3.0 (native)»
dpkg-source: инфо: сборка foo в foo_1.0.tar.xz
dpkg-source: инфо: сборка foo в foo_1.0.dsc
debian/rules binary
dh binary
dh_update_autotools_config
dh_autoreconf
create-stamp debian/debhelper-build-stamp
dh_prep
dh_auto_install --destdir=debian/foo/
dh_install
dh_installdocs
dh_installchangelogs
dh_perl
dh_link
dh_strip_nondeterminism
dh_compress
dh_fixperms
dh_missing
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
dpkg-deb: сборка пакета «foo» в «../foo_1.0_all.deb».
dpkg-genbuildinfo -O../foo_1.0_amd64.buildinfo
dpkg-genchanges -O../foo_1.0_amd64.changes
dpkg-genchanges: инфо: в закачку включён весь исходный код
dpkg-source --after-build .
dpkg-buildpackage: инфо: закачка всего; родной пакет Debian (включены все пакеты исходного кода)
foo-1.0$
foo-1.0$
foo-1.0$ cd ..
$
$
$ ls
foo-1.0 foo_1.0_amd64.buildinfo foo_1.0.dsc foo_1.0_source.changes x.ctl
foo_1.0_all.deb foo_1.0_amd64.changes foo_1.0_source.buildinfo foo_1.0.tar.xz
$
$
$
Всё собралось. И изменился ли файл foo_1.0.dsc ?

Shell

$ cat foo_1.0.dsc
Format: 3.0 (native)
Source: foo
Binary: foo
Architecture: all
Version: 1.0
Maintainer: Equivs Dummy Package Generator <user@debian>
Standards-Version: 3.9.2
Build-Depends: debhelper-compat (= 12), cafe, babe
Package-List:
foo deb misc optional arch=all
Checksums-Sha1:
e73c1dc8e6d8847945b4f0d8c8533efd8c35f01a 1680 foo_1.0.tar.xz
Checksums-Sha256:
43ecc1f86419e5b04770ba495627168dab5c7beb7d9d48fca2626eb479bd4d90 1680 foo_1.0.tar.xz
Files:
405df431fecafab695d620e0eacced0f 1680 foo_1.0.tar.xz
$
Изменился предполагаемо, в качестве сборочных зависимостей добавились cafe и babe

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=

А теперь чё-то нужно как-то запихать в кэш, чтобы команднуть вот так:

Shell

$ apt-rdepends -b foo
...и вот тут увидеть сборочные зависисмости
$
Именно как в кэш чё-нибудь запихивать я не знаю. Условно информацию о бинарнике запихать можно, по-моему, просто-напросто установив этот пакет.
Установим пакет foo
$ sudo apt-get install ./foo_1.0_all.deb
Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово
Заметьте, вместо «./foo_1.0_all.deb» выбирается «foo»
Следующие пакеты устанавливались автоматически и больше не требуются:
dkms firmware-nvidia-gsp gir1.2-ayatanaappindicator3-0.1 glx-alternative-mesa glx-alternative-nvidia glx-diversions grub-pc-bin
libbcg729-0 libc-ares2 libc6-i386 libchewing3 libchewing3-data libkf5sane-data libkf5sane5 libksanecore1 libmaliit-plugins2
libnvidia-allocator1 libnvidia-egl-gbm1 libnvidia-egl-wayland1 libnvidia-eglcore libnvidia-glcore libnvidia-glvkspirv
libnvidia-ptxjitcompiler1 libnvidia-rtcore libnvidia-tesla-470-cfg1 libpinyin-data libpinyin15 libpresage-data libpresage1v5
libqt5feedback5 libqt5multimedia5 libsmi2ldbl libtinyxml2.6.2v5 libwireshark-data libwireshark16 libwiretap13 libwsutil14
maliit-framework mokutil nvidia-egl-common nvidia-installer-cleanup nvidia-kernel-common nvidia-legacy-check nvidia-modprobe
nvidia-persistenced nvidia-support nvidia-suspend-common nvidia-tesla-470-alternative nvidia-vulkan-common onboard-common presage
python3-dbus qml-module-qtquick-localstorage shim-helpers-amd64-signed shim-signed-common shim-unsigned update-glx xawtv-plugins
xsane-common
Для их удаления используйте «sudo apt autoremove».
Следующие НОВЫЕ пакеты будут установлены:
foo
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 390 пакетов не обновлено.
Необходимо скачать 0 B/2 168 B архивов.
После данной операции объём занятого дискового пространства возрастёт на 9 216 B.
Пол:1 /home/user/Desktop/foo/foo_1.0_all.deb foo all 1.0 [2 168 B]
Выбор ранее не выбранного пакета foo.
(Чтение базы данных … на данный момент установлен 308851 файл и каталог.)
Подготовка к распаковке …/Desktop/foo/foo_1.0_all.deb …
Распаковывается foo (1.0) …
Настраивается пакет foo (1.0) …
Сканирование процессов...
Scanning processor microcode...
Сканирование образов linux...

Запущено ядро последней версии.

The processor microcode seems to be up-to-date.

Службы не требуют перезапуска.

Контейнеры не требуют перезапуска.

В сеансах пользователей нет устаревших процессов.

No VM guests are running outdated hypervisor (qemu) binaries on this host.
N: Загрузка выполняется от лица суперпользователя без ограничений песочницы, так как файл «/home/user/Desktop/foo/foo_1.0_all.deb» недоступен для пользователя «_apt». - pkgAcquire::Run (13: Отказано в доступе)
$
А теперь к теме вернёмся. Реагирует ли apt-rdepends на установленный пакет foo?

Shell

$ apt-rdepends foo
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
foo
Depends: tree
tree
Depends: libc6 (>= 2.34)
libc6
Depends: libgcc-s1
libgcc-s1
Depends: gcc-12-base (= 12.2.0-14+deb12u1)
Depends: libc6 (>= 2.35)
gcc-12-base
$
$
$
$ apt-rdepends -b foo
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
foo
$
То есть видно, да, зависимость (не сборочные, а простые) tree и далее по списку apt-rdepends очень даже неплохо считал. А вот сборочные никак.

Спасибо, кто откликнется, debian 12
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21256
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как сделать так, чтобы самодельный пакет мог обработаться apt-rdepends?

Сообщение Bizdelnick »

apt не работает с локальными пакетами, только с репозиториями. Можете сделать локальный репозиторий, подключить его, и тогда всё покажет.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1091
ОС: астралинукс

Re: Как сделать так, чтобы самодельный пакет мог обработаться apt-rdepends?

Сообщение жучара »

Bizdelnick писал:
28.07.2025 17:21
apt не работает с локальными пакетами, только с репозиториями. Можете сделать локальный репозиторий, подключить его, и тогда всё покажет.
ну что ж, давайте попробуем. Сделаем исходники, пропишем туда сборочные зависимости и запихаем это всё в репозиторий.

Shell

$ rm -r *
$ mkdir foo-1
$ tar -czf foo-1.tar.gz foo-1
$ cd foo-1
foo-1 $
В папке foo-1 (она пустая и мы находимся внутри неё) исходники пакета foo. Дебианизируем их:

Shell

foo-1 $ dh_make -s -y -f ../foo-1.tar.gz
/usr/bin/dh_make:10: DeprecationWarning: 'nis' is deprecated and slated for removal in Python 3.13
import nis
Maintainer Name : user
Email-Address : user@debian
Date : Wed, 30 Jul 2025 17:31:13 +0500
Package Name : foo
Version : 1
License : blank
Package Type : single
Currently there is not top level Makefile. This may require additional tuning
Done. Please edit the files in the debian/ subdirectory now.

foo-1 $
Поправим файл debian/control. ОБращаю внимание на поля Section: main и Architecture: any . Никакой экзотики. Поле Build-Depends пусть будет Build-Depends: debhelper-compat (= 13), cafe, babe:

Shell

foo-1 $ cat debian/control
Source: foo
Section: main
Priority: optional
Maintainer: user <user@debian>
Rules-Requires-Root: no
Build-Depends: debhelper-compat (= 13), cafe, babe
Standards-Version: 4.6.2
Homepage: <insert the upstream URL, if relevant>
#Vcs-Browser: https://salsa.debian.org/debian/foo
#Vcs-Git: https://salsa.debian.org/debian/foo.git

Package: foo
Architecture: any
Depends:
${shlibs:Depends},
${misc:Depends},
Description: <insert up to 60 chars description>
<Insert long description, indented with spaces.>
foo-1 $
Ещё штрихи (создание файла foo_1-1.dsc в частности):

Shell

$ cd ..
$
$ dpkg-source -b foo-1
dpkg-source: инфо: используется формат исходника «3.0 (quilt)»
dpkg-source: инфо: сборка foo с использованием существующего ./foo_1.orig.tar.gz
dpkg-source: инфо: сборка foo в foo_1-1.debian.tar.xz
dpkg-source: инфо: сборка foo в foo_1-1.dsc
$
$ ls
foo-1 foo_1-1.debian.tar.xz foo_1-1.dsc foo_1.orig.tar.gz foo-1.tar.gz
$
Всё есть. На всякий случай смотрим foo_1-1.dsc- все нужные поля на месте:

Shell

$ cat foo_1-1.dsc
Format: 3.0 (quilt)
Source: foo
Binary: foo
Architecture: any
Version: 1-1
Maintainer: user <user@debian>
Homepage: <insert the upstream URL, if relevant>
Standards-Version: 4.6.2
Build-Depends: debhelper-compat (= 13), cafe, babe
Package-List:
foo deb main optional arch=any
Checksums-Sha1:
d5e2bc02471ad806b923f1f1a13d3da2600911e9 110 foo_1.orig.tar.gz
25e5304b4e0e1c7a8b86041e73c3fbeed24ce981 8804 foo_1-1.debian.tar.xz
Checksums-Sha256:
cf5876030588d6f1b734ef5534bfa50900a6dcb0e8afec33a6154c0208868976 110 foo_1.orig.tar.gz
39acc9605319cc2aec6352b87a14f6fcd1b9003712906cf76f12f6507f96d192 8804 foo_1-1.debian.tar.xz
Files:
0cfa7cf8ffedea5d1bd9e316bec8b0a0 110 foo_1.orig.tar.gz
e0465b36f2a15097ab2db37ada96c736 8804 foo_1-1.debian.tar.xz
$
===============================================================

Теперь репозиторий. Используем команду reprepro:

Shell

$ mkdir ~/Desktop/repoz
$ mkdir ~/Desktop/repoz/conf
$ touch ~/Desktop/repoz/conf/distributions
$
Опять-таки файл ~/Desktop/repoz/conf/distributions никакой экзотики, поля Architectures и Components какие надо:

Shell

$ cat ~/Desktop/repoz/conf/distributions
Codename: my_debian_test
Suite: stable
Version: 1.x
Origin: Debian
Label: Debian 1.x
Description: Debian Stable Repository
Architectures: source
Components: main
DebIndices: Packages Release . .gz .bz2
DscIndices: Sources Release . .gz .bz2
Contents: . .gz .bz2
$
$
$ reprepro -b ~/Desktop/repoz export
$ reprepro -b ~/Desktop/repoz createsymlinks
$
===============================================================

сырцы пакета foo в репозиторий добавляем:

Shell

$ reprepro -b ~/Desktop/repoz includedsc my_debian_test foo_1-1.dsc
Exporting indices...
$
Файл /etc/apt/sources.list правим:

Shell

$ cat /etc/apt/sources.list
deb-src [trusted=yes] file:///home/user/Desktop/repoz my_debian_test main
$
кэш обновляем:

Shell

$ sudo apt-get update
Пол:1 file:/home/user/Desktop/repoz my_debian_test InRelease
Игн:1 file:/home/user/Desktop/repoz my_debian_test InRelease
Пол:2 file:/home/user/Desktop/repoz my_debian_test Release [1 093 B]
Пол:2 file:/home/user/Desktop/repoz my_debian_test Release [1 093 B]
Пол:3 file:/home/user/Desktop/repoz my_debian_test Release.gpg
Игн:3 file:/home/user/Desktop/repoz my_debian_test Release.gpg
Чтение списков пакетов… Готово
N: Загрузка выполняется от лица суперпользователя без ограничений песочницы, так как файл «/home/user/Desktop/repoz/dists/my_debian_test/InRelease» недоступен для пользователя «_apt». - pkgAcquire::Run (13: Отказано в доступе)
$


Сборочные зависимости смотрим:

Shell

$ apt-rdepends -b foo
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
foo
Build-Depends: debhelper-compat (= 13)
debhelper-compat
$
Всё ни тебе cafe, ни тебе babe ЧЯДНТ?
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4462
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Как сделать так, чтобы самодельный пакет мог обработаться apt-rdepends?

Сообщение Rootlexx »

Для начала покажите вывод apt showsrc foo вместо какого-то написанного сто лет назад и практически не обновлявшегося скрипта на Perl.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1091
ОС: астралинукс

Re: Как сделать так, чтобы самодельный пакет мог обработаться apt-rdepends?

Сообщение жучара »

Rootlexx писал:
31.07.2025 03:12
Для начала покажите вывод apt showsrc foo вместо какого-то написанного сто лет назад и практически не обновлявшегося скрипта на Perl.

Shell

$ apt showsrc foo
Package: foo
Format: 3.0 (quilt)
Binary: foo
Architecture: any
Version: 1-1
Maintainer: user <user@debian>
Homepage: <insert the upstream URL, if relevant>
Standards-Version: 4.6.2
Build-Depends: debhelper-compat (= 13), cafe, babe
Package-List:
foo deb main optional arch=any
Priority: optional
Section: main
Directory: pool/main/f/foo
Files:
d8cc2be37ba5c9963c513894381206f8 749 foo_1-1.dsc
0cfa7cf8ffedea5d1bd9e316bec8b0a0 110 foo_1.orig.tar.gz
e0465b36f2a15097ab2db37ada96c736 8804 foo_1-1.debian.tar.xz
Checksums-Sha1:
a70b6b8fe8ff72f59558e6d83d1660d284fb3ea5 749 foo_1-1.dsc
d5e2bc02471ad806b923f1f1a13d3da2600911e9 110 foo_1.orig.tar.gz
25e5304b4e0e1c7a8b86041e73c3fbeed24ce981 8804 foo_1-1.debian.tar.xz
Checksums-Sha256:
440abf439473801b825aedbcc4c7cf5fd0fe30e885ca87323a02c03db5a63811 749 foo_1-1.dsc
cf5876030588d6f1b734ef5534bfa50900a6dcb0e8afec33a6154c0208868976 110 foo_1.orig.tar.gz
39acc9605319cc2aec6352b87a14f6fcd1b9003712906cf76f12f6507f96d192 8804 foo_1-1.debian.tar.xz

$
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4462
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Как сделать так, чтобы самодельный пакет мог обработаться apt-rdepends?

Сообщение Rootlexx »

жучара писал(а):
01.08.2025 05:24
Build-Depends: debhelper-compat (= 13), cafe, babe
Вывод: проблема в apt-rdepends. Возможно, она не отображает несуществующие пакеты.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1091
ОС: астралинукс

Re: Как сделать так, чтобы самодельный пакет мог обработаться apt-rdepends?

Сообщение жучара »

Rootlexx писал:
02.08.2025 03:21
жучара писал(а):
01.08.2025 05:24
Build-Depends: debhelper-compat (= 13), cafe, babe
Вывод: проблема в apt-rdepends. Возможно, она не отображает несуществующие пакеты.
похоже на то (эксперименты подтверждают).

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

Ну ладно.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4462
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Как сделать так, чтобы самодельный пакет мог обработаться apt-rdepends?

Сообщение Rootlexx »

жучара писал(а):
03.08.2025 11:16
Для этого нужно подключить репозитории, в которых они находятся.
Нет, для этого нужно подключить репозиторий исходного кода для того пакета, для которого вы хотите узнать сборочные зависимости.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1091
ОС: астралинукс

Re: Как сделать так, чтобы самодельный пакет мог обработаться apt-rdepends?

Сообщение жучара »

Rootlexx писал:
04.08.2025 00:43
жучара писал(а):
03.08.2025 11:16
Для этого нужно подключить репозитории, в которых они находятся.
Нет, для этого нужно подключить репозиторий исходного кода для того пакета, для которого вы хотите узнать сборочные зависимости.
ну вот, я подключил
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4462
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Как сделать так, чтобы самодельный пакет мог обработаться apt-rdepends?

Сообщение Rootlexx »

жучара писал(а):
04.08.2025 19:27
ну вот, я подключил
…и всё заработало, если использовать `apt`.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1091
ОС: астралинукс

Re: Как сделать так, чтобы самодельный пакет мог обработаться apt-rdepends?

Сообщение жучара »

Rootlexx писал:
04.08.2025 20:08
жучара писал(а):
04.08.2025 19:27
ну вот, я подключил
…и всё заработало, если использовать `apt`.
изучаем apt-rdepends. Но если вы имеете ввиду, что сборочные зависимости можно получить и другим инструментом (apt), то да.
Я просто читаю маны.
Спасибо сказали: