bacardi and cola: it gets the job done
Way back in the day I worked on a product called Red Carpet. It was a software management tool for Linux, and later it morphed into a system for doing centralized management of systems across a network. I could lament about how great it was but how misunderstood it was and how it worked on both RPM and dpkg but I’ll skip all the sad sack stuff.
The point is, the real gem of Red Carpet was rug, the command-line client. It had an incredibly clean interface and wonderful search. It allowed you to install and remove packages at the same time from the command-line, something which (I think) you still can’t do with any of the existing tools. You could downgrade packages, install packages from a specific channel (or repository), download packages but not install them. You could add locks to channels or packages, preventing them from ever being touched even via dependency resolution. You could even refer to channels using acronyms (“SUSE Linux Enterprise Desktop” abbreviates to “sled” automatically). It was incredibly powerful and yet simple to use. It was indispensible for me and for a long time after it stopped being released for most distros I would find a way to wedge it in.
Recently I’ve switched to using yum and while it works pretty well, I’ve found it lacking in a lot of the ways I listed above.
Enter rum. Rum is a new frontend for yum which implements the rug commands and user interface, written by James Willcox, Tambet Ingo, and Chris Rivera. I’ve been using it during its one week development and I’m very impressed. It reuses a lot of code from rug, so the behavior is almost identical to the old tool. The only thing that takes getting used to is putting sudo in front of it. Oh, and not accidentally typing rug.
Anyway, snorp has a blog post about it. Go download packages for SUSE and Fedora. Or download the very small source. It requires yum 2.9.5 or newer.
Example output:
[joe@posthaste ~]$ sudo rum search beagleS | Repository | Name | Version
-+—————--—————————-———————————-
i | dist | beagle | 0.2.3-40.32.i586
i | dist | beagle-debuginfo | 0.2.3-40.32.i586
i | dist | beagle-evolution | 0.2.3-40.32.i586
i | installed | beagle-firefox | 0.2.3-33.i586
v | dist | beagle-firefox | 0.2.3-40.32.i586
i | dist | beagle-gui | 0.2.3-40.32.i586
i | installed | beagle-index | 10.1_20060427-6.5.i586
v | dist | beagle-index | 10.1_20060427-6.7.i586
| dist | kio_beagle | 0.2-16.3.i586
| dist | kio_beagle-debuginfo | 0.2-16.3.i586
v | dist | libbeagle | 0.2.3-40.32.i586
i | installed | libbeagle | 0.2.3-33.i586
v | dist | libbeagle-devel | 0.2.3-40.32.i586
i | installed | libbeagle-devel | 0.2.3-33.i586
And a list of commands:
[joe@posthaste ~]$ rum —help
Warning: No command found on command line.
Usage: rum <command> <options> …
The following options are understood by all commands:
—version Print client version and exit
-V, —verbose Verbose output
-p, —no-plugins Don’t load yum plugins
-C, —cache-only Run entirely from cache, don’t update cache
—normal-output Normal output (default)
-t, —terse Terse output
—quiet Quiet output, print only error messages
—read-from-file=Get args from file
—read-from-stdin Get args from stdin
—ignore-rc-file Don’t read rum’s startup file (~/.rumrc)
—ignore-env Ignore the RUM_ARGS environment variable
-?, —help Get help on a specific command
Package management commands:
file-list (fl) List files within a package
info (if) Show detailed information about a package
info-conflicts (ic) List a package’s conflicts
info-obsoletes (io) List a package’s obsoletes
info-provides (ip) List a package’s provides
info-requires (ir) List a package’s requires
install (in) Perform an install
list-updates (lu) List available updates
lock-add (la) Add a lock
lock-list (ll) List locks
lock-remove (lr) Remove a lock
orphans (or) List installed packages that don’t exist in
repositories
package-file (pf) List packages that own the files provided
packages (pa) List the packages in a repo
remove (rm) Perform a removal
search (se) Search packages
update (up) Perform an update
what-conflicts (wc) List packages that conflict with what you specify
what-provides (wp) List packages that provide what you specify
what-requires (wr) List packages that require what you specify
System commands:
clean (cl) Clean cache
disable (di) Disable a repository
enable (en) Enable a repository
refresh (ref) Refresh the package cache
repo-add (sa, ra) Add a repository
repo-delete (sd, rd) Remove a repository
repos (sl, ca, ch) List active repositories
Other commands:
help A list of all of the available commands
For more detailed information about a specific command,
run ‘rum <command name> —help’.
Now we just need some sort of rum drinking game.