Error: Missing Dependency: glibc

I am running virtualmin/centos 5 on an Amazon m1.medium instance (recently upgraded from m1.small).

I am trying to update my packages - both standard Linux and virtualmin packages. However, just about everything is failing with this error message :-

glibc-headers-2.5-42.el5_4.2.i386 from installed has depsolving problems --> Missing Dependency: glibc = 2.5-42.el5_4.2 is needed by package glibc-headers-2.5-42.el5_4.2.i386 (installed) nscd-2.5-42.el5_4.2.i386 from installed has depsolving problems --> Missing Dependency: glibc = 2.5-42.el5_4.2 is needed by package nscd-2.5-42.el5_4.2.i386 (installed) Error: Missing Dependency: glibc = 2.5-42.el5_4.2 is needed by package glibc-headers-2.5-42.el5_4.2.i386 (installed) Error: Missing Dependency: glibc = 2.5-42.el5_4.2 is needed by package nscd-2.5-42.el5_4.2.i386 (installed) You could try using --skip-broken to work around the problem You could try running: package-cleanup --problems package-cleanup --dupes rpm -Va --nofiles --nodigest

.. install failed!

I have tried the above suggestions (--skip-broken, package-cleanup --problems, package-cleanup --dupes, rpm -Va --nofiles --nodigest) and similar things I could find on the web, but I can't get around this problem.

Any suggestions would be very welcome!

Status: 
Active

Comments

Howdy -- what output do you get if you run this command:

rpm -qa | grep glibc

And what happens if you run this:

yum install glibc

rpm -qa | grep glibc gives :- glibc-2.5-42.el5_4.2
glibc-common-2.5-42.el5_4.2
glibc-headers-2.5-42.el5_4.2
glibc-devel-2.5-42.el5_4.2
yum install glibc gives :- yum install glibc
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.us.leaseweb.net
* extras: mirror.us.leaseweb.net
* updates: mirror.symnds.com
Setting up Install Process
Resolving Dependencies
--> Running transaction check
--> Processing Dependency: glibc = 2.5-42.el5_4.2 for package: glibc-headers
--> Processing Dependency: glibc = 2.5-42.el5_4.2 for package: nscd
--> Processing Dependency: glibc = 2.5-42.el5_4.2 for package: glibc-devel
---> Package glibc.i686 0:2.5-81.el5_8.2 set to be updated
--> Processing Dependency: glibc-common = 2.5-81.el5_8.2 for package: glibc
---> Package glibc.x86_64 0:2.5-81.el5_8.2 set to be updated
--> Running transaction check
--> Processing Dependency: glibc = 2.5-42.el5_4.2 for package: glibc-headers
--> Processing Dependency: glibc = 2.5-42.el5_4.2 for package: nscd
---> Package glibc-common.x86_64 0:2.5-81.el5_8.2 set to be updated
---> Package glibc-devel.i386 0:2.5-81.el5_8.2 set to be updated
--> Processing Dependency: glibc-headers = 2.5-81.el5_8.2 for package: glibc-devel
--> Running transaction check
--> Processing Dependency: glibc = 2.5-42.el5_4.2 for package: glibc-headers
--> Processing Dependency: glibc = 2.5-42.el5_4.2 for package: nscd
---> Package glibc-headers.x86_64 0:2.5-81.el5_8.2 set to be updated
--> Finished Dependency Resolution
glibc-headers-2.5-42.el5_4.2.i386 from installed has depsolving problems
  --> Missing Dependency: glibc = 2.5-42.el5_4.2 is needed by package glibc-headers-2.5-42.el5_4.2.i386 (installed)
nscd-2.5-42.el5_4.2.i386 from installed has depsolving problems
  --> Missing Dependency: glibc = 2.5-42.el5_4.2 is needed by package nscd-2.5-42.el5_4.2.i386 (installed)
Error: Missing Dependency: glibc = 2.5-42.el5_4.2 is needed by package glibc-headers-2.5-42.el5_4.2.i386 (installed)
Error: Missing Dependency: glibc = 2.5-42.el5_4.2 is needed by package nscd-2.5-42.el5_4.2.i386 (installed)
You could try using --skip-broken to work around the problem
You could try running: package-cleanup --problems
                        package-cleanup --dupes
                        rpm -Va --nofiles --nodigest

Those are some pretty odd errors you're seeing -- it's looking as if you're seeing a conflict of 32bit and 64 bit packages.

