原因を完全に把握できていないので、タイトルは不正確かもしれません。
イントラネットに構築した(つまり外部からアクセスできない)GitHub Enterprise Server上のGolangパッケージを取得しようとしたら"connection refused"メッセージが出ました。
エラーメッセージ
仮にリポジトリーのURLを"https://ghe.example.com/user/repository"、パッケージバージョンをv0.1.0とするとこんな感じ。
$ go get ghe.example.com/user/repository go: downloading ghe.example.com/user/repository v0.1.0 go get ghe.example.com/user/repository: ghe.example.com/user/repository@v0.1.0: verifying module: ghe.example.com/user/repository@v0.1.0: reading https://sum.golang.org/lookup/ghe.example.com/user/repository@v0.1.0: 410 Gone server response: not found: ghe.example.com/user/repository@v0.1.0: unrecognized import path "ghe.example.com/user/repository": https fetch: Get "ghe.example.com/user/repository?go-get=1": dial tcp 192.168.0.1:443: connect: connection refused $
ちなみにこのURLはHTTPS化もされています。オレオレ証明書でもないはず。
原因
最初に書いた通り、よくわかっていません。HTTPSまわりがクサいんですが、確定はできていません。
外部(github.comとか)にあるパッケージは普通にgo get
できていますし、curl
https://ghe.example.com
を実行しても普通にレスポンスを取得できます。
姑息な対処
根本解決ではないんですが、-insecureオプションをつけると取得できることは確認済みです。
$ go get -insecure ghe.example.com/user/repository go: downloading ghe.example.com/user/repository v0.1.0 go: ghe.example.com.com/user/repository upgrade => v0.1.0 $
このオプションをつけると取得できるということでやっぱりHTTPS周りがクサいです。
まあイントラネット上に構築してるからそこまで危険でもないだろうということでこの方法で運用しているんですが、なんかキモいのでいつか根本解決したい。
Go Modules Reference に解決策っぽいものを見つけたので共有させていただきます。
返信削除https://golang.org/ref/mod#private-modules
前提:
go version = 1.16.3
`GOPRIVATE`という変数にURLを指定してやれば良いようです。
例:
go env -w GOPRIVATE=ghe.example.com
僕の利用しているGHE では-insecureを使わなくても問題なく go get できました。
また、-insecure フラグは将来的に削除予定だそうです(go help get で確認できました)。
すみませんコメントに気づいていませんでした!
返信削除ちょうど先日Go1.17にアップデートしたところ、本記事の内容が使えなくなっていたのでGOPRIVATEが役に立ちました。ありがとうございます!
> 僕の利用しているGHE では-insecureを使わなくても問題なく go get できました。
こちらの環境で使えない理由はまだわかっていないんですが、Let's Encryptの証明書を使っているのでそれが関係しているのかもですね・・・