#!/bin/bash title="USB-HDD起動用CDのISOファイル作成ツール(Grub使用)" a="" while [ -z "$a" ] do a=$(zenity --list --title="${title}" --height=250 --text="このツールでは、内蔵HDDにインストールするのと同様の方法でUbuntuがインストールされたUSB-HDDについて、\nそれを起動するためのCDのISOファイルを作成します。\n今、そのUSB-HDDのUbuntuが起動していますか?以下のどれか1つにチェックしてください。" --radiolist --column="↓チェック" --column="No." --column="選択肢" FALSE "1" "起動用CDを作りたいUSB-HDDのパーティションのUbuntuが起動している" FALSE "2" "起動用CDを作りたいUSB-HDDのパーティションとは違うUbuntuが起動している。" TRUE "3" "わからない") if [ $? = 1 ] then zenity --info --title="${title}" --text="キャンセルが押されましたので、ISOファイルの作成を中止して終了します。" exit 0 fi done if [ "$a" = "3" ] then zenity --warning --title="${title}" --text="分からないのなら、このツールは使わない方が良いです。\n済みませんが、ISOファイルの作成を中止して終了します。" exit 0 elif [ "$a" = "1" ] then kernelver=$(uname -r) MOUNTPOINT="" gksudo -m "ハードディスクの状況を調べるためにパスワードを入力してください。" sleep 0 rootdev=$(more /etc/mtab|grep " / "|cut -d" " -f1) rootuuid=$(sudo blkid|grep ${rootdev}|cut -d\" -f2) else zenity --info --title="${title}" --text="デスクトップを見回して、\n起動用CDを作りたいUSB-HDDのハードディスクのようなアイコンがあったら、\n右クリックして「アンマウント」をクリックしてください。分からなければ、全部のハードディスクのアイコンを右クリックして「アンマウント」をクリックしてください。\nハードディスクのようなアイコンがなくなったら、「OK」をクリックしてください。" zenity --info --title="${title}" --text="UbuntuをインストールしたUSBメディアをパソコンから取り外してください。\n取り外したら、「OK」をクリックしてください。" sleep 2 gksudo -m "ハードディスクの状況を調べるためにパスワードを入力してください。" sleep 0 DEVICELIST=$(sudo fdisk -l|grep /dev/sd|grep -v ディスク|cut -d" " -f1) zenity --info --title="${title}" --text="UbuntuをインストールしたUSBメディアをパソコンのUSBポートに接続してください。\n接続したら、認識されるまで待ってください。\n通常はUSBメディアの中のパーティションが自動的にマウントされるはずです。\nマウントされたら、「OK」をクリックしてください。" zenity --info --title="${title}" --text="このまま何もせずにしばらくお待ちください。" & sleep 7 DEVICELIST2=$(sudo fdisk -l|grep /dev/sd|grep -v ディスク|cut -d" " -f1) for a in $DEVICELIST do DEVICELIST2=$(echo $DEVICELIST2|sed -e "s/\ /\n/g"|grep -v $a) done DEVICELIST=$DEVICELIST2 # これで、$DEVICELISTに、目的のUSB-HDDの中の全てのパーティションのデバイスファイル名が半角スペース区切りで入っている。 devlist="" gksudo -m "ハードディスクの状況を調べるためにパスワードを入力してください。" sleep 0 for a in $DEVICELIST do IFSWAP=$(sudo fdisk -l|grep $a|tr -d \*|tr -s " "|cut -d" " -f5) if [ $IFSWAP != 82 ] && [ $IFSWAP != 5 ] then FILESYSTEM=$(sudo vol_id --export $a|grep "ID_FS_TYPE"|cut -d= -f2) MOUNTPOINT=$(more /etc/mtab|grep $a|tr -s " "|cut -d" " -f2) if [ "${MOUNTPOINT}" ] then if [ "$(ls ${MOUNTPOINT}/boot/vmlinuz* 2>/dev/null)" ] then devlist=$(echo ${devlist})" "$a fi else sudo mount -t $FILESYSTEM $a /mnt -o ro if [ "$(ls /mnt/boot/vmlinuz* 2>/dev/null)" ] then devlist=$(echo ${devlist})" "$a fi sudo umount -l /mnt sleep 1 fi fi done zenity --info --title="${title}" --text="/boot/vmlinuz*のあるUSBメディア内のパーティションのデバイスファイル名は${devlist}です。\nUSBのUbuntuのインストールされたパーティションは上記のうちのどれかを次のウィンドウで入力してください。\n分からなければ、何も入力しないで「OK」をクリックしてください。" & rootdev=$(zenity --title="${title}" --entry --entry-text="$(echo ${devlist}|cut -d" " -f2)") if [ "${rootdev}" ] then MOUNTPOINT=`more /etc/mtab|grep ${rootdev}|tr -s " "|cut -d" " -f2` if [ -z ${MOUNTPOINT} ] then MOUNTPOINT="/mnt" FILESYSTEM=$(sudo vol_id --export ${rootdev}|grep "ID_FS_TYPE"|cut -d= -f2) sudo mount -t $FILESYSTEM ${rootdev} /mnt -o ro fi kernelver=$(ls -1 ${MOUNTPOINT}/boot/vmlinuz*generic 2>/dev/null|tail -n 1|tr "/" '\n'|tail -n 1|cut -c9-) if [ -z "${kernelver}" ] then zenity --warning --title="${title}" --text="入力されたデバイスファイル名の示すパーティションの中に/boot/vmlinuz・・・genericがありません。\nおかしいので、ISOファイルの作成を中止して終了します。" exit 0 fi rootuuid=$(sudo blkid|grep ${rootdev}|cut -f2 -d\") else zenity --warning --title="${title}" --text="空の文字が入力されました。意味が分からないなら、このツールは使わない方が良いです。\n済みませんが、ISOファイルの作成を中止して終了します。" exit 0 fi fi zenity --info --title="${title}" --text="次のウィンドウでは、ISOファイルを作成するための作業用ディレクトリを選択してください。\n右上のボタンをクリックして、新しく作った方が安全でしょう。" workdir=$(zenity --title="${title}" --file-selection --directory) mkdir -p ${workdir}/boot/grub until [ -e ${workdir}/boot/grub ] do zenity --warning --title="${workdir}/boot/grubを作成できませんでした。書き込み可能なディレクトリを作業用ディレクと" zenity --info --title="${title}" --text="次のウィンドウでは、ISOファイルを作成するための作業用ディレクトリを選択してください。\n右上のボタンをクリックして、新しく作った方が安全でしょう。" workdir=$(zenity --title="${title}" --file-selection --directory) mkdir -p ${workdir}/boot/grub done cp ${MOUNTPOINT}/boot/vmlinuz-$kernelver ${workdir}/boot cp ${MOUNTPOINT}/boot/initrd.img-$kernelver ${workdir}/boot cp ${MOUNTPOINT}/usr/lib/grub/i386-pc/stage2_eltorito ${workdir}/boot/grub cat > ${workdir}/boot/grub/menu.lst <> ${workdir}/boot/grub/menu.lst <