
Ubuntu日本語フォーラム

ログインしていません。
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)
オフライン
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 も不要です.
オフライン
ありがとうございます。
覚えたてのコマンドを並べてスクリプトファイルにしましたがやはり改善すべき箇所だらけなんですね orz,
丁寧な説明で意味や考えはよく理解できましたがまだ私のレベルが「なるほど」と言う箇所と「そんなコマンドが有るんだ」と言う状態なので直ぐに教えを反映して改善が出来ませんが、調べて理解してから応用、変更します。
ただ今回の助言を頂いた箇所で、
B) 設定ファイルの書式をシェルスクリプト式
# カーネルバージョン
Kernel=2.6.27-11-generic
にして . コマンド(source コマンド)で取り込む
が理解出来ませんでした(知識的に足りないので応用にも至らないのですが)
あと変数ですが$1~の変数も理解できていないんですよ。他の人のスクリプト見ても宣言もなければ代入もなく突然現れて使用されているように見えて、、、う〜ん、ふしぎ。
改善案の1、2、A は空き時間をフルに使って早急に取り組みます。
オフライン
案 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) についてはまた次回(?)
オフライン
einundzwanzighundertsechsさんありがとうございます。
今の自分のスキルで出来る方法を行います。
まず、勘違いやミスによる事故を防ぐ工夫ですね。
なんだか今は本来の目的から外れた所に楽しみを見つけてしまった。
オフライン
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)
オフライン
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)
オフライン
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)
オフライン
ヒントになれば幸です.fdisk -l よりも
$ grep -w vfat /proc/mounts
や
$ grep -w vfat /etc/mtab
を利用しては如何でしょう.
何より一般ユーザ権限で実行可能です.
マウント済みの vfat ファイルシステムの デバイスとマウント場所の一覧なので,
インストール候補のリストの材料として最適です.
残るは HAL でリムーバブルか調べるだけです.
最後の編集者: einundzwanzighundertsechs (2009-04-19 18:28:27)
オフライン
einundzwanzighundertsechs さんありがとうございます。
いや〜投稿が有ったのに気づかずにいました、
いま斜め読みですが意図せぬ操作や入力ミスによる事故とユニークな名称であるか、個々のメンタル面などへの配慮ですね。
変な所(結構初歩な部分)で引っかかって スローペースでやっています。
>hir0さんの本来の質問に答えられないくせに,別の方向に話題を振っているようで非常に心苦しいです.
大元の起動に関しては私の答えは出しているので今の作業は完全に私の楽しみと化していますので話題の方向は同じ方向です。
逆にフォーラムに中途半端な途中過程をメモ代わりにアップしている方がダメかも。
チョットずつ下に埋もれて行ってると思っていましたが。
最終的にはEnterキーを押す判断を委ねるのですが目標としては必要な情報をシステム側が提示してユーザーが実行する。です。メイン部分が出来ているので単純に考えていたのですが(私には)違いましたね。
でも私には背伸びして届くか届かないかの丁度いい課題だと思い取り組んでいます。
(コマンドの使い方については年長組にレベルアップしたかも?)
オフライン
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"オフライン