お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2009-04-17 03:16:45

hir0
メンバ
登録日: 2008-09-28

起動USB と syslinux.cfgの設定

https://forums.ubuntulinux.jp/viewtopic.php?id=4527

1、テキストエディタで以下を書き込み dev.cfg と言う名前で保存して下さい。

[起動デバイス]
ubuntu=

[マウント名]
USBmem=

[起動ディスクデバイス]
USBdev=

[カーネルバージョン]
Kernel=

UbuntuにはUbuntuがインストールされているドライブ。
USBmemはUSBメモリのマウント場所。
USBdevはUSBメモリのデバイス名。

「例」

[起動デバイス]
ubuntu=sda3

[マウント名]
USBmem=disk

[起動ディスクデバイス]
USBdev=sdb1

[カーネルバージョン]
Kernel=2.6.27-11-generic

2、新しいbootkernel.sh と dev.cfg を同じディレクトリ(デスクトップに有ると仮定します)に置き端末から
$ cd ~/デスクトップ
$ sh bootkernel.sh

完成です。


起動すると Boot: と表示されるので /vmlinuz  と入力してエンターキーを押すとUbuntuが起動します。
この入力作業はsyslinuxの起動オプションで省略出きるはずですが分かる方がいれば宜しくお願いします。


*起動用のファイルを置く領域はFAT32を使用して下さい。
*USBメモリはマウントしてから行って下さい。
*起動ディスクですのでdev.cfgを間違えて記入した場合USBメモリでは無くHDDの起動部分を書き換えてしまう恐れが有ります。
*GRUBのインストール同様に十分注意して下さい。
*CDに応用することでUSBメモリにインストールしたUbuntuの起動ディスクとしても使用可能(なハズ)
*アップデートした場合はそのまま使用すると古いカーネルで起動してしまいますので新しいカーネルで起動して起動USBディスクを作り直してください。
*GRUBのないUbuntuで起動USBディスクを作り直さないまま古いカーネルを削除した場合は起動しません。その場合は手動で新しいカーネルイメージをUSBメモリにコピーします。
*カーネルのバージョンは端末から $ uname -r     で表示されます。

徐々に変更していきます。
[訂正]4/19/21:30実行部分は保留

コード:

#!/bin/bash


fl=0
fla=0
ans=
setnum=0
#declare -a mountdev
#表示のクリア
#halプロパティを順に取得 if {removale} break
clear
for dev in $(hal-find-by-capability --capability storage); do
    vendor=$(hal-get-property --udi $dev --key storage.vendor)
    type=$(hal-get-property --udi $dev --key storage.model)
    plugfree=$(hal-get-property --udi $dev --key storage.removable)
    media=$(hal-get-property --udi $dev --key storage.drive_type)
    devfile=$(hal-get-property --udi $dev --key block.device)
    if [ "${plugfree}" = true ] && [ "${media}" = "disk" ]; then
        break
    fi
done
#rm -f devlist.text ##
echo -e "起動用USBメモリセットアップインフォメーション"
echo -e "\t  [使用するUSBメモリ]"
echo -e "\t  デバイスファイル: $devfile\n\t  ベンダ: $vendor\n\t  モデル: $type\n\t  "
echo -e "--------------------------------------------\n"
echo -e "起動目的のUbuntuのインストール先デバイスの指定"
echo -e "[ 書式(例): /dev/sda2 ] 入力後エンターキー\n"
echo -e "\t入力:"
#カーソル位置
#kキー入力
#tput sc;tput cup 11 13
#read devp 
#num=$(ls $devp/boot|wc -l)
#echo $devp
#fail=($(ls $devp))
#for (( i=0 ; i<$num ; i ++ )); do echo ${fail[i]} >> devlist.text; done
#cat devlist.text|grep kernel* > uplist.text


echo -e "\t セットアップを開始します\n"
echo -e "\t    [Yes or No(y/n)] "
tput sc;tput cup 11 28
read ans
if [ $ans = y ] || [ $ans = n ]; then
    while :
    do
        case $ans in
            y ) echo -e "\t\t処理中です"
                fl=1 
                 break ;;
            n ) echo -e "\t\t中断します"
                fl=0 
                break ;;
        esac
    done
