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

Alexey Gladkov legion на altlinux.ru
Сб Окт 26 20:01:15 MSK 2024


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.

-- 
Rgrds, legion



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