週末はいつも晴れ

社会人3年目の日記です。プログラミングとか旅行とかラーメン。

プロキシーの自動振り分け

自分は大学も自宅もMacを使うApple信者です。
拝金主義者のいいなりになっていることはわかっています。
それでもいいのです。信者なので。

さて、いろいろな設定ファイルを大学で変更した時、それが自宅でも反映されると便利ですよね。
いろんな方法があると思うのですが、僕はDropboxで共有しています。

しかし、大学はプロキシーサーバー越しのインターネット接続なので、プロキシーの設定だけは共有しません。
そこで、どういう風に自動的に振り分けるか、という話です。

# bash

僕は次のような構成にしています。

ホームディレクトリ(大学)

.
├── .bash_profile -> Dropbox/inits/.bash_profile
├── .bash_college
├── .bashrc -> Dropbox/inits/.bashrc
├── .emacs.d -> Dropbox/.emacs.d
├── Dropbox
├──  :
├──  :
├──  :
├── bin -> Dropbox/bin
├── m-thesis -> /Users/ikarino/Dropbox/m-thesis/tex/
└── src -> Dropbox/src

Dropbox/inits

Dropbox/inits
├── .bash_profile
├── .bashrc
├── .dict
└── .gnuplot


Dropbox/inits/.bash_profile

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

if [ -f ~/.bash_college ]; then
    . ~/.bash_college
fi

.bash_college

export http_proxy="http://proxy-server:port/"
export https_proxy=$http_proxy
export all_proxy=$http_proxy


特に複雑なことをやっているわけではありません。

  • Dropbox.bashrc.bash_profileを置き、.bash_collegeを大学のMacに置く。
  • .bash_collegeには大学の設定を、.bashrcには共通の設定をのせる。
  • bash起動時には.bash_profileを読み込む。自宅のPCには.bash_collegeは無いので読み込まれず、プロキシーの設定は変更されない。

# Emacs

Emacsのプロキシ設定はこちらを参考にさせていただいています。
僕もいつかElispを書けるようになりたいものです(棒)
emacs-fu: getting your ip-address

;; proxy
;; IPアドレスを返す関数
(defun get-ip-address (&optional dev)
  "get the IP-address for device DEV (default: eth0)"
  (let ((dev (if dev dev "eth0"))) ;つないでるインターフェース
    (format-network-address (car (network-interface-info dev)) t)))

;; 研究室の固定IPと一致したらプロキシーを設定する
(when (string= (get-ip-address) "172.20.1.1")
  (setq url-proxy-services
	'(("http" . "proxy-sever.jp:port")
	  ("https" . "proxy.server.jp:port")))
  )