else
    echo -e "\tIt is only 'y' or 'n'"
fi

if [ $fl =  0 ]; then
    exit
fi
#rm -f nonetext 
#rm -f nonefdisk
#rm -f fdiskfile
#rm -f listlist
##mountdev=($(df ${devfile}1))
#for (( i=0 ; i<12; i ++ )); do 
#    echo ${mountdev[i]} >> nonetext;
#done
#mountp=$(cat nonetext|grep /media/disk)
#sudo fdisk -l >> nonefdisk
#cat nonefdisk|grep -w ${devfile}1 > fdiskfile 

systemtype=($(cat fdiskfile))
for (( i=0 ; i<8; i ++ )); do 
    if [ systemtype[i]='FAT32' ]; then
        fla=1
    else 
        echo -e "\t  FAT32ではありません中断します"
    fi
done
if [ $fla = 1 ]; then
    echo -e "\t  ファイルシステム: FAT32"
fi 
echo -e "\t  デバイスファイル: ${devfile}1"
echo -e "\t マウントポイント: $mountp" 
#rm -f nonetext 
#rm -f nonefdisk
#rm -f fdiskfile
#rm -f listlist
#if $fl=1; then
#while :
#do
echo -e  "\t\t完了しました\n"
echo "'\$fl':${fl}"
echo "'\$vname':${vname}"
echo "'\$pdev':${pdev}"
echo "'\$mountp':${mountp}"
echo "'\$devfile':${devfile}"
echo "'\$mountdev':$mountdev" 
 

#    pdev=$(cat dev.cfg|grep ubuntu|cut -f 2 -d =)
#    vname=$(cat dev.cfg|grep Kernel|cut -f 2 -d =)
#    cp /boot/initrd.img-${vname} $mountp/initrd.gz
#    cp /boot/vmlinuz-${vname}  $mountp/vmlinuz
#    echo default vmlinuz >  $mountp/syslinux.cfg
#    echo timeout 0 >>  $mountp/syslinux.cfg
#    echo append  root=/dev/${pdev} initrd=initrd.gz ro quiet splash -- >> $mountp/syslinux.cfg
#    sudo syslinux ${devfile}1
#    sudo sync
#fi 
#if $fl=1; then

#echo "\t\t完了しました\n"

最後の編集者: hir0 (2009-04-19 21:29:42)

オフライン

 

#2 2009-04-17 11:22:16

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: 起動USB と syslinux.cfgの設定

hir0 さん,こんにちは.hir0さんの質問とは別の点が気になりました.
どう表現すれば良いか迷ってます.この #2 を頻繁に編集/追加することになるでしょう.
批判ではありませんので誤解なされませんようお願いします.

hir0さん による投稿:

*起動ディスクですのでdev.cfgを間違えて記入した場合USBメモリでは無くHDDの起動部分を書き換えてしまう恐れが有ります。

最大の懸念事ですので,スクリプトをさらに工夫がすればより安全になります.

問題点:
シェルスクリプトではあるコマンドがエラーになっても基本的に次のコマンドを実行しますので,
#1 のスクリプトでは最もクリティカルな sudo syslinux コマンドを無条件で実行しようとします.
前段階 sudo cp でパスワードを求めているので sudo syslinux で改めてパスワードを求めることもありません.

改善案:
1) 準備段階のエラーで exit でスクリプトを中止する.
USBメモリは一般ユーザで書き込み可能のはずなので sudo syslinux 以外の sudo は削除し,
cp 等事前準備のコマンドがパーミッションその他を理由に失敗するならスクリプトを中断して,
syslinux にまで実行が至らないようにする.

2) syslinux の引数であるUSBメモリのデバイスファイルは他の間違う可能性の少ないデータからスクリプト側で設定する.
例えばUSBメモリに存在するべきファイル(例えばコピーしたばかりのカーネル)に対し,df コマンドで相対/絶対パスのどちらでも

コード:

 $ df USBメモリのカーネルへのパス
 Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
 /dev/sdx1              7788448    219760   7173056   3% /media/disk