What do these commands output:

uname -a
rpm -qa --qf "%{n}-%{arch}\n" | grep -v noarch | grep -v x86_64
rpm -qa --qf "%{n}-%{arch}\n" | grep glibc

I feared as much - re 32 and 64 bit. I don't know how this has happened. I've always consciously used 32 bit...

uname -a gives :-
===========
Linux 38tivity 2.6.16.33-xenU #2 SMP Wed Aug 15 17:27:36 SAST 2007 x86_64 x86_64 x86_64 GNU/Linux

rpm -qa --qf "%{n}-%{arch}\n" | grep -v noarch | grep -v x86_64 gives :-
=============================================
zlib-i386
libattr-i386
beecrypt-i386
libcap-i386
hesiod-i386
perl-String-CRC32-i386
m4-i386
procmail-i386
libXdmcp-i386
libXi-i386
libXinerama-i386
libXt-i386
aspell-en-i386
iptstate-i386
attr-i386
gpm-i386
talk-i386
ibmasm-i386
eject-i386
libaio-i386
vconfig-i386
libuser-i386
pygobject2-i386
curl-i386
mtools-i386
GConf2-i386
bluez-gnome-i386
which-i386
pcmciautils-i386
setuptool-i386
irda-utils-i386
rpm-libs-i386
compat-gcc-34-g77-i386
jre-i586
gpg-pubkey-(none)
unixODBC-i386
libXpm-i386
centos-release-i386
mailman-i386
audiofile-i386
lame-i386
SDL-i386
giflib-i386
xvidcore-devel-i386
amrnb-i386
amrwb-i386
libXext-devel-i386
libXt-devel-i386
perl-version-i386
libmad-i386
libdv-i386
svgalib-i386
libmng-i386
freeglut-i386
libsndfile-i386
libtiff-i386
xorg-x11-font-utils-i386
libpng-devel-i386
libjpeg-devel-i386
xorg-x11-xfs-i386
libglade2-i386
libxslt-i386
gamin-i386
shared-mime-info-i386
gnome-mount-i386
php-cli-i386
php-pgsql-i386
php-mysql-i386
bluez-libs-i386
dnsmasq-i386
dbus-i386
dbus-python-i386
cups-i386
ORBit2-i386
amtu-i386
audit-i386
autofs-i386
bzip2-i386
ccid-i386
coolkey-i386
libgomp-i386
cpuspeed-i386
cryptsetup-luks-i386
cyrus-sasl-i386
device-mapper-i386
sgpio-i386
dos2unix-i386
e2fsprogs-i386
enca-i386
faad2-devel-i386
filesystem-i386
ftp-i386
glib2-i386
gtk2-i386
initscripts-i386
iptables-ipv6-i386
kernel-i686
kudzu-i386
libX11-devel-i386
libpcap-i386
libsemanage-i386
libxml2-i386
device-mapper-event-i386
microcode_ctl-i386
mkinitrd-i386
mtr-i386
net-tools-i386
numactl-i386
pam-i386
pango-i386
pciutils-i386
perl-DBI-i386
perl-XML-Parser-i386
libselinux-utils-i386
procps-i386
quota-i386
ruby-docs-i386
stunnel-i386
tcp_wrappers-i386
tk-i386
udev-i386
util-linux-i386
vixie-cron-i386
ypbind-i386
kpartx-i386
glibc-i686
kernel-i686
openssh-i386
rsync-i386
perl-HTML-Parser-i386
perl-Net-DNS-i386
ruby-i386
ruby-ri-i386
caching-nameserver-i386
perl-Net-SSLeay-i386
perl-Crypt-OpenSSL-RSA-i386
coreutils-i386
libstdc++-i386
libstdc++-devel-i386
gcc-c++-i386
gcc-gnat-i386
mysql-i386
postgresql-i386
mod_dav_svn-i386
php-xml-i386
popt-i386
libtermcap-i386
ncurses-i386
sed-i386
atk-i386
libICE-i386
slang-i386
wireless-tools-i386
aspell-i386
time-i386
libIDL-i386
libdrm-i386
libXrender-i386
libXfixes-i386
libXrandr-i386
libXres-i386
startup-notification-i386
libevent-i386
anacron-i386
jwhois-i386
nano-i386
mgetty-i386
tree-i386
pam_smb-i386
pam_passwdqc-i386
finger-i386
setarch-i386
symlinks-i386
rdist-i386
rhpl-i386
passwd-i386
tar-i386
libXft-i386
gettext-i386
python-elementtree-i386
at-i386
libwnck-i386
libnotify-i386
portmap-i386
kernel-i686
apmd-i386
yp-tools-i386
mkbootdisk-i386
rp-pppoe-i386
usbutils-i386
pam_ccreds-i386
pam_pkcs11-i386
readahead-i386
lsof-i386
rpm-python-i386
libXtst-i386
compat-libf2c-34-i386
libart_lgpl-i386
zlib-devel-i386
flex-i386
compat-libstdc++-296-i386
bison-i386
syslog-ng-i386
gpg-pubkey-(none)
gpg-pubkey-(none)
postfix-i386
gpg-pubkey-(none)
lzo2-i386
libpng-i386
libbonobo-i386
libgnomecanvas-i386
gnome-mime-data-i386
libdaemon-i386
php-pdo-i386
SysVinit-i386
apr-i386
audit-libs-i386
audit-libs-python-i386
authconfig-i386
avahi-glib-i386
binutils-i386
bzip2-libs-i386
pcsc-lite-i386
centos-release-notes-i386
conman-i386
cracklib-i386
crash-i386
cvs-i386
cyrus-sasl-gssapi-i386
cyrus-sasl-md5-i386
db4-i386
dhclient-i386
dmidecode-i386
dmraid-i386
dosfstools-i386
e2fsprogs-libs-i386
ed-i386
emacs-common-i386
ethtool-i386
ffmpeg-i386
ffmpeg-devel-i386
file-i386
findutils-i386
fontconfig-i386
ghostscript-devel-i386
gnupg-i386
grep-i386
gzip-i386
iproute-i386
iptables-i386
iputils-i386
kbd-i386
ksh-i386
less-i386
libX11-i386
libacl-i386
libnl-i386
libselinux-i386
libsepol-i386
libutempter-i386
libvorbis-i386
libxml2-python-i386
lvm2-i386
make-i386
mcstrans-i386
mencoder-i386
hmaccalc-i386
mlocate-i386
mplayer-i386
net-snmp-i386
nfs-utils-lib-i386
openldap-i386
fipscheck-i386
pam-devel-i386
paps-i386
patch-i386
pcre-i386
perl-BSD-Resource-i386
policycoreutils-i386
ppp-i386
psacct-i386
rdate-i386
redhat-lsb-i386
rmt-i386
ruby-mode-i386
sqlite-i386
sudo-i386
system-config-securitylevel-tui-i386
tcl-devel-i386
tcpdump-i386
telnet-i386
tmpwatch-i386
unix2dos-i386
usermode-i386
vim-minimal-i386
wget-i386
xorg-x11-proto-devel-i386
cups-libs-i386
glibc-common-i386
kernel-headers-i386
libtool-i386
openssh-server-i386
samba-common-i386
perl-Digest-SHA-i386
perl-NetAddr-IP-i386
NetworkManager-glib-i386
cpio-i386
libgcj-i386
libobjc-i386
mysql-server-i386
perl-DBD-Pg-i386
postgresql-server-i386
subversion-i386
libc-client-i386
webalizer-i386
mod_python-i386
procmail-wrapper-i386
mod_ssl-i386
mod_fcgid-i386
dovecot-i386
mod_perl-i386
libmcrypt-i386
alsa-lib-i386
mesa-libGL-i386
a52dec-i386
faac-i386
lame-devel-i386
x264-devel-i386
esound-i386
mesa-libGLU-i386
alsa-lib-devel-i386
libogg-i386
xvidcore-i386
cppunit-i386
libXau-devel-i386
libid3tag-i386
imlib2-i386
mesa-libGL-devel-i386
mesa-libGLU-devel-i386
libXrender-devel-i386
libXrandr-devel-i386
libSM-devel-i386
SDL-devel-i386
proftpd-i386
libmpcdec-i386
speex-i386
fribidi-i386
libXv-i386
libXvMC-i386
directfb-i386
lcms-i386
qt-i386
openal-i386
libcaca-i386
flac-i386
twolame-i386
libXfont-i386
ttmkfdir-i386
libtiff-devel-i386
bzip2-devel-i386
chkfontpath-i386
libcroco-i386
lcms-devel-i386
gnome-vfs2-i386
libbonoboui-i386
libgnomeui-i386
librsvg2-i386
python-imaging-i386
perl-i386
php-i386
php-devel-i386
php-snmp-i386
php-mcrypt-i386
php-xmlrpc-i386
php-gd-i386
nss-i386
keyutils-libs-i386
cups-libs-i386
krb5-workstation-i386
dbus-libs-i386
dbus-glib-i386
oddjob-libs-i386
avahi-i386
pm-utils-i386
avahi-compat-libdns_sd-i386
dhcdbd-i386
notification-daemon-i386
oddjob-i386
neon-i386
newt-i386
nss_db-i386
ntsysv-i386
perl-Socket6-i386
pkinit-nss-i386
scponly-i386
smartmontools-i386
gamin-python-i386
zip-i386
perl-Digest-SHA1-i386
device-mapper-multipath-i386
glibc-headers-i386
nscd-i386
openssh-clients-i386
ruby-libs-i386
ruby-irb-i386
ruby-devel-i386
ruby-tcltk-i386
bind-i386
bind-utils-i386
perl-Razor-Agent-i386
re2c-i386
acpid-i386
libgnat-i386
libgcj-devel-i386
gcc-i386
gcc-objc-i386
gcc-gfortran-i386
gcc-java-i386
mktemp-i386
libusb-i386
info-i386
gawk-i386
libSM-i386
libgpg-error-i386
libidn-i386
gdbm-i386
libjpeg-i386
libXau-i386
groff-i386
desktop-file-utils-i386
bc-i386
pax-i386
libXext-i386
libXcursor-i386
libXxf86vm-i386
mingetty-i386
mailx-i386
fbset-i386
nc-i386
libgssapi-i386
python-sqlite-i386
MAKEDEV-i386
sysklogd-i386
pinfo-i386
rng-utils-i386
rpm-i386
ifd-egate-i386
man-i386
gmp-i386
compat-gcc-34-i386
imake-i386
mutt-i386
gpg-pubkey-(none)
distcache-i386
perl-Compress-Zlib-i386
libsysfs-i386
httpd-i386
logrotate-i386
perl-DBD-MySQL-i386
freetype-i386
x264-i386
faac-devel-i386
a52dec-devel-i386
freetype-devel-i386
libtheora-i386
dirac-i386
imlib2-devel-i386
libICE-devel-i386
libXdmcp-devel-i386
libdca-i386
cdparanoia-libs-i386
tslib-i386
aalib-i386
arts-i386
libXxf86dga-i386
lirc-i386
libfontenc-i386
libFS-i386
gnome-keyring-i386
libwmf-i386
libgnome-i386
libgsf-i386
php-common-i386
php-mbstring-i386
php-imap-i386
php-odbc-i386
python-i386
nspr-i386
krb5-libs-i386
nss-tools-i386
hal-i386
wpa_supplicant-i386
bluez-utils-i386
acl-i386
apr-util-i386
shadow-utils-i386
bash-i386
cairo-i386
chkconfig-i386
cracklib-dicts-i386
cyrus-sasl-lib-i386
cyrus-sasl-plain-i386
diffutils-i386
dmraid-events-i386
dump-i386
elfutils-libelf-i386
faad2-i386
ffmpeg-libpostproc-i386
firstboot-tui-i386
ghostscript-i386
gnutls-i386
ipsec-tools-i386
irqbalance-i386
libgcrypt-i386
libselinux-python-i386
libvolume_id-i386
lm_sensors-i386
m2crypto-i386
mdadm-i386
nash-i386
module-init-tools-i386
net-snmp-libs-i386
nfs-utils-i386
nss_ldap-i386
fipscheck-lib-i386
pam_krb5-i386
parted-i386
pcsc-lite-libs-i386
pkgconfig-i386
postgresql-libs-i386
psmisc-i386
readline-i386
rsh-i386
tcl-i386
tcsh-i386
traceroute-i386
unzip-i386
yum-metadata-parser-i386
expat-i386
glibc-devel-i386
lftp-i386
openssh-askpass-i386
syslinux-i386
gd-i386
ruby-rdoc-i386
bind-libs-i386
perl-BerkeleyDB-i386
openssl-i686
perl-Encode-Detect-i386
spamassassin-i386
NetworkManager-i386
libgcc-i386
libgfortran-i386
cpp-i386
gcc-objc++-i386
cups-libs-i386
perl-Crypt-SSLeay-i386
sendmail-i386

