[devel] hasher: пакеты, установленные по зависимостям

Антон Мидюков midyukov-anton на ya.ru
Сб Окт 26 17:19:50 MSK 2024


26.10.2024 16:03, Антон Мидюков пишет:
> 26.10.2024 15:36, Ivan A. Melnikov пишет:
>> On Sat, Oct 26, 2024 at 02:04:47PM GMT, Alexey Gladkov wrote:
>>> On Fri, Oct 25, 2024 at 06:23:43PM +0300, Антон Мидюков wrote:
>>>>>>>> И всё равно остаётся проблема виртуальных пакетов, которых нет в репозитории в виде rpm.
>>>>>>>> Пакета, который устанавливается по этому провайдсу, не будет во входном списке.
>>>>>>>
>>>>>>> Можно попробовать сделать аналог mki-expand-pkgs и проверять по
>>>>>>> "$aptbox/var/cache/pkgnames" все имена из списка. Это должно отфильтровать
>>>>>>> виртуальные пакеты.
>>>>>>>
>>>>>>
>>>>>> Виртуальные пакеты нужно не отфильтровать, а заменить на те, что будут выбраны при установке.
>>>>>> Чтобы их не пометило как auto.
>>>>>
>>>>> Я не знал этого. Я не до конца понимаю задачу.
>>>>>
>>>>
>>>> Задача сделать apt-mark auto для пакетов, которые установились по зависимостям.
>>>> Для этого я полагаю получить:
>>>> - список пакетов, которые устанавливаются вручную (install_pkgs)
>>>
>>> Даже этот шаг уже сложная задача. У mkimage есть список с регулярные
>>> выражения и список пакетов включая виртуальные пакеты. Тут мы их никак не
>>> разворачиваем. Мы можем только регэкспы развернуть.
>>>
>>> То есть у mkimage нет чистого (без виртуальных) списка пакетов.
>>>
>>>> - список пакетов установленных в hasher (all_pkgs)
>>>
>>> Если я правильно понял суть этого списка, то это как раз
>>> /.in/.rpmi-install.list. Если нужны именно установленные, то его тоже
>>> можно получить.
>>>
>>>> Затем получить командой
>>>> comm -23 all_pkgs install_pkgs
>>>>
>>>> список пакетов, которые нужно пометить, как установленные автоматически.
>>>> То есть вычитаем из всех пакетов пакеты, установленные вручную.
>>>> Загвоздка в том, чтобы получить адекватный список install_pkgs.
>>>> Думаю, что всё же можно заменить виртуальные пакеты в этом списке набором пакетов, предоставляющих их.
>>>> Избыточность (наличие пакетов, которые не устанавливаются) в этом списке не является проблемой.
>>>
>>> Я пока не знаю хорошего способа как получить список выбранных пакетов.
>>> Приходит в голову что-то такое:
>>>
>>> aptbox/apt-get -s install webclient xvt |
>>> 	sed -n -r -e 's#^Selecting ([^ ]+) for .*#\1#p'
>>
>> Нельзя ли попробовать "развиртуализировать" пакеты уже внутри
>> хешера, при выполнении apt-mark?
>>
>> # apt-mark manual $(rpm -q --whatprovides xvt webclient)
>>
>> Тут будет немного лишнего если в chroot попали несколько
>> провайдеров, но я думаю это не страшно.
>>
> 
> Нам нужно пометить пакеты установленные автоматически. В hasher все пакеты помечены как manual.
> То есть задача обратная.
> Повторюсь, что для решения задачи достаточно поместить в список пакетов, установленных вручную, вместе с виртуальными пакетами все пакеты, которые их предоставляют.
> 

Но идея с развиртуализацией работает. Спасибо!

У меня получился такой код:

diff --git a/tools/mki-install b/tools/mki-install
index 8c8cad3..ac23f76 100755
--- a/tools/mki-install
+++ b/tools/mki-install
@@ -19,3 +19,12 @@ hasher_args="$verbose $quiet ${HSH_EXCLUDE_DOCS:+--excludedocs} ${HSH_NUMBER:+--
 
 mki_list_pkgs "$@" |
 	xargs -r env -i PATH="$PATH" hsh-install $hasher_args -- "$dir"
+
+hsh-run --rooter -- "$dir" rpm -q apt || exit 0
+hsh-run --rooter -- "$dir" rpm -q --whatprovides --queryformat "%{NAME}\n" \
+	$(mki-expand-pkgs regexp $(mki_list_pkgs "$@")) |
+	sort -u > "$TMP"/install_pkgs
+hsh-run --rooter -- "$dir" rpm -qa --queryformat "%{NAME}\n" |
+	sort -u > "$TMP"/all_pkgs
+hsh-run --rooter -- "$dir" apt-mark auto \
+	$(comm -23 "$TMP"/all_pkgs "$TMP"/install_pkgs)



-- 
С уважением, Антон Мидюков <antohami на altlinux.org>


Подробная информация о списке рассылки Devel