Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Как вытащить информацию из pkgcache.bin?  (Прочитано 1615 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ase66

  • Автор темы
  • Участник
  • *
  • Сообщений: 202
    • Просмотр профиля
Как вытащить информацию из pkgcache.bin?
« : 14 Сентября 2025, 20:58:13 »
Мне нужен путь к пакетам, как в Packages. Но некоторые репозитории Packages wgetу или браузеру не отдают. Однако список программ из них в софтцентрах и apt есть, и он вроде как должен быть в pkgcache.bin

Как вытащить из pkgcache.bin весь список с полным путём на скачивание .deb? Возможно ли это вообще?

Оффлайн kmk

  • Активист
  • *
  • Сообщений: 672
    • Просмотр профиля
Re: Как вытащить информацию из pkgcache.bin?
« Ответ #1 : 14 Сентября 2025, 22:11:56 »
/var/cache/apt/pkgcache.bin - Это бинарный файл используемый пакетными менеджерами, и его невозможно просто так распаковать.

Вывести список всех пакетов, доступных в ваших репозиториях:
apt-cache pkgnames
Вывести список всех установленных пакетов:
dpkg -l
Никаких ссылок на deb-пакеты выводиться не будет.

Оффлайн F12

  • Администратор
  • Старожил
  • *
  • Сообщений: 5844
    • Просмотр профиля
Re: Как вытащить информацию из pkgcache.bin?
« Ответ #2 : 14 Сентября 2025, 23:12:55 »
Как уже абсолютно верно отметил kmk, это бинарный файл.

А по сути, pkgcache.bin это кэш apt, и вся инфа в нём организована исключительно для использования пакетными менеджерами, потому вряд ли возможно из него просто так, запросто, вытащить всю информацию в удобоваримом для человека виде, разве только с помощью того же apt, да и то, не всё чёхом, а только определённые сведения

  ... например весь список выводится командами apt list или, как уже было сказано, apt-cache pkgnames, но увы, без полного пути на скачивание

   ... больше информации выдает apt show или apt-cache show, но опять таки, не по всем пакетам сразу, а только по конкретно указанным

Пользователь добавил сообщение 14 Сентября 2025, 23:14:00:
ase66, не понимаю зачем это вообще тебе нужно, может проще было бы просто зеркалировать репозитории?

   ... например с помощью apt-mirror

Цитата:  apt show apt-mirror
Description: Инструмент для создания «зеркал» источников APT
 Маленький и эффективный инструмент, позволяющий создавать зеркало части
 или всего дистрибутива Debian GNU/Linux или любых других источников apt.

Оффлайн ase66

  • Автор темы
  • Участник
  • *
  • Сообщений: 202
    • Просмотр профиля
Re: Как вытащить информацию из pkgcache.bin?
« Ответ #3 : 15 Сентября 2025, 09:28:14 »
Благодарю за подсказку. Вот самый простое решение:

Это даст список пакетов в файл

apt-cache pkgnames > pkk
это добавит sudo apt-get download

awk '{print "sudo apt-get download "$0""}' pkk > pkk2
весь список в терминал, пакеты будут скачаны туда где он открыт.

Оффлайн F12

  • Администратор
  • Старожил
  • *
  • Сообщений: 5844
    • Просмотр профиля
Re: Как вытащить информацию из pkgcache.bin?
« Ответ #4 : 15 Сентября 2025, 13:06:44 »
весь список в терминал, пакеты будут скачаны туда где он открыт
- и всё таки, зачем это тебе нужно?

   ... прям аж распирает от любопытства  :)

PS: а если завтра какой-то пакет в репах заменят на более свежий, что опять будешь всё качать по-новой?   :coolsmiley:

Оффлайн ase66

  • Автор темы
  • Участник
  • *
  • Сообщений: 202
    • Просмотр профиля
Re: Как вытащить информацию из pkgcache.bin?
« Ответ #5 : 15 Сентября 2025, 18:31:18 »
Я регулярно просматриваю разные и редкие репозитории, на предмет поиска новых программ с готовыми .desktop файлами и иконкам к ним. Собираю коллекцию образцов для создания любительских тем иконок для Linux. Но похоже, что скоро и тему то не дадут поменять. Вижу 3-4 профессиональные темы в snap есть, а что с остальными будет, только богу известно.

Актуальность версий пакетов меня особо не волнует. Всё равно за всем не уследишь.

Коллекция - https://disk.yandex.ru/d/xPPmgWfK0z1hIA
« Последнее редактирование: 15 Сентября 2025, 18:33:19 от ase66 »

Оффлайн Skif_off

  • Активист
  • *
  • Сообщений: 498
    • Просмотр профиля