の出力が得られるので grep cut コマンドの組み合わせで /dev/sdx1 は取り出せる.

一長一短で悩ましい事項:
時間が無いので,論点が何なのかはまた後で書きます.(多分編集でここに追加します)
A) スクリプトファイルと設定ファイルを起動USBメモリに置くように要請し,
   そのパス -- pwd やシェル変数$0 -- から 2) のデバイスファイルを検出するようにしてはどうか.
B) 設定ファイルの書式をシェルスクリプト式

コード:

# カーネルバージョン
Kernel=2.6.27-11-generic

  にして . コマンド(source コマンド)で取り込むようにしてはどうか.

本当に本当に些細な事柄:

$ sudo chmod u+x bootkernel.sh
$ sh bootkernel.sh

この sudo は不要で,次のコマンドでsh の引数としてスクリプトファイルを指定するなら chmod も不要です.

オフライン

 

#3 2009-04-17 13:55:44

hir0
メンバ
登録日: 2008-09-28

Re: 起動USB と syslinux.cfgの設定

ありがとうございます。
覚えたてのコマンドを並べてスクリプトファイルにしましたがやはり改善すべき箇所だらけなんですね orz,

丁寧な説明で意味や考えはよく理解できましたがまだ私のレベルが「なるほど」と言う箇所と「そんなコマンドが有るんだ」と言う状態なので直ぐに教えを反映して改善が出来ませんが、調べて理解してから応用、変更します。

ただ今回の助言を頂いた箇所で、

B) 設定ファイルの書式をシェルスクリプト式
# カーネルバージョン
Kernel=2.6.27-11-generic
にして . コマンド(source コマンド)で取り込む

が理解出来ませんでした(知識的に足りないので応用にも至らないのですが)
あと変数ですが$1~の変数も理解できていないんですよ。他の人のスクリプト見ても宣言もなければ代入もなく突然現れて使用されているように見えて、、、う〜ん、ふしぎ。

改善案の1、2、A は空き時間をフルに使って早急に取り組みます。

オフライン

 

#4 2009-04-17 15:03:29

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: 起動USB と syslinux.cfgの設定

案 A) と B) に関してはそれが改善なのか改悪なのか議論の分かれるところだと思っています.

A) スクリプトファイルと設定ファイルを起動USBメモリに置くように要請し,
   そのパス -- pwd やシェル変数$0 -- から 2) のデバイスファイルを検出するようにしてはどうか.

つまりユーザに
$ sh /media/disk/シェルスクリプト.sh
または
$ cd /media/disk
$ sh シェルスクリプト.sh
と入力するよう要請(出来れば強制)してそのパス(USBPATHとします)を取得できれば,
ユーザーがUSBメモリへのパスを誤解している場合,そもそもスクリプトが起動出来ないので安全です.

ところが一方で改善案 2) と組み合わせてUSBPATHからデバイスファイルの検出をした場合,
ユーザが間違ってホームディレクトリに置いたスクリプトに対して実行してしまうと
検出されるのは恐らくルートファイルシステムのデバイスファイルとなり逆に危険となるわけです.

簡単に考え付く対策としてパス USBPATH が /media から始まっていることをチェックする方法などがあります.
しかし,それならば hir0 さんのアイディアどおり設定ファイルで USBmem=diskX の設定をしてもらって,
スクリプト側で USBPATH=/media/${USBmem} と代入した方がシンプルだと言えます.

いずれにせよ最終的には hal か何かを使って USBPATH が指すのが Removable Media であることを確認するのが良いと思います.
B) についてはまた次回(?)

オフライン

 

#5 2009-04-17 19:55:14

hir0
メンバ
登録日: 2008-09-28

Re: 起動USB と syslinux.cfgの設定

einundzwanzighundertsechsさんありがとうございます。
今の自分のスキルで出来る方法を行います。
まず、勘違いやミスによる事故を防ぐ工夫ですね。
なんだか今は本来の目的から外れた所に楽しみを見つけてしまった。

オフライン

 

#6 2009-04-18 19:31:28

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: 起動USB と syslinux.cfgの設定

