Odi's astoundingly incomplete notes

New entries | Code

Gentoo e2fsprogs-libs, ss and com_err

Today Gentoo released some updates that cause a conflict. It's resolution may damage your system:
[ebuild     U ] sys-fs/e2fsprogs-1.41.2 [1.40.9] 
[ebuild  N    ] sys-libs/e2fsprogs-libs-1.41.2  USE="nls" 
[ebuild     U ] net-fs/nfs-utils-1.1.3 [1.1.0-r1] 
[blocks B     ] sys-libs/ss (is blocking sys-libs/e2fsprogs-libs-1.41.2)
[blocks B     ] <sys-fs/e2fsprogs-1.41 (is blocking sys-libs/e2fsprogs-libs-1.41.2)
[blocks B     ] sys-libs/com_err (is blocking sys-libs/e2fsprogs-libs-1.41.2)
[blocks B     ] sys-libs/e2fsprogs-libs (is blocking sys-libs/ss-1.40.9, sys-libs/com_err-1.40.9)
The reason for the block is that ss and com_err have both been integrated into e2fsprogs-libs. Blocks are normally not a problem and happen from time to time, and can easily be resolved. Also this one can seemingly easily be resolved by unmerging ss and com_err and then merging e2fsprogs-libs. But ss and com_err are part of the system profile and unmerging them even for a short time is dangerous.
Be really careful NOT to unmerge sys-libs/ss and sys-libs/com_err from your system! These are critical core libraries that are used by dozens of programs (such as wget, curl, openssh,  apache, postfix), which will be broken after unmerging. There is a manual upgrade path in comment#7 of bug 234907. But I suggest you wait until this is resolved automatically by the next version of portage. Pretty sure the Gentoo developers will fix this in the portage tree soon.

Well, they haven't so far. So here is the paranoid way to do it:
# don't depend on the net later
emerge -fuD world
# backup in case something goes wrong
quickpkg ss com_err
# unmerge
emerge -C ss com_err e2fsprogs
# merge
emerge -1 e2fsprogs-libs
emerge e2fsprogs
# fix broken things

posted on 2008-10-28 10:34 UTC in Code | 37 comments | permalink
Since e2fsprogs-libs provides ss and com_err you should be able to safely unmerge them temporarily as long as you have the new e2fsprogs-libs and e2fsprogs source downloaded already.

Here's what I did:

emerge -auDNv --fetchonly world
emerge -C ss com_err
emerge -auDNv --oneshot e2fsprogs-libs e2fsprogs
emerge -auDNv world

All is well and everything is updated.

"emerge -C ss com_err"


I have a clue too:

emerge -C gentoo
worked for me too!
Should work -- not having com_err messes up wget, but if you do --fetchonly first, wget never gets called, and all is well.
Run into "block" today. I'm curious as to why this happens, is it developers mistake? And why it's not being resolved in timely fashion especially since it affects and affected many Gentoo users.
Blocks happen from time to time. Especially when the package structure is reorganized like in this case. That's perfectly normal and not usually a problem.

But this case is especially bad, because it requires unmerging packages from the system profile. Unlike during a normal update of such a package there will be a short period where the package is not installed, thus breaking dozends of programs, that may in turn be necessary to merge the updated package. You can end up in a vicious circle if you don't know what you are doing, requiring to boot from rescue media.
Unmerging com_err, as I did, is really a big mistake. Running emerge was not even possible afetr that.

Problem is I saw this post only after I did the mistake. Here is what I did to temporarily have a working system, until developpers have fixed the problem: 1) I downloaded (with Firefox, Konqueror was broken as well) a Gentoo live CD, then booted hthe CD with nox parameter to have the root prompt; 2) I ran "equery files com_err" to see what files I stupidely erased; 3) I mounted the partition of my hard drive and copyed the files indicated by the equery output; 4) reboot worked.

This is an awfull thing to do, only people like me that don't know anything about computers can do that. I hope you don't have to do it.
if you run into the problem that you unmerged com_err and your portage is not working anymore, DONT PANIC. Do NOT log off, or reboot!

just reemerge com_err

emerge com_err

