[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:48352] Re: etch版d-iのpreseedファイルでGRUB/LILOをスキップする方法



有家@松山記念病院@自己レスです。

さきほど何とかlilo-installerをskipできました。
くるし紛れのチカラ技で、本当にこれでいいのかどうか不安ですが、
私の方法を整理してみます。

●目的: etch版d-iでGRUB/LILOのインストールをskipする。

●方法: /usr/lib/post-base-installer.d 以下に
「/var/lib/dpkg/info/lilo-installer.isinstallable に "exit 1" を
上書きし、これに実行属性を与える」ためのashスクリプトを書く。

●疑問点:
後述する上記スクリプトに 80skip-lilo-installer という名前をつけてみました。
この最初の数字は処理される順序を表わすものと思われますが、
"80" が妥当なのかどうかよくわかりません。
これは /usr/lib 以下の他のディレクトリに置く方がより適切なのかも知れません。
このあたりはd-iの動作(処理の順序)をよく知らないため、
まったくのヤマカンです。

●詳細:
GRUBのmenu.lstでは以下のようなエントリーでd-iを起動します。
- menu.lst(一部)------------------------------------------
..
title Install Debian4.0 Etch with IDE-HDD#1
root (hd0,0)
kernel /etch/boot/vmlinuz root=/dev/ram devfs=mount,dall \
    vga=0x305 \
    ramdisk_size=10000 \
    DEBIAN_FRONTEND=newt \
    debconf/priority=high \
    debian-installer/locale=en_US \
    console-keymaps-at/keymap=jp106 \
    preseed/file=/hd-media/etch/cfg/myconf.cfg
initrd /etch/boot/initrd.gz
..
------------------------------------------------------------

この同じ(hd0,0)のパーティションに debian-40r0-i386-netinst.iso を置き、
/etch/cfg/myconf.cfg のGRUB/LILO 前後の記述を次のようにします。
- myconf.cfg(一部)--------------------------------------------------
..
d-i grub-installer/skip    boolean true
d-i preseed/early_command  string  /hd-media/etch/install/di_early.sh
d-i nobootloader/confirmation_common note
..
d-i preseed/late_command   string  /hd-media/etch/install/di_late.sh
..
----------------------------------------------------------------------
これらの行の順序はあまり関係ないのかも知れません。
d-iが適宜、処理しているようにも思えます。

/etch/install 以下には、次のような内容の di_early.sh と di_late.sh を置きます。
- di_early.sh ------------------------------------------------------
#!/bin/sh
    infdir=/var/lib/dpkg/info
    lisf=$infdir/lilo-installer.isinstallable
    pstdir=/usr/lib/post-base-installer.d
    cmdf=$pstdir/80skip-lilo-installer

# create '80skip-lilo-installer' under /usr/lib/post-base-installer.d
    if [ -d $pstdir ]; then
        echo "echo exit 1 > $lisf" > $cmdf
        echo "chmod 755 $lisf"    >> $cmdf
        chmod 755 $cmdf
    fi
# always exit successfully
    exit 0
# end of di_early.sh
--------------------------------------------------------------------
この di_early.sh が、冒頭に述べた
「/var/lib/dpkg/info/lilo-installer.isinstallable に "exit 1" を上書きし、
これに実行属性を与える」ためのashスクリプトです。

このあとの di_late.sh は ramdisk環境を
/target/root/var 以下に保存するためのスクリプトで、
これがけっこう解析に役立ちました。
本題とは直接関連しませんが参考までに載せてみます。
- di_late.sh -------------------------------------------------------
#!/bin/sh
    target=/target
    ramdir=/root/var/d-i_ramdisk

# copy d-i files under /root/var/d-i_ramdisk
    mkdir -p $target/$ramdir
    for i in /*; do
        case $i in
            /bin | /etc | /lib | /root | /sbin | /tmp | /usr | /var )
                cp -a $i $target/$ramdir    # recursive copy
                ;;
            * ) # file copy and make dummy directory
                test -f $i && cp -p $i $target/$ramdir
                test -d $i && mkdir -p $target/$ramdir/$i
                ;;
        esac
    done
# always exit successfully
    exit 0
# end of di_late.sh
--------------------------------------------------------------------

svnでd-iのソースをダウンロードして、その厖大さに圧倒されていました。
ソースを読めばもっと確かなことが言えるとは思うのですが、力尽きました。

-- 
pba00250@xxxxxxxxx
-------------------------
有家佳紀  Yoshinori Ariie