Re: Как вытащить информацию из pkgcache.bin?
« Ответ #6 : 15 Сентября 2025, 20:24:52 »
на предмет поиска новых программ с готовыми .desktop файлами и иконкам к ним. Собираю коллекцию образцов для создания любительских тем иконок для Linux
Не совсем понимаю, какой в этом смысл? Программы или идут со своими значками, или используют что-то из системной темы значков. При этом темой значков можно подменить тот значок, который тащит с собой программа (сам так делал).

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7889
  • Eternally
    • Просмотр профиля
Re: Как вытащить информацию из pkgcache.bin?
« Ответ #7 : 16 Сентября 2025, 02:24:21 »
Собираю коллекцию образцов для создания любительских тем иконок для Linux.
gnome-look.org, не?
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн ase66

  • Автор темы
  • Участник
  • *
  • Сообщений: 202
    • Просмотр профиля
Re: Как вытащить информацию из pkgcache.bin?
« Ответ #8 : 16 Сентября 2025, 09:48:23 »
Коллекция нужна для создания тем. К каждому .desktop можно создать иконку в своём стиле. У меня и дефаультные иконки для каждого .desktop есть, к сожалению не полностью, из-за гибели диска. Если кому нужно, могу дать ссылку на скачивание. Вообще-то все иконки к .desktop  данной коллекции есть в моих темах. И да, мои темы иконок есть на gnome-look.


P.S. Если кому интересно, то можно посмотреть сколько вообще, и каких программ доступно с GUI для Linux. В .desktop много всякой информации.

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7889
  • Eternally
    • Просмотр профиля
Re: Как вытащить информацию из pkgcache.bin?
« Ответ #9 : 17 Сентября 2025, 03:32:07 »
В .desktop много всякой информации.
Которая нужна раз в пятилетку =)

Для кастомного .desktop - Exec= и Icon= вполне достаточно.
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Skif_off

  • Активист
  • *
  • Сообщений: 498
    • Просмотр профиля
Re: Как вытащить информацию из pkgcache.bin?
« Ответ #10 : 17 Сентября 2025, 16:28:10 »
Покопался в pkgcache.bin в hex-редакторе, немного, - не видно URL в чистом виде (возможно, линки генерируются при попытке установить/переустановить пакет?).

