0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【EAS】Expoプロジェクトのビルド時にGitHubのプライベートリポジトリにあるnpmパッケージをインストールする

Last updated at Posted at 2024-04-20

はじめに

この記事はタイトルにもある通り、ExpoプロジェクトをEASでビルドする際に遭遇したエラーとその解決方法についての忘備録となります。

EASとは?

EASとはExpo Application Serviceの略であり、Expoプロジェクトの開発、ビルド、配布等のサポートをするクラウドツールです。

概要

今回、プロジェクト内でGitHubのプライベートリポジトリに配置された自作のnpmパッケージを使用しており、ビルド時のnpm installでGitHubにSSH接続をする必要がありました。

以下はそのための手順となります。

1. Ed25519方式などで秘密鍵を作成

DSA方式は2021年にGitHubでのサポートを打ち切られているので注意してください。

$ ssh-keygen -t ed25519 -f eas_id

2. 生成された秘密鍵eas_idをBase64文字列にエンコード

$ cat eas_id | base64

3. EASのSecretにDEPLOY_KEYという名前でエンコードされた秘密鍵を登録

EASのコンソール上でも可能ですが、以下のようにターミナルからも登録できます。

$ eas secret:create --scope project --name DEPLOY_KEY --value {secretvalue} --type string

4. GithubのSSH and GPG keysから公開鍵を登録

登録方法がわからない人はこの辺を参照してください。

5. package.json上でpre installスクリプトを指定

package.jsonのscripts内に"eas-build-pre-install": "./pre-install"を追記する。

touch pre-install
package.json
"scripts": {
  "start": "expo start --dev-client",
  "android": "expo run:android",
  "ios": "expo run:ios",
  "web": "expo start --web",
  "eas-build-pre-install": "./pre-install"
}

これによって、EASでのビルド時、npm installが走る前にpre-installファイル内のシェルスクリプトが実行されるようになります。

5. pre-installファイルにスクリプトを記載

#!/bin/bash

eval "$(ssh-agent -s)"
ssh-add <(echo "$DEPLOY_KEY" | base64 -d)
touch ~/.ssh/config
echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config

発生したエラーと解決策

1. Permissions 0660 for '/dev/fd/63' are too open.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0660 for '/dev/fd/63' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.

dev/fd/63はFD(ファイルディスクリプタ)といって、プロセス置換のパイプ出力をパスで扱うことのできるインターフェースになっています。なぜかこのFDがPermission 0660(crw-rw----)になってしまうみたいなので、一度ファイルに書き出してから権限変更をすることにしました。

修正後のスクリプト↓

#!/bin/bash

eval "$(ssh-agent -s)"
echo "$DEPLOY_KEY" | base64 -d > ~/.ssh/eas_id
chmod 0600 ~/.ssh/eas_id
ssh-add ~/.ssh/eas_id
touch ~/.ssh/config
echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config

2. git@github.com: Permission denied (publickey).

本題はこちらです。

npm ERR! code 128
npm ERR! An unknown git error occurred
npm ERR! command git --no-replace-objects ls-remote ssh://git@github.com/{organization-name}/{repository-name}.git
npm ERR! git@github.com: Permission denied (publickey).
npm ERR! fatal: Could not read from remote repository.
npm ERR! 
npm ERR! Please make sure you have the correct access rights
npm ERR! and the repository exists.

ssh-addで鍵の登録が済んでいるはずなのにPermission deniedになります。

結論から言うと、以下のようにして解決しました。

修正後のスクリプト↓

#!/bin/bash

eval "$(ssh-agent -s)"
echo "$DEPLOY_KEY" | base64 -d > ~/.ssh/eas_id
chmod 0600 ~/.ssh/eas_id
ssh-add ~/.ssh/eas_id
touch ~/.ssh/config
echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
npm ci

Install dependenciesを待たず、Pre-install hook内でパッケージのインストールを完了させたところうまくいきました。

おわりに

詳細に関しては未だ不明です。一旦expo/eas-cliのissueにあげて反応を見てみようと思います。今後新しく何かがわかったら記事を更新します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?