Slashdot Mirror


Is RPM Doomed?

Ladislav Bodnar writes "This is an opinion piece offering solutions for all the ills of the RPM Package Manager. It has been written with Slashdot in mind - it is a fairly controversial topic and I would like to hear the experiences and views of other users who have tried different package formats and different Linux distributions. The conclusions are pretty straightforward - either the big RPM-based distributions get together and develop a common standard or we will migrate to distributions offering more sophisticated and trouble-free package management. Note: the main server allows a maximum of 100 simultaneous connections. To limit the /. effect, here are two other mirrors: mirror-us and mirror-hu (the second one has larger fonts). Thanks in advance for publishing the story."

20 of 665 comments (clear)

  1. Gentoo's Portage system r00lz by rizzo · · Score: 4, Informative

    Gentoo Linux uses a system called "portage" which will download, compile, and install programs from source (binary for some packages). It is fantastic. Similar to apt it will check for dependencies and get those also. But the use of source is what turns me on. I'm converting all my linux boxen to it. Even inspired me to slice up the disk on my Win2000 box and go dual-boot.

    --

    "More organs means more human." - Zim

  2. Mirrors by cheezycrust · · Score: 5, Informative

    If the other links are overloaded, you can read the story on my site. Maybe other mirrors should be posted in this thread.

    --
    Teenagers these days don't have as much sex as they want each other to think they do.
  3. Gentoo is a giant step, too long for mere mortals by isdnip · · Score: 3, Informative

    I fully appreciate the author's sympathies. I'm used to replacing RPM-based distros; just last night I burned a new Mandrake Cooker so I could try it. KDE3.01 et al are just too hard to get right using RPM upgrades. But then he mentions gentoo...

    ...which I have also tried to install. Trouble is, gentoo has *no* installer, past the kernel stage. I can't even get sound to work, becuase my mobo sound chip isn't in their ALSA tree. I'm sure there's a way to do it but they don't tell you. Gentoo users are typically, I suppose, the type of Unix experts who have no trouble figuring out which driver goes where. But gentoo lays things out differently from RedHat (etc.) so I can't just copy their /etc (etc.!) files.

    If gentoo had a decent installer, not necessarily as "friendly" as Mandrake (more flexibility is a plus) but which could guide all the files into the right places, then it might be a killer. For now, it's a cult for experts. But I don't see why a binary-based (or at least partially binary-based) distro couldn't use an apt-get or portage-like system when needed, without requiring gentoo's exceptional knowledge (well, that's what it feels like to the "n00b" whose recent Linux experience is mostly RH and Mdk) of the distro's layout.

  4. Re:standardized locations, etc. by TrentC · · Score: 5, Informative

    I think the biggest thing we need with rpm (and other distro systems) is standardized package locations.

    You mean something like a Filesystem Hierarchy Standard? Or maybe even a Linux Standard Base?

    Jay (=
    (Is there a website that rates distributions according to their adherance to these standards?)

  5. Re:Luke, use the source... by blaze-x · · Score: 3, Informative

    > I administer a few RedHat servers...

    Once you administer 20+ of 'em with other admins, you are going to need a package management system.

    Unless you think keeping notes really works :)

    ---
    blaze-x

  6. Okay, here by 0x0d0a · · Score: 3, Informative

    I hate it! You need to compile a new RPM for each platform

    What we needis a smart .tar.gz2 package which detects what OS your using, and compiles and installs automagically with an easy to use gui and a powerful cli interface


    Well, hell.

    ------

    #!/bin/sh
    # Demonstration that RPM ain't all that bad
    # Copyright 2002, 0x0d0a
    # This code placed under the GPL
    # Should compute proper buildroot, etc
    # Be damn sure not to set buildroot to /
    # or something similar -- rm -rf would
    # then suck severely
    # Set our_rpm_buildroot appropriately
    # Usage: mybuildrpm.sh foo.tar.bz2
    our_rpm_buildroot=/usr/src/redhat
    ni ce -20 rpm -tb "$@" && rpm -Uvh `find $our_rpm_buildroot -type f` && rm -f `find $our_rpm_buildroot -type f`

    -----
    Okay, I grant that there's no gui, but you get all the many CLI options of RPM. Voila!

    People love to bash RPM, but it's a pretty sweet system (except the move to the newer underlying dbfile...screw transactions, I can always rebuild the database if it gets corrupted and it takes *much* longer to install and query than things did back with rpm 3.0). If it's too simple for you, it's really easy to use it as a back end and slap something on top of it.

    Note: this is a one minute hack and may not even run, much less be safe for your system...it's an example, not intended to be used. And hell, running random stuff from people on Slashdot as root just isn't a great idea. :-)

  7. Re:standardized locations, etc. by smagoun · · Score: 3, Informative
    One of the problems you bump into with standard, one-size-fits-all packages is that APIs change, and bugs get fixed/introduced. Assume package A v1.2 was compiled against package B v3.6. Now package C comes along. Package C needs package B v4.0, so it upgrades package B. In the switch from v3.7 to v4.0, however, the API changed and a misfeature was corrected. Now assume package A relies on the old API and the presence/functionality of the misfeature. Now assume package A is no longer actively developed.

    This situation (and ones like it) happen all the time. That's one reason why programs often get their own copy of a library, even though it sucks from an end-user standpoint.

    Nevertheless, you're right....versioning needs to be better.

  8. The problem with ANY packaging system.... by wowbagger · · Score: 5, Informative

    The problem with ANY packaging system is overzelous dependancy definitions.

    When Maynard builds his SuperFlyFloobyDust.rpm file, rather than specifying the dependancies as "I need libPease.so", he accepts the default "I need libPease.1.4.2.thursday.5-31-41.1-pl3-build6.so". So, even though any libPease.so would work, you get a dependancy failure.

    This is a failing not of any specific package manager - ALL package managers have this problem. You don't see it with .debs not because of any inherent superiority of .deb, but rather because of the hard work of the Debian maintainers to make sure the packages are all set up correctly!

    Additionally, there is the problem of library makers not following the fscking standards - libNarf.1.1.so is SUPPOSED to be fully compatible with libNarf.1.0.so - if it isn't, then it should be libNarf.2.0.so! However, you get people making libraries that don't follow this rule, so as a result you have to have libNarf.1.[0-99].so in your system because of programs that depend upon their version of that library.

    The solution to this CANNOT reside within the package manager - it resides in the distribution maintainer to refuse to deal with packages that break the rules.

    However, all it takes is one person installing one program that breaks the rules, and that installation is screwed.

    That is where distros like Debian and the *BSD's have the advantage - they are controlled by folks who won't let that happen. However, how many people install from the unstable branches, and why? Because that's where the latest, greatest, shiniest stuff is!

  9. Re:RPM not the problem.. by Fluffy+the+Cat · · Score: 5, Informative

    Why do we still throw library files from different packages together in the same directory?!

    Mostly because that's the point of libraries. Libraries allow code to be reused between applications - sticking them in application specific locations makes it somewhat harder for application A to use library B.

  10. Re:apt-get is nice by nehril · · Score: 5, Informative

    someone please correct me if I'm wrong, but doesn't this article suffer from a fundamental misunderstanding? you cannot compare apt-get to rpm files. apt-get is a system for installing .debs and their dependencies. there are similar systems for rpms (apt-rpm or red carpet).

    .debs suffer from all the same problems he complained about rpms having, because .debs are just a single package file. so do source code files (a la gentoo etc), since alot of your source code out there wont even ./configure without the right stuff in place. where debian has apt-get to manage the dependency nightmare, gentoo has emerge.

    what he is really bellyaching about is the fact that some big rpm based distros (mandrake and redhat) don't come with free dependency management software. 99% of his anti-rpm comments are not even wrong, they are wholly irrelevant.

    The last 1% that might have value is the fact that developers can't make a "universal" rpm due to all the differences in filesystem layouts among rpm based distros (note that this can a problem with .debs too). From an end user perspective even this is not a problem with a dependency manager in place. since it will find the "right stuff" for you.

  11. Re:single point of failure by 0x0d0a · · Score: 4, Informative

    The syntax of UNIX config files is pretty standard (barring the occasional ugly misfit like sendmail -- use postfix instead).

    And all the Windows registry does is give a standard format for storing individual values (how should I store a string, how should I store a DWORD) and provide a hierarchy. It says nothing about format or structure within a single app.

    If you want to turn on, say, mail relaying in postfix on Linux, then you look for the entry called mail_relay (or whatever) that's commented out and contains a helpful set of comments right above the config entry. On Windows, the equivalent is to go into the registry to some unspecified key, create an unspecified value there and then set it to some unspecified value.

    Of course, most people just use a front end on Windows -- like a preferences or options dialog -- because the registry is next to useless to actually interact with. You can do the same thing on Linux, which is done by GNOME and friends to make things more convenient for computer novices.

    Also, if the Windows registry gets corrupted, you have a big problem. If a single text format config file gets corrupted, you can probably fix it yourself. If you can't...well, it's a single file down the drain. Reconfigure that single app. Your entire system doesn't become unbootable, a la Windows.

  12. Re:Luke, use the source... by 0x0d0a · · Score: 5, Informative

    Really, there is nothing too difficult about:
    ./configure
    make
    su
    make install


    Yeah. But there's the ever so much more superior checkinstall:
    ./configure
    make
    su
    checkinstall

    This creates and installs an RPM of all the stuff you were installing. Voila...you can uninstall, you can query rpm to find out what package a file is part of, find out if uninstalling something will break dependencies, etc, etc...all the stuff that you can't do with just make install.

  13. Luke, package the damned source by Nailer · · Score: 4, Informative

    Really, there is nothing to difficult about:
    ./configure
    make
    make install


    And all RPM does is automate and standardize this process. The strength of any management system is based around its ubiquity. Installing software outside the packaging system is a bad idea, as suddenly all those standard installation, uninstallation, querying, and verifying systems no longer work - for your unpackages apps, and all the broken packages or other unpackaged apps that rely upon it. Stop thinking of RPM as being seperate from source. it isn't. An RPM is a cpio archive with a source tarball and a spec file like the one below which automates the build process.

    Summary: An addictive and frantically paced puzzle game with cute 3D graphics
    Name: crack-attack
    Version: 1.1.7
    Release: 2mm
    Source0: http://aluminumangel.org/cgi-bin/download_counter. cgi?attack_linux+attack/%{name}-%{version}.tar.gz
    License: GPL
    Group: Amusements/Games
    URL: http://qcd2.mps.ohio-state.edu/attack/
    Packager: Mike MacCana
    BuildRoot: %{_builddir}/%{name}-%{version}
    BuildRequires: glut-devel
    Requires: glut
    %description
    Crack-attack is addictive and frantically paced puzzle game with cute 3D graphics, playable either against the computer in single player or across a network mnultiplayer, where o
    ne players success clearing blocks dumps large immuntable tiles upon the others block pit. Muahahahaha!
    %prep
    %setup -q

    %build
    %configure
    make

    %install
    %makeinstall

    %post -p /sbin/ldconfig

    %postun -p /sbin/ldconfig

    %clean
    rm -rf %{buildroot}

    %files
    %defattr(-,root,root)
    /usr

    This will catch all the files installed in /usr, but after you do this, note the names of these files in the package and specify them individually

    %doc AUTHORS COPYING INSTALL NEWS README

    %changelog
    * Thu Apr 11 2002 Mike MacCana 1mm
    - Created packages

    Now I'm going to sit back down on my Red Hat 7.3 box and apt-get dist-upgrade all my RPMs from Freshrpms.net

  14. gnome, kde by Ender+Ryan · · Score: 3, Informative
    While I am a bit miffed at gnome and kde for copying the registry idea(so friggin stupid.... imo), at least with gnome(not sure about kde, probably true there too) the "registry" is not one single massive database, it's composed of different hand editable text files, xml if I remember correctly.

    --
    Sticking feathers up your butt does not make you a chicken - Tyler Durden
  15. Re:Automaticness by Mongoose · · Score: 5, Informative

    You must be new to UNIX like systems. You see there is a reason we don't have 50MB executables from all the static linking and DLL hell. We use shared objects between all apps to save disk space, development time, and main memory. I see you complaining about rpms, so maybe you should try a distro like Debian GNU/Linux, and expand your horizons.

    For example if we did shar archives ( what you want with your 'setup.exe' ), then you'd have to install all of KDE to just get QT libs. You'd have to install all of GNOME to get gtk+. You see why that's piss poor way to do things just from a packaging standpoint even if you don't understand the techincal aspects? Also versioning would be impossible to support. Versioning is allowing multiple libs to stay on the system without conflicting, so apps can use various versions as they choose. To support versioning you'd have to have N number of KDE installs.

    I don't see how that post go modded up, when it's so misinformed... oh this is slashdot.

  16. Re:RPM not the problem.. by cgleba · · Score: 5, Informative

    "The problem is not using the hierarchal file system in a coherent way."

    I hear this argument every time package managment is discussed on slashdot and every time I bite my tongue.

    The current system of /bin,/lib,/etc, etc. has many many advantages over the "good old DOS days" -- ESPECIALLY when you start mixing in NFS and automount. Some examples:

    * all SHARED libraries are in the same place. That way the dynamic linbker does not need to do a ridiculous path search to find a library

    * all binaries are in 3 -4 places -- that way you don't need a massive PATH variable like 'the good old DOS days'

    * because the files are sorted by type, you can do all types of neat things. Let's say for instance that you have Solaris SPARC, Tru64 Alpha and x86 Linux boxes all sharing a single NFS server. Now the /etc directory is architecture and OS independant so you can share the same directory accross all three. The /var directory is achitecture independant but depending on your set-up it will probably not be OS depandant. Thus you can discern the differences between the OSs yourself and set up an automount variable to mount the proper version per OS. The /lib and /bin directories are both OS and architecture dependant. In that case you must set automount variables for OS and arch and mount different dirs for each.

    Let's say that you install emacs network-wide. You share the same config accross all your NFS clients and just make different /bin and /lib for each. You need to change some defult configs for all the clients? Voila, just edit one config file! Could you share one program accross multiple machines, architectures and OSes in the 'good old DOS days'? Could you immediately upgrade 65 workstations to the newest version of a program without reboots and only use 1/65th the space (aka one copy) in the 'good old DOS days'?

    * Because the files are sorted BY TYPE you can do all types of neat optimization and security things. You can mount /usr ro. You can optimize your RAID array for fast read and writes in the /var mount while optimizing /usr, *lib and *bin for fast reads, etc.

    'the good old DOS' system was good for what it was used for -- a small system for one user with a few programs and didn't need any optimization. The heierarchal system is a lot better here used as a multi-user, muti-tasking shared-library networked OS with hundreds of programs.

    Now if you hate the heierarchal system that much, you can do what SCO OpenServer does -- install all the files into each 'program directory' and then make symbolic links into the heierarchal system. It would be VERY easy to do -- just write a script to query your RPM database for what files are in each package, move all the files for that package into its own directory and then make a symbolic link for each file moved back to the hierarchal system.

    SCO liked the 'good old DOS days' also. The problem with OpenServer and all those symbolic links, though, is that resolving the symbolic links by the dynamic linker, the shell, the programs, etc actually was pretty expensive and gave a decent hit to filesystem performance. Furthermore it made NFS-mounted trees hell and you could not do all the neat optimization and security stuff that I mentioned above.

    In summary, the heierarchal system is by far easier to manage for performance, security and for centralization. It is tougher to manage for "adding / removing" programs. The former highly outweighs the latter, expecially since you have package databases to help tell you where all the files are. Learn to use your package managment system.

    The bulk of this article and thread seem to be once again people bitching about RPM dependency hell. The solution to that is download the source rpms and then do a rpm --rebuild [source RPM] then a rpm -i [/usr/src/RPM/RPMS/i686/[name of RPM built]. That solves 96% of all your problems and still maintains your RPM database. config, make works too, but it throws you back into the chaotic world of no package managment and thus completely defeats the purpose of RPMs.

    Have a nice day!

  17. Re:Luke, use the source... by Hal_9000@!!!@ · · Score: 3, Informative
    RedHat needs a compile from source package format that most people can figure out. srpms may do it, but I have no clue how to use them.
    rpm --rebuild name.src.rpm
    That will build and install the RPM for you. If you want to customize the compiling options, do
    rpm -i name.src.rpm
    and manually edit /usr/src/{distro,rpm}/SPECS/name.spec to add the options you want. Then run
    rpm -ba name.spec
    and install the RPM in the RPMS directory.

    RedHat has a HOWTO at RPM.org and I've written documentation for bluelinux.org which should be helpful.
    --
    My email is real.
  18. Re:Talk about a gimmick by dattaway · · Score: 3, Informative

    Configuring how packages are compiled in gentoo can be set with the USE environment variable, or editing it in /etc/make.profile/make.defaults. There are many useful options that can be set there.

    Compiling is done with the "emerge" command for that package. Just for grins if you want to reconfigure *everything* with a new set of interesting compile parameters, simply type:

    emerge world

    And watch the CPU happily crunch away on every line of code that is currently installed on your system!

    "emerge rsync" updates the packaging tree. Then you can update packages, system, or the world with the -u option.

  19. Re:Binary Distros Are Dead by drinkypoo · · Score: 3, Informative

    The FIRST machine takes about a day. After that you can build a stage3 ISO for your platform (the only one provided is i686, which will suit most people's needs anyway) which will give you a fully functional gentoo system. Then you can install all the packages you need as binaries built on other systems, as long as they have the same architecture, or a subset (IE, you can run the i386 binaries on your i686 or whatever, but K6 binaries won't run on your i686, or vice versa.)

    --
    "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
  20. Re:Luke, use the source... by Wdomburg · · Score: 3, Informative

    It's really not that hard to figure out:

    rpm --rebuild whatever.srpm

    Your shiny new binary RPM(s) will be in whatever the system path is for RPM (on Red Hat it's /usr/src/redhat/RPMS).

    Or alternately, you can

    rpm -i whatever.srpm
    cd /usr/src/redhat
    rpm -ba SPECS/whatever.spec

    And the binary RPMs will end up in the same place. Plus with that method is you can edit the spec file for customization.

    Most people who gripe about RPMs being too hard probably have never looked at the spec files before - all they are is some meta information and a shell script that builds the program. Building from scratch may be hairy for a new user, but customizing an existing package is REALLY easy; usually it's just a matter of looking for a line starting with "./configure" and adding the options you want after that.

    Why go through the trouble when you could do it from source? It is much much easier for replicated installs, you don't have to worry about stray files lying all over the place, its easy to tag files as being configuration so they don't get overwritten, etc, etc.

    Matt