プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2022/10/18

overlayroot の有効無効をシェルスクリプト化

event_note2022/10/18 0:39

overlayroot を使ってファイルシステムを読み取り専用にしましたが、現在読み取り専用になっているのかどうかのチェックと、有効無効を簡単に切り替えられるようなスクリプトを作成してみました。

overlayroot のインストールや設定方法については以下の記事を参照してください。

overlayroot が有効か無効かをチェック

#!/bin/bash

mount | grep 'overlayroot on / type overlay' &> /dev/null
if [ $? == 0 ]; then
   echo "overlayroot enabled"   
else
   echo "overlayroot disabled"
fi

&> /dev/null は標準出力と標準エラー出力の破棄です。

$? は直前に実行したコマンドの終了値です(0は成功、1は失敗)。

overlayroot を無効にする

#!/bin/bash

sudo overlayroot-chroot rm /etc/overlayroot.local.conf

overlayroot-chroot で一時的に書き込み可能状態にして /etc/overlayroot.local.conf を削除しているだけです。

overlayroot を有効にする

#!/bin/bash

echo 'overlayroot="tmpfs:recurse=0"' | sudo tee /etc/overlayroot.local.conf

/etc/overlayroot.local.conf を作成して overlayroot="tmpfs:recurse=0" を記述しているだけです。

サンプル

以上を踏まえて作成してみたのが以下のスクリプトです。

#!/bin/bash
# ex: ./overlayroot.sh disable
# ex: ./overlayroot.sh enable
# ex: ./overlayroot.sh

timeout=3

# 現在の overlayroot の状態を取得
mount | grep 'overlayroot on / type overlay' &> /dev/null
if [ $? == 0 ]; then
   overlay=true
   echo "overlayroot enabled"
else
   overlay=false
   echo "overlayroot disabled"
fi

if [[ $1 = disable ]]; then
   # overlayroot を無効にする
   if [ $overlay = true ]; then
      echo "disable overlayroot..."
      sudo overlayroot-chroot rm /etc/overlayroot.local.conf
      echo -e "\nReboot after ${timeout} seconds"
      sleep ${timeout}
      sudo reboot
   else
      echo "overlayroot already disabled"
   fi
elif [[ $1 = enable ]]; then
   # overlayroot を有効にする
   if [ $overlay = true ]; then
      echo "overlayroot already enabled"
   else
      echo "enable overlayroot..."
      echo 'overlayroot="tmpfs:recurse=0"' | sudo tee /etc/overlayroot.local.conf
      echo -e "\nReboot after ${timeout} seconds"
      sleep ${timeout}
      sudo reboot
   fi
fi

echo -e "\nCloses after ${timeout} seconds"
sleep ${timeout}