So a few weeks ago, I started running into problems updating Chromium. If you have not checked it out, by the way, it’s about as fast as custom-compiled firefox, and takes as long to compile. Anyway.
After a few days, the problem spread to LightDM. I could no longer update LightDM either.
Two days ago, upgrading anything became impossible, due to incompatibilities between packages (they said they conflicted: only a Use flag difference was causing it).
I decided this was a real problem. So, what I did was simple: I reorganized my “package.use” file. This is under /etc/portage/package.use, and if you have not manually cleaned it up, you may have a problem.
I removed about 90% of the lines in the file, moving some to make.conf, and deleting others that were no longer really necessary. Hint: If you enable the “icu” flag on a single package, it’s probably a really good idea to enable it globally. It can cause a mess of dependencies if you don’t. My package.use now looks like this:
# Just good ideas, user added!
app-admin/conky lua lua-cairo lua-imlib iostats
x11-libs/libdrm libkms video_cards_nouveau video_cards_radeon
media-libs/mesa xa gles2
net-fs/cifs-utils -acl upcall
# Fluxbox vim syntax
# Claws Mail plugins
# Added by emerge wanting stuffs.
# required by sys-devel/clang-3.3-r100
# required by clang (argument)
# required by xfce-base/thunar-1.6.3[udev]
# required by xfce-base/xfdesktop-4.10.2[thunar]
# required by xfce-base/xfce4-meta-4.10
# required by xfce4-meta (argument)
# required by sys-devel/prelink-20130503
# required by app-emulation/wine-1.7.0[prelink]
# required by wine (argument)
# Firefox wants this. Don’t ask.
I removed most of the version information (the >=, =, and numbers after the package atom) because I figured that it didn’t make sense to limit it in that way, clutter the package unnecessarily. If I update beyond the use of a particular flag, I want to remove the USE flag, not keep it around forever.
I removed about 50-60 lines (remember, this includes the comments that emerge inserts if you “emerge –autoumask-write” and “dispatch-conf”) regarding Chromium, 30 talking about enabling a single USE flag that selects a ruby version. “ruby_targets_ruby20” or something like that. I moved the “icu” flag to make.conf, and the same with the ruby targets (if you are going to compile something with ruby, don’t you want everything running the same version?) and deleted most of the specific use-lines installed for chromium. Too many inter-dependencies, and besides, many of them were just the “icu” flag.
I thought I was done, so I ran my emerge line “emerge –ask –update –deep –changed-use –with-bdeps=y –backtrack=50 @world”, and was on my way!
Except I wasn’t.
LightDM, GPM, and Chromium still failed to build.
Reading the report just a tiny bit before the build news (why the last lines of this are not recorded, I don’t know), I noticed the line going something like “Couldn’t find JSON.pm in @INC” and scanning forward in the line, I saw the word “perl.” Well, I knew what to do with that! I switched to another tmux pane, and entered “cpan JSON” and as you can imagine, it didn’t work. Then I tried “cpan JSON.pm” and it installed something! I reran the update, and got a different perl module missing, I installed that too. I repeated this a few times, and now my system is completely updated.