nologyance.net

日々のアウトプット

人はなぜproxyに阻まれるのか

エンジニアなら一度は嵌るProxy設定

yumやgit、pipコマンドが何故か上手くいかない。 さんざん悩んだ挙句、頼れる先輩に聞くと「それProxyじゃない?」と誰もが言われた経験を持っているはず。

ググると出会う答え そして残る疑問

Proxyが原因とわかればやることは一つ、ググるのみ。 そして大抵の場合、答えらしき記事がヒットする。 そして大抵の場合、書いてある通りにやれば解決する。 しかし、参考にしている記事にはこう書いてあることも多い。

「〇〇も試したけど何故か私の環境では上手くいきませんでした。」

原因はよくわからないがどうやら上手くいかないケースがあるらしい。 少し疑問は残るが、今回の自分のケースではうまくいっているのでまぁいっかと記事を後にする。 そうして別のエンジニアがまたやってくる・・・ それは自分自身のことかもしれない。

つかんだ糸口

ここ2、3日CentOS7周りでユーザやら権限やら環境変数やらをずっと弄っていた結果、 上記の謎が解けた気がしたので忘れないうちにメモ。 ポイントは変数のスコープとプロセスの関係。

環境変数とシェル変数

https://qiita.com/kure/items/f76d8242b97280a247a1

それぞれがどういうものかは上記の記事を参照ください。 何が言いたいかというと

あなたのProxy設定、有効化されてないのでは?

yum install でありがちなパターン

yum Proxyでググるとヒットするのは大体次の3つのパターン ・yum.confに書く ・export http_proxyを設定する ・/etc/environmentに書く

そしてyum.confに記載すると大体上手くいくと書いていることが多い。(個人の感想です) exportで環境変数に設定した場合は失敗している場合も多い。(個人の感想です。)

何が起こっているのか

rootユーザで作業していない限り、yum installにはsudoが必要です。 つまり「export http_proxy=xxxxxx」の後に「sudo yum install」と実行します。

ここでこちらの記事をご覧ください。 https://qiita.com/chroju/items/375582799acd3c5137c7

おわかりいただけただろうか

そう、環境変数がリセットされている可能性が高いです。 環境によってresetenvの設定が異なるため、何故か上手くいかないケースが発生すると思われる。(あくまで想像ですが)

yum.confに設定した場合

yum installの実行時に明示的にproxy設定が行われるため、環境変数に設定されていなくてもProxyを突破できる。

/etc/environmentに設定している場合

sudoによって環境変数がリセットされた際、初めて環境変数が設定されるため(この辺りの挙動が理解できない場合はCentos7のbash環境変数についてググってみてください) 何故か上手くいかないケースが発生するのではないか?

Proxyで嵌ったときの確認チェックリスト

今回の記事で取り扱った内容以外にもハマりポイントが多いのでチェックリストを作ってみました。

  • [ ] 環境変数はちゃんと引き継がれているか
  • [ ] 認証付きプロキシの場合はhttp://user:password@proxy.hostで認証する
  • [ ] https_proxyにも設定する
  • [ ] bashの場合は大文字小文字が区別されるため、HTTP_PROXYとHTTPS_PROXYにも設定する

間違ってたら誰か教えてください。