this should work, since the source file should still be in /usr/portage/distfiles

if it is not, download e2fsprogs-1.40.9.tar.gz from any gentoo mirror (apparently I am not allowed to post the link here :( )
using firefox or links or another computer. Copy it it to /usr/portage/distfiles.

then run emerge =com_err-1.40.9

now you should be able to run

emerge -uDf world

this fetches all the files you need.

now you can safely do

emerge -C com_err && emerge -uD world

good luck!

Till Korten
Now, what you should not do:
emerge --unmerge sys-libs/ss sys-libs/com_err
emerge -aDuv world

Then Sh1t, ok, no problem, let's just use firefox -> failed. Lynx -> failed. wget -> failed.

Ok let's reboot and fetch the tarball from my dual boot. Done, and then reboot failed (unable to mount the root partition).

Sh1t : could not find the gentoo live CD.

Now I am running OpenSuse 10.3 (old Dvd from a magazine I had near my computer).

Bye gentoo, bye :-|

that's why u should make a backup at least twice a week and delete all the older backups. It is really a BIG help and really worth doing it.:) I have now the same block, maybe i will wait or make a backup before I try things with such a risk.

If anybody really know how to fix it just let me now ^^
Thank you, I was feeling a bit lost about this.

well, i did just unmerge e2fsprogs... and then continued the upgrade....
because i knew that that would not be much of a problem... the other two i didnt know...

problem solved...
Tried the upgrade path given in comment #7 of bugfix linked in initial post without any problem ...
I did what the first comment was saying, and everything worked like a charm.

Here 's what the guy was suggesting:
Since e2fsprogs-libs provides ss and com_err you should be able to safely unmerge them temporarily as long as you have the new e2fsprogs-libs and e2fsprogs source downloaded already.

Here's what I did:

emerge -auDNv --fetchonly world
emerge -C ss com_err
emerge -auDNv --oneshot e2fsprogs-libs e2fsprogs
emerge -auDNv world

All is well and everything is updated.


I did this and it works fine :-)

emerge -f system (prefetch all needed packages. IMPORTANT!)
emerge -avC com_err ss e2fsprogs
emerge -avuD system
I pretty much did, what Joel did: I rebooted - and that probably wasn't the smartest thing to do.
Still no need to say goodbye to your gentoo-system.

1. get the gentoo boot-cd (what do you have a dual boot system for? ;-)) and boot it

2. make sure you can connect to the net

