GitLab 6.9.4からGitLab7.4.2へのアップデートとSSHポートの設定
銀鷹です。
しばらく研究室のGitLabのアップデートをサボっていたが、
Task listsがサポートされたということもありバージョンアップを行ったので手順を残しておく。
GitLabの変更内容の詳細は以下のURLを参照のこと。
幾つか変更が行われているが、私(及び周囲の人)としてはTask Listsのサポートが一番大きい。
https://about.gitlab.com/2014/10/22/gitlab-7-4-released/
今回アップデートするGitLabはomnibus installerでインストールしているため、
アップデートもomnibus installerを用いて行う。
手順は以下のとおり、今回はGitLab 6.9.2からGitLab7.4.2へアップデートを行った。
今回アップデートを行うGitLabはDebian 7.6上で動作している。
公式アップデート手順より引用。
unicornとsidekiqの停止。
sudo gitlab-ctl stop unicorn sudo gitlab-ctl stop sidekiq
GitLabのバックアップ(リポジトリ、Wiki、ユーザ等)
sudo gitlab-rake gitlab:backup:create
最新版パッケージの入手と適応。
以下のdebパッケージのURLは新しいバージョンがリリースされると変わるはず。
最新のものはここで確認のこと。
wget https://downloads-packages.s3.amazonaws.com/debian-7.6/gitlab_7.4.2-omnibus-1_amd64.deb sudo dpkg -i gitlab_7.4.2-omnibus-1_amd64.deb
GitLabの再設定と再起動。
gitlab.ymlを手動で書き換えている場合は変更が取り消されるので注意すること。
可能であれば後述の方法で設定の変更を行うことを推奨。
sudo gitlab-ctl reconfigure sudo gitlab-ctl restart
以上でアップデートは完了。
なお、omnibus installerではなく、GitからCloneしてインストールをしている場合のアップデート手順は以下のとおり。
https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/update/6.x-or-7.x-to-7.4.md
/etc/gitlab/gitlab.rbを用いたGitLabの設定変更方法
例として、22番ポート以外でOpenSSH Serverを動作させている場合について記載する。
調べると、多くの場合以下のようにgitlab.ymlを変更するように記載されていることが多い。
## GitLab Shell settings gitlab_shell: ... # If you use non-standard ssh port you need to specify it ssh_port: 766
ただし、この用に直接gitlab.ymlを編集した場合、sudo gitlab-ctl reconfigure
を実行することで設定内容が上書きされてしまう。
正しくはgitlab.rbに以下のように記載する。
gitlab_rails['gitlab_shell_ssh_port'] = 766
この記載を行った上で、sudo gitlab-ctl reconfigure
を実行することによって、
ssh_portに766が設定された状態でgitlab.ymlが生成される。
このように記載することでgitlab.ymlの内容が変更される理由
GitLabのCookBookを見るとgitlab_shell_ssh_portは以下のように定義されている。
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-cookbooks/gitlab/attributes/default.rb#L128
しかし、このattributesの上書きは以下のように行われるため、
通常のCookBookのattributesを上書きするつもりでgitlab.rbを編集すると失敗する。
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-cookbooks/gitlab/libraries/gitlab.rb#L247
正しく設定を行うためには、
default['gitlab']['gitlab-rails']['gitlab_shell_ssh_port']
の中からgitlab-railsの部分を取り出し、-
を_
に変更する。
その上で、その後ろに['gitlab_shell_ssh_port'] = <設定したいポート番号>
と記載すればよい。
なぜこのような面倒な事を行っているのかはよくわからないが、
このようにすることでsshのポート番号に限らず他のattributesの上書きも行うことが可能である。
例えば、smptのポートを変更したい場合には、gitlab.rbに以下のように記載すれば良い。
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-cookbooks/gitlab/attributes/default.rb#L159
gitlab_rails['smtp_port'] = 11125
Jenkinsの導入
銀鷹です。
今回は、Debian7へのJenkinsの導入です。
基本的な手順はhttp://qiita.com/soramugi/items/4b91222caaa67fb460f5を参考にしました。
加えて、前回インストールしたGitLabとの連携も行います。
環境
OS: Debian7
Jenkins + GitLab6.6。
なお、今回はJenkinsとGitLabは同じサーバで動いています。
インストール
Jenkinsがリポジトリを公開してくれているので、こいつを使います。参考
wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add - sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list' sudo apt-get update sudo apt-get install jenkins
インストールは以上で完了。非常に単純です。
認証の設定
デフォルトでは、Jenkinsさんは非常にオープンな人なので、誰のお仕事でも受けてしまう模様。
なので、ちゃんと設定をします。
詳細は、こちらに丁寧にまとまっているので、こちらを参照して下さい。
GitLabとの連携
JenkinsからGitLabへのアクセス
まずは、jenkinsユーザでGitLabへアクセス出来るようにします。
# 鍵の作成 sudo su jenkins # ssh-keygenの設定はご自由に。 ssh-keygen -t rsa -b 2048
ここで作成した、公開鍵をGitLabに登録。
ユーザは、Jenkinsでビルドさせたいリポジトリにアクセス出来るユーザならだれでも良いはず。
GitLabのProfile settings
-> SSH
-> Add SSH Key
から登録。
登録したら、以下のコマンドでちゃんと入れるかを確認。
# もし、ポートを変えてるなら-pオプションでポートも指定して下さい。 ssh git@<GitLabのIPアドレスorドメイン> -i <秘密鍵> [-p <SSHのポート>] # 以下の様な結果が帰ってくればOK PTY allocation request failed on channel 0 Welcome to GitLab, <ユーザ名>! Connection to <GitLabのIPアドレス> closed.
ここまでがOKなら、残りはJenkinsへの設定です。
gitlab-hook-pluginのインストールと設定
まずは、Jenkinsのトップページから、
Jenkinsの管理
-> プラグインの管理
へ進み、
利用可能
のタブを選択して、右上のフィルタに「gitlab」と入力。
候補の中にある、「Gitlab Hook Plugin」を選択してインストール。
以上でインストールは完了。
あとは、実際にジョブを作成します。
トップページから、新規ジョブ作成
-> フリースタイル・プロジェクトのビルド
を選択。
設定のところで、ソースコード管理
の中にあるGit
を選択。
GitLabからリポジトリをクローンする時のURLをRepository URL
へ、
Credentials
以下のAdd
を押して、Kind
はSSHユーザ名と秘密鍵
を選択、
ユーザ名
に「git」、秘密鍵
はJenkinsマスター上のファイルから
を選択して、
秘密鍵の場所をフルパスで指定。
もし、鍵にパスワードがあるなら、下の高度な設定
を押してパスフレーズ
にパスワードを入力。
あとは、リポジトリ・ブラウザ
で「gitlab」を選択、
URL
にGitLab上のプロジェクトのURLを、Version
には「6.6」を入れて完了。
残りの設定を適当に埋めて、保存で完了です。
ここまで出来たら、Jenkinsのトップページへ戻って、
作ったプロジェクトの右端にあるアイコンを押して、為にしにビルドしてみましょう。
ビルドが成功すれば設定はOKです。
hookの設定
ここまで出来たら、後はGitLab側で、Pushされた時に、自動的にビルドが走るようにします。
GitLabのプロジェクトのSettings
->Web Hooks
を選択。
URL
に「http://<JenkinsサーバのIPアドレスorドメイン>/gitlab/build_now」を入力
Trigger
は「Push events」でOKです。
入力が終わったらAdd Web Hook
をクリック。
最後に、下に追加された内容を確認した上で、Test Hook
をクリック。
Jenkins側でビルドがされているか確認して下さい。
ちゃんとビルドが走っていれば次から、Pushする度にビルドが走ります。
これで、何時でも勝手にJenkinsおじさんがお仕事してくれます。
以上で、GitLabとJenkinsの連携は完了です。
基本的には、
- JenkinsユーザでGitLabへアクセスを可能にする
- GitLab-Hook-Pluginを入れる
- JenkinsのジョブでGitからファイルを取得してビルドを行うようにする
- GitLab側でWeb Hooksを設定する
の4点が出来ていれば動くと思います。
次回は、JenkinsとDockerの連携を扱います。
これが出来るようになれば、わざわざJenkinsが動くサーバに環境を入れなくても、
手元で作ったDockerコンテナでビルドが実行できるので、お手軽です。
今回は以上になります。
GitLab6.6の導入
銀鷹です。
昨年春に研究室でGitLab5.2を導入したのですが、あれからずいぶん時間が経ちました。
いつの間にかメジャーバージョンまで上がっていたようなので、検証してみました。
加えて、今回はJenkins連携とJenkinsとDockerの連携も扱う予定なので、合計3つの記事になります。
環境
OS: Debian7
GitLab: 6.6.4
GitLab-Shell: 1.8.0
インストール
手作業でやりたい場合はinstallationで良いです。
僕はここの通りに手作業でやりました。
基本的な流れはGitLab5.2の頃と大きく変わっていません。
一部うまく行かなかったところがあったので、そこだけ補足します。
補足1
Install Gemsのセクションで以下のコマンドを実行せよとありますが、
パーミッションが無いよって言って怒られました。
ちなみに、今回はPostgresでインストールしたので、実行したのは上のほうです。
# For PostgreSQL (note, the option says "without ... mysql") sudo -u git -H bundle install --deployment --without development test mysql aws # Or if you use MySQL (note, the option says "without ... postgres") sudo -u git -H bundle install --deployment --without development test postgres aws
仕方ないので、一時的にgitユーザでsudoを使えるようにして対処しました。
# sudo可能なユーザでgitユーザをsudoersに追加 sudo visudo # git ALL=(ALL:ALL) ALL PASSWD:ALLを追加 sudo su git # bundle install実行 sudo bundle install --deployment --without development test mysql aws # 終わったらgitユーザから普段のユーザに戻る exit # bundle installを終えたら、gitユーザをsudoersから外す sudo visudo # git ALL=(ALL:ALL) ALL PASSWD:ALLを削除
補足2
こっちは、一応本家のインストール方法のAdvanced Setup Tipsにも乗っていますが、念のため補足。
GitLabはSSH経由でgitの通信を行います。その関係で、SSH Serverが標準の22番ポートで動いていない場合は、以下の設定をしておく必要があります。
# 以下の内容を /home/git/.ssh/config へ追加。 host localhost # GitLabサーバのホスト名でlocalhostを置き換える user git # port 2222 # SSH Serverが待ち受けしているポート番号で置き換える hostname 127.0.0.1; # GitLabサーバのホスト名orIPアドレスで置き換える
# /home/git/gitlab/config/gitlab.ymlの197行目辺りを修正 # 下のような内容が書いてあるので、ssh_portの番号をSSH Serverの待ち受けポート番号で置き換える # If you use non-standard ssh port you need to specify it ssh_port: 2222
以上でOKです。
相変わらず、若干導入は面倒ですが、悪くない感じのインターフェイスがついたGitの環境が無料で手に入るのはありがたい限りです。
次回は、GitLabとJenkinsの連携について書きます。
近況報告
銀鷹です。
久しくブログを書けていなかったので、適当にリハビリも兼ねて書いています。
本当は、最近検証していたJenkinsとDockerで遊んでいたのを書こうとしていたのですが、
さっきから指が痛いので今日は止めておくことにしました。
今も結構痛いです、爪と指の間が裂けたっぽい感じ。
以下、本題の近況報告です。
1. バイト始めました。
就職活動で金が掛かるとかiPad欲しいとか、とりあえず金がほしいとかでアルバイトを始めました。
大阪にあるIT系の会社でサーバの構築とかいろんな検証とかやっています。
今ホットなのはGitHub Enterpriseの導入でしょうか。
まさか学生のうちに触れるとは思っていなかったので楽しくやっています。
その分、家とか大学で使ってるGitLabがしょぼく見えて悲しいですけど・・・
会社でも検証家でも検証。会社ではエンタープライズ、家では貧者のエンタープライズ・・・
— silver_hawk(銀鷹) (@yutaka_j08) 2014, 3月 4
2. 就職活動とやら
一応来年度に修士課程を卒業ということらしいので、就職活動もやっています。
受ける所を決めるのが一番大変だよなーとか思いながら、色々考えながらやった結果、
ある程度状況が落ち着きました。
まだ幾つかの選択肢は残っていますが、殆ど心は決まりつつあります。
就職活動に関しては色々思うところもありますが、
結局のところ呼ばれた(呼んでくれた)ところへ行くのが良いのでは?と思っています。
このへんに関しては、もうちょっと状況が落ち着いて色々出せるようになったらもうちょっと書こう。
結局割りと早い段階で収束しつつあったので、結局お金はそれほどかからなかった。
色んなイベントとかそいういうのは有効活用していくべきだと思います。
少なくとも、○○ナビみたいなサービスよりは意味があったと思います。
お世話になった関係者の方々、ありがとうございました。
3. 研究
一応、昨年は頑張ったおかげで国際学会にも2回位は出せたし、国内でも1回位は出せた。
アイデアとしてはそんなに悪くない感じの反応が得られているので、最後一年もうちょっとやってみるつもり。
もっぱらネットワークセキュリティみたいな感じの事をやっています。
最近の悩みの種は実験というか評価方法。一体どうしたものやら。
以上、近況報告でした。
一体何が書きたかったんだろうか・・・
Arch LinuxをVMWare Playerにインストールした時の注意点
銀鷹です。
完全に自分用のメモですが、Vmware PlayerにArch Linuxをインストールした後、
open-vm-toolsとopen-vm-tools-modulesをインストールするんですが、
一部のファイルを修正(?)しないとうまくシャットダウン出来ない問題の解決方法をまとめておきます。
時々やらないといけないのですが、いつもファイルの場所とやり方を忘れるので…
修正内容
/lib/systemd/system/vmtoolsd.service
を修正する。
[Unit] Description=Open Virtual Machine Tools(Vmware Tools) conditionVirtualization=vmware [Service] ExecStart=/usr/bin/bmtoolsd ## この一行を追加する。 TimeoutStopSec=1s [Install] WantedBy=multi-user.target
そもそも、問題の根本的解決方法じゃないんだけど、
すんなり終了できないよりはマシなので…
まともなやり方もあるんだろうけどな…
完全に自分の忘備録です。
2013年プログラム書き納め(?)
銀鷹です。
12月30日になって、ようやく2013年のレポートを全部書き終えました。
これでレポートは書き納めだ、と思ってたんですが、
よくよく考えるとこのところプログラムは書いてなかったので、
2013年の書き納めも兼ねてちょっと書いたものを貼り付けておきます。
お題は、ここに乗ってたリクルートさんがやってたプロコンのサンプルの一つ。
言語は手慣れた物を、と思ったのでPythonで(最近Python3にようやく移行した)。
最後、ババ抜きが終了しない時の条件が今ひとつわからなかったので、
とりあえず、古い状態を残しておいて、
同じ状態が見つかったらループしてるだろうという雑な感じで対応した。
もうちょっとマシな解法があると思うんだけど、僕にはわからなかった…
(誰か教えてください…)
ひとまず、明日中に別のプログラムを書かない限りは、これが2013年のプログラム書き納めです。
2013年はプログラムより論文(特に英語)を沢山書いた年でした。
来年はもうちょっとコードが書きたいな。
それでは、皆さん良いお年を、来年もよろしくお願いします。
Forward Proxy(Squid3)の設置メモ
銀鷹です。
先日、とある事情によりアメリカに居りましたが、
その際に、日本国外からのアクセスを拒否するサービスを使う必要がありました。
その対策として、Forward Proxyを建てた時のメモです。
Forward Proxyとは?
最近はめっきり聞かなくなりましたが、昔の言葉(?)で言うなら串ってやつです。
最近よくある、Nginxで建てて、裏にあるWebアプリにつなぐReverse Proxyとは別物です。
Forward Proxyは、昔回線が細かった頃には、キャッシュとしての意味合いがあったり、
一時(多分90年台くらい)は、自分のグローバルIPを秘匿して
Webサイトにアクセスするときに使われていた様に思います。
(AnonymousなProxyとかがそういう奴でしたね…)
探すと、今でもリストが公開されているようです。
http://www.cybersyndrome.net/pla5.html
今回は、日本国外のIPアドレスからのHTTPリクエストを、
日本国内のForward Proxyサーバを経由することで、
国内からのアクセスに見せかけるために使います。
(基本的に問題無いと思いますが、規約で禁止されてたりしたら辞めてくださいね…)
Forward Proxy Serverの選定
一応、幾つかサーバがあるようですが、
今回はよくあるSquid3を使いました。
最初は、Nginxでも建てれると聞いてやったんですが、
NginxさんはHTTPSに非対応なので辛くて辞めました。
HTTPオンリーで良いならNingxさんはコンフィグも少なくて楽だったのでお勧めです。
Squid3のインストール
参考サイト: http://tejunsho.com/squid/20130319000170.html
環境
- OS: Ubuntu Server 12.04
- グローバルIPアドレスが振られていること (私の場合は、さくらVPSの1Gプラン使ってます。)
インストール方法
以下のコマンドでOK。
sudo apt-get install squid3
Squid3の設定
/etc/squid3/squid.conf
を書き換える。
デフォルトでは、いっぱいコメントがついたファイルがありましたが、
バックアップしたうえで、僕は全部書き換えました。
内容は以下のとおり。
acl manager proto cache_object acl localhost src 127.0.0.1/32 ::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 # XXX.XXX.XXX.XXX/XX の部分は、 # Proxyサーバへのアクセスを許可するIPアドレスの範囲です。 acl localnet src XXX.XXX.XXX.XXX/XX acl winupdate dstdomain .microsoft.com .windowsupdate.com acl SSL_ports port 443 acl Safe_ports port 80 acl Safe_ports port 443 acl CONNECT method CONNECT # 以下コメントで囲った部分は、Proxyサーバ利用時に、 # BASIC認証を要求するための設定です。 # 必要なければ消してもOK ########################## auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/.passwd auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours acl password proxy_auth REQUIRED http_access allow password ########################## http_access allow manager localhost http_access allow winupdate http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access allow localnet http_access deny all # Proxyサーバのポート番号、一般的に8080ですが、変えてもよい。 http_port 8080 cache_dir ufs /var/spool/squid3 600 16 256 coredump_dir /var/spool/squid3 refresh_pattern . 0 20% 4320 forwarded_for off request_header_access Referer deny all request_header_access X-Forwarded-For deny all request_header_access Via deny all request_header_access Cache-Control deny all access_log /var/log/squid3/access.log common cache_mem 256 MB
Proxyサーバ利用時にBASIC認証を要求する場合
BASIC認証用のファイルを作る必要があります。
作成方法は以下のとおり。
# htpasswdコマンドが必要なのでapache utilsをインストール sudo apt-get install apache2-utils # 実際にファイルの生成 # <USER>は認証時のユーザ名で、<PASS>はパスワードで置き換えること。 sudo htpasswd -c /etc/squid/.passwd <USER> New password: <PASS> Re-type new password: <PASS> sudo chown proxy:proxy /etc/squid3/.passwd
以上で設定は完了。
sudo service squid3 restart
でSquid3を再起動。
建てたForward Proxyを使う
ブラウザのProxy設定部分に、Forward Proxyを建てたサーバのIPアドレスかドメインと設定したポート番号を入れて完了。
BASIC認証を有効化している場合は、初回接続時に認証があります。
後は確認くん(懐かしい)とかで、
ちゃんとIPアドレスがForward Proxyの物になっているかを確認して完了。
あとは、Proxy経由で色んなサービスを使ってください。
まあ、大抵の場合は普通にアクセスするより重くなるので、
必要最低限以外は使わないほうがいいと思います。