学校法人・専門学校HALでGit!!
HAL Advent Calendar 2016
HAL生によるアドベントカレンダーで投稿した記事です。
なぜわざわざ記事にしたか
ただ、Githubへプッシュするだけなのに、なぜいちいち記事にしたかと言いますと、HALでは外部への通信はプロキシを経由するため、すんなりと出来ないという問題があります。少し考えれば分かる解決法なのですが、それに辿り着く前にテザリングで我慢する学生も少なくないので、今回はそれを記事にしました。
※学校的には無駄にポートを開放出来ないので、仕方ないと思います。
HAL東京ではこの問題は起きないそうです。
## 対象のOSと学生
申し訳ありませんが、私がMacということから、OSXのみを想定しています。ですが、Windowsでも同じことをすれば可能です。時間があればそっちも書きます。
また、今回はHAL大阪の設定になります。他校バージョンあれば、Githubにプルリクください。
MacもWindowsも対応可能です
HALの学生はWindowsユーザーが多こともあり、Windowsでの対応も致しました。
この記事の下部に設定方法を添えますので、そちらで確認してください。
プッシュ出来ない原因と課題
設定を詳しく知っているわけではないですが、Proxyを経由するということは、許可されているポート以外は遮断されます。恐らく、80と443以外は閉まってる気がします。
加えて、プロキシにはユーザーを認証する機能が存在するので、そこをパスする必要があるという二点を回避する必要があります。
一番ラクな解決策
以下のような感じで、configにプロキシに合わせた設定を直接入力する方法があります。しかし、これだと学外だと使えないという問題がありました。
$ git config --global http.proxy http://学籍番号:認証PW@proxy03.osaka.hal.ac.jp:8080
$ git config --global url."https://".insteadOf git://
解決するためのシェルスクリプト
# License: MIT
# (c) 2016 jumpei"pei"chikamori http://ganbaruman.xyz/portfolio
#!/bin/bash
# 設定してください
user=学籍番号
password=認証PW
# git
git config --global --unset http.proxy
git config --global --unset https.proxy
git config --global --unset url."https://".insteadOf
sed -i '' -e '/http/d' ~/.gitconfig
sed -i '' -e '/https/d' ~/.gitconfig
# npm
npm -g config delete proxy
npm -g config delete https-proxy
unset http_proxy
unset https_proxy
unset ftp_proxy
unset all_proxy
# HAL
if ping -c 3 proxy03.osaka.hal.ac.jp >/dev/null 2>&1
then
proxy_hal=http://$user:$password@proxy03.osaka.hal.ac.jp:8080
git config --global http.proxy $proxy_hal
git config --global https.proxy $proxy_hal
git config --global url."https://".insteadOf git://
npm -g config set proxy $proxy_hal
npm -g config set https-proxy $proxy_hal
export http_proxy=$proxy_hal
export https_proxy=$proxy_hal
export ftp_proxy=$proxy_hal
export all_proxy=$proxy_hal
fi
やっていることは簡単で、対象のプロキシと導通確認が取れたら、学校用のプロキシにする。それだけのシェルスクリプトです。
※現在プルリクなどで改良も加えられているので、git以外の対応も増えてきています。もっと増やして便利にしたい方はプルリクよろしくです。
起動の度に自動で設定を変更する
.bashrcに記述してください。 (ターミナルやgit bash起動した時に実行)
上記で書いたシェルスクリプトを貼り付けるか、hal_proxy.shというファイルを作成して、読み込むかのどちらかの処理を記述してください。
zshの人は.zshrcに記述してください。
特定のリポジトリにだけ適用したい時は、pre-pushで実現できます。
今回は基本的に全てのリポジトリを想定しているので、
使い方が分かりやすく載っているサイトを紹介しておきます。
pre-pushの使い方
それぞれのOSでの設定方法
Windows
Git bashをインストールして起動し、設定コマンド通りに入力していってください。
Git bashのダウンロード
Mac
ターミナルを開いて、設定コマンド通り入力してください。
XCodeをインストールするか、gitインストール手順を参照してください。
設定コマンド
以下のコマンドを順番に入力してください。
$は入力コマンドに含めないでください。
$ git clone https://github.com/tikasan/hal_proxy_over_git.git
$ cp hal_proxy/hal_osaka_proxy.sh ~/hal_osaka_proxy.sh
$ touch ~/.bashrc
$ vi ~/.bashrc
$ source ~/.basrc
vi ~/.bashrcにて記述する内容は以下の通りです。
vimの操作がうまく出来ない人は直接ファイルを開くか、友達にやってもらってください。
~/hal_osaka_proxy.sh
上記の設定だと、ターミナルまたはGit bash起動する度に自動的にプロキシの設定が上書きされます。
イケてるシェルスクリプトまたは他校バージョンあれば
一応、Githubにアップしましたので、暇な人はプルリクしてください。
hal_proxy_over_git