VPS Debian 環境で git や maven レポジトリを構築

Debian 6でgit / mavenのレポジトリを構築していきます

開発用ユーザ作成

開発者用アカウントを作成していない場合は作成する ※ 前回記事参照
カゴヤVPS Debian5 から 6 へアップグレードして Apache と FTP 接続環境を構築
http://nantokaworks.com/?p=753

アカウントdevuserをwww-dataグループに追加


# gpasswd -a devuser www-data

gitやmavenレポジトリファイルの作成はdevuserで行う

WebDav

○ WebDavモジュールのロード

# a2enmod dav

Enabling module dav. Run '/etc/init.d/apache2 restart' to activate new configuration!


# a2enmod dav_fs

Considering dependency dav for dav_fs: Module dav already enabled Enabling module dav_fs. Run '/etc/init.d/apache2 restart' to activate new configuration!

WebDav (git / maven)日本語対策

WebDavを利用する前に日本語ファイル対策のためにApacheモジュールをインストールする。

# aptitude install libapache2-mod-encoding
# vim /etc/apache2/mods-available/encoding.conf

<IfModule mod_encoding.c> EncodingEngine on NormalizeUsername on SetServerEncoding UTF-8 DefaultClientEncoding JA-AUTO-SJIS-MS SJIS AddClientEncoding "cadaver/" EUC-JP </IfModule>

○ encodingモジュールロード


# a2enmod encoding

Enabling module encoding. Run '/etc/init.d/apache2 restart' to activate new configuration!

git / maven用 SSL設定

今回、gitやmavenへのアクセスは http (80番ポート)を使わず https (443番ポート)を使いたいと思います。

○ SSLモジュールのロード


# a2enmod ssl

Enabling module ssl. See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates. Run '/etc/init.d/apache2 restart' to activate new configuration!

○ https設定の確認
Apacheデフォルトのhttpsサイト定義 default-sslを使って設定します。

DocumentRootをhttpサイト定義defaultと同じ設定にします。
(defaultのサイト定義は前回記事参照)


# vim /etc/apache2/sites-available/default-ssl

DocumentRoot /var/www/ ↓ DocumentRoot /home/www-data/public_html/ <Directory /var/www/> ↓ <Directory /home/www-data/public_html/>

確認のため /home/www-data/public_html/index.html 作成

default-sslを有効にする


# a2ensite default-ssl

Enabling site default-ssl. Run '/etc/init.d/apache2 reload' to activate new configuration!

○ Apache再起動


# /etc/init.d/apache2 restart

https://exsample.com/ (:443)で確認

httpsでアクセスすると信用できないサイトとブラウザでエラー画面が表示されると思います。

これはApacheデフォルト(もしくは次に作る)証明書の出所が信頼できないということで表示されます。

Webサイトとして公開するのであれば別ですが、SSLアクセスを行うためだけなのでここでは無視します。

○ 証明書作成
新しい証明書を作ってdefault-sslに設定してみます


# mkdir /etc/apache2/ssl
# cd /etc/apache2/ssl
# make-ssl-cert /usr/share/ssl-cert/ssleay.cnf apache.pem

証明書ファイルを設定します

SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key ↓ SSLCertificateFile /etc/apache2/ssl/apache.pem SSLCertificateKeyFile /etc/apache2/ssl/apache.pem

○ Apache再起動


# /etc/init.d/apache2 restart

https://exsample.com/ (:443)で確認

git

○ gitレポジトリルートディレクトリ作成
gitレポジトリ配置場所
/home/devuser/git/repos

$ mkdir -p /home/devuser/git/repos
# chown www-data:www-data /home/devuser/git/repos 
# chmod g+s+w /home/devuser/git/repos

○ Apaceh設定
Apacheのサイト定義ファイルにgitレポジトリフォルダーを追加する

# vim /etc/apache2/sites-available/default-ssl

<Directory /home/devuser/git/repos/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> # # This is to permit URL access to GIT WebDav. # Alias /git "/home/devuser/git/repos/" <IfModule mod_dav.c> DAVMinTimeout 600 <Location /git> DAV On Deny from all Allow from all </Location> </IfModule>

○ Apache再起動


# /etc/init.d/apache2 restart

https://exsample.com/git/ で確認

ひとまずフォルダ内の一欄が表示されます。
ファイルが無いので中身は無いですが。

gitレポジトリBasic認証

このままだと誰でもアクセスできるので、ひとまずBasic認証の設定を行います。 ここではgitクライアントからのアクセス用にgituserを設定します 注)Basic認証 ユーザー ≠ git ユーザー

○ gitアクセス用ユーザ作成
gitアクセス用ユーザをgituserとしてパスワードファイルを任意の場所に生成


# htpasswd -c /path/to/.git-htpass gituser

New password: パスワード入力 [enter] Re-type new password: 再度パスワードの入力 [enter] Adding password for user gituser

ユーザ名、パスワードはクライアント側で必要となるため把握しておく

○ 確認


$ vim /path/to/.git-htpass

