|
|
Subscribe / Log in / New account

Structural impediments

Structural impediments

Posted Nov 7, 2006 14:02 UTC (Tue) by brugolsky (subscriber, #28)
Parent article: Big decisions loom for Fedora

Fedora has accumulated a number of structural impediments that make certain improvements difficult, and keeps the average sysadmin mired in operational issues, rather than incremental improvements to Fedora that can be pushed back upstream.

Top of the list, methinks, is RPM/yum. RPM provides five things: a pristine source + patches build technology, a container for bits, versioning, dependency management, and scriptlets that are triggered on install/update/removal.

When managing more than one host, or virtual machines on a host, RPM shows its weaknesses compared to Conary, or other potential solutions. As a Fedora user, I keep downloading the same bits, because the contents of the (N+1)th release of a package is often nearly identical to the Nth release -- especially if that package has "font," "langpack," or "i18n" in its name! RPM makes it unnecessarily difficult to maintain a set of hardlinked chrooted environments, or virtual disks, snapshots, etc., because it churns the filesystem. Because sharing an image is inordinately difficult, I have prelink turned off, so that identical packages installed on different hosts have identical files.

On the package building side, the spec file format suffers from all the traditional problems of poorly implemented macro languages and policy, and has discouraged abstraction and higher-level tools (such as the use of the various fedora-rpm* tools). Code is replicated hundreds of times, with slight variations (e.g. $RPM_BUILD_ROOT v. %{buildroot}, "make install" v. %makeinstall) all throughout the distro, rather than being centralized into recipes for GNOME apps, KDE apps, kernel modules, ... Packages are littered with scriptlets that only work in the forward direction, and there is no easy way to hook it to do otherwise, because all of the scriplets are open-coded.

Maintaining local versions of packages is a nightmare. Rather than being able to specify that I want my build to be the same as the upstream build, except that I want my locally-maintained path series applied, and different options to configure, instead I have to hand-edit the spec file every time I roll a package forward. On FC4, I have 95 locally built packages, most of which involved some hand-editing, some to apply patches (which have been rejected or dropped upstream, for whatever reason), others to fix up things like SELinux and XFree86/Xorg dependencies/build-options from Fedora development packages.

Another problem is network config. The initscripts that Fedora inherited from Red Hat Linux are more suitable to the BSD-like Linux-2.0 view of the world. Alexey Kuznetsov and others added a mind-boggling array of networking functionality starting with Linux-2.2 (circa Red Hat Linux 6.x timeframe), and it is largely useless in Fedora without lots of custom scripting. For the most part, the initscripts package does nothing useful with: secondary IP addresses, policy routing, packet marking and filtering, and traffic control and QoS. NetworkManager addresses some of these issues for wireless users, but various important pieces are missing. The /etc/net framework provides an improved static configuration, but there is as yet no dynamic network management framework that would provide the simple interface of a Cisco router, despite the Linux kernel being more featureful than Cisco IOS in many regards. [Quagga offers a limited subset of Cisco CLI functionality, but because it is cross-platform, does not solve the whole problem of interface and link management, etc. The commercial version of Zebra in ZebOS includes some of the desired functionality.]

Also on my hit list is the sorry state of LVM snapshotting. Things have only stabilized in the last six months, and the current snapshot implementation is very slow and only suitable for taking backups. Running with multiple snapshots brings a fast block device to a crawl. The wandering log technology in Reiser4 is interesting from an in-filesystem snapshot perspective, but that appears to be going nowhere fast. One can only hope that something suitable will find its way into Ext4.

I am hopeful that the intense interest in virtualization, as well as the needs of OLPC will spur Red Hat and the Fedora Project to address the need to make Fedora easily configured and managed, and readily branched for development, customization, or isolation.


to post comments

Interesting post

Posted Nov 7, 2006 16:03 UTC (Tue) by scottt (guest, #5028) [Link]

I summarized the problems you raised as follows:
  1. update download size is large since Fedora does not use delta RPMs esp. font langpack and i18n packages
  2. RPM and prelink make it hard to maintain identical program binaries for multiple hard linked chroot environments or disk images
  3. The spec file format that control RPM building is a terrible macro language. The same scriptlets gets copy-and-pasted into many packages and there's no way for the sysadmin to replace the scripts system wide.
  4. maintaining local packages that apply custom patches and pass different compile time options to configure should be easier.
  5. network configuration: secondary IP addresses, policy routing, packet marking and filtering, and traffic control and QoS.
  6. LVM snapshots are slow.
I agree with most of your comments.

For problem 1, my understanding is that the Fedora project would not use an update system with that only downloads binary deltas like firefox's because their mirrors would not like to run any custom server programs.

I agree that the spec language sucks whole heartedly. Here's an example, bug 159792 . Dave Jones wanted %patch to use a "fuzzy level" switch of "-F1". Costomizing the behavior of "patch" and "configure" should be easy. Then there's the one that rpmbuild expands macros even in the changelog section of the spec file.

I believe conary has a way to deal with the cut-and-paste scriptlet problem by tagging a GNU info file or gconf spec file as such and providing a way for the sysadmin to specify the scripts to install them.

Prelink provides valuable address space randomization protection for most systems and I think Fedora is right to have it on by default.

For maintaining custom packages, there's the additional problem of making sure your package doesn't get overrided by anything that comes from the update repository.

Structural impediments

Posted Nov 7, 2006 17:50 UTC (Tue) by PaulDickson (guest, #478) [Link] (1 responses)

Maintaining local versions of packages is a nightmare. Rather than being able to specify that I want my build to be the same as the upstream build, except that I want my locally-maintained path series applied, and different options to configure, instead I have to hand-edit the spec file every time I roll a package forward.

Actually, this has been solved in Sylpheed's spec file for several years. All I have to do is:

SYLPHEED_CONFIGURE_FLAGS="--disable-ipv6" SYLPHEED_REL_DIST="1mypkg.fc6" rpmbuild -tb --clean sylpheed-2.2.7.tar.bz

Structural impediments

Posted Nov 9, 2006 3:51 UTC (Thu) by proski (subscriber, #104) [Link]

The solution should be across the board, not just for one package. Besides, I don't think you cannot specify additional patches on the command line, even for Sylpheed.

Structural impediments

Posted Nov 9, 2006 10:26 UTC (Thu) by nix (subscriber, #2304) [Link]

LVM snapshots aren't terribly useful for backups either because snapshotting / may deadlock. (It's rare, but it can happen, especially when under significant memory pressure.)

The last time I looked, the LVM docs didn't actually *say* that snapshotting the filesystem(s) on which /sbin/lvm and /etc/lvm.d reside is unsupported :/


Copyright © 2025, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds