TerraMaster Hacking 〜dockerdの自動起動〜

TerraMasterでは、ブラウザからWebページ経由でDockerをインストールすることができるものの、TerraMaster起動時にdockerdが自動起動するように設定することができません。 即ち、TerraMasterを再起動した場合、dockerdを起動するためには、Webページを開いてDockerのアプリ・アイコンをクリックするという面倒な作業が必要となります。

そのため、TerraMasterの起動時にdockerdが自動起動するよう、ターミナルからログインして直接設定を試みたところ、比較的トリッキーな設定が必要でした。

以下は、これについてのメモです。

確認環境

  • TerraMaster F4-210(2GBメモリ)
  • TOS Ver. 4.2.08-2101111540
  • RAID5構成

なお、Dockerはインストール済みであり、sshでログイン可能なことを前提としています。

設定方法

1 適当な場所に以下のシェルスクリプトを作成する

#!/bin/bash

while :
do
    ps -A | grep sshd > /dev/null
    if [[ $? == 0 ]]; then
        break
    fi
    sleep 1
done

PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin:/usr/local/sbin
/etc/init.d/docker start >> /dev/null

exit 0

whileのループは、sshdが起動するまでdockerdの起動を遅延させるためのもの(重要!)。

以下の説明では、/root/startup.shが作成したシェルスクリプトとなります。

2 シェルスクリプトに実行権限を付加する

# chmod a+x /root/startup.sh

3 /etc/rc.localに以下のコマンドを追加する

/root/startup.sh &

&シェルスクリプトをバックグラウンド起動させるためのもの(重要!)。

以上。

おまけ: 失敗の記録

その1: cronの@rebootに/etc/init.d/docker startを登録

TOSのcronは@rebootに対応してませんでした…

その2: /etc/rc.local/etc/init.d/docker startを直接記載する

/etc/rc.localが実行される時点では、dockerdの起動に失敗するようです… 必要なファイルがこの時点ではマウントされていないっぽい。 sshdの起動後であれば問題なさげ(そのためのwhileループ)。

その3: /etc/rc.localに上記シェルスクリプトを直接記載する

/etc/rc.localの実行が終了しないとsshdが起動しないため、無限ループに陥ります…(そのためのバックグラウンド起動)。