Raimo Niskanen <[email protected]> writes:

> You can always "mount -t ffs / /dev/sd1a".

Thanks for that! I didn't want to mess the real /etc/rc so I end up with
the following script that I put in /bin.
#!/bin/ksh

set_kbd() {
    local _layout _resp _default=1
    
    [[ -x /sbin/kbd ]] || return
    while :; do
        echo -n "Keyboard layout (1: fr; 2: fr.dvorak; 3: us)? [$_default] "
        read _resp && : ${_resp:=$_default}
        case $_resp in
            1) _layout=fr ;;
            2) _layout=fr.dvorak ;;
            3) _layout=us ;;
        esac
        [[ -z $_layout ]] || { /sbin/kbd $_layout && break; }
    done
}

# Set ROOT and RAID global var
get_devname() {
    local _str _arr

    _str=`ed -s !dmesg <<EOF
/^root on/,p
q
EOF`
    set -A _arr $_str

    ROOT=${_arr[2]}
    RAID=${ROOT%%a*}d
}

build_fstab() {
    cat <<EOF > /etc/fstab
/dev/${ROOT} / ffs rw 1 1
swap /tmp mfs rw,nodev,nosuid,-s=40960 0 0
/dev/${DECRYPT}f /home ffs rw,nodev,nosuid,noatime,softdep 1 2
/dev/${DECRYPT}e /usr ffs rw,nodev,noatime,softdep 1 2
/dev/${DECRYPT}d /var ffs rw,nodev,nosuid,noatime,softdep 1 2
EOF
}

decrypt() {
    local _str _arr

    bioctl -c C -l /dev/$RAID softraid0

    # Reads revelant bioctl line
    _str=`ed -s !"bioctl -i softraid0" <<EOF
/CRYPTO/,p
q
EOF`
    (( $? )) && return 1

    # Split it
    set -A _arr $_str
    DECRYPT=${_arr[4]}

    return 0
}

# ed needs a /tmp
mount -t mfs -o rw,nodev,nosuid,-s=1000 swap /tmp
get_devname
mount -t ffs /dev/${ROOT} /
set_kbd
decrypt && build_fstab
fsck -p
-- 
Manuel Giraud

Reply via email to