以前にredmineでredmineを立ち上げて見ましたが、リポジトリの管理だけ出来ればあそこまでの必要は無いという用途も結構多いです。正直、GitHubで用が足りるという事ですが、もっと簡単にローカルのリポジトリを管理したいという様な用途にGitHubのクローン環境としてお手軽に設置出来るGitBucketを動かしてみました。
tomcatやjetty、glassfishを動かしてその中でGitBucketを動かしても良いのですが、せっかく簡単に立ち上げられるのが特徴のGitBucketを動かすためにtomcat環境とか作ってたら何かアンバランスな気がするので、リポジトリ専用にjailを立ち上げてそこで直接GitBucketを稼働させる事とした。
ということで、基本的な流れは
- リポジトリ専用jail環境の構築
-
GitBucketのインストールと自動起動等の設定
の2段構えで以下に記述します。
jailを起こすところから始めても慣れれば10分程度で出来ます。
その際にGitBucketのリポジトリディレクトリをjailの中ではなくVIMAGEホストのディレクトリをマウントする事で、バックアップや世代管理等の運用が少しだけ楽になるように準備も行います。
1. リポジトリ専用jail環境の構築
VIMAG等の準備はFreeBSD 10.0でVIMAGEなjail(手抜き編)を参照。
(1) ezjailコマンドを使いjail名”repos”でjailを作成。
ezjail-adminコマンドを実行してjail “repos”をzfs上に作成する。アドレスの割り当ては後で/etc/jail.confにて指定するので適当な値で良い。(今回は10.0.0.1としてみた)
1 |
# ezjail-admin create -c zfs repos 10.0.0.1 |
(2) /etc/jail.confに”repos”用の設定を追加。
jail “repos”の設定を以下の様に追加。
既に稼働しているjailがいる場合、2行目の数字は最後のif+1の値を指定すること。
アドレスは各自の環境に合わせて修正。
1 2 3 4 5 6 |
repos { $if = 0; $ipaddr = 192.168.1.30; $defaultroute = 192.168.1.254; devfs_ruleset = "4"; } |
(3) jail “repos”起動時にGitBucketベースディレクトリがマウントされる用に/etc/fstab.reposを編集。
VIMAGEホストサーバ側にGitBucketの動作するベースディレクトリを作成し、用意したrepositoryディレクトリをjail “repos”でマウントして使う。
1 2 3 |
# zfs create tank/gitbucket # mkdir /data/jails/repos/usr/local/gitbucket # echo "/tank/gitbucket /data/jails/repos/usr/local/gitbucket nullfs rw 0 0" >> /etc/fstab.repos |
(4) VIMAGEホスト起動時にjail “repos”が立ち上がる様、/etc/rc.confを編集。
/etc/rc.confの”jail_list=”…””行に”repos”を追加する。
(“web”に”repos”を追加した例)
1 |
jail_list="web repos" |
以上でjailを立ち上げる準備は完了。
以降はjail “repos”を立ち上げ、”repos”環境内で作業を行う。
1 2 3 4 5 6 7 |
# jail -c repos repos: created # jls JID IP Address Hostname Path 14 - repos /data/jails/repos # jexec 14 /bin/tcsh root@repos:/# |
2. GitBucketのインストールと自動起動等の設定
GitBucketは専用のgitbucketユーザとグループを作成して立ち上げる設定とします。
(1) gitbucketユーザー/グループの作成
1 2 |
# pw groupadd gitbucket # pw useradd -n gitbucket -g gitbucket -c "gitbucket" -s /usr/sbin/nologin -w none |
(2) git, openjdkのインストール
pkgコマンドで一気に行きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# pkg install git openjdk8 Updating FreeBSD repository catalogue... FreeBSD repository is up-to-date. All repositories are up-to-date. The following 49 packages will be affected (of 0 checked): New packages to be INSTALLED: git: 2.1.2 expat: 2.1.0_1 p5-Authen-SASL: 2.16 p5-GSSAPI: 0.28 perl5: 5.16.3_11 (...中略...) java-zoneinfo: 2014.i dejavu: 2.34_4 javavmwrapper: 2.5 alsa-lib: 1.0.28 The process will require 330 MB more space. 64 MB to be downloaded. Proceed with this action? [y/N]:y |
※ 2016-06現在、gitbucket 4.1ではjava 8必須になっていますのでopenjdk8に変更しました。
(3) GitBucketの入手
リリース版GitBucketのwarファイルをこちらから入手する。
以下は最新版の”gitbucket.war”ボタンのリンクURLを控えて読み替えて下さい。
この記事作成時は”2.5″が最新版でした。
一緒にGitBucketのデータ運用などのために”data”ディレクトリを作成し、パーミッションの変更もしておきます。
GitBucketのバージョンアップはwarファイルを差し替えるだけですが、書き戻しも考慮してバージョン付きのファイル名として実行用にシンボリックリンクを張る運用としておきます。
1 2 3 4 5 6 7 8 |
# cd /usr/local/gitbucket # mkdir lib # mkdir data # chown -R gitbucket:gitbucket . # cd lib # fetch -o gitbucket-2.5.war https://github.com/takezoe/gitbucket/releases/download/2.5/gitbucket.war gitbucket-2.5.war 100% of 48 MB 482 kBps 01m44s # ln -s gitbucket-2.5.war gitbucket.war |
fetchでダウンロード時にgithubのSSL CA局”DigiCert Inc”の確認が出来なくて以下の様なエラーが出る場合があります。
1 2 3 4 |
# fetch -o gitbucket-2.5.war https://github.com/takezoe/gitbucket/releases Certificate verification failed for /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA 34380826280:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed:/usr/src/secure/lib/libssl/../../../crypto/openssl/ssl/s3_clnt.c:1179: fetch: https://github.com/takezoe/gitbucket/releases: Authentication error |
その場合は、以下の作業を行ってから再度fetchコマンドでダウンロードを行って下さい。
1 |
# ln -sf /usr/local/share/certs/ca-root-nss.crt /etc/ssl/cert.pem |
(4) gitbucket.conf, rc.d/gitbucketの作成
ローカル設定用の”gitbucket.conf”と起動用スクリプトの”rc.d/gitbucket”を/usr/local/etcの下にそれぞれ以下の内容で作成する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# # configuration for GitBucket. # ## Bind host GITBUCKET_HOST=0.0.0.0 ## Other Java option GITBUCKET_JVM_OPTS=-Dmail.smtp.starttls.enable=true ## Data directory, holds repositories GITBUCKET_HOME=/usr/local/gitbucket/data ## Server port (1024以下はroot権限が必要) GITBUCKET_PORT=8080 ## URL prefix for the GitBucket page (http://<host>:<port>/<prefix>/) GITBUCKET_PREFIX= ## Directory where GitBucket is installed ## Configuration is stored here: GITBUCKET_DIR=/usr/local/gitbucket GITBUCKET_WAR_DIR=$GITBUCKET_DIR/lib ## Path to the WAR file GITBUCKET_WAR_FILE=$GITBUCKET_WAR_DIR/gitbucket.war |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
#! /bin/sh # # service script for gitbucket # # PROVIDE: gitbucket # REQUIRE: DAEMON # KEYWORD: shutdown # # Add the following lines to /etc/rc.conf to enable gitbucket: # # #gitbucket_enable="YES" # # defualt gitbucket user # ## gitbucket_user=gitbucket . /etc/rc.subr name="gitbucket" rcvar="gitbucket_enable" load_rc_config ${name} : ${gitbucket_enable:=NO} : ${gitbucket_user=gitbucket} start_cmd="start" stop_cmd="stop" kill="/bin/kill" cat="/bin/cat" daemon="/usr/sbin/daemon" java="/usr/local/bin/java" pid_file="/var/run/${name}.pid" log_file="/var/log/${name}.log" PATH="${PATH}:/usr/local/libexec/git-core" ## default settings ## # Bind host GITBUCKET_HOST=0.0.0.0 # Other Java option GITBUCKET_JVM_OPTS=-Dmail.smtp.starttls.enable=true # Data directory, holds repositories GITBUCKET_HOME=/usr/local/gitbucket/data # Server port GITBUCKET_PORT=8080 # URL prefix for the GitBucket page (http://<host>:<port>/<prefix>/) GITBUCKET_PREFIX= # Directory where GitBucket is installed # Configuration is stored here: GITBUCKET_DIR=/usr/local/gitbucket GITBUCKET_WAR_DIR=$GITBUCKET_DIR/lib # Path to the WAR file GITBUCKET_WAR_FILE=$GITBUCKET_WAR_DIR/gitbucket.war ## include settings [ -f /usr/local/etc/gitbucket.conf ] && . /usr/local/etc/gitbucket.conf RETVAL=0 start() { echo -n "Starting GitBucket server: " START_OPTS= if [ $GITBUCKET_PORT ]; then START_OPTS="${START_OPTS} --gitbucket.home=${GITBUCKET_HOME}" fi if [ $GITBUCKET_PORT ]; then START_OPTS="${START_OPTS} --port=${GITBUCKET_PORT}" fi if [ $GITBUCKET_PREFIX ]; then START_OPTS="${START_OPTS} --prefix=${GITBUCKET_PREFIX}" fi if [ $GITBUCKET_HOST ]; then START_OPTS="${START_OPTS} --host=${GITBUCKET_HOST}" fi ${daemon} -u ${gitbucket_user} -p $pid_file ${java} $GITBUCKET_JVM_OPTS -jar $GITBUCKET_WAR_FILE $START_OPTS >>$log_file 2>&1 RETVAL=$? #echo $! > $pid_file if [ $RETVAL -eq 0 ] ; then echo "Success" else echo "failure. Exit code $RETVAL" fi echo return $RETVAL } stop() { if [ ! -f $pid_file ] ; then echo "GitBucket server: no process." exit 1 fi echo -n "Stopping GitBucket server: " # Run the Java process ${kill} $(${cat} $pid_file 2>/dev/null) >>$log_file 2>&1 wait_for_pids $(${cat} $pid_file 2>/dev/null) >>$log_file 2>&1 RETVAL=$? if [ $RETVAL -eq 0 ] ; then rm -f $pid_file echo "success GitBucket stopping" else echo "failure GitBucket stopping" fi echo return $RETVAL } run_rc_command "$1" |
(5) /etc/rc.confの修正
jail起動時からGitBucketが立ち上がる様に/etc/rc.confに以下を追加しておく。
1 |
# echo 'gitbucket_enable="YES"' >> /etc/rc.conf |
(6) サービスの起動
手動でGitBucketサービスを起動する。
1 2 |
# service gitbucket start Starting GitBucket server: Success |
(7) ブラウザでアクセス
ブラウザで立ち上げた”http://192.168.1.30:8080″にアクセスし以下の様な画面が表示されたら成功。
管理ユーザーの初期Username/Passwordはroot/rootなので、とりあえずパスワードだけでも変更しておきましょう。
あとは初期の管理者ID:root、パスワード:rootでアクセスして利用可能。
(おまけ) 既存リポジトリからの移行
以前に立ち上げた手動管理のリポジトリがいくつかあるので、そちらをGitBucketに取り込む。
(1) GitBucketでリポジトリを作成する
(2) shell上でgitコマンドでローカルに移行元のクローンを付くって移行先にpush
1 2 3 |
# git clone --mirror <移行元リポジトリ> # cd <リポジトリフォルダ> # git push --mirror <移行先リポジトリ> |
0 Responses
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.