Fedora на самом деле очень прост (хотя не легкий) разветвить, или "сделать ремикс", как они называют его. repo определения находятся в fedora-release
. Конфигурации упаковываются с самими приложениями, таким образом, необходимо будет восстановить их от SRPM. После того как Вы собрали пакеты, из которых Вы хотите создать свое ветвление, Вы работаете createrepo
превратить их в фактический repo. Можно затем использовать инструменты, перечисленные в Wiki для генерации медиа от repo.
Начиная с Fedora 26, Dnf repoquery
поддержки подкоманды имеют новую опцию для списка всех установленных пользователями пакетов:
$ dnf repoquery --qf '%{name}' --userinstalled \
| grep -v -- '-debuginfo$' \
| grep -v '^\(kernel-modules\|kernel\|kernel-core\|kernel-devel\)$' > pkgs_a.lst
В отличие от других методов, это также перечисляет все debuginfo пакеты. Дополнительный grep в вышеупомянутом примере фильтрует их.
Устанавливать список на хосте B:
$ < pkgs_a.lst xargs dnf -y install
С недавними версиями Dnf (например, Fedora> = 23), база данных пакета может быть запрошена для установленных имен пакета пользователя с помощью Python Dnf API:
$ 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 выходами (приблизительно от 2015-11), следующие проблемы релевантны):
В более старых системах Fedora, где Dnf, API Dnf и dnf history userinstalled
не доступны, можно использовать repoquery вместо этого, например:
$ 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}
тег.
Самый легкий путь, и это работало, в течение долгого времени:
yum-debug-dump => gives file.
yum-debug-restore <file-from-debug-dump>
... который работает во многом как получить/установить выборы dpkg команда, AIUI. Также обратите внимание, что при воспроизведении истории, можно использовать:
yum history addon-info last saved_tx => gives file
yum load-tx <file-from-addon-info>
... вместо того, чтобы иметь необходимость проанализировать его самостоятельно.
Вдохновленный ответом slm я придумал следующее yum history
основанное решение:
Получите всю подробную историю на всех вкусных транзакциях установки (т.е. никакие обновления), исключая те execited как часть начальных действий установщика (транзакции 1 и 2 в моей системе, приписанной пользователю 'Система'):
$ yum history list all | awk -F'|' \
'$4 ~ /Install/ && $2 !~ /System/ {print $1}' \
| xargs yum history info > yum_history
Фильтр явно установил пакеты и отключил префиксы версии.
$ < yum_history grep '[^-]\<Install\>' | \
awk '{ print $2 }' \
| sed 's/\(-[0-9]\+:\|-[0-9]\+\.[0-9]\|-[0-9]\+-\|-[0-9]\+git\).\+\(\.fc1[1-7]\.\|\.noarch\).*$//' \
| sort > hist_pkg_list
Ужасное регулярное выражение необходимо таким образом, что все виды суффиксов версии подобраны.
Результаты выглядят довольно хорошо в моей системе.
Сравнение с repoquery подходом (в моей системе):
method # packages ――――――――――――――――――――――――― repoquery 569 repoquery-2nd 216 yum history 214
(Я передал результаты repoquery по каналу через вид-u),
Почему там различия? Поскольку repoquery включает все пакеты от транзакций 1 и 2, т.е. все пакеты, которые были установлены установщиком Fedora. Это объясняет, почему repoquery включает упомянутый Xorg-11-пакетов - drv-mga и друзья.
Сравнение repoquery-2-го и вкусная история показывает, что repoquery-2-й более точно - это не включает, некоторые уже удалили пакеты. Кроме того, это включает некоторых (2 в моей системе) пакеты от 'вкусных '-операций обновления, это кажется.
Вышеупомянутый основанный на истории метод только перечисляет все явно установленные пакеты за полное время жизни системы. Это не балансирует те пакеты, которые были удалены в более поздней транзакции. Таким образом этот метод нужен в некотором ручном курировании результатов и должен только использоваться в системах, были repoquery
не доступно.
У меня есть более старая версия Fedora (14), таким образом, моя конфетка включает менее многофункциональную версию yum
, но Вы могли бы хотеть смотреть на yum history
функция. Я полагаю, что можно получить информацию, которую Вы ищете от той команды.
$ sudo yum history list
Loaded plugins: langpacks, presto, refresh-packagekit
Adding en_US to language list
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
862 | System <unset> | 2013-07-12 18:00 | Install | 1
861 | System <unset> | 2013-07-09 03:11 | Install | 1
860 | System <unset> | 2013-07-01 13:40 | Install | 1
859 | System <unset> | 2013-06-29 22:07 | Install | 1
858 | System <unset> | 2013-06-25 22:33 | Install | 1 P<
857 | System <unset> | 2013-06-23 22:28 | Update | 1 >E
856 | System <unset> | 2013-06-23 21:33 | Install | 1
...
Можно вернуться к самой первой транзакции путем передачи списка чисел к yum history list
:
$ sudo yum history list `seq 1 10`
Loaded plugins: langpacks, presto, refresh-packagekit
Adding en_US to language list
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
10 | Sam M. (local) <saml> | 2010-12-18 23:23 | Install | 2
9 | Sam M. (local) <saml> | 2010-12-18 23:15 | Install | 38
8 | Sam M. (local) <saml> | 2010-12-18 23:12 | Install | 1
7 | Sam M. (local) <saml> | 2010-12-18 23:09 | Install | 1 <
6 | Sam M. (local) <saml> | 2010-12-18 22:37 | Install | 1 >
5 | Sam M. (local) <saml> | 2010-12-18 21:57 | Install | 1
4 | System <unset> | 2010-12-18 21:21 | Install | 5
3 | System <unset> | 2010-12-18 21:18 | Install | 4
2 | System <unset> | 2010-12-18 21:10 | Install | 3
1 | System <unset> | 2010-12-18 19:14 | Install | 1189
Следующее покажет Вам, что было установлено как часть 1-й вкусной транзакции:
$ sudo yum history info 1 | less
Loaded plugins: langpacks, presto, refresh-packagekit
Adding en_US to language list
Transaction ID : 1
Begin time : Sat Dec 18 19:14:05 2010
Begin rpmdb : 0:da39a3ee5e6b4b0d3255bfef95601890afd80709
End time : 19:42:43 2010 (1718 seconds)
End rpmdb : 1189:8c21e9e377c3ebdee936916208f74232d5d6235f
User : System <unset>
Return-Code : Success
Transaction performed with:
Packages Altered:
Dep-Install ConsoleKit-0.4.2-3.fc14.x86_64
Dep-Install ConsoleKit-libs-0.4.2-3.fc14.x86_64
Dep-Install ConsoleKit-x11-0.4.2-3.fc14.x86_64
Dep-Install GConf2-2.31.91-1.fc14.x86_64
Dep-Install GConf2-gtk-2.31.91-1.fc14.x86_64
Dep-Install ModemManager-0.4-4.git20100720.fc14.x86_64
Install NetworkManager-1:0.8.1-10.git20100831.fc14.x86_64
Dep-Install NetworkManager-glib-1:0.8.1-10.git20100831.fc14.x86_64
Install NetworkManager-gnome-1:0.8.1-10.git20100831.fc14.x86_64
Install NetworkManager-openconnect-0.8.1-1.fc14.x86_64
Заметьте, как вкусные отчеты, был ли пакет явно установлен или установлен, потому что он был необходим зависимости. Вы могли проанализировать эту информацию и получить Ваш список пакетов, которые были явно установлены.
yum history
идея, это также сравнивает результаты с repoquery
основанный метод. Как побочный эффект я расширил свой ответ repoquery.
– maxschlepzig
13.07.2013, 22:20
Что я сделал (забыл подробности, а я ленивый бездельник, так что...)
Получить все установленные пакеты: rpm -qa > file
Используйте sed(1)
, чтобы избавиться от номеров версий и тому подобного (сохраните архитектуру, если требуется). Это потребовало нескольких итераций, чтобы добиться нужного результата, вы хотите заменить последнюю строку -[0-9.]-[0-9].fc23
или подобную на ничто, но есть и забавные "номера" версий.
После установки, как обычно, выполните yum -y install $(<файл)
(или dnf
, как требуется).
Вы получите некоторые выпадения пакетов, которые больше не существуют, или изменили название, или были заменены другими.
Чтобы просмотреть пакеты , которые вы установили,попробуй этот один -вкладыш:
alias yum-userinstall="yumdb search command_line install* | grep command_line\ = | sort | uniq | sed -r -e 's/command_line = (.*)/yum \1/g'"
Результат:
# yum-userinstall
yum install bind-utils
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install lsof
yum install nano
yum install nfs-utils libnfsidmap
yum install nmap-ncat
yum install openscap-scanner
yum install open-vm-tools
PS1 :не показывает зависимости
PS2 :отсортировано по алфавиту
PS3 :не отображается, удалили ли вы пакет позже
repoquery ...
: "Недопустимые yumdb querytag 'рассуждают' для установленного pkg: HandBrake-cli-0.9.5-1.fc14.x86_64" – slm♦ 13.07.2013, 18:41yum localinstall ...
. У меня было изрядное количество пакетов, которые попали в тот лагерь все же. – slm♦ 13.07.2013, 19:35repoquery --installed --qf '%{n} - %{yumdb_info.reason}' --all 2>&1|grep -v "user$"|grep -v "dep$" |wc -l
возвращенный 90 пакетов. – slm♦ 13.07.2013, 19:39