じつは粗忽者

富士通のワープロOASYSから親指シフトが大好きです

これだけは欲しい、macOSにない機能-ネットワークの共有ドライブに自動で接続する(中編-実装)

前編からの続き

lefennec1765.hatenablog.com

NASにある共有フォルダをマウントするための処理を記述したシェルスクリプトをlaunchctlの助けを借りて起動することで自動化できる見通しが立ちました。

今回は実装のあれこれ。

設計

 「せっけい」が「雪渓」と変換されることがブランクの長さを示していますヾ(^^ )。

概略設計

 処理の概略は、

launchctlから起動されたら、ターゲットとなるNASがネットワーク上に存在しているかを確認して、存在していれば共有フォルダをマウントする。

こんなところでしょう。特に難しい処理ではありません。

ただ、以下2つの条件を満たすことを実装の目標とします。

  • ユーザごとにコードの変更はしない
  • ネットワークを変更してもコードの変更はしない

詳細設計

NASの存在を確認する

 NASがネットワーク上にあることの確認は、至極オーソドックスに、ホスト名を指定してpingコマンドで行うことにします。

macOSBonjourサービスで名前解決を行うそうなので、同じネットワーク内に該当のコンピュータがなければならないようですが、家庭内は一つのネットワークで使用しているのでDNSのエントリを作ったりとかの準備は必要ありません。ホスト名はmacOSをインストールしたときに付けられる、xxxのMacBook Pro*1という名前ではなく、システム環境設定にある共有で変更してあります。

 ホスト名はハードコーディングしてもよしとします*2

どうやってマウントするのか
  • マウントのために使うコマンドの選択-mountかmount_smbfsか

 ネットワークの共有フォルダをアクセスするプロトコルにはAFPかSMBのふたつが存在していますが、AFPはBig Sur(macOS 11.x)でファイルサーバのプロトコルから外されており、今後はSMBが推奨のプロトコルなのでしょう。mount_smbfsは"automounted"という試してみたいオプションがありますがmanコマンドでhelpを表示すると、末尾に

Note: You should always use the system mount command and never call

     mount_smbfs directly.

という気になるコメントがあります。mountコマンドを使うことにしましょう。

  • 認証情報の扱い-パスワードのハードコーディングは御法度

残念ながら、ディレクトリサービスはありませんので共有をアクセスする際にはそれぞれにユーザIDとパスワードを提示する必要があります。ユーザごとにコードの変更はしないという目標を達成するためにはどこかからパスワードを入手しないとなりません。シェルスクリプトのコードの中に記載することはもってのほかです。

macOSにはパスワードやアカウント情報を保管するデータストアにターミナルからはsecurityコマンドでアクセスすることができます。ただ、あらかじめエントリを作っておかないとならないのでこの作業だけは手で行うことにします。家人の環境設定はほぼ肩替わりをしていますのでこれもよしとします。

どこにマウントするのか

 マウントする位置はホーム下のどこか、Finderのサイドバーに接続中のサーバを表示しています((この機能はテスト時に思案のしどころになります(2022/07/19追記)))のでフォルダの階層を辿ることはまずないでしょうから、位置にこだわる必要はないのですが、あまり深い階層では面倒なのでホーム下に一つフォルダを作りそこにマウントすることにします。

 フォルダの名前についてはちょっとこだわりがあります。マウントしてしまえばFinderにはは共有名が表示されますのでこだわる必要はないのですが、ちょっと考えて名前を付けておくことで、のちのちのメンテナンスの手間に差が出るはずです。

 どうしたのか。

NASのホスト名はEAGLE-2ですが、うっかりするとそのままマウントするフォルダ名にしてしまいそう。ですが、2という番号が付いているとおり現在使用しているNASは2代目です。4TBのディスクを搭載していて使用率は2022年1月25日現在60%です。そろそろ増設かディスク交換かの検討を始める目安の使用率です。次は8GBでしょう。仮に新しいNASを購入したとすると、EAGLE-3というホスト名でNASからNASへのコピーを行い、切換直前に最後の差分をコピーして2台のMacシェルスクリプトにあるホスト名を書きかえるという手順になるはず。財布が許せばこちらが簡単。

 仮にマウントするフォルダにホスト名を使用していると、シェルの書き換え、動作確認に時間を取られることになるはず。ですから、役割(フォルダ名)と手段(ホスト名)は別々にしておきます。

user identityはフルネームかアカウント名か

user identityを表示するidコマンドにはフルネームを表示するか、アカウント名を表示するのかをオプションで指定します。フルネームが諱(いみな)でアカウント名が本名でしょうか。通常は同一でしょうから意識することはまずないはずですが、どちらを名乗るかは決めておかないとなりません。2台のMacは管理者IDがフルネームと異なるアカウント名を使っているので、フルネームを使うことで統一することにします。

後編に続く

謝辞

以下のサポート情報、ブログの記事を参考にさせていただきました。

この場をお借りして御礼申しあげます。ありがとうございました。

QNAP社のサポート情報

www.qnap.com

macperson.net

loumo.jp

takuya-1st.hatenablog.jp

*1:空白"␣"を混ぜることは是非止めていただきたい

*2:後述するセキュリティコマンドで取得する情報から拾うか、起動する際に引数でホスト名を与えてもいいのですが、launchctlの設定ファイル更新の手間よりもシェルスクリプトの書き換えが簡単なのと、次にNASのホスト名が変わるのは恐らく数年後ですから