Оскільки Fedora 26 repoquery
підтримує підкоманду Dnf , є нова опція для переліку всіх встановлених користувачем пакетів:
$ dnf repoquery --qf '%{name}' --userinstalled \
| grep -v -- '-debuginfo$' \
| grep -v '^\(kernel-modules\|kernel\|kernel-core\|kernel-devel\)$' > pkgs_a.lst
На відміну від інших методів, він також перераховує всі пакети debuginfo. Додаткова грепа у наведеному вище прикладі відфільтровує їх.
Щоб встановити список на хості B:
$ < pkgs_a.lst xargs dnf -y install
Dnf API
У останніх версіях Dnf (наприклад, Fedora> = 23) база даних пакетів може бути запитана на встановлені користувачем імена пакетів через API Dnf Python:
$ python3 -c 'import dnf; b = dnf.Base(); b.fill_sack(); \
l = sorted(set(x.name for x in b.iter_userinstalled() \
if not x.name.endswith("-debuginfo") \
and x.name not in \
["kernel-modules", "kernel", "kernel-core", "kernel-devel"] )); \
print("\n".join(l)) ' > pkgs_a.lst
# dnf install $(cat pkgs_a.lst) # on host_b
За замовчуванням dnf install
припиняється, якщо один або більше пакетів більше недоступні. Крім того, dnf можна змусити встановити всі решта:
# dnf install --setopt=strict=0 $(cat pkgs_a.lst) # on host_b
PS: Введіть наведений вище код та інше, user-installed.py
що також підтримує інші дистрибутиви.
користувач історії встановлений
У Fedora 23 та пізніших версіях Dnf надає
# dnf history userinstalled
команда, в якій перераховані всі встановлені користувачем пакети. Станом на 2016-11 роки його корисність обмежена, оскільки немає можливості контролювати її вихід, і він друкує пакети повністю кваліфікованими (тобто, включаючи інформацію про версії).
обмеження, встановлені користувачем
Зауважте, що маркування пакетів як встановлених користувачем має деякі обмеження для деяких версій Fedora, для систем Fedora 23-ish епохи (приблизно з 2015-11 рр.) Є актуальними наступні питання):
Запит
У старих системах Fedora, де Dnf, API Dnf і dnf history userinstalled
недоступні, замість цього можна використовувати репост , наприклад:
$ repoquery --installed \
--qf '%{n} | %{yumdb_info.reason} | %{yumdb_info.installed_by}' --all \
| awk -F'|' ' $2 ~ /user/ && ($3 != 4294967295) { print $1 }' \
| sort -u > pkgs_a.lst
Друга умова awk використовується для виключення пакунків, які були встановлені інсталятором. Ідентифікатор користувача інсталятора, мабуть, зберігався як 4294967295 - альтернативно, ви можете написати щось подібне ($3 == 0 || $3 == your-user-id)
.
Зауважте, що ця команда працює на Fedora до випуску 21 - але, наприклад, не на випуск 23, оскільки команду repoquery
було замінено на dnf repoquery
. І dnf repoquery
не розуміє %{yumdb_info.reason}
тег.
repoquery ...
: "Неправильний запит yumdb 'причина' для встановленого pkg: HandBrake-cli-0.9.5-1.fc14.x86_64"