Solution that works for me:

 - Compile the kernel with everything built-in leaving modules for the 
   few things that really need to be reloadable. Turn everything in 
   the bloody thing off. This avoids the need for a kernel-specific
   filestem in the initrd.

 - This since you don't need any modules in the initrd a 
   simple, static solution with busybox and init something
   like:

        #!/bin/busybox sh

        /bin/busybox --install -s;
        sync;

        mount -t proc   none /proc;
        mount -t sysfs  none /sys;

        /sbin/mdadm     --verbose --assemble --scan;
        /sbin/vgscan    --verbose;
        /sbin/vgchange  --verbose -a y /dev/vg00/root;

        mount /dev/vg00/root /mnt/root;
        mount;

        exec /sbin/switch_root /mnt/root /sbin/init;

    Add whatever you need for encryped filesytems, but it 
    won't have to change over time unless you change the 
    boot requirements.

    Add a copy of busybox, switch_root, init, a static copy of lvm 
    into something like /boot/standard-init.cpio.gz.  Mine is in 
    /usr/src/initrd with two sub's "standard" and "rescue" differing 
    only in the init script. A second initrd the last line commented 
    out as /boot/rescue-init.cpio.gz for cases where switch_root gets 
    unhappy.

        #!/bin/bash --login

        cd $(dirname $0);

        for i in */init;
        do
            dir=$(dirname $i);
            name=$(basename $dir);

            (
                cd $dir;
                kleenfilz;
                find .          |
                cpio -o -Hnewc  |
                gzip -9v        > /boot/$name.cpio.gz) &
        done

        wait;

        ls -lt /boot;

        exit 0;

    builds and installs the initrd's easily enough ("kleenfilz"
    is a shell sub that removes editor cruft, no reason to leave
    *~ files :-).

 - Add /etc/grub.d/09_custom (i.e., into the config *before* the
   junk that 10 adds in) like the one below. Note that this uses
   the symlink /boot/vmlinuz with the static init. The "current"
   portion comes from a second "vmlinuz.stable" symlink I curate
   manually to the last kernel that lived for a while and never,
   ever caused problems [not that I've ever botched a config
   siwtch. no, really...].
   
   The standard link and fixed init-script allow a static copy of the 
   grub config file with "/boot/vmlinuz" and "/boot/standard.cpio.gz"
   hardwired.

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry 'current standard' --class gentoo --class gnu-linux --class gnu 
--class os $menuentry_id_option 
'gnulinux-simple-e18157fe-1330-4cbb-8374-125d9c26e360' {
        load_video
        if [ "x$grub_platform" = xefi ]; then
                set gfxpayload=keep
        fi
        insmod gzio
        insmod part_msdos
        insmod xfs
        set root='hd0,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 
--hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 
e18157fe-1330-4cbb-8374-125d9c26e360
        else
          search --no-floppy --fs-uuid --set=root 
e18157fe-1330-4cbb-8374-125d9c26e360
        fi
        echo    'Loading Linux ...'
        linux   /boot/vmlinuz root=/dev/sdc1 ro
    echo    'Loading initrd ...'
    initrd  /boot/standard.cpio.gz
}

menuentry 'current rescue' --class gentoo --class gnu-linux --class gnu --class 
os $menuentry_id_option 'gnulinux-simple-e18157fe-1330-4cbb-8374-125d9c26e360' {
        load_video
        if [ "x$grub_platform" = xefi ]; then
                set gfxpayload=keep
        fi
        insmod gzio
        insmod part_msdos
        insmod xfs
        set root='hd0,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 
--hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  
e18157fe-1330-4cbb-8374-125d9c26e360
        else
          search --no-floppy --fs-uuid --set=root 
e18157fe-1330-4cbb-8374-125d9c26e360
        fi
        echo    'Loading Linux ...'
        linux   /boot/vmlinuz root=/dev/sdc1 ro
    echo    'Loading initrd ...'
    initrd  /boot/rescue.cpio.gz
}


 - Run grub2-mkconfig once. 

 - Never touch the grub.cfg file ever again (unless you switch the
   boot filesystem type). If I went from XFS -> btrfs for the root
   filesystem I'd have to hack the "insmod xfs" entries, nothing
   more. 

-- 
Steven Lembark                                             3646 Flora Pl
Workhorse Computing                                   St Louis, MO 63110
lemb...@wrkhors.com                                      +1 888 359 3508

Reply via email to