[Nottingham] Gentoo experts: emerge file collisions!?

Martin martin at ml1.co.uk
Thu Nov 12 15:23:55 UTC 2009


In brief-ish for upgrading the Gentoo glibc:


I've found a few useful comments:

http://blog.crox.net/index.php?url=archives/49-Gentoo-Linux-Package-NOT-merged-due-to-file-collisions-problem-and-solution.html&serendipity[cview]=linear

"Upgrading glibc doesn't actually work, because glibc depends on
timezone-data. You can't install the new glibc without doing the
COLLISION_IGNORE trick."


>>> emerge -K glibc
> 
> That gives a:
> 
>   * Package 'sys-libs/glibc-2.9_p20081201-r2' NOT merged due to file
>   * collisions. If necessary, refer to your elog messages for the whole
>   * content of the above message.
> 
> 
>>> The best thing to do is probably to just temporarily disable collision 
>>> detection:
>>>
>>> COLLISION_IGNORE="/" emerge glibc

Is there some special functionality for missing out the ";" to make bash
treat that as the two instructions:

COLLISION_IGNORE="/"
emerge glibc

?

Regardless, no change with the "NOT merged".


>>> With any luck thats all it will take, check stuff is working, re-emerge 
>>> stuff to use the new glibc, and move on.
> 
> I actually used:
> 
> COLLISION_IGNORE="/" ; emerge glibc
> 
> and it soon dived into a whole big load of compiling. Wouldn't it take 
> advantage of the existing compiled binary packages or is a "-K" needed 
> still?

With or without ";" made no difference.



Meanwhile, portage 2.1.5 /should/ gracefully handle collisions by
juggling the install/update order... Except for system or portage
dependent files... And for when jumping to new 'slots'.

Handling File Collisions Between Blocking Packages
http://blogs.gentoo.org/zmedico/2008/05/09/blocking_package_file_collisions

That's all from last year and the current portage is 2.1.6. Very good
and clever stuff. I'm still amazed it all works automatically at all!


Also, you can use "equery belongs file_name" to list what is blocking.


Trying:

emerge --version

!!! Your current profile is deprecated and not supported anymore.
!!! Please upgrade to the following profile if possible:
        default/linux/x86/10.0

To upgrade do the following steps:
# Check 'eselect profile list'.
# Find the number that corresponds with the default/linux/x86/10.0 profile.
# Use 'eselect profile set <number>' to set a new /etc/make.profile symlink.
#
# Reference: http://www.gentoo.org/doc/en/gentoo-upgrading.xml
# See: "General instructions" in Section 3. "Profile updating instructions"

OK. So:

eselect profile list

eselect profile set 4



emerge -vDup system

Total: 65 packages (29 upgrades, 33 new, 3 in new slots, 1 uninstall),
Size of downloads: 132,304 kB
Conflict: 1 block

Portage tree and overlays:

 [0] /usr/portage

 [?] indicates that the source repository could not be determined


That ran through the new updates fine until the glibc block stopped
progress.


The fix for that is to use:

FEATURES="-collision-detect -protect-owned" emerge glibc 2>&1 | tee
emerge.log

Note, I actually used "emerge -K" to take advantage of having already
compiled the glibc by using the -b option previously. The tee log bit is
just to aid debugging if anything were to go wrong!

Afterwards, remember to do:

FEATURES=''

so that you get collision detection enabled oncemore.



All then updated nicely. As expected, there were quite a few .cfg files
to check and mv or update for the new stuff.


A quick summary for updating is (as root):

emerge --sync

emerge --pretend --update portage
emerge --update portage

emerge --pretend gentoo-sources
emerge gentoo-sources

-D = "deep"
-b = saves binary build packages also
-N - update for new use flag settings made

emerge -vDup system
emerge -vDu system 2>&1 | tee /var/tmp/emerge_system.log
emerge -vDup world
emerge -vDu world 2>&1 | tee /var/tmp/emerge_world.log


Check for any surprises from the "--pretend" steps before actually doing
that step (no "--pretend" or "-p").

The emerge package list abbreviations are:

              N   new (not yet installed)
              S   new SLOT installation (side-by-side versions)
              U   updating (to another version)
              D   downgrading (best version seems lower)
              R   replacing (remerging same version))
              F   fetch restricted (must be manually downloaded)
              f   fetch restricted (already downloaded)
              I   interactive (requires user input)
              B   blocked by another package (unresolved conflict)
              b   blocked by another package (automatically resolved
conflict)

USE flags are set in /etc/make.conf

A description of most USE flags are available in the file
/usr/portage/profiles/use.desc


And one fun comment:

####
> kernels should be somewhat looked over by users, not just cleaned up
> like any old package
> -mike

No big deal at all, once an a while

emerge gentoo-dev-sources -C && emerge gentoo-dev-sources

does the trick (yeah I know I'm too lazy to do it elegant).
####



Hope that helps others for the Gentoo fun!

Comments welcomed,

Cheers,
Martin

-- 
----------------
Martin Lomas
martin at ml1.co.uk
----------------




More information about the Nottingham mailing list