Есть пакет python3-apt, глянул бегло доки: если задействовать напрямую и не выйдет, то можно в скриптах поковыряться, если навык есть.
Ещё Synaptic умеет генерировать bash-скрипт с загрузкой deb-файлов (wget'ом, кажется) - тоже можно попробовать подсмотреть.

Оффлайн F12

  • Администратор
  • Старожил
  • *
  • Сообщений: 5844
    • Просмотр профиля
Re: Как вытащить информацию из pkgcache.bin?
« Ответ #11 : 17 Сентября 2025, 19:50:44 »
Ещё Synaptic умеет генерировать bash-скрипт с загрузкой deb-файлов (wget'ом, кажется) - тоже можно попробовать подсмотреть.
- судя по Ответу №3, ТС уже нашёл решение, но я всё равно его не понимаю   :idiot2:

   ... нет, я конечно понимаю, что человек собирает коллекцию иконок, для этого регулярно просматривает разные и редкие репозитории с целью обнаружить там реальные программы в пакетах которых содержатся готовые .desktop файлы с иконками к ним, но ведь такой подход, мягко говоря, слишком уж трудоёмкий и отнюдь не быстрый

    ... ещё куда не шло, когда подобный "промысел" ведется в PPA содержащих незначительное количество пакетов, но выуживать это всё из списка полученного в результате выполнения apt-cache pkgnames > pkk, это же многие ты-Ш-Ш-и пакетов (и в скольких из них содержатся вожделенные готовые .desktop файлы с иконками к ним?!), да у меня просто терпения не хватило бы ковыряться в этом   :D

Оффлайн ase66

  • Автор темы
  • Участник
  • *
  • Сообщений: 202
    • Просмотр профиля
Re: Как вытащить информацию из pkgcache.bin?
« Ответ #12 : 18 Сентября 2025, 08:54:17 »
Ценность данной коллекции в трудности её добычи. Как использовать?
Если вы сделали иконку java21-openjdk или telegram, то можно прогнать поиск по этой базе. Вы сразу узнаете, что на одну иконку можно (нужно) навесить много ссылок. Типа:

ln -s java21-openjdk.svg java25-openjdk.svg
ln -s java21-openjdk.svg java24-openjdk.svg
ln -s java21-openjdk.svg java23-openjdk.svg

ln -s telegram.svg web-telegram.svg
ln -s telegram.svg telegram-webapp.svg
ln -s telegram.svg org.telegram-desktop.svg

или типа того.

Так же, если вы к примеру, написали программку с .desktop файлом, то неплохо бы просмотреть эту базу, на тему, нет ли одноимённого .desktop и иконки к нему. Чтобы не было конфликта и переписывания файлов при установке.

По хорошему, надо бы к коллекции приложить все найденные иконк. Но у меня осталась только часть, может две трети. Однако там указана тема, где есть всё, хотя и отрисованные они в другом стиле.


Ничего страшного в сплошной закачке через apt-cache pkgnames нет. В обычном, подключённом репозитории примерно 100000 пакетов (в Ubuntu 25.04 например 158915 MiB массы для amd64), в основном либы, после полной распаковки Вы увидите в applications от 3000 до 6000 иконок. А в популярных темах на Гноме-лоок 5000 или 8000 шт иконок теперь норма.

Проблема только в репо от Uniontech, там в .deb пакеты собраны .apk для Uengine. 70000 готовых программ от Андроид с .desktop и иконкой. Вот это действительно мне не по силам. Не буду даже и начинать, да и закачку режут вплоть до диалапа. Давно такого не видел.
« Последнее редактирование: 18 Сентября 2025, 12:09:31 от ase66 »

Оффлайн Skif_off

  • Активист
  • *
  • Сообщений: 498
    • Просмотр профиля
Re: Как вытащить информацию из pkgcache.bin?
« Ответ #13 : 18 Сентября 2025, 19:10:20 »
Ничего страшного в сплошной закачке через ... нет.
Можно же отсекать, исключая что-то типа "*-dev_*.deb", "lib*.deb", "*-test_*.deb" (второе под вопросом). Пакеты со словом "firmware".
"*-common_*.deb" лучше не надо исключать: чаще не содержат desktop-файл, но бывает.
"*-icon-theme_*.deb" и "*-theme_*.deb" - за борт.
Если вы сделали иконку java21-openjdk или telegram, то можно прогнать поиск по этой базе. Вы сразу узнаете, что на одну иконку можно (нужно) навесить много ссылок.
Стараются продвигать стандарт (не помню, как называется), когда "ristretto.svg" превращается в "org.xfce.ristretto.svg": некоторяе программы уже достаточно давно прошли этот путь и старое имя неактуально.
Бывает, что в Debian/Ubuntu застопорились на старой версии и ни в какую не обновляют (ну, с ходу RSS Guard всплывает, зависший на 4.0.4, хотя с 2021го линейка 4.х ушла далеко вперёд и автор уже активно пилит 5.х).
Вопрос в том, насколько всё это актуально.

Может быть, практичнее сливать темы значков и смотреть папку apps... Причём придётся смотреть несколько версий: свежую elementary-xfce-icon-theme, например, не накатить на 20.04 или 22.04, бо пачка значков поудалена как "утратившие актуальность".

Оффлайн ase66

  • Автор темы
  • Участник
  • *
  • Сообщений: 202
    • Просмотр профиля
Re: Как вытащить информацию из pkgcache.bin?
« Ответ #14 : 18 Сентября 2025, 21:37:00 »
 "ristretto.svg" превращается в "org.xfce.ristretto.svg" - это в большинстве случаев флатпак. И кстати, в коллекции почти нет к ним .desktop. Во первых они находятся в /var/lib/flatpak/exports/share/applications/, а во вторых есть сайт https://flathub.org/ где имя страницы всегда соответствует .desktop и имени иконки.

Для моих целей этого достаточно.

Я почти уверен, что у меня есть все иконки для программ с flathub. Недавно пытался создать скрипт для автоматической установки флатпаков, но там каждый раз нужно жать -y и выбирать версию или источник.

Типа:

Требуемая среда исполнения для app.freelens.Freelens/x86_64/stable (runtime/org.freedesktop.Platform/x86_64/24.08) найдена в удалённом репозитории flathub
Хотите установить её? [Y/n]: y

Перейти к системой установке с этими изменениями? [Y/n]:

нужно дважды нажать y
 

И конечно-же это не сработало:  | sleep 8 | yes | sleep 8 | yes

Но меня это особо не волнует, из-за строгой политики flathub.org  (иконка всегда соответствует имени программы, .desktopа и страницы сайта). Я их регулярно просматриваю и создаю нужную иконку.

Но не всегда .org или .com это флатпак. В Китайских репо полно таких пакетов, .desktopов и одноимённых иконок к ним, но это сборки в .deb

P.S. Не надо боятся тотальной закачки и распаковки репозитория.

Пример:

Ubuntu 24.04 Noble Numbat

233860 MiB in 29087s at 8233 kiB/s

/usr/bin/debmirror --cleanup --nosource -m --passive --host=archive.ubuntu.com \
--root=ubuntu --method=http --progress \
--dist=noble,noble-backports,noble-security \
--ignore-release-gpg --section=main,multiverse,restricted,universe \
--arch=amd64 /media/x/XXXXXXX/ubuntu-noble/

 
9 часов на закачку, 1 Tb диска хватит с большим запасом, и 3 суток на распаковку на слабом компе (в моём случае). Современный процессор справится с этим за одну ночь.
« Последнее редактирование: 18 Сентября 2025, 21:52:08 от ase66 »

 

Страница сгенерирована за 0.022 секунд. Запросов: 21.