hir0さんへ,4/18/14:10 の修正版をみました.
前半のリムーバブルディスク検索部分のみ実行しました.
最初に見つかったリムーバブルディスクの第一パーティションに syslinux をかける方針ですね.
-- ブートディスクの作成には興味がわかないもので,それで十分なのか私にはちょっと判断がつきかねます.ごめんなさい.
syslinux が FAT パーティションからのブートを仮定しているようですからファイルシステムタイプもチェックすると良いと思います.

案 A) に沿った短いスクリプト.スクリプトを保存したディスクの情報を hal で収集します.

コード:

#!/bin/sh
#set -x
mnt=$(df -P `dirname $0` | tail -1 | awk '{ print $6 }')
#set +x
echo "script resides in $mnt"

_vol=`hal-find-by-property --key volume.mount_point --string $mnt`
[ -z "$_vol" ] && exit 1

dev=`hal-get-property --udi $_vol --key block.device`
typ=`hal-get-property --udi $_vol --key volume.fstype`
echo "device is $dev, type is $typ"

_str=`hal-get-property --udi $_vol --key block.storage_device`
[ -z "$_str" ] && exit 1

bus=`hal-get-property --udi $_str --key storage.bus`
drv=`hal-get-property --udi $_str --key storage.drive_type`
rem=`hal-get-property --udi $_str --key storage.removable`
echo "bus is $bus, drive is $drv, removable is $rem"

2 行目の set -x はコマンドのトレースをONにし,4行目のset +x はトレースをOFFにするものです.
シェルスクリプトのデバッグに便利です.投稿ではコメントアウトしておきました.
実行の様子は

コード:

$ sh /media/disk-1/whatdisk.sh
+ dirname /media/disk-1/whatdisk.sh
+ tail -1
+ df -P /media/disk-1
+ awk { print $6 }
+ mnt=/media/disk-1
+ set +x
script resides in /media/disk-1
device is /dev/sdd1, type is vfat
bus is usb, drive is disk, removable is true

"script resides in ..." の前がトレースによる出力です.
ホームディレクトリに置いたスクリプトで実行すると

コード:

$ sh whatdisk.sh 
+ dirname whatdisk.sh
+ tail -1
+ df -P .
+ awk { print $6 }
+ mnt=/
+ set +x
script resides in /
device is /dev/sdb1, type is ext3
bus is scsi, drive is disk, removable is false

参考になれば幸です.

修正: [ -z $xxx ] を [ -z "$xxx" ] に
追加:
--detect= オプションを追加.--detect=xxx と指定した場合は xxx の情報を収集.オプションを省略するとこれまで通り. 

コード:

#!/bin/sh
die ()
{
    echo $1 >&2
    exit 1
}

unset mnt
for arg in "$@"
do
    case $arg in 
    --detect=*)
        [ -z "$mnt" ] || die "--detect specified twice"
        mnt=${arg#--detect=}
        [ -z "$mnt" ] && die "--detect needs argument"
        ;;
    *)
        die "invalid argument '$arg'"
        ;;
    esac
done

if [ -z "$mnt" ]
then
    mnt=$(df -P `dirname $0` | tail -1 | awk '{ print $6 }')
    echo "script resides in $mnt"
fi

_vol=`hal-find-by-property --key volume.mount_point --string $mnt`
[ -z "$_vol" ] && die "$mnt is not known to HAL"

dev=`hal-get-property --udi $_vol --key block.device`
typ=`hal-get-property --udi $_vol --key volume.fstype`
echo "device is $dev, type is $typ"

_str=`hal-get-property --udi $_vol --key block.storage_device`
[ -z "$_str" ] && exit

bus=`hal-get-property --udi $_str --key storage.bus`
drv=`hal-get-property --udi $_str --key storage.drive_type`
rem=`hal-get-property --udi $_str --key storage.removable`
echo "bus is $bus, drive is $drv, removable is $rem"

最後の編集者: einundzwanzighundertsechs (2009-04-18 22:24:28)

オフライン

 

#7 2009-04-18 23:21:03

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: 起動USB と syslinux.cfgの設定

