O comando yumdownloader --resolve
nem sempre faz o download da primeira camada dos pacotes necessários, sem falar das dependências recursivas. O comando repoquery
faz um trabalho melhor ao determinar os pacotes necessários, embora também tenha um limite de recursão.
Para resolver o problema em que o yumdownloader faz o download apenas de rpms resolvidos pelo i686, use o comando repoquery --requires --recursive
para obter a lista de pacotes necessários e canalize essa lista para o comando yumdownloader
para baixar os pacotes. Por exemplo, para baixar o pacote parted
e sua primeira camada de dependências:
/usr/bin/repoquery --requires --recursive --resolve --pkgnarrow=all --qf "%{name}" parted | sort | uniq | xargs -r yumdownloader
No meu sistema RHEL 6.4, o comando acima baixou o i686 (onde aplicável) e as versões x86_64 dos pacotes necessários:
# ls -1
bash-4.1.2-14.el6.x86_64.rpm
device-mapper-libs-1.02.77-9.el6.i686.rpm
device-mapper-libs-1.02.77-9.el6.x86_64.rpm
glibc-2.12-1.107.el6.i686.rpm
glibc-2.12-1.107.el6.x86_64.rpm
info-4.13a-8.el6.x86_64.rpm
libblkid-2.17.2-12.9.el6_4.3.i686.rpm
libblkid-2.17.2-12.9.el6_4.3.x86_64.rpm
libselinux-2.0.94-5.3.el6.i686.rpm
libselinux-2.0.94-5.3.el6.x86_64.rpm
libsepol-2.0.41-4.el6.i686.rpm
libsepol-2.0.41-4.el6.x86_64.rpm
libuuid-2.17.2-12.9.el6_4.3.i686.rpm
libuuid-2.17.2-12.9.el6_4.3.x86_64.rpm
ncurses-libs-5.7-3.20090208.el6.i686.rpm
ncurses-libs-5.7-3.20090208.el6.x86_64.rpm
parted-2.1-19.el6.i686.rpm
parted-2.1-19.el6.x86_64.rpm
readline-6.0-4.el6.i686.rpm
readline-6.0-4.el6.x86_64.rpm
Embora este seja um bom começo, a ausência do pacote glibc-common indica que a lista de pacotes baixados ainda está incompleta. Para fazer o download de uma lista mais completa dos pacotes necessários, é necessário um conjunto de comandos que chama repoquery duas vezes, como feito aqui:
/usr/bin/repoquery --requires --recursive --resolve --pkgnarrow=all --qf "%{name}" parted | sort | uniq | xargs rpm -q --requires | sort | uniq | awk '{print $1}' | grep -v rpmlib | xargs -n1 -r -i{} yum -q resolvedep "{}" | sort | uniq | xargs -r -n1 /usr/bin/repoquery --requires --recursive --resolve --pkgnarrow=all --qf "%{name}" | sort | uniq | xargs -r -n 1 yumdownloader -q
Os pacotes baixados por esse comando incluem o glibc-common e vários outros que perdemos na primeira vez:
# ls -1
basesystem-10.0-4.el6.noarch.rpm
bash-4.1.2-14.el6.x86_64.rpm
device-mapper-1.02.77-9.el6.x86_64.rpm
device-mapper-libs-1.02.77-9.el6.i686.rpm
device-mapper-libs-1.02.77-9.el6.x86_64.rpm
filesystem-2.4.30-3.el6.x86_64.rpm
glibc-2.12-1.107.el6.i686.rpm
glibc-2.12-1.107.el6.x86_64.rpm
glibc-common-2.12-1.107.el6.x86_64.rpm
info-4.13a-8.el6.x86_64.rpm
libblkid-2.17.2-12.9.el6_4.3.i686.rpm
libblkid-2.17.2-12.9.el6_4.3.x86_64.rpm
libcap-2.16-5.5.el6.i686.rpm
libcap-2.16-5.5.el6.x86_64.rpm
libgcc-4.4.7-3.el6.i686.rpm
libgcc-4.4.7-3.el6.x86_64.rpm
libselinux-2.0.94-5.3.el6.i686.rpm
libselinux-2.0.94-5.3.el6.x86_64.rpm
libsepol-2.0.41-4.el6.i686.rpm
libsepol-2.0.41-4.el6.x86_64.rpm
libudev-147-2.46.el6.i686.rpm
libudev-147-2.46.el6.x86_64.rpm
libuuid-2.17.2-12.9.el6_4.3.i686.rpm
libuuid-2.17.2-12.9.el6_4.3.x86_64.rpm
ncurses-base-5.7-3.20090208.el6.x86_64.rpm
ncurses-libs-5.7-3.20090208.el6.i686.rpm
ncurses-libs-5.7-3.20090208.el6.x86_64.rpm
nss-softokn-freebl-3.12.9-11.el6.i686.rpm
nss-softokn-freebl-3.12.9-11.el6.x86_64.rpm
parted-2.1-19.el6.i686.rpm
parted-2.1-19.el6.x86_64.rpm
readline-6.0-4.el6.i686.rpm
readline-6.0-4.el6.x86_64.rpm
setup-2.8.14-20.el6.noarch.rpm
tzdata-2013b-1.el6.noarch.rpm
udev-147-2.46.el6.x86_64.rpm
util-linux-ng-2.17.2-12.9.el6_4.3.i686.rpm
util-linux-ng-2.17.2-12.9.el6_4.3.x86_64.rpm
zlib-1.2.3-29.el6.i686.rpm
zlib-1.2.3-29.el6.x86_64.rpm
Isto é provavelmente muito mais pacotes do que você precisa, mas é um conjunto mais completo e inclui os pacotes de 64 bits que você esperava.