LoginSignup
1
0

プロキシ認証環境下でのrbenvからrubyのインストールしたらcrulコマンドが邪魔してきた話

Posted at

今回の困りごと

社内プロキシ傘下にあるUbuntu環境の中で、rbenvでrubyをインストールしようとしたところ、こんな具合のエラーが出ました。
というわけで、今回はこのエラーをやっつけます。

 $ rbenv install 3.22
 ==> Downloading ruby-3.2.2.tar.gz...
 -> curl -q -fL -o ruby-3.2.2.tar.gz https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.2.tar.gz
   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                  Dload  Upload   Total   Spent    Left  Speed
   0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
 curl: (35) OpenSSL SSL_connect: 接続が相手からリセットされました in connection to cache.ruby-lang.org:443
 error: failed to download ruby-3.2.2.tar.gz
 
 BUILD FAILED (Ubuntu 20.04 on x86_64 using ruby-build 20231114-4-gd312f5a)

環境

  • Ubuntu20.04
  • プロキシ認証

最近はWSL2上のUbuntuをいじってましたが、今回はUbuntu端末単体の話となります。

原因はcrulコマンドのプロキシ認証

「またプロキシなのか!?」「なんだこれは!?」「プロキシか!?」って疑ったら1、エラー文の中にcurl: (35) OpenSSL SSL_connect: 接続が相手からリセットされましたとあるので、やっぱりまたプロキシですね。
といわけでcurlコマンドのプロキシ認証やっていきましょう。

curlコマンドのプロキシ認証

curlのプロキシは

curl -U "ユーザー名":"パスワード" -x "プロキシのアドレス":"ポート番号" -L -o "ファイル名" URL

といった具合で認証させられますが、毎度毎度こんな長ったらしいコマンドライン作るのも面倒なので、別に設定ファイルを作ります。
今回はユーザーのホームディレクトリ直下に.curlrcと設定ファイルを作成します。

 $ vim ~/.curlrc
 proxy = "http://proxy address:port"
 proxy-user = "username:password"

Bashに干渉しているので、パスワードに記号があったらエスケープさせるのも忘れずに。
これでインストールできるでしょう。

と思いきや

code:linux
  $ rbenv install 3.2.2
  ==> Downloading ruby-3.2.2.tar.gz...
  -> curl -q -fL -o ruby-3.2.2.tar.gz https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.2.tar.gz
    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                   Dload  Upload   Total   Spent    Left  Speed
    0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  curl: (35) OpenSSL SSL_connect: 接続が相手からリセットされました in connection to cache.ruby-lang.org:443
  error: failed to download ruby-3.2.2.tar.gz

状況は変わらず。
ここまで来て駄目だったら、己の日頃の行いを疑いますが残念ながら心当たりは無いです。2
となると、rbenvの中でrubyの構築を行ってる箇所に原因があります。
rbenvの中でrubyの構築は~/rbenv/plugins/ruby-build/bin/ruby-buildで行ってます。
その中に以下のようなcurlの記述がありました。この当たりが怪しいですね。

 http_head_curl() {
   # shellcheck disable=SC2086
   curl -q -sILf $CURL_OPTS "$1" >/dev/null
 }
 
 http_get_curl() {
   # shellcheck disable=SC2086
   log_command curl -q -fL $CURL_OPTS -o "$2" "$1" 2>&3
 }

このcurlのオプションに-qがありますが、これがDisable .curlrcという挙動をとります。つまりせっかく設定した.curlrcを無視するようになってしまいます。
というわけで以下のような具合で-qを除外しましょう。
念の為、バックアップもとっておきます。

$ cd ~/rbenv/plugins/ruby-build/bin/
$ cp ruby-build ruby-build_org
 http_head_curl() {
   # shellcheck disable=SC2086
   curl -sILf $CURL_OPTS "$1" >/dev/null
 }
 
 http_get_curl() {
   # shellcheck disable=SC2086
   log_command curl -fL $CURL_OPTS -o "$2" "$1" 2>&3

再度インストール

 $ rbenv install 3.2.2
 ==> Downloading ruby-3.2.2.tar.gz...
 -> curl -q -fL -o ruby-3.2.2.tar.gz https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.2.tar.gz
   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                  Dload  Upload   Total   Spent    Left  Speed
 100 21.0M  100 21.0M    0     0  4641k      0  0:00:04  0:00:04 --:--:-- 4812k
 ==> Installing ruby-3.2.2...
 -> ./configure "--prefix=$HOME/.rbenv/versions/3.2.2" --enable-shared --with-ext=openssl,psych,+
 -> make -j 12
 -> make install
 ==> Installed ruby-3.2.2 to /home/s220125/.rbenv/versions/3.2.2

バージョンも確認しておきましょう。

 $ ruby --version
 ruby-3.2.2

できましたー。

  1. 蒸気暴威……!

  2. 先日は献血に行ってきて功徳を積んでいます。

1
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
1
0