The best kittens, technology, and video games blog in the world.

Friday, May 12, 2006

apt-get upgrade

(this is pretty rantish, don't read if you're easily offended. I added the hamster pic from CuteOverload for no particular reason ^_^)

I've seen quite a few Linuces in my life. Most of the time I used Debian (unstable or later testing) or something based on Debian (kUbuntu). However, needing new Eclipse/Firefox/(million other things that weren't in anything Debian-based at that time) and having kinda broken my Ubuntu by mixing it with too many packages from Debian unstable, I decided to give Gentoo a try.

The good things

The most important one - Gentoo packages stuff much faster than Debian. Usually it has more and more recent packages than Debian, but there are a few exceptions (like dictd dictionaries).

Also, Gentoo has nice online documentation, Gentooers on IRC are usually more friendly and clueful than the average.

Lack of global packager lock is nice - I can install a small package in the middle of major system upgrade. In Debian, I had to wait for the upgrade to finish.

The not-so-good things

Initial install wasn't that bad. Sure it took about ten times longer than with other distros, but that's ok.

There are many quirks that are annoying but passable, like:

  • extremely minimalistic default USE flags. Right now I have 131 USE flags set. I'm not kidding you, here's the full list: 3dnow 3dnowext 7zip X a52 aac accessibility alsa apache2 asf avi bash-completion berkdb blas browserplugin bzip2 cairo canna cdparanoia chasen cjk crypt curl dba divx4linux doc dv dvd dvdread emacs encode esd examples exif fam fame fastcgi fftw firefox flac glitz gnutls gs gsl guile haskell imagemagick immqt-bc ipv6 ithreads jack java javascript jbig jce joystick jpeg jpeg2k kde kerberos krb4 latex ldap matroska mmap mmx mmxext mono mozdevelop mozilla mozsvg mp3 mpeg mplayer musicbrainz mysql network nls nodrm nptl nsplugin nvidia odbc offensive ogg opengl pdf perl php png postgres python quicktime rar real rtc ruby samba sasl sdl slang spell sql sqlite sqlite3 sse ssl subtitles subversion svg symlink tcltk tetex theora threads tiff truetype unicode usb utf8 visualization vorbis win32codecs wmf xanim xine xml xml2 xprint xvid zlib. Why the heck 90% of them are needed totally loses me. If someone doesn't want png support, they should be the ones to have to explicitly say it. It completely breaks the "Zero Config" principle.
  • Upgrading Perl (or Python etc.) means one has to reemerge all Perl libs by hand, or they won't be available in the new version. So emerge perl can break various installed programs. I think there is a message about that somewhere in the emerge output, but when more than one package is being upgraded at the same time, it will be lost in the flood of compiler messages.
  • Lack of testing-like distribution. It's either x86 (kinda like Debian stable) or ~x86 (kinda like the original Debian unstable, before they got testing). So either I have to put up with very old packages or accept a high possibility of random breakages. Many ebuilds from ~x86 did not build on my system.
  • Upgrades are really slow. Compiling is about 100 times slower than installing a binary package.

The bad thing

Gentoo doesn't have apt-get upgrade.

Gentoo does have emerge --av --update --newuse world, but it's not even close. It's about as far behind apt-get upgrade as Turbo Pascal is behind Ruby.

Now, the Gentooers (and Turbo Pascal users) deserve some explanation, as they probably don't believe me the difference is so big. So here it is.

apt-get upgrade checks all the packages in the system. Then, it checks those packages that can be upgraded without either breaking/uninstalling anything or installing anything fancy (other than trivial package rearrangment). Then it downloads and installs the upgrades. In the end, you have an upgraded system, and the packages that couldn't upgrade automatically are simply left in their original state. You can even add apt-get upgrade to the crontab. Every once in a while you spend about 30 seconds dealing with the packages apt doesn't upgrade automatically (which of course don't block the rest of the upgrade).

Let's compare it with emerge --av --update --newuse world. It checks all the packages in the system. Then it checks those packages that can be upgraded. So far so good. Now, if anything looks out of order - it tells you that it won't upgrade anything and thet you can go to hell. It cannot upgrade X, you have to uninstall them and install the new X. Because everything is being compiled on install, compilation can fail and it often does with ~x86. It can break your system (see above about Perl libraries). It takes forever, using a lot of CPU cycles. I don't think even one person has it added to crontab. Most Gentooers seem to have awfully out-of-date systems in spite of Gentoo packages often being more up-to-date than Debian's.

Now, excuse my rant and go back using your favourite distribution, whatever it is. I was simply annoyed by emerge and had to write something to calm down. ^_^


Anonymous said...

You could have used:

emerge --sync
emerge -uD world

Thats all you need to update your system.
And it works pretty well for me :)
By using --newuse you force portage to reemerge package if its use flags has changed. But its only important when you are changing or preparing your use flags.

Frank said...

You could have used: emerge --sync emerge -uD world Thats all you need to update your system. And it works pretty well for me :) By using --newuse you force portage to reemerge package if its use flags has changed. But its only important when you are changing or preparing your use flags.