長すぎます。

長すぎます。

長すぎます。

このコマンドはgit fetch origin [branch-name]スクリプト内で呼び出すと効果はありませんが、シェルから呼び出すと機能します。

スクリプトと端末は別のボックスでうまく動作します。ボックスは企業代理人の後ろにあります。

シェルとスクリプトの環境には若干の違いがあると思います。

質問

このコマンドをスクリプトで実行するにはどうすればよいですか?

詳細

背景ストーリー

リポジトリをGitHubに移行する前は、両方のシステムですべてがうまく機能しました。両方のシステムのソースがそれに応じて更新されました。開発システムはすぐに実行を開始しますが、ステージングシステムはそうではありません。

スクリプト

スクリプトの部分は次のとおりです。実際に始める前に、すべてのリポジトリに到達したことを確認するので、ここで停止します。

check_git_connection_mapbender() {
  cd ${installation_folder}mapbender
  git fetch origin ${git_mapbender_repositoryBranch} &>/dev/null
  if [ $? -ne 0 ]; then
    echo "Fetching Mapbender repository failed!"
    echo "Abording update..."
    exit 1
  fi
  set_git_filemode_config
}

これらのecho2行はエコーされ、スクリプトは終了します。変数がすべて設定されました。

私が試したこと

シェル比較

環境変数に問題があると疑われ、git fetch origin [branch-name]失敗したコマンドを端末から直接呼び出してみました。シェルから呼び出すと、このコマンドはすべての場合に機能します。

  1. me@box:/path/to/repo$ git fetch origin [branch-name]
  2. me@box:/path/to/repo$ sudo git fetch origin [branch-name]
  3. me@box:$ sudo -i cd /path/to/repo && git fetch origin [branch-name]
  4. me@box:$ sudo su -->root@box: cd /path/to/repo && git fetch origin [branch-name]

うまくいかないのは次のとおりです。

  1. me@box:$ sudo -i-> root@box: cd /path/to/repo && git fetch origin [branch-name]<--実際にはスクリプトのようなエラーが発生します。

子の設定

最初は、両方のシステムの効果的なgit設定が同じであることを確認しました。

それ以来、私は成功せずに問題を解決するためにステージングシステムにいくつかのオプションを追加してみました。

私は以下を設定しようとしています:

  1. url.http://.insteadof=https://
  2. http.https://github.com.sslverify=false
  3. http.proxy
  4. https.proxy
  5. http.sslCert

役に立たなかったのでもう一度削除しました。

デバッグ接続

export GIT_TRACE_CURL=trueスクリプトに次のように追加しました。

check_git_connection_mapbender() {
  cd ${installation_folder}mapbender
# DEBUG
  export GIT_TRACE_CURL=true
  source /etc/environment
  echo $http_proxy
  echo $https_proxy
# END DEBUG
  echo $git_mapbender_repositoryBranch
  git fetch origin ${git_mapbender_repositoryBranch} # &>/dev/null
  if [ $? -ne 0 ]; then
    echo "Fetching Mapbender repository failed!"
    echo "Abording update..."
    exit 1
  fi
  set_git_filemode_config
}

...出力は

[correct http_proxy environment variable]
[correct https_proxy environment variable]
[correct branch name]
16:52:17.600248 http.c:599              == Info: Couldn't find host github.com in the .netrc file; using defaults
16:52:17.603973 http.c:599              == Info:   Trying 140.82.121.4...
16:52:17.604035 http.c:599              == Info: TCP_NODELAY set
16:52:17.605297 http.c:599              == Info: connect to 140.82.121.4 port 443 failed: Verbindungsaufbau abgelehnt
16:52:17.605372 http.c:599              == Info: Failed to connect to github.com port 443: Verbindungsaufbau abgelehnt
16:52:17.605386 http.c:599              == Info: Closing connection 0
fatal: unable to access 'https://github.com/LVGL-SL/mapbender-sl.git/': Failed to connect to github.com port 443: Verbindungsaufbau abgelehnt
Fetching Mapbender repository failed!
Abording update...

エージェントの設定

システムは、サブネットと同じファイアウォールルールセットに準拠する必要があると言われました。

答え1

ボックスは企業代理人の後ろにあります。

デフォルトを使用する.netrcファイルにホストgithub.comが見つかりません

140.82.121.4ポート443への接続に失敗しました:Verbindungsaufbau abgelehnt

スクリプトはsudoで実行され失敗しますが、git fetch Origin [branch-name]コマンドは端末で実行されます。

推測:あなたの会社エージェントはあなたのユーザーアカウント(おそらくファイル)の下のどこかに保存されている資格情報を要求します.netrc

通常のユーザーとしてgitコマンドを実行すると、これらの資格情報にアクセスできます。

スクリプトをrootとして実行すると、rootのホームディレクトリで資格情報が見つかりますが、見つからないため失敗します。

sudoターミナルでgitコマンドを実行してこれを確認できます。上記の場合でも失敗します。

問題を解決するには、githubにアクセスするために一般ユーザーの資格情報を必要とするスクリプトをrootとして実行する理由を説明する必要があります(まず、解決する必要がある基本的な設計問題のように聞こえます)。説明によると、エージェントにルート資格情報を提供する(賢明ではない)、スクリプトで特定のユーザーを偽装してgitコマンドを実行する、またはこれが最良のバリエーションです。ルートアクセスを必要としないように、ルートアクセスを必要とするすべてのエントリを変更できます。一般ユーザーとして実行できます。

関連情報