hir0さんへ
4/18/14:10 版を読んだ上で 案 B) を撤回して,改善案 3) を提案します.

3) 設定ファイルを廃止し,コマンドオプションを使用する.
ユーザが作者の意図通り設定ファイルを書いてくれるとは限りません.
hir0 さんのスクリプトでは,= の右側に空白を入れられたとき,ubuntu= の行が2回書かれたとき,
そのどちらかのubuntu= をコメントアウトのつもりで #ubuntu= とされたとき等が当初の意図とは違った動作になります.
最も危険な設定項目は既に廃止されていますが,設定ファイルのパースは存外に面倒で,意図しない動作の温床です.

当初必須だった設定項目
(i)インストール先デバイス
(ii)インストール先マウントポイント
(iii)カーネルバージョン
(iv)ルートファイルシステム
のうち (i) は改善案 2) の採用で廃止,(ii) は HAL による検出により必須では無くなりました.
残る (iii), (iv) ですが「現在稼働中のカーネルとルートファイルシステム」がユーザが選択する第1候補ではないでしょうか?
設定ファイルで指定が無い場合のデフォルト値として「現在稼働中の...」を採用するならば,
多くのユーザーが空の設定ファイルを作成することになります.

HAL を駆使すれば意図しない固定ディスクへのインストールが防げると判った今となっては,
--install=インストール先マウントポイント
--kernel=カーネルバージョン
--root=ルートファイルシステム
のコマンドラインオプションでユーザに指定してもらい,
/* もちろんユーザが指定したインストール先はしっかり HAL でチェックします */
省略された場合にはそれぞれ,
HAL による syslinux に適した最初のディスク,uname -r によるバージョン,稼働中のルートファイルシステム
をデフォルト値に使う設計は如何でしょうか.

最後の編集者: einundzwanzighundertsechs (2009-04-18 23:31:46)

オフライン

 

#8 2009-04-19 04:41:59

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: 起動USB と syslinux.cfgの設定

hir0 さんへ,4/19/13:16の版を読みました.

コード:

rm -f nonetext
rm -f nonefdisk
中略
for (( i=0 ; i<12; i ++ )); do 
    echo ${mountdev[i]} >> nonetext;
done

前の版に既にこの様な部分があったと記憶していますが,増える傾向にあるのでは方針に STOP をかけさせてください.
nonetext 等,カレントディレクトリに途中作業ファイルを作成するのは止めましょう.
作業ファイルが必要ならばユーザが変更があることを予期しているインストール先に作りましょう.
しかしながら *** 同じ機能は変数(メモリ)やパイプで実現可能です ***

コード:

xxx="${xxx} 「変数 xxx に追加する内容」"

を繰り替えして xxx にデータを溜め,

コード:

for x in $xxx
do
    if [ $x ... ]
    ...
done

で処理するとか,パイプラインを見直すとか,

コード:

y=$(for x in aaa bbb ccc
do
    echo $x
done | grep b)
# y には bbb が設定される

方法は他にきっとあります.

ログファイルをインストール先に作成したり,
次回の起動に備えてホームディレクトリにドットファイルとしてプリファレンスを残すとかはあるとしても,
ユーザの意向も尋ねずカレントディレクトリに複数のファイルを作成したり削除したりする設計は断じて良くありません.
ユーザが同じ名のファイルを作成済みでないとは言えません.
latex の様にユーザがそのことを熟知していることを前提とする場合もありますが
latex の目的は「成果物をカレントディレクトリに生成すること」です.

メモリを使い切りかねないとか(gcc),
中間プロセスがパイプ(標準入力)を受け付けないとか(そんなコマンドは死んでしまえ!!),
どうしても中途作業ファイルを作らねばならない場合のためには /tmp や /var/tmp ディレクトリがあり,
そこを使用するプロセスは別のプロセスとファイル名が被らない様な工夫をしています.
-- その為のコマンド mktemp もあります --

hir0さんの本来の質問に答えられないくせに,別の方向に話題を振っているようで非常に心苦しいです.

最後の編集者: einundzwanzighundertsechs (2009-04-19 11:57:32)

オフライン

 