rpm -qa --qf "%{n}-%{arch}\n" | grep glibc gives :-
================================
glibc-i686
glibc-common-i386
glibc-headers-i386
glibc-devel-i386

Hmm, it looks like you're using a 64 bit kernel there. If it's been your intention to go all 32 bit, is it possible that something got changed during your recent upgrade?

However, rather than checking what 32 bit packages you have installed, maybe we should check for what 64 bit packages you have. What does this output:

rpm -qa --qf "%{n}-%{arch}\n" | grep -v noarch | grep x86_64

Well, that's good news, it's possible that means this may not be too difficult to fix :-)

If you're using a 32 bit system, you'd want to use a 32 bit kernel.

So my suggestion would be to boot into a 32 bit kernel, and continue trying this from there

I believe CentOS uses the kernel to determine what architecture to pull packages from in the repo, so you may get some strange results until your packages and kernel use the same architecture.

That sounds very plausible. It's very late here in the UK but I'll try that approach in the morning and let you know how I got on. Thanks very much indeed to help so far .

Hmmm... This is way out of my comfort zone. I have never done anything like this before and I'm afraid I might completely screw things up.

I have looked at grub, ivh, amazon aki's and ari's. It's all completely new (and scary!) to me.

To summarise: I had a 1.7 GB m1.small 32 bit Amazon EC2 (us-east-1b) instance running 32 bit centos 5. I migrated it to a 4 GB m1.medium instance (because I needed more power), but now it seems to be selecting a 64 bit kernel by default. I think I need to get it to boot into a 32 bit kernel instead - then the packages it tries to update will be 32 bit versions - rather than 64 bit - but it is failing because I have no 64 bit packages installed. (From what I have gleaned from web research, perhaps the most obvious option of simply upgrading centos to 64 bit is not considered a viable option - basically the consensus advice is that you really should start from scratch!...)

