滞在先、タイ・チェンライで折りたたみ自転車のタイヤチューブ交換をしました。工賃込みで150バーツでした。 チューブの質がどうだかわかりませんが、安い、ありがたい、ありがとー。
ついでに、ボロボロになった水中眼鏡(度つき)もリフレッシュ、 ダイソーで買ったゴーグルから目にあたる部分を取り替えて完成。 ちなみにバンド部分は中古の子供ゴーグル5バーツから流用。 まぁ、頓珍漢な感じですが、別につけて外を歩くわけではないので、オケ。
さて、運用中にのパイ・サーバーとマックブックとの同期を図るため、unisonを設定します。
設定ファイルを作ってunison 設定ファイル名
で実行することができます。
同期設定
シンプルな設定ファイルです。新しいファイルを優先して、接続先の設定をします。 ssh経由の接続ですので鍵でのログイン方式に切り替えると良いと思います。
こちら、SSH簡単ログイン を参照のほど。
設定ファイルはvi ~/.unison/tacos_scripts.prf
で作成、内容は以下。
# tacos_scripts.prf
# パイ・サーバーとマックブックのスクリプト同期
times = true
prefer = newer
auto = true
fastcheck = true
# 動作確認が取れたらコメントを外してよし。
#silent = true
# ルート・ディレクトリの指定。同期時に最上位となるディレクトリを設定する。
root = /Volumes/Work/Development/Scripts
root = ssh://tacos//home/pi/script
# sshのオプション: ssh -l pi XXXXX
# sshへの接続は鍵を使った方法に切り替え済み
sshargs=-l pi
# 同期したいディレクトリやファイル名を指定する
# 空白は全て
path =
# 除外ファイルリスト
include ignore_filelist_macos
シンボリックリンクも同期したい場合は、以下のような設定をプロファイルに追記します。
follow = Path ディレクトリ名 または ファイル名
除外ファイル
OSごとに特有のファイルがありますし、同期をしたくないファイルは除外ファイルとして登録しておきます。ignore_filelist_macos
にしておきます。設定などのファイル保存先は.unison
フォルダーです。
jin@gallo:.unison $ vi ~/.unison/ignore_filelist_macos
addprefsto = unison_ignore
# for macOS
ignore = Name ._*
ignore = Name .DS_Store
ignore = Name .Trash
ignore = Name .Spotlight-*
ignore = Name .Trashes
ignore = Name .hidden
ignore = Name .hotfiles.btree
ignore = Name .vol
ignore = Name .FBCIndex
ignore = Name .FBCLockFolder
ignore = Name .CFUserTextEncoding
ignore = Name .localized
実行
unison 設定ファイル名
で同期します。初回は少し時間がかかるといいますが、ファイル数が少ないので瞬間で終わりました。
同期するファイルの確認を行います、問題がなければ、そのままy
で続行します。
同じ名前のファイルがあったら、選択する必要があります(たしか)。
jin@gallo:~ $ unison tacos_scripts
Unison 2.51.2 (ocaml 4.06.1): Contacting server...
Connected [//gallo.goozen.lab//Volumes/Work/Development/Scripts -> //tacos//home/pi/scripts]
Looking for changes
Warning: No archive files were found for these roots, whose canonical names are:
/Volumes/Work/Development/Scripts
//tacos//home/pi/scripts
。。。。。
Waiting for changes from server
Reconciling changes
local tacos
dir ----> Date Clip.app
dir ----> MakeIcons.app
dir ----> ResizeRenameImage.app
<---- file task_on_reboot.sh
<---- file weather_update.py
Proceed with propagating updates? [] y
。。。。。
[END] Copying resize window.app
UNISON 2.51.2 (OCAML 4.06.1) finished propagating changes at 07:59:09.42 on 18 Aug 2019
Saving synchronizer state
Synchronization complete at 07:59:09 (23 items transferred, 0 skipped, 0 failed)
jin@gallo:~ $
これで、
スクリプトを端末側で修正・コマンドで同期・サーバー側で実行・確認の繰り返し。
という流作業になる。ちょっとだけ面倒が取れるかな。
※ マック側のファイルのスペースは取った方が良いかもしれん。。キャメルからスネーク式に切り替えるかな。。
おまけ:自動化
cron で定期的にunisonによる同期を実行したい場合は-batch
オプションを付けて実行すると非対話的に同期が実行されます。
jin@gallo:~ $ unison tacos_scripts -batch
crontab -e
に登録して自動化完了です。
マックにての自動化
マックではLaunchAgents
を使って自動化ができます。
設定ファイル~/Library/LaunchAgents/mac-pi-unison.plist
を作成します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- label -->
<key>Label</key>
<string>mac-pi-unison</string>
<!-- script -->
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/unison</string>
<!-- ここに引数となる設定名を指定します(.prfを除外した名前) -->
<string>sample</string>
<!-- Yes/Noを聞かれないバッチ用のオプション -->
<string>-batch</string>
</array>
<!-- launchctl loadしたタイミングで実行するか -->
<key>RunAtLoad</key>
<true/>
<!-- インターバル指定 例) 5分毎 -->
<key>StartInterval</key>
<integer>300</integer>
<!-- エラー内容を捨ててますが、ちゃんと運用したい場合はこの設定もしっかり -->
<key>StandardErrorPath</key>
<string>/dev/null</string>
<key>StandardOutPath</key>
<string>/dev/null</string>
</dict>
</plist>
そして、LaunchAgentsの読み込みます。
jin@gallo:~ $ launchctl load ~/Library/LaunchAgents/mac-pi-unison.plist
これで、バックグラウンドで5分ごとに動いてくれるようになります。
ただ、私はhazel
というアプリを持っているので、それでファイル更新にトリガーで動かしても良いなと思いました。
参考: