読者です 読者をやめる 読者になる 読者になる

Λlisue's blog

つれづれなるままに更新されないブログ

プロキシ下でLinuxを使う際のメモ

HowTo Linux Proxy Config

どうもAlisueです。研究室は完全Proxy環境下のため、通常の方法ではダウンロード等ができない場合が多々あります。

再インストールなどを行った際に毎度Google先生と格闘しながら設定を行なっていたのですが、いい加減面倒くさくなったのでまとめます。

必須設定

まずは下記設定をすべて行なってください。大抵の場合この設定だけですべてが解決します。

プロキシ用環境変数の設定(ターミナル環境)

通常環境設定は下記に上げるどれかで行います。

  • /etc/environment

    デフォルトの環境変数を設定するファイル。 今回のようにシステム全体の環境変数を変更する場合はこのファイルを編集するのが常套手段である。

  • /etc/profile

    ログイン時に実行されるシェルスクリプトファイル。 ログインシェルとして登録されているシェルが起動した際に自動的に読み込まれる。

  • /etc/profile.d/XXXXX.sh

    ログイン時に実行されるシェルスクリプトファイル。 /etc/profile.dディレクトリが存在しない場合もあり、その場合はこのファイルは使えない。 Debian系OSではこのディレクトリに記載されたファイルは/etc/profileに記載されている下記コマンドにて実行される。

    if [ -d /etc/profile.d ]; then
    for i in /etc/profile.d/*.sh; do
        if [ -r $i ]; then
        . $i
        fi
    done
    unset i
    fi
    
  • ~/.profile

    ユーザー固有profileファイルで、ログイン時に実行される。 システムワイドに設定する場合には使わない。 なお~/.bashrcに設定する人も多いようだが、このファイルはBashの設定ファイルなので環境変数を設定するという意味合い的には~/.profileが妥当。 ~/.profileを読み込んでくれない場合は使用しているシェルのユーザー個別設定ファイル(例: ~/.bashrc, ~/.zshrc)に下記のように記載する。

    if [ -f "~/.profile" ]; then
        source "~/.profile"
    fi
    

今回の場合システム全体に環境変数を適用したいため/etc/environmentに記載するのが妥当ですが、このファイルは設定ファイルであり実行されないため環境変数系が使用できません。したがって/etc/profile.d/proxy.shに下記のように記載してください。

# プロキシ設定 ==============================================
USERNAME="<USERNAME>"       # 認証が必要なプロキシの場合
PASSWORD="<PASSWORD>"       # 認証が必要なプロキシの場合
HOST="<HOST>"
PORT="<PORT>"
# 認証が必要なプロキシの場合
PROXY="$USERNAME:$PASSWORD@$HOST:$PORT"
# 認証が不要なプロキシの場合
PROXY="$HOST:$PORT"
# 実際の環境変数の設定
export http_proxy="http://$PROXY"
export https_proxy="https://$PROXY"
export ftp_proxy="ftp://$PROXY"
# 大文字バージョンしか認識しないプログラム用
export HTTP_PROXY="http://$PROXY"
export HTTPS_PROXY="https://$PROXY"
export FTP_PROXY="ftp://$PROXY"
# プロキシを利用しないアドレスの指定(必須)
export no_proxy="127.0.0.1,localhost"
export NO_PROXY="$no_proxy"

sudoを利用した際にプロキシ設定を引き継ぐ設定

sudoコマンドにより一時的にルートとして実行する場合、通常環境変数はリセットされます。 /etc/environmentに設定を記載した場合下記は不要かと思いますが事情により~/.profileなどに記載した場合を考慮し念の為環境変数を引き継ぐ方法を書きます。

sudoコマンドの設定はvisudoコマンドにより行います。 なお初期状態ではnanoというエディタが起動し、使いづらいためVimEmacsを使いたい方は下記のように変更してから行なってください。

% sudo update-alternatives --config editor  # 標準のエディタを変更するコマンド

標準エディタを自分好みのものに変更したあとsudo visudoとうち/etc/sudoersの編集に入ってください。その後下記のように修正してください。

#Defaults env_reset
Defaults env_keep="no_proxy NO_PROXY"
Defaults env_keep+="http_proxy https_proxy ftp_proxy"
Defaults env_keep+="HTTP_PROXY HTTPS_PROXY FTP_PROXY"

Dropboxのインストール

プロキシ環境下でのDropboxのインストールは多少面倒です。

Dropboxインストーラーがプロキシ下では動作しないためデーモンを手動でインストールする必要があります。 これはDropboxをダウンロードページの「コマンドラインでDropboxをインストールする」に従います。

各プログラムごとの設定

通常は環境変数設定を行うことで適切なプロキシが使用されるようになるのですが、稀にうまく行かない場合があります。 その場合は下記を参考に各プログラムごとの設定を行なってください。

apt-get

/etc/apt/apt.conf.d/02proxy ファイルを新規作成(or 編集)し下記内容を追加してください。

# 承認が必要なプロキシの場合
Acquire::http::Proxy "http://<username>:<password>@<host>:<port>";
Acquire::https::Proxy "https://<username>:<password>@<host>:<port>";
Acquire::ftp::Proxy "ftp://<username>:<password>@<host>:<port>";
# 承認が不要なプロキシの場合
Acquire::http::Proxy "http://<host>:<port>";
Acquire::https::Proxy "https://<host>:<port>";
Acquire::ftp::Proxy "ftp://<host>:<port>";

yum

/etc/yum.confproxy=http://<host>:<port>を書き加えてください(下記参照)。

[main]
proxy=http://<host>:<port>
proxy_username=<username>       # 認証が必要な場合
proxy_password=<password>       # 認証が必要な場合
cachedir=/var/cache/yum
... 略

gnome3

下記コマンドを実行してGnome3の設定を書き換えてください。

% gsettings set org.gnome.system.proxy mode 'manual' 
% gsettings set org.gnome.system.proxy.http host 'host'
% gsettings set org.gnome.system.proxy.http port port
% gsettings set org.gnome.system.proxy.ftp host 'host'
% gsettings set org.gnome.system.proxy.ftp port port
% gsettings set org.gnome.system.proxy.https host 'host'
% gsettings set org.gnome.system.proxy.https port port
% gsettings set org.gnome.system.proxy ignore-hosts "['localhost', '127.0.0.0/8']"

wget

/etc/wgetrcに下記項目を加えてください。

http_proxy=http://host:port
https_proxy=http://host:port
proxy_user=username             # 認証が必要な場合
proxu_password=password         # 認証が必要な場合

curl

~/.curlrcに下記項目を加えてください。なお/etc/curlrcでもいい気がしますが未確認です。

proxy = "http://host:port"
proxy_user = "user:password"    # 認証が必要な場合(未確認情報)

git

/etc/gitconfigに設定を書き込めば良いのですが、コマンドで書き込みができるので下記コマンドを打ち込んでください。

% git config --global http.proxy http://<host>:<port>
% git config --global https.proxy https://<host>:<port>

このコマンドを実行することで下記のように/etc/gitconfigにプロキシ設定が書かれます。

[http]
    proxy = http://<host>:<port>
[https]
    proxy = https://<host>:<port>

またこの設定をしたにも関わらず"remote HEAD refers to ..."と出る場合はlibcurlのバグなので下記の設定を行い対処してください。

% git config --global url.http://.insteadOf https://

このコマンドを実行することで下記のように/etc/gitconfigに設定が書かれます。

[url "http://"]
    insteadOf = "https://"

またプロキシがgitプロトコル(git://)を通さない場合下記のように設定することで代わりにHTTPSプロトコルを使用してくれます。

% git config --global url.https://.insteadOf git://

このコマンドを実行することで下記のように/etc/gitconfigに設定が書かれます。

[url "https://"]
    insteadOf = "git://"

ただし、この設定を行うと毎度ユーザー名・パスワード等が聞かれるようになるため、これを避けるために~/.netrcファイルの修正も行なってください。

machine github.com
login USERNAME
password PASSWORD

ただ、平文でパスワードを保存する必要があるので、実はあまりおすすめできる方法ではありません。 なので可能であれば多少は面倒ですがgitをhttps経由で使う時のパスワードを保存するにしたがってgit-credentialを使用してください。

npm

HTTPSがうまく使えなかったので下記のように設定した。

% # set proxy to npm
% npm config set proxy $HTTP_PROXY
% # use http registry
% npm config set registry http://registry.npmjs.org/

参考