Has anyone done anything like this before - forced a 64 bit amazon EC2 machine running 32 bit centos to boot into a 32 bit kernel?

Well, we may need Jamie's advice here, as EC2 isn't my area of expertise.

I do have a few thoughts though --

You can't change the architecture of a running system (whether it's at Amazon or not). If you have a 32 bit system, you'd want to keep a 32 bit system. If you wanted to go 64 bit, you'd want to migrate to a new server.

If your previous EC2 instance was designated as 32 bit, you'd want to find a way to continue using a 32 bit system. Somewhere in Amazon's control panel or API, they should allow you to select what kernel you boot to. It's not like a normal Linux system, and you wouldn't be changing all that from within Grub. You'd somehow need to tell Amazon which kernel to boot.

Amazon does have a facility to choose a kernel (amazon kernel instance = ari) and a ram disk (amazon ramdisk instance = ari) to boot into, but there are literally hundreds of them! I have tried a whole day trying to find out which combination to use - all to no avail. Every kernel/ramdisk combination I have tried - based on web suggestions - has resulted in the machine not booting properly - i.e. hanging. A post said if you use a specific kernel you should not select a ramdisk. I am at a complete loss!

Surely someone is using 32 bit centos on a 64 bit EC2 machine - e.g. something like m1.medium? If so please can you let me know what kernel id and ramdisk id you used?

We discussed your issue during a meeting we had today. A few notes on all that --

  • None of us have attempted upgrading an EC2 instance before. Actually, most of us were surprised that it were possible to do that :-) The general thought was that you'd have to migrate to a new system, rather than upgrading an existing system.

  • Although it's possible to use a 64 bit kernel on a 32 bit system, that's no ideal -- you'd typically want those to match.

  • We think we have an idea for how to make your setup work. Again though, remember that this isn't ideal, and we don't know if you'll end up with any other issues down the road :-)

However, we think you should be able to resolve this issue by going into /etc/yum.repos.d -- and in all those .repo files, you'll see the repository path, which uses a variable "$arch".

It obtains the value of $arch by running "uname -m", which shows your kernel architecture. That's why you're having this problem, as "uname -m" returns that you're using a 64 bit system.

What you could do is erase that $arch, and replace it with "i386". That should force it to pull your packages from the 32 bit repository.

Let us know if that does the trick!

It did do the trick - replacing $basearch with i386!

Thank you soooooo very much! Now I have also been able to update out-of-date packages.

Thanks for the great support.