dockerを使って動かすZwift、ローカルに作成したカスタムワークアウトがアプリ上に反映されなくなっていた(=クラウドに転送されなくなっていた)。カスタムワークアウト一覧を書き込んでいるworkout.filesというファイルが更新されないので他のところを見に行っていると予想。実行ファイル/usr/local/bin/zwift (中身はシェルスクリプト)を覗いてみる。
if [[ ! -z $ZWIFT_WORKOUT_DIR ]]; then ZWIFT_WORKOUT_VOL="-v $ZWIFT_WORKOUT_DIR:/home/user/.wine/drive_c/users/user/Documents/Zwift/Workouts" fi
ここが怪しい。このファイルはサーバ上のファイルとの整合性を毎回チェックされ、違っていたら上書きダウンロードを勧められるほど動作に影響があるものなので、これを直接弄るのは避けたい(以前はやってた)(反映されなくなったのは、その弄ったファイルを上書きした時からかもしれない)。
ということで、これを呼び出すシェルスクリプトzwift.shを作って呼び出し。
#!/usr/bin/env bash rm -f ${HOME}/zwift/*.zwo~ export ZWIFT_WORKOUT_DIR="${HOME}/.zwift/kazz/Workouts" /usr/local/bin/zwift
と書くとあっという間のようだけど、原因特定と対策までけっこう試行錯誤した。
とここで気づく。その少し前で
# Check for other zwift configuration, sourced here and passed on to container aswell if [[ -f "$HOME/.config/zwift/config" ]]; then ZWIFT_CONFIG_FLAG="--env-file $HOME/.config/zwift/config" source $HOME/.config/zwift/config fi
となっていて、$HOME/.config/zwift/configがあればsourceするようになっている。というこは上記の呼び出しスクリプトの
rm -f ${HOME}/zwift/*.zwo~ export ZWIFT_WORKOUT_DIR="${HOME}/.zwift/kazz/Workouts"
の部分を書けばいいということか。やってみたらうまくいった。作者さんはそこまで考えて書いてくれとるんやなと。
古いスクリプトを見るとZWIFT_HOMEという変数があって、$HOME/.zwiftがデフォルトになっていたが、最新のスクリプトにはない。今もそのディレクトリには往時のログファイルなどがあるけど、最新のログファイル等はどこにあるんやろと思ってfd-findで検索をかけて発見したのが$HOME/.local/share/containers/strage/volumes/zwift-$HOME/_data というディレクトリ。zwift-$HOMEはユーザ名100000のコンテナで、読み込みにはルート権限が必要。
ドキュメントを読むと(←最初に読めよ)、Workout以外にLogも環境変数で指定できるもよう。他のファイルはユーザーが見たり弄ったりする必要がない、弄らんほうがいいという判断なんやろうな。他にユーザー名、パスワードもconfigファイルに保存できるようだ。
ところで、上記の公式スクリプト、
/home/user/.wine/drive_c/users/user/Documents/Zwift/Workouts
は
/home/${USER}/.wine/drive_c/users/${USER}/Documents/Zwift/Workouts
もしくは
${HOME}/.wine/drive_c/users/${USER}/Documents/Zwift/Workouts
じゃないとあかんのちゃうか?シェルスクリプトレベルやからコンテナ上のディレクトリちゃうよね?