Fedora: Adding an i686 repository on an x86_64 system
IMPORTANT: This post may very well be useless mumbo-jumbo of how to do something that should never be done anyhow. I post it only because I had it all written down neatly when I discovered that I could have skipped it all.
From what I’ve seen, every you’ll need is in the x86_64 repository, including relevant i686 RPMs for 32-bit compilation.
Why I messed up in the first place
The whole saga started when the compiler complained about not having the stubs-32.h file. So I went:
$ yum provides '*/stubs-32.h' Loaded plugins: presto, refresh-packagekit glibc-devel-2.11-2.i686 : Object files for development using standard C : libraries. Repo : fedora Matched from: Filename : /usr/include/gnu/stubs-32.h <...same package from other sources...>
OK, So let’s install it, shall we?
# yum install glibc-devel-2.11-2.i686 Loaded plugins: presto, refresh-packagekit Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package glibc-devel.i686 0:2.11-2 set to be updated --> Processing Dependency: glibc = 2.11-2 for package: glibc-devel-2.11-2.i686 --> Processing Dependency: glibc-headers = 2.11-2 for package: glibc-devel-2.11-2.i686 --> Processing Dependency: libcidn.so.1 for package: glibc-devel-2.11-2.i686 <...snipped some very similar lines...> --> Processing Dependency: libnss_dns.so.2 for package: glibc-devel-2.11-2.i686 --> Processing Dependency: libBrokenLocale.so.1 for package: glibc-devel-2.11-2.i686 --> Processing Dependency: libnss_compat.so.2 for package: glibc-devel-2.11-2.i686 --> Running transaction check ---> Package glibc.i686 0:2.11-2 set to be updated --> Processing Dependency: glibc-common = 2.11-2 for package: glibc-2.11-2.i686 --> Processing Dependency: libfreebl3.so for package: glibc-2.11-2.i686 --> Processing Dependency: libfreebl3.so(NSSRAWHASH_3.12.3) for package: glibc-2.11-2.i686 ---> Package glibc-devel.i686 0:2.11-2 set to be updated --> Processing Dependency: glibc-headers = 2.11-2 for package: glibc-devel-2.11-2.i686 --> Running transaction check ---> Package glibc.i686 0:2.11-2 set to be updated --> Processing Dependency: glibc-common = 2.11-2 for package: glibc-2.11-2.i686 ---> Package glibc-devel.i686 0:2.11-2 set to be updated --> Processing Dependency: glibc-headers = 2.11-2 for package: glibc-devel-2.11-2.i686 ---> Package nss-softokn-freebl.i686 0:3.12.4-10.fc12 set to be updated --> Finished Dependency Resolution glibc-2.11-2.i686 from fedora has depsolving problems --> Missing Dependency: glibc-common = 2.11-2 is needed by package glibc-2.11-2.i686 (fedora) glibc-devel-2.11-2.i686 from fedora has depsolving problems --> Missing Dependency: glibc-headers = 2.11-2 is needed by package glibc-devel-2.11-2.i686 (fedora) Error: Missing Dependency: glibc-headers = 2.11-2 is needed by package glibc-devel-2.11-2.i686 (fedora) Error: Missing Dependency: glibc-common = 2.11-2 is needed by package glibc-2.11-2.i686 (fedora) 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
or, put simply, forget about it, I can’t find the foundation package for 32-bit machines. I tried to enable the updates-testing repository with the –enablerepo=u*g flag to yum, as recommended in an encouraging thread, but it did no good.
Instead, I followed another forum thread, which recommended to brutally remove the existing i686 version, and reinstall the new one:
# rpm --nodeps -e glibc-2.11.1-1.i686 # yum install glibc-devel-2.11-2.i686
But that didn’t work, because “glibc-common = 2.11-2 is needed by package glibc-2.11-2.i686 (fedora)”.
But then it stroke me, that if the problem is the -2 suffix, why don’t I go for the -1 version? I mean, I got the -2 version from “yum whatprovides” on the header file, which probably answered with the latest version, for which there are dependency holes in the repository.
# yum install glibc-devel-2.11.1-1.i686
So the lesson is not to trust “yum whatprovides” blindly. At least not with exact version numbers. If the repository has broken dependencies, sometimes just go back a bit.
The reason I added the i686 repository was that I thought I’ll find the necessary RPMs there. I was wrong on that.
… and here’s how to do it
The idea is to create a new repository configuration file, which declares the i686 repository. These configuration files don’t point at the repository, but rather at an URL, from which a list of mirrors to repositories is listed.
# cd /etc/yum.repos.d
# cp fedora.repo fedora-i686.repo
# replace \$basearch i386 -- fedora-i686.repo
I then edited fedora-i686.repo so that the names in the [ ] headers don’t override those in fedora.repo by adding the i686 string here and there.
That’s it.
Note that the architecture was changed to i386 (with a THREE) and not i686, because when yum fetches for the mirror repository list, it asks for i386 as an architecture. If the address to the mirror list (as defined in the *.repo file with the variable mirrorlist).
$ yum repolist Loaded plugins: presto, refresh-packagekit fedora/metalink | 28 kB 00:00 fedora | 4.2 kB 00:00 fedora/primary_db | 12 MB 00:19 fedora686/metalink | 13 kB 00:00 Could not parse metalink https://mirrors.fedoraproject.org/metalink?repo=fedora-12&arch=i686 error was File /var/tmp/yum-eli-X4M9Cd/x86_64/12/fedora686/metalink.xml.tmp is not XML
The file is not an XML, because it contains complaints and not data.