
У меня есть набор пакетов rpm. Я собираюсь установить их все сразу, но перед этим я хочу получить порядок, в котором они будут установлены. Я знаю, что если я предоставлю их все менеджеру пакетов в случайном порядке, менеджер определит зависимости между ними и установит их в правильном порядке. Как мне получить этот порядок?
решение1
Вы можете использовать отладочный вывод rpm с опцией --test. Это означает, что пакеты не будут установлены, но вывод stderr будет содержать внутренний порядок, например:
D: ========== tsorting packages (order, #predecessors, #succesors, depth)
D: 0 0 2 1 +cla-v1-r45.0.0.x86_64
D: 1 0 11 2 +ace-6.5.15-1.x86_64
D: 2 0 1 3 +ace-kokyu-6.5.15-1.x86_64
D: 3 0 1 3 +ace-xml-6.5.15-1.x86_64
D: 4 0 7 4 +tao-2.5.15-1.x86_64
D: 5 0 0 5 +tao-cosconcurrency-2.5.15-1.x86_64
D: 6 0 0 5 +tao-cosevent-2.5.15-1.x86_64
D: 7 0 0 5 +tao-cosnaming-2.5.15-1.x86_64
D: 8 0 0 5 +tao-cosnotification-2.5.15-1.x86_64
D: 9 0 0 5 +tao-costrading-2.5.15-1.x86_64
D: 10 0 0 5 +tao-rtevent-2.5.15-1.x86_64
D: 11 0 0 5 +tao-utils-2.5.15-1.x86_64
D: 12 0 0 3 +ace-gperf-6.5.15-1.x86_64
D: 13 0 0 1 +mpc-6.5.15-1.x86_64
D: 14 0 0 1 +PCMX-6.0A90-02.x86_64
D: installing binary packages
Затем используйте какой-нибудь фильтр для его разбора, например awk
rpm -Uvv --test *.rpm 2>&1 | awk 'BEGIN { FS = "+" }; /D: ========== tsorting packages/,/D: installing binary packages/ { printf "%s ",$2 }'
решение2
yum
не имеет возможности распечатать этот заказ (см.руководство), и нет общеизвестного интерфейса к его базе данных и библиотекам, которые могут это сделать. Поэтому решение должно бытьснаружи yum
. Вы всегда можете попросить yum
распечатать полный список дополнительных зависимостей пакета, но эта информация не очень полезна для получениязаказв котором пакеты должны быть установлены. Проще спросить rpm
.
В принципе, можно написать скрипт, который использует вывод
rpm -qpR package-file
для каждогопакет-файл, чтобы получить зависимости и упорядочить их по шагам, например,
- пакеты, которые не зависят ни от одного из других, то
- пакеты, которые зависят от одного или нескольких предыдущих (и, возможно, от других вэтотгруппа) и
- и так далее, пока не останется ни одного пакета
(Я сделал наоборот - искал пакеты дляудалять, и это сложно, но выполнимо).