On Wed, Dec 19, 2012 at 4:26 AM, Alan McKinnon <[email protected]> wrote: > On Tue, 18 Dec 2012 17:55:16 -0500 > Michael Mol <[email protected]> wrote: > >> On Tue, Dec 18, 2012 at 9:33 AM, Alan McKinnon >> <[email protected]> wrote: >> > On Tue, 18 Dec 2012 09:08:53 -0500 >> > Michael Mol <[email protected]> wrote:
[snip] >> > #2 already has a solution, it's called an init*. Other solutions >> > exist but none are as elegant as a throwaway temporary filesystem >> > in RAM. >> >> I find virtually nothing elegant about a temporary filesystem in RAM. >> It duplicates code that already exists on the system, and it >> represents and additional maintenance step in system upgrades. It >> seems almost a given that if someone is keeping multiple kernel images >> on a system, they're not updating the initr* for each when binaries >> that would be found in each are upgraded or rebuilt. > > You could level the same criticism at boot loaders... > > The also duplicate functionality in the main system they launch (albeit > read-only at least in legacy grub) in the fs drivers, are only used > briefly at boot-time and have to be maintained. True, the bootloader > doesn't contain a *copy* of the main system files which is where the > parallel breaks down. Bootloaders tend to be updated in a targeted or atomic fashion. This remains true even as they become more and more like full operating systems. > > init* may well suck, but they suck less than any other possible > solution. I disagree. I think defining boot stages, and fixing cross-stage dependency errors, is a far better solution. > And they come with one more benefit - the community has > agreed on how they work so they form a standard of sorts > >> >> In Debian, Ubuntu and others, this is handled by a post-install hook >> where the initr* image is rebuilt. To me, this honestly feels like a >> hack. In something like Gentoo, I'd rather see package placement >> driven by whether or not it will be needed to get all mount points >> mounted. If that means i18n databases under something like /boot/data, >> that seems reasonable. To me, the only cases where initr* feels like >> the right solution are things like netboot or booting from read-only >> media. > > Let's not forget the prime reason why init* exists - so that binary > distros can boot and still have all kernel modules required at launch > time compiled as modules. Another valid use case. > > Bootstrap code and operation is ugly, always has been and always will > be. It also tends to be inflexible unless you use a slipstreaming > technique (my invented description of how init* works). I still think > the solution is elegant given the real-world requirements imposed on > systems. And I still think that, outside of scenarios where workarounds don't exist, it's an ugly hack and a cop-out. -- :wq