3. cd /
mount /dev/*placeofyourrootpartition* /mnt/gentoo
mount -t proc proc /mnt/gentoo/proc
chroot /mnt/gentoo /bin/bash
emerge =e2fsprogs-1.40.9

4. reboot and have your system back. Now you can try all the solutions suggested on this page.
And, guess what, this is much quicker than installing OpenSuse from that old magazine-dvd

Thanks Michael for your help. Anyway I did not have the gentoo live-cd available (something like the 2004.1).

Last week-end I trashed my opensuse (I quickly hated it).

I now run a debian unstable. I does work pretty much out of the box. Updates now look far less scary than they were with gentoo.

I did what the first post said, but the block was still there, so I had to unmerge e2fsprogs as well, then it worked. I haven't rebooted yet, but I see no reason why it shouldn't work. ;)
You absolutly need a root shell open to do this. sudo and su both require comm_err and won't work. You'll end up screwing yourself if you try to "sudo emerge e2fsprogs".
Using temporarily unstable portage:

#Unmask portage:
echo "=app-admin/eselect-news-20080320 **" >> /etc/portage/package.keywords
echo "=app-admin/eselect-1.0.11-r1 **" >> /etc/portage/package.keywords
echo "=sys-apps/portage-2.2_rc13" >> /etc/portage/package.keywords

#Resolve with new portage
emerge =sys-apps/portage-2.2_rc13
emerge e2fsprogs #will pull all other stuff

#reverting back to stable portage
vim /etc/portage/package.keywords #undo 3 unmasking made before
emerge eselect portage #will complain about all ebuilds of eselect-news masked
emerge --unmerge eselect-news #if previous step complained
#emerge eselect-news #otherwise
revdep-rebuild #probably unnecessary, in my case nothing important was rebuild
That worked well, thanks.

Stephen Reese
There's an IMO better way:

$ quickpkg e2fsprogs com_err ss
$ emerge -BO e2fsprogs e2fsprogs-libs
$ emerge -C ss com_err
$ emerge -K e2fsprogs e2fsprogs-libs

Using -BO, emerge will build the new versions of e2fsprogs and e2fsprogs-libs without checking for and complaining about the blocks (This, however, only works if all other dependencies are up to date. You may have to emerge -pvuD e2fsprogs first and emerge -1 all dependencies other than the blocks.) and store the newly compiled files in a tbz2 in your $PKGDIR. Once ss and com_err are removed, you now only need a functioning tar and bz2 (and, of course, portage) to replace the missing libraries. And if portage were to break, untarring the package archives would be trivial.
big thanks - was pounding my head against emerge the last half hour
as i did it now, it seems quite easy to me:

emerge --fetchonly e2fsprogs-libs e2fsprogs
emerge -C ss com_err
emerge e2fsprogs e2fsprogs-libs
I actually unmerged ss and com_err before I knew how important they are, but I apparently got extremely lucky since nothing broke. I was able to emerge e2fsprogs-libs (wget worked) and everything was fine. o_O
I managed to unmerge both com_err and ss and then emerge them back in again without calamity, once I realized I was on the road to a bricked system.


Look, if "A" is updated to include (and block) "B", you can usually simply do

# emerge --onlydeps A
# emerge --nodeps -u A
# emerge -C B

Done this way, you can pull the plug on your box at any time during the process. Your system is never put into an inconsistent state, except perhaps for brief moments while the binaries are installed.

Sometimes things get a little more complicated than that of course... but rendering your system temporarily unbootable is not a good way to go if you can possibly avoid it.

A good tip is to always have a root term open before unmerging anything (since sudo/pam etc could break if you don't understand the modules that you're affecting).

I unmerged the libs, and broke wget, but was able to download and compile a static copy of wget and place it at /usr/bin/wget (saving the orig wget to wget.dynamic) and I was able to re-emerge the libs back in to resolve the block.

But unmerging said libs also broke sudo, so be sure to have a root term open.
Thank you! Worked like a charm.

Oops. That's what I get for being Mr. Expert... I was quite wrong, above, when I suggested

# emerge --onlydeps A
# emerge --nodeps -u A
# emerge -C B

as a psedo generic solution.

In fact, this left me with an incomplete system.

After I did the above, I was quite broken because apparently there were some "backward compatibility" feature, so that when I compiled "A," in my case, the features of "B" were not built into the resulting package or install.

I had thought I would create a collision, but otherwise work great. No such luck. So I basically did

# emerge --onlydeps A
# emerge --nodeps -u A
# emerge -C B
# emerge -1 A

which still makes my box broken (but only for a bit). This is lame, and it's Gentoo's fault. If I weren't a lazy bastard (and even so, perhaps I will get around to it) I would file (or more likely, find, perhaps with a perfect solution :) ) a bug about this.
It may be a good Idea, sync first, otherwise works great. Good Job

Here's what I did:
emerge --sync
emerge -auDNv --fetchonly world
emerge -C ss com_err
emerge -auDNv --oneshot e2fsprogs-libs e2fsprogs
emerge -auDNv world
Try this URL: bugs.gentoo.org/show_bug.cgi?id=234907#c7

Lol, it's 14.03.2009 and this fix still works for this bug. :)
Yep, this is pretty bad. It's now April 2009 and it's still broken. I followed the last set of directions in the replies and it worked fine. Thanks.
July 2009, still broken and the last suggestion is still working.
Aug 1 2009, still broken!
so glad for this fix, the last one worked well, and completed it with revdep-rebuild
A better solution to solve this is to:

echo sys-libs/com_err >> /etc/portage/package.mask
echo sys-libs/ss >> /etc/portage/package.mask

emerge -pv mit-krb5 e2fsprogs

This will uninstall the com_err and ss automtically, without having to go through uninstalling them manually, which can be very damaging to the system.

This is explained in this bug resolution:

#37 <- commented by #49