Macでoverleaf

そのまま作業したらmongodb でエラーが出るので,対処法の記録.
まずは,github の overleafのqucik-start-guideに基づいて作業します.

cd ~/git
git clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit
cd ./overleaf-toolkit
bin/init
bin/up

普通ならこれで起動するはずが,MONGO_VERSIONの値がおかしいと言われます.

---------------------  ERROR  -----------------------
  Invalid MONGO_VERSION: MONGO_VERSION=6.0

  MONGO_VERSION must start with the actual major version of mongo, followed by a dot.
  Example: MONGO_IMAGE=my.dockerhub.com/custom-mongo
           MONGO_VERSION=6.0-custom
---------------------  ERROR  -----------------------

今まで1つの変数で扱っていたのを,MONGO_IMAGEとMONGO_VERSIONに分けた模様.
で,MONGO_VERSIONは,メジャーバージョンの数字とドットで始まる書式が求められているっぽい.
それらの変数は,config/overleaf.rc に書いてあります.

cat config/overleaf.rc|grep MONGO
MONGO_ENABLED=true
MONGO_DATA_PATH=data/mongo
MONGO_IMAGE=mongo
MONGO_VERSION=6.0

これらの変数のチェックは,lib/shared-function.sh で実施している模様.

 grep Invalid * -R
lib/shared-functions.sh:      echo "  Invalid MONGO_VERSION: $mongo_version"

そこの前後を見てみると,

  else
    if [[ ! "$mongo_version" =~ ^([0-9]+)\.(.+)$ ]]; then
      echo "---------------------  ERROR  -----------------------"
      echo "  Invalid MONGO_VERSION: $mongo_version"
      echo ""
      echo "  MONGO_VERSION must start with the actual major version of mongo, followed by a dot."
      echo "  Example: MONGO_IMAGE=my.dockerhub.com/custom-mongo"
      echo "           MONGO_VERSION=6.0-custom"
      echo "---------------------  ERROR  -----------------------"
      exit 1
    fi
    MONGO_VERSION_MAJOR=${BASH_REMATCH[1]}

となっていて,正規表現 ^([0-9]+)\.(.+)$ のチェックがMacでうまく行っていないっぽい.
で,$mongo_version の中身を見てみると,

local mongo_version=MONGO_VERSION=6.0

変数への代入文がそのまま出てきてしまっています.
色々と試行錯誤した結果,以下の結論となりました.

具体的には、あなたの overleaf.rc の行は

MONGO_VERSION=6.0


ですが、sed -E "s/^MONGO_VERSION=(['\"]?)(.+)\1[[:space:]]*$/\2/p" は以下のような条件になっています:

^MONGO_VERSION= のあとに

(['\"]?) → これはシングルクォート ' かダブルクォート " が 0回または1回 出てくることを期待

(.+) → そのあとに1文字以上(ここが実際の値)

\1 → 最初に見つけたクォートと同じ文字がここに再登場することを期待(0回も可ではない)

[[:space:]]*$ → 行末まで空白だけ

つまり、クォートがない場合にも \1 の部分が「空文字」でマッチする必要があるのですが、macOS の sed(BSD sed)は GNU sed と違って、このケースの扱いがやや厳しく、
\1 が空だと後続のマッチが失敗することがあります。

具体的には,sed のオプションを-r から-Eへ変更して,1の後ろに「?」を追加すれば,動きます.

function read_configuration() {
  local name=$1
  grep -E "^$name=" "$TOOLKIT_ROOT/config/overleaf.rc" \
  | sed -E "s/^$name=([\"']?)(.+)\1?\$/\2/"
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*