2016年9月3日

MacOSで起動時にシェルスクリプトを実行する


起動時(正確にはログオン時)にスタティック(静的)ルートを追加する方法を記します。


前回の記事に書きましたが、目的は永続的にスタティックルートを追加することです。ターミナルから「route」コマンドを実行させれば良いのですが起動するたびに毎回手動実行させるのは面倒なので自動実行させたいということです。Linux的にシェルスクリプトを実行させたりAppleScriptを実行させたり方法はいくつかあるようなのですが、今回は最も簡単そうな「Autometor」を使用する方法を選びました。

①アプリケーション「Automator」を起動します。

②アクション「テキスト」→「指定されたテキストを取得」をワークフローに加え、テキストフィールドに管理者アカウントのパスワードを入力します。

③アクション「ユーティリティー」→「シェルスクリプトを実行」をワークフローに加え、テキストフィールドに以下のコマンド(シェルスクリプト)を入力します。「シェル」は適当で良いと思います。「入力の引き渡し方法」は「stdinへ」にしてください。どちらもデフォルトでそうなっていると思います。

sudo route add -net 10.77.0.0/16 192.168.138.254


④適当な場所に保存します。今回はデスクトップに名前「スタティックルート追加」として保存しました。かわいいロボットのアイコンが出来ました。
 

このアイコンをダブルクリックするとシェルスクリプトが実行されます。ただしこの段階では以下の表示でエラーとなると思います。
sudo: no tty present and no askpass program specified
このメッセージは「sudoコマンドを実行するターミナルでエコーの制御ができなかった場合はsudoの実行を拒否する」という意味のようです。
ターミナルから一度sudoコマンドを実行した後にスクリプトを実行すると今度は成功するのですが、それでは意味がありません。

⑤アプリケーションからsudoコマンドが実行可能なように設定します。
ターミナルを起動し以下のコマンドを実行します。

sudo visudo

viエディタで設定ファイルが開きますので編集します。実際に編集しているのは「/etc/sudoers」ファイルです。viの使い方は割愛しますが簡単に書くと「i」で編集モードに入り、編集後「esc」で編集モードを抜け、「:wq」で上書き保存します。

最終行に以下の一文を追加するのですが「Defaults」と「visiblepw」の間はタブにしてください、スペースを入れたら保存時にエラーが出ました。(保存時に自動的にエラーチェックが行われます)

Defaults visiblepw

MacOSのバージョンによっては既に「Default !visiblepw」と記述されて明示的に禁止している場合があるようです。この時は「!」を削除します。

この後シェルスクリプトを実行するとコマンドの文法やパスワードに間違いが無ければ正常終了すると思います。これで第一段階完了です。必要な時だけ実行したい場合にはこれでOKですが、起動時に自動実行させるにはもうワンステップ必要です。

⑥設定から「アカウント」を選択し、「ログイン項目」にシェルスクリプトを追加します。保存するのをわすれずに。


これで完了です。マシンを再起動した後にターミナルから「netstat -rn」を実行してルーティングテーブルが書き換わっていることを確認してみると良いでしょう。



この方法は他にもいろいろな用途に応用できそうです。ただしアプリケーションから「sudo」コマンドが実行できるようにしてしまいましたので多少セキュリティが弱くなったことは否めません。
今回は Mac OS X 10.6.8 (Snow Leopard) で行いました。他バージョンでは手順が違うかもしれません。



0 件のコメント:

コメントを投稿