From owner-freebsd-stable Mon Mar 22 19:32:57 1999 Delivered-To: freebsd-stable@freebsd.org Received: from zippy.cdrom.com (zippy.cdrom.com [204.216.27.228]) by hub.freebsd.org (Postfix) with ESMTP id 455E814DA7 for ; Mon, 22 Mar 1999 19:32:56 -0800 (PST) (envelope-from jkh@zippy.cdrom.com) Received: from zippy.cdrom.com (localhost [127.0.0.1]) by zippy.cdrom.com (8.9.3/8.9.3) with ESMTP id TAA44885; Mon, 22 Mar 1999 19:32:14 -0800 (PST) (envelope-from jkh@zippy.cdrom.com) To: Mike Meyer Cc: stable@FreeBSD.ORG Subject: Re: Musings about tracking FreeBSD... In-reply-to: Your message of "Mon, 22 Mar 1999 12:11:22 PST." Date: Mon, 22 Mar 1999 19:32:14 -0800 Message-ID: <44883.922159934@zippy.cdrom.com> From: "Jordan K. Hubbard" Sender: owner-freebsd-stable@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG OK, not to be overly presumptuous or anything, but I think I can sum up this whole thread by simply stating what my wish list has always been in this regard: In my ideal FreeBSD, each and every software component installed anywhere on a permanently mounted hard disk has been installed through a common interface which treats the whole collection of bits, regardless of where it resides, as fundmentally under its [the package system's] control. Even when bits come in via some back way (a 3rd party's errant installer, perhaps), there is an option to tell the system to go "own" them after the fact which is easy to use and fairly intelligent (e.g. it can even be done automatically via a nightly/weekly/... inventory scan). This central accounting mechanism buys the user various CVS-like operations on binary filesets including occlusion detection and "push-down", dependency checking and auto-loading, history (roll-back) information going as far back as free space permits, etc. The average user never upgrades a specific software component so much as they "subscribe" to a given branch for some period of time of their own choosing, and during which time the "upgrade" command simply runs out and grabs whatever new components the user needs by comparing remote and local inventory lists of what is installed and what is available on some given mirror site. Since full history information is kept, the user can even do "crazy" things like jump from 3.1 to 4.0-current, ride that for awhile, and then decide to jump back to 3.1-stable. Since upgrading a package like "bin" (which is now also itself composed of many smaller binary package sets) stores push-back information for the version being upgraded from, moving to 4.0-current never destroys the 3.1 binaries which were there before. Getting back is a simple matter of requesting an Undo on the 4.0-current binary upgrade package, bringing you back to 3.1. Then one could install the latest 3.1-stable bin upgrade from the 3.1-stable snapshot package building machine and voila, now up to the very latest 3.1-stable. For the more fastidious at heart, it is also possible to prune the 4.0-current experience completely from the history mechanism so that it appears as if a direct 3.1 to 3.1-stable upgrade occurred. Since everything is a package in my ideal FreeBSD, bin is also no different from bash as far as the package system is concerned, except perhaps that bash happens to depend on (some subcomponent of) bin and not vice-versa. Since storage prices have fallen into the $10/GB range and the history mechanism allows dynamic allocation of the "history buffer", that is to say it prunes old history information when more space is desired by new package or upgrade than currently exists, most users are willing to keep a lot of history around and that means that upgrades can now become fully automatic. Not only are they fully automatic, but they change the way users fundamentally regard upgrades. If one finds that one's "fvwm" has suddenly stopped working, for example, but this wasn't noticed for several weeks and many nightly upgrades, all is not lost, you just ask the package system to push fvwm back to whatever state it was in a week ago and then you add it to the auto-upgrade exception list using the package manager. Voila, one working fvwm that won't just stop working again on your next auto-upgrade. If at some later time you decide to test the waters again, you can also just ask for fvwm specifically to be upgraded and see if it works. If not, you just back up again and wait a little longer. Being the single gate through which all software gets on a FreeBSD system, the new package system allows for a very flexible number of styles and has abstracted the concept of "user input" enough that it can be gotten in a wide variety of ways, including being driven via non-interactive scripts. For the power-user, everything is handled by the hyperkinetic GUI-front-ended package handling system from hell which lets you inspect your current inventory at a glance, (potentially) upgrade all or some of it from FTP/NFS/UFS/CD/DOS/carrier pigeon media, view dependency trees, clone one system from another, you name it. For the hacker, there's an extensive API of functions for frobbing the package system via one's own front-end interfaces or writing TCL/PERL scripts that use packages in clever ways, etc. There are also extensive hooks for setting security policy, a package being potentially confined to installing things only under certain sub-trees or supporting only a restricted number of setup options - everything the package does in talking to the user or modifying the system is done via secure TCL (it's my dream, I get to choose the scripting language, OK? :-) so that built-ins can be disabled or redirected depending on the outer "security environment" that the package add routines are excuting in. For the beginning user, there's basically just one command which does a big Q&A session once with the user and then remembers it all in order to be as fire-and-forget from there on out as possible. To configure a system they type setup, a command which presents some basic menus created by calling the configuration hooks directly inside the various registered packages. This makes the configuration menu structure something which is highly tailored to the user's exact installation - what they don't have, they don't see configuration information for (and vice-versa). The package tools also helps the tech support people considerably in that they're able to get a comprehensive inventory of everything on a system as well as anything potentially not listed in that inventory or modified from the last time an inventory was taken. It's essentially tripwire, CVS, pkg_info and emacs (just checking to see if you're paying attention) all rolled into one and, of course, it rocks because, well, it's the ideal FreeBSD we're talkin' about here. :-) Waking up and coming back to the real world for a moment here, I can say that some of this packaging technology exists now but is still in a very green state and requires egcs to compile due to its more advanced use of C++ than 2.7.2.x can handle. It also requires Turbovision and/or Qt as interface back-end libraries and both need to be egcs compiled to work properly. All of this makes it a bit hard to release it for general play-time and it's really also not quite to the state of being ready for peer-review yet in any case, so that's why it's not been more widely released. Even with the work that's been done to date and the work we're immediately contemplating, however, it's still a pale fraction of the "wish list reality" I depict above. That's where I'd really like to *get* to, not where I expect to get to right away (unless a lot of people become suddenly infected with the idea and start coding like possessed maniacs, I guess). :) - Jordan To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message