Linux備忘録20:getoptsコマンドを使用したオプション解析、OSインストールメディアをコピーしてisoファイルを作成する

個人用備忘録のため、内容や記述に誤りがあったら申し訳ありません。

 

スクリプトでコマンドオプションごとの処理を実行する】

・getoptsの一般的な使用方法

「while」と「case」文を使用してオプションごとの処理を記述する。

 オプション文字列の例:-u -g -d

 

・参考スクリプト(test.sh)

#!/bin/bash

while getopts u:g:d: OPT  ←指定したオプション文字列の後ろに「:」を記載すると引数を取るオプションと解釈される
 do
    case $OPT in
        u) USER=$OPTARG;; ←オプション文字列の引数が$OPTARGに格納される。
        g) GROUP=$OPTARG;;
        d) DIR=$OPTARG;;
    esac
 one

echo "ユーザー名は$USER"
echo "グループは$GROUP"
echo "ディレクトリーは$DIR"

#END

※u:g:d: のオプション文字部分は{ugd}ど記述してもOK※引数いらない場合。

(オプションも-ugbで可)

 

・上記スクリプトを実行した結果

# sh test.sh -u ROOT -g TEST -d /root/TEST
ユーザー名はROOT
グループはTEST
ディレクトリーは/root/TEST

 

 

【OSインストールメディアファイルをローカルにコピーしてisoファイルを作成する】

 ※RedHat8.1のインストールメディアを使用して作成した際の備忘録

 ※OS標準のmkisofsを使用。

 ※OSインストールメディアが/mediaディレクトリにマウントされている状態を前提とする。

 

・実行コマンド

# mkdir /tmp/ks
# shopt -s dotglob
 ⇒「.」(ドット)で始まるファイル名をパス名展開の結果に含めるオプションを有効にする。※これを先に実行しないでコピーしたため失敗した。
 
# cp -avRf /media/* /tmp/ks/ ←メディアの中身を丸々コピー

 

# cd /tmp/ks  ← カレントディレクトリを変更

 

# mkisofs \
      -v -r -J -T -l -input-charset utf-8 \
      -o /tmp/test.iso \ ←出力先ファイル(任意名)。

      -b isolinux/isolinux.bin \
      -c isolinux/boot.cat \
      -V "RHEL-8-1-0-BaseOS-x86_64" \ ←イメージ名?使用メディアにより異なる。
      -no-emul-boot \
      -boot-load-size 4 \
      -boot-info-table \
      -eltorito-alt-boot \
      -e images/efiboot.img \
      -no-emul-boot ./ ←カレントディレクトリを指定。

 

 

・iso化する前にgrubの起動メニューを編集する手順。

 ※起動モードがUEFIでのコンフィグメニューを更新する場合。

# mount -o loop /tmp/ks/images/efiboot.img /mnt/
# vi /mnt/EFI/BOOT/grub.cfg
# umount /mnt ←完了後のアンマウント