Відповіді:
Ви можете використовувати repotrack
замість цього:
repotrack -a x86_64 -p /repos/Packages [packages]
На жаль, є помилка з -a
прапором (аркою). Він завантажить i686 та x86_64.
Ось як це виправити:
if opts.arch:
#archlist = []
#archlist.extend(rpmUtils.arch.getArchList(opts.arch))
archlist = opts.arch.split(',') # Change to this
else:
archlist = rpmUtils.arch.getArchList()
Ви можете використовувати repoquery
для отримання списку групових пакетів:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups]
Що ви можете подати у репортаж:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups] | xargs repotrack -a x86_64 -p /repos/Packages
--recursive
параметр до команди repoquery, щоб змусити її працювати рекурсивно.
yum-utils
проект вище . Причина, по якій він завантажує більше пакетів, ніж очікувалося, полягає в тому, що функція rpmUtils.arch.getArchList()
повертає всі сумісні архітектури для даної. Вона включає, наприклад, noarch
архітектуру, яка може знадобитися x86_64
пакетам. Ви можете перевірити джерело: yum.baseurl.org/gitweb?p=yum.git;a=blob;f=rpmUtils/…
За інформацією кожного, yumdownloader
не виконує роботу. Для тих, хто має певний досвід управління пакунками з `yum, природно очікувати, що наступний командний рядок буде рекурсивно завантажувати RPM пакету та всі його залежності:
yumdownloader --resolve <package>
Але це не так. Можливо, він друкує залежності першого рівня або ті, які ще не встановлені. Я не впевнений.
Ось один метод, який працює на CentOS 6.5. Виконайте вказівки, щоб встановити плагін для завантаження, yum
як це надано Red Hat . В основному, на CentOS 6.x:
$ sudo yum install yum-plugin-downloadonly.noarch
Потім використовуйте плагін у поєднанні з --installroot
перемикачем yum
. Це не дозволяє yum
вирішити, а потім пропустити залежності, які вже встановлені в системі.
sudo yum install \
--installroot=</path/to/tmp_dir> \
--downloadonly --downloaddir <rpm_dir> <package>
Ви б завантажили RPMs пакета, <package>
і все його залежності в каталозі <rpm_dir>
. Наприклад, з Git:
$ mkdir root rpms
$ sudo yum install --installroot=/home/roy/root \
--downloadonly --downloaddir rpms/ git
sudo yum install yum-plugin-downloadonly.noarch
каже, No package yum-plugin-downloadonly.noarch available.
що робити?
yum search yumdownloader
повертаєтьсяyum-utils.noarch
Cannot find a valid baseurl for repo: base/$releasever/x86_64
коли додаю --installroot
прапор.
Cannot find a valid baseurl...
проблеми на Centos 7 з розчином по цьому посиланню : Додати --releasever=/
параметр
Я усвідомлюю, що нитка стара, але у випадку, якщо хтось наткнеться на це, ви можете використати yum для досягнення бажаної поведінки.
Спочатку встановіть плагін для завантаження (інструкції для RHEL): (RHEL5)
$ yum install yum-downloadonly
(RHEL6)
$ yum install yum-plugin-downloadonly
Далі виконайте команду наступним чином:
$ yum install --downloadonly --downloaddir=/some/arbitrary/path [package]
Якщо ви проігноруєте, --downloaddir
yum автоматично завантажується в/var/cache/yum
Тому, якщо вам не потрібно спеціально використовувати yumdownloader, я думаю, що це був би найпростіший спосіб досягти мети.
Якщо ви з майбутнього (Fedora 23+), де yum замінюється dnf, цей сценарій bash може бути корисним.
rpmЗавантажувач:
#!/bin/sh
set -xev
rm -fr packages
#dnf download $1 --destdir packages
export PATH=.:$PATH
echo $PWD
DEPS=$(rpmResolver $1)
dnf download $DEPS --destdir packages
rm -fr ${1}-dependencies
mv packages ${1}-dependencies
rpmResolver:
#!/bin/sh
goal=$1
deps=$(rpm -q --qf '[%{REQUIRENAME}\n]' $goal | egrep -v '^(rpmlib|rtld|config|/)')
goals=
while true; do
subs=$(rpm -q --qf '%{NAME}\n' --whatprovides $deps | sort -u | tr '\n' ' ')
if [ ."$subs" = ."$goals" ]; then
echo -n "$goals "
exit 0
fi
goals=$(echo $goals $subs | tr ' ' '\n' | sort -u | tr '\n' ' ')
for sub in $subs; do
subdeps=$(rpm -q --qf '[%{REQUIRENAME}\n]' $sub | egrep -v '^(rpmlib|rtld|config|/)')
deps=$(echo $deps $subdeps | sort -u)
done
done
Я виявив, що на практиці будувати репо, як це важко підтримувати. Ми створили це репо, оскільки:
Проблеми, які ми можемо зустріти:
Врешті-решт, кращим рішенням нашої проблеми було прокси офіційних репостів та кешування пакетів, які ми використовували. Це добре працює, оскільки:
Ми використовували Nginx та вбудовану підтримку проксі.
Спираючись на відповідь Луки та коментарі ...
На цей лист repotrack
буде відповідати всім з наступних архітектур , коли x86_64
вказано: x86_64
, athlon
, i686
, i586
, i486
, i386
, і noarch
.
Для моїх цілей я зацікавлений тільки в x86_64
і noarch
пакетах, і я знаю , що моє розподіл не має яких - або athlon
пакетів.
Наступна команда отримує список URL-адрес пакунків, фільтрує i?86
архітектури та виводить назви пакетів під час їх завантаження:
repotrack --arch=x86_64 --urls gs1000-server \
| sed '/\.i[3-6]86\.rpm$/d' \
| xargs -I {} sh -c 'curl -s -O {}; echo {} | rev | cut -d '/' -f 1 | rev'
Зауважте, що repotrack
це не попереджає вас, якщо він не може знайти пакет, який задовольняє залежність у ваших включених репостах. Це мовчки пропускає його.
Також спробуйте
repoquery -R --resolve --recursive <name> | xargs -r yumdownloader
наприклад:
repoquery -R --resolve --recursive firefox | xargs -r yumdownloader
--requires
--resolve
опція repoquery не працює рекурсивно для deps.