#9 2009-04-19 17:54:51

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: 起動USB と syslinux.cfgの設定

ヒントになれば幸です.fdisk -l よりも
$ grep -w vfat /proc/mounts

$ grep -w vfat /etc/mtab
を利用しては如何でしょう.
何より一般ユーザ権限で実行可能です.
マウント済みの vfat ファイルシステムの デバイスとマウント場所の一覧なので,
インストール候補のリストの材料として最適です.
残るは HAL でリムーバブルか調べるだけです.

最後の編集者: einundzwanzighundertsechs (2009-04-19 18:28:27)

オフライン

 

#10 2009-04-19 20:20:34

hir0
メンバ
登録日: 2008-09-28

Re: 起動USB と syslinux.cfgの設定

einundzwanzighundertsechs さんありがとうございます。
いや〜投稿が有ったのに気づかずにいました、

いま斜め読みですが意図せぬ操作や入力ミスによる事故とユニークな名称であるか、個々のメンタル面などへの配慮ですね。
変な所(結構初歩な部分)で引っかかって スローペースでやっています。

>hir0さんの本来の質問に答えられないくせに,別の方向に話題を振っているようで非常に心苦しいです.

大元の起動に関しては私の答えは出しているので今の作業は完全に私の楽しみと化していますので話題の方向は同じ方向です。
逆にフォーラムに中途半端な途中過程をメモ代わりにアップしている方がダメかも。
チョットずつ下に埋もれて行ってると思っていましたが。

最終的にはEnterキーを押す判断を委ねるのですが目標としては必要な情報をシステム側が提示してユーザーが実行する。です。メイン部分が出来ているので単純に考えていたのですが(私には)違いましたね。
でも私には背伸びして届くか届かないかの丁度いい課題だと思い取り組んでいます。

(コマンドの使い方については年長組にレベルアップしたかも?)

オフライン

 

#11 2009-04-23 05:28:14

hir0
メンバ
登録日: 2008-09-28

Re: 起動USB と syslinux.cfgの設定

hal が使えて無いけど取り合えず完成。
$ ./bootkernel.sh

コード:

#!/bin/bash

#########################################################
#メモ                                                  
#USBデバイスの検出            /dev/sd*     [OK][devfile]      
#マウント場所                /media/disk*  [OK][mountp]      
#                                                      
#Ubuntuのインストールデバイス /dev/sd*    [OK][ubuntu] 
#カーネルバージョン               [OK][kstinf[]]
#フォーマット形式                             [OK][filetyp]
#########################################################                 
fl=0
fla=0
putnum=0
setnum=0
#--------------------------------------------------------
#表示のクリア
#halプロパティを順に取得 if {removale} break
#全てのリムーバルディスクを列挙して選択パターンも有り
# hal-get-property --udi <udi> --key <key> 
#--------------------------------------------------------
clear
for dev in $(hal-find-by-capability --capability storage); do
    vendor=$(hal-get-property --udi $dev --key storage.vendor)
    type=$(hal-get-property --udi $dev --key storage.model)
    plugfree=$(hal-get-property --udi $dev --key storage.removable)
    media=$(hal-get-property --udi $dev --key storage.drive_type)
    devfile=$(hal-get-property --udi $dev --key block.device)
    
    if [ "${plugfree}" = true ] && [ "${media}" = "disk" ]; then
        break
    fi
