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

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


27.10.2024 15:42, Alexey Gladkov пишет:
> On Sun, Oct 27, 2024 at 03:35:04PM +0300, Антон Мидюков wrote:
>>> Но меня всё ещё кое-что смущает. В install_pkgs оказывается изначальный
>>> список пакетов плюс виртуальные provides. Там не будет пакетов, которые
>>> выберет apt для этих виртуальных пакетов. Например в изначальном списке
>>> есть xvt, но будет xterm, который обычно вытягивается. После `rpm -q` мы
>>> уберём виртуальное имя xvt т.к. это не настоящее имя пакета.
>>>
>>> Получается, что после comm xterm, который установится по xvt будет помечен
>>> auto, а это не то, что ты хочешь, кажется.
>>>
>>> В install_pkgs необходимо добавить те пакеты, которые будут выбраны
>>> apt'ом.
>>>
>>
>> Нет, в install_pkgs будет xterm, а xvt не будет.
>> Если xvt предоставляется несколькими пакетами, то все они попадут в install_pkgs.
>> xterm помечается, как manual. Я проверил.
>> --whatprovides заменяет виртуальные пакеты реальными.
> 
> Ааа. Теперь ясно.
> 
> Тогда предлагаю что-нибудь типа вот такого:
> 

Отлично! Работает!

> diff --git a/tools/mki-install b/tools/mki-install
> index 8c8cad3..dba877e 100755
> --- a/tools/mki-install
> +++ b/tools/mki-install
> @@ -19,3 +19,32 @@ hasher_args="$verbose $quiet ${HSH_EXCLUDE_DOCS:+--excludedocs} ${HSH_NUMBER:+--
> 
>  mki_list_pkgs "$@" |
>         xargs -r env -i PATH="$PATH" hsh-install $hasher_args -- "$dir"
> +
> +# shellcheck disable=SC2249
> +[ -z "${PROG##*-image-*}" ] ||
> +       exit 0
> +
> +hsh-run --rooter -- "$dir" which apt-mark >/dev/null 2>&1 ||
> +       exit 0
> +
> +tempdir=
> +exit_handler() {
> +       local rc=$?
> +       trap - EXIT
> +       [ -z "$tempdir" ] || rm -rf -- "$tempdir"
> +       exit $rc
> +}
> +
> +trap exit_handler HUP INT QUIT TERM EXIT
> +tempdir="$(mktemp -d "$dir/$PROG.XXXXXX")"
> +
> +export LC_ALL=C LANG=C LANGUAGE=C
> +
> +mki-expand-pkgs regexp "$@" |
> +       xargs -r hsh-run --rooter -- "$dir" rpm -q --whatprovides --qf='%{NAME}\n' |
> +       sort -uo "$tempdir/install_pkgs"
> +
> +hsh-run --rooter -- "$dir" rpm -q --all --qf='%{NAME}\n' |
> +       sort -u |
> +       comm -23 - "$tempdir/install_pkgs" |
> +       xargs -r hsh-run --rooter -- "$dir" apt-mark auto
> 


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


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