Slax6RC6でのliblinuxliveの処理が変わってる
何とか日本語の処理ができるようになって、最後にliblivelinuxを変更しようとしたら、全然処理の仕方が変わっているじゃない。どうすればいいのか見当がつかない...。
iocharsetで特別に何かしているみたい。
# Find out what iocharset to use iocharset() { debug_log "iocharset" "$*" local CHARSET IOCHARSET # if iocharset is explicitly set at the boot prompt, # return it regardless the locale settings IOCHARSET=$(cmdline_value iocharset) if [ "$IOCHARSET" != "" ]; then echo $IOCHARSET return 0; fi # else find out the iocharset from locale_id output, it should match # some kernel module (after stripping out few of the dashes) IOCHARSET=$(locale_id | cut -d . -f 2- | tr "[[:upper:]]" "[[:lower:]]" | tr -d -) if [ "$IOCHARSET" = "" ]; then return 0; fi find /lib/modules -name "nls_*" | sed -r 's:^.*/|[.]ko$::g' | cut -b 5- | while read CHARSET; do if [ "$(echo $CHARSET | tr "[[:upper:]]" "[[:lower:]]" | tr -d -)" = "$IOCHARSET" ]; then echo "$CHARSET" return 0 fi done return 1 }
なるほどねぇ。
- debug_logでiocharset関数のログを取得
- cmdline_valueでiocharset変数を起動時のコマンドラインから取得
- もしIOCHARSET変数がnullでないなら、IOCHARSET変数を返して終了
ここまでは、分かった。ということは、これ以降は、IOCHARSET変数がnullの場合の処理ということか。さらに分からないなりに処理すると、こんな感じかしら。
- locale_idでIOCHARSET変数をセット
- これでnullなら、そのまま返して終了
- /lib/modules以下でnls_*を読み込んでIOCHARSET変数と比較
- 合致したものを返して終了
- 合致したものがなければ異常終了
それならばcodepageな何かする必要はないかな。
それよりも、合致したものがない場合の処理で、/lib/modules以下にnls_utf8.koがないと、このままではエラーになるから、slackwareからコピーしてこなければ。危ない、危ない...。でも、何でnls_utf8.koがないんだろう<消しちゃったかな。
むむ、ランゲージパックではしっかり入っているのに、展開するときに上書きされてしまうみたい。書き込んでいるところは、001-core.lzmということを確認。とりあえず、ここにslackwareからコピーしておこう。.koファイルの日付が2日間ほど違うのが気になるなぁ。
というわけで、liblinuxliveは次のように変更。
fs_options() { debug_log "fs_options" "$*" local NOAUTO IOCHARSET CODEPAGE if [ "$1" = "swap" ]; then echo "noauto,defaults"; return 0; fi NOAUTO=$(cmdline_parameter noauto) if [ "$NOAUTO" = "" ]; then NOAUTO="auto"; fi if [ "$2" = "fstab" ]; then echo -n "$NOAUTO," ; fi echo -n "noatime,users,suid,dev,exec" IOCHARSET=$(iocharset) CODEPAGE=$(cmdline_valuse codepage) if [ "$1" = "vfat" ]; then echo -n ",quiet,umask=0" if [ "$IOCHARSET" ]; then if [ "$CODEPAGE" != "" ]; then echo ",iocharset=$IOCHARSET,codepage=$CODEPAGE" else echo ",iocharset=$IOCHARSET" fi fi fi if [ "$1" = "ntfs" ]; then echo -n ",ro" if [ "$IOCHARSET" ]; then echo ",nls=$IOCHARSET" fi fi if [ "$1" = "ntfs-3g" ]; then echo ",locale=$(locale_id)" fi }