done
#-------------------------------------------------------
#USBストレージマウントポジション
#-------------------------------------------------------
stinf=($(df ${devfile}1))
for (( i=0; i<${#stinf[*]}; i++ )) do
    newinf=${stinf[i]}
done    
mountp=$(echo $newinf)
arr=($(df /))
ubuntu=${arr[6]}
if [ $mountp = /dev ]; then
    echo -e "USBメモリをマウントして下さい"
    exit
fi
dev=$(hal-find-by-property --key volume.mount_point --string $mountp)
filetyp=$(hal-get-property --udi $dev --key volume.fstype)
#echo "  $filetyp  $mountp ${stinf[11]}"
#-------------------------------------------------------
#表示部
#-------------------------------------------------------
if [ $filetyp = 'vfat' ]; then
    fat='FAT'
else
    echo -e "FAT32でフォーマットして下さい,中止します"
    exit

fi
echo -e "起動用USBメモリセットアップインフォメーション"
echo -e "\t  [使用するUSBメモリ]"
echo -e "\t  デバイス    : $devfile\n\t  マウント位置: $mountp\n\t  フォーマット: $fat"
echo -e "\t  ベンダ      : $vendor\n\t  モデル      : $type\n\t"
echo -e "--------------------------------------------\n"
echo -e "\t使用しているカーネルを選択して下さい"
echo -e " 左の番号を入力してエンタ−キーを押してください"

    
#--------------------------------------------------------
#カーネルバージョンの取得
#-------------------------------------------------------- 
kstinf=($(ls /lib/modules))
echo ''
#--------------------------------------------------------
#カーネル選択
#--------------------------------------------------------
while :
do
    for ((u=0; u<${#kstinf[*]}; u++)) do
        if [ "$u" -eq "$putnum" ]; then
            attbl[$u]="tput rev"
        else
            attbl[$u]=""
        fi
    done
    for ((i=0; i<${#kstinf[*]}; i++)) do
        tp=`expr $i + 1`
        tput cup `expr $i + 12`
        echo -e "\t  [`expr $i + 1`]: `${attbl[$tp]}` ${kstinf[i]} `tput sgr0`"
    done
    echo -e "\n\t 入力:"
    if [ "$putnum" -eq 0 ]; then
        tput cup `expr ${#kstinf[*]} + 13` 15
        read cip
        for ((jag = 0; jag<=${#kstinf[*]}; jag ++)) do
            if [ $cip == $jag ]; then
                fla=1
                break
            else
                fla=0
            fi
        done
        if [ $fla = 0 ]; then
            echo -e "不正な入力値です終了します"
            exit
        fi
        if [ "$cip" -lt 1 -o "$cip" -gt ${#kstinf[*]} ]; then
            putnum=0
        else
            putnum=$cip
            echo -e "\t ${kstinf[`expr $putnum - 1`]} を選択しました"
            break 
        fi
    fi
done
vm=$(ls /boot | grep vmlinuz-${kstinf[`expr $putnum - 1`]})
ini=$(ls /boot | grep initrd.img-${kstinf[`expr $putnum - 1`]})
#--------------------------------------------------------
#表示部
#--------------------------------------------------------
echo -e "\n\t セットアップを開始します\n" 
echo -e "\t$vm\n\t$ini\n\t'syslinux'"
echo -e "以上のファイルを使用します,新たにsys.confを生成します\n"
echo -e "\t    [Yes or No(y/n)] "
#--------------------------------------------------------
#y,n 選択
#--------------------------------------------------------
tput sc;tput cup 22 28
read ans
if [ $ans = y ] || [ $ans = n ]; then
    while :
    do
        case $ans in
            y ) echo -e "\t\t処理中です"
                   fl=1 
                break ;;
            n ) echo -e "\t\t中断します"0 

                   fl=0 
                   break ;;
        esac
    done
else
    echo -e "\tIt is only 'y' or 'n'"
fi
#--------------------------------------------------------
#n選択時処理
#--------------------------------------------------------
if [ $fl =  0 ]; then
    exit
fi
#--------------------------------------------------------
#y選択時処理
#--------------------------------------------------------
if [ $fl = 1 ]; then 
    cp /boot/$vm $mountp/vmlinuz
    cp /boot/$ini  $mountp/initrd.gz
    echo default vmlinuz >  $mountp/syslinux.cfg
    echo timeout 0 >>  $mountp/syslinux.cfg
    echo append  root=$ubuntu initrd=initrd.gz ro quiet splash -- >> $mountp/syslinux.cfg
    sudo syslinux ${devfile}1
    sudo sync
    echo -e "[使用方法]\n起動USBメモリを挿して起動して下さい"
    echo -e "Boot:と表示されるので /vmlinuz  と入力してエンターキーを押してください"
fi

#echo -e "$vm \n$ini\n$mountp\n$devfile\n$ubuntu"

オフライン

 

Board footer

Powered by FluxBB