yumdownloader baixa apenas rpms resolvidos em i686

4

Tendo o CentOS 6.3 instalado em x86_64.

Abaixo, demonstrarei meu problema usando o pacote parted.

Em exibição:

yumdownloader --destdir=001 --assumeyes --resolve parted

Como resultado, os seguintes rpms são:

ls -1 001/
device-mapper-libs-1.02.74-10.el6_3.3.i686.rpm
libblkid-2.17.2-12.7.el6_3.i686.rpm
libselinux-2.0.94-5.3.el6.i686.rpm
libsepol-2.0.41-4.el6.i686.rpm
libudev-147-2.42.el6.i686.rpm
libuuid-2.17.2-12.7.el6_3.i686.rpm
ncurses-libs-5.7-3.20090208.el6.i686.rpm
parted-2.1-18.el6.i686.rpm
parted-2.1-18.el6.x86_64.rpm
readline-6.0-4.el6.i686.rpm

Se eu examinar a dependência da versão x86_64 do parted, vejo:

rpm -qp --requires 001/parted-2.1-18.el6.x86_64.rpm

/bin/sh
...
libblkid.so.1()(64bit)
libblkid.so.1(BLKID_2.15)(64bit)
libblkid.so.1(BLKID_2.17)(64bit)
...

Portanto, espero que a versão x86_64 de libblkid seja baixada também.

Então, como tanto o i686 quanto a versão x86_64 de parted foram baixados, mas os rpms resolvidos são apenas i686?

    
por dimba 21.01.2013 / 08:04

1 resposta

3

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.

    
por 23.01.2013 / 19:53