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

Антон Мидюков midyukov-anton на ya.ru
Вс Окт 27 14:32:34 MSK 2024


27.10.2024 14:26, Alexey Gladkov пишет:
> On Sat, Oct 26, 2024 at 07:01:15PM +0200, Alexey Gladkov wrote:
>> On Sat, Oct 26, 2024 at 05:19:50PM +0300, Антон Мидюков wrote:
>>>>>>> Затем получить командой
>>>>>>> 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" \
>>
>> Зачем нужен --whatprovides ?
>>
>> У нас же после `mki-expand-pkgs regexp` уже список пакетов бинарных и
>> виртуальных. Когда мы делаем `rpmquery --qf='%{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)
>>
>> Не проще будет после установки пакетов не сделать auto всем, а потом
>> manual установленным ?
>>
>> Подход более топорный, но в этом случае не нужно заморачиваться с all_pkgs
>> и comm.
> 
> Да, ваш вариант хорош.
> 

У меня вопрос. Нормально эти временные списки в $TMP создавать? Или есть более подходящее место?

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


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