gituser:xxxxxxxxxxxx //パスワードは暗号化されている

○ その他のユーザ管理コマンド

ユーザ追加
# htpasswd /path/to/.git-htpass user2
ユーザ削除
# htpasswd -D /path/to/.git-htpass user2

○ サイト定義にBasic認証の設定を追加


# vim /etc/apache2/sites-available/default-ssl 

<Directory /home/devuser/git/repos/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> # # This is to permit URL access to git WebDav. # Alias /git "/home/devuser/git/repos/" <IfModule mod_dav.c> DAVMinTimeout 600 <Location /git> DAV On Deny from all Allow from all # 以下追加 AuthName "Git Repository Server" AuthType Basic AuthUserFile "/path/to/.git-htpass” Require valid-user # 以上追加 </Location> </IfModule>

○ Apache再起動


# /etc/init.d/apache2 restart

https://exsample.com/git/ へアクセス

ユーザ名パスワードを認証画面が表示され、正しいパスワード入力でディレクトリ一覧が表示されることを確認する

git(-core)インストール


# aptitude install git-core

○ 確認


$ git --version

git version 1.7.2.5

○ git サーバ側レポジトリ作成


$ cd /home/devuser/git/repos/
$ mkdir repo1.git
$ cd repo1.git
$ git init --bare --shared=true
$ git update-server-info
$ cd ..
# chmod g+s+w repo1.git
repo1.gitレポジトリURL
https:// exsample.com /git/repo1.git/

○ git クライアント側のホームディレクトリにBasic認証情報を配置する

以下、Windows XPで検証

_netrcファイル 配置場所

C:Documents and Settingsgituser_netrc

記述内容

machine exsample.com login gituser password パスワード

_netrcファイルが存在しない場合、git push時にユーザ名 / パスワードの入力を求められる

○ クライアントからgitコマンドを実行する
(gitはインストール済みと仮定)

・git push
サーバ側で所謂「俺々証明書」を発行しているため、証明書チェックを行わないよう設定

$ git config --global http.sslVerify false

レポジトリ作成


$ git init
$ git remote add origin https://exsample.com/git/repo1.git/
type nul > README ←windowsの~ファイル生成コマンド
$ git add .
$ git commit -m "initial import"
$ git push origin master

pushできればOK

・git clone

$ git clone https://exsample.com/git/repo1.git/

○ レポジトリ確認

$ git config remote.origin.url

https://exsample.com/git/repo1.git/

maven

mavenレポジトリルートディレクトリ作成
mavenリポジトリ配置場所
/home/devuser/maven/repos

$ mkdir -p /home/devuser/maven/repos
# chown www-data:www-data /home/maven/git/repos 
# chmod g+s+w /home/devuser/maven/repos

○ mavenアクセス用ユーザ作成
パスワードファイルを任意の場所に生成
mavenアクセス用ユーザをmvnuserとしてパスワードファイルを任意の場所に生成


# htpasswd -c /path/to/.mvn-htpass mvnuser

New password: パスワード入力 [enter] Re-type new password: 再度パスワードの入力 [enter] Adding password for user mvnuser

ユーザ名、パスワードはクライアント側で必要となるため把握しておく

○ 確認


$ vim /path/to/.mvn-htpass

mvnuser:xxxxxxxxxxxx //パスワードは暗号化されている

○ サイト定義にBasic認証の設定を追加


# vim /etc/apache2/sites-available/default-ssl 

<Directory /home/devuser/maven/repos/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> # # This is to permit URL access to maven WebDav. # Alias /maven "/home/devuser/maven/repos/" <IfModule mod_dav.c> DAVMinTimeout 600 <Location /maven> DAV On Deny from all Allow from all AuthName "Maven Repository Server" AuthType Basic AuthUserFile "/path/to/.mvn-htpass” Require valid-user </Location> </IfModule>

○ Apache再起動


# /etc/init.d/apache2 restart

https://exsample.com/maven/ へアクセス

ユーザ名パスワードを認証画面が表示され、正しいパスワード入力でディレクトリ一覧が表示されることを確認する

mavenレポジトリBasic認証

○ maven クライアント側のホームディレクトリにBasic認証情報を配置する

以下、Windows XPで検証

settings.xmlファイル 配置場所

C:Documents and Settingsgituser.m2settings.xml

記述内容

<?xml version="1.0" encoding="UTF-8"?>
<settings>
<servers>
<server>
<id>http-basic-repository</id>
<username>mvnuser</username>
<password>パスワード</password>
</server>
</servers>
</settings>

○ 俺々証明書のサイトにmaven deploy(javaでアクセス)すると BUILD FAILURE が発生する

次の記事を参考に InstallCert.java をコンパイル・実行することで mvn deployを実行出来るようになりました。
注意点としてmvn deploy を実行するjavaと他のjavaとをしっかり区別しないと嵌ります。(生成されるフォルダが変わる)

javaでSSL接続をすると、PKI PATHの構築に失敗となる
http://www.melange.co.jp/blog/?p=2345