使えるネット+CentOSにSubversion+Apacheでマイリポジトリを作成

※他のページで、使えるネット用ではなく一般的にまとめなおしたページがあるので、今後はそちらを参照/更新



はじめに

  • 目的は、Web経由で自分用Subversionリポジトリを操作すること。その際、ダイジェスト認証とSSLにてセキュリティを担保すること。
  • aprとapr-utilはSubversionと共用なので、個別にインストールしている。
  • 環境構築を失敗しまくっており、下記オペレーションは実際に行ったものとは異なる。

OpenSSLのインストール

インストール

※最新版ソースは http://www.openssl.org/source/ から

cd /usr/local/src
wget http://www.openssl.org/source/openssl-0.9.8e.tar.gz
tar zxvf openssl-0.9.8e.tar.gz
cd openssl-0.9.8e
./config \
--prefix=/usr/local/openssl \
-fPIC shared
make
make install

OpenSSLライブラリへのパスを設定

※/etc/ld.so.confファイルや/etc/ld.so.conf.d/以下のファイルは、共有ライブラリを参照するパスの設定を行っている。なお、設定はここだけではなく、ユーザ別の環境変数でも設定できたり色々あるらしい。
※/etc/ld.so.confファイルを見ると、こういうことが書いてあり

include ld.so.conf.d/*.conf

/etc/ld.so.conf.d/以下を見ると、各ソフトごとに*.confファイルがあるので、opensslについてもそうしてみた。

cd /etc/ld.so.conf.d
vim openssl.conf

openssl.confファイルを新規作成して、以下の行を記入する

/usr/local/openssl/lib

変更を反映する

ldconfig

Apacheのインストール

前準備

  • 初期インストール済みApacheの停止
    httpd -k stop

ソースの取得・展開

※最新版は http://httpd.apache.org/download.cgi から取得する
※今回は2.2系にした

cd /usr/local/src
wget http://ftp.kddilabs.jp/infosystems/apache/httpd/httpd-2.2.6.tar.gz
tar fvxz httpd-2.2.6.tar.gz

aprのインストール

cd /usr/local/src/httpd-2.2.6/srclib/apr
./configure \
--prefix=/usr/local/apr
make
make install

apr-utilのインストール

※aprと同じ場所に入れている

cd /usr/local/src/httpd-2.2.6/srclib/apr-util
./configure \
--prefix=/usr/local/apr \
--with-apr=/usr/local/apr
make
make install

apacheのインストール

※--enable-proxy と --enable-proxy-balancer は、RailsでMongrelを動かすのに必要(らしい)

cd /usr/local/src/httpd-2.2.6
./configure \
--prefix=/usr/local/apache-2.2.6 \
--enable-mods-shared=most \
--enable-dav \
--enable-dav-fs \
--enable-dav-lock \
--enable-cgi \
--enable-cgid \
--enable-proxy \
--enable-proxy-balancer \
--enable-so \
--enable-ssl \
--with-ssl=/usr/local/openssl \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr
make
make install
cd /usr/local
ln -s apache-2.2.6 apache

httpd.confの設定

※httpd.confを開いて

vim /usr/local/apache/conf/httpd.conf

いくつか修正を行う

  • Apache実行ユーザの設定
    Apache実行ユーザ=SVNリポジトリ権限のユーザとなるように、UserとGroupをwebadminに変更する
    #User daemon
    #Group daemon
    User webadmin
    Group webadmin
  • SSL設定ファイルを読み込むようにする
    以下のInclude行がコメントアウトされているので解除する
    # Secure (SSL/TLS) connections
    Include conf/extra/httpd-ssl.conf

httpd-ssl.confの設定

httpd-ssl.confを開いて

vim /usr/local/apache/conf/extra/httpd-ssl.conf

この2行を修正する必要があるなら修正する

SSLCertificateFile "/usr/local/apache-2.2.6/conf/server.crt"
SSLCertificateKeyFile "/usr/local/apache-2.2.6/conf/server.key"

今回は以下のような設定にする

SSLCertificateFile "/usr/local/apache-2.2.6/ssl_key_and_crt/server.crt"
SSLCertificateKeyFile "/usr/local/apache-2.2.6/ssl_key_and_crt/server.key"

秘密鍵と自己署名証明書の作成

格納用ディレクトリを作成する

cd /usr/local/apache-2.2.6
mkdir ssl_key_and_crt
cd ssl_key_and_crt

サーバ側の秘密鍵の生成、passにはkjirouを入力した

/usr/local/openssl/bin/openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
.++++++
.........++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:

自己証明書の生成、passは先ほどと同じものを入力すること、その他の項目は任意

/usr/local/openssl/bin/openssl req -new -x509 -days 3650 -key server.key -out server.crt
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:hoge
Organization Name (eg, company) [Internet Widgits Pty Ltd]:hoge
Organizational Unit Name (eg, section) []:hoge
Common Name (eg, YOUR name) []:hoge
Email Address []:hoge@example.com

※ここで入力したpassは、後でApacheを起動させるたびに必要になるので覚えておくこと
とりあえず、鍵・証明書と同じ場所にssl_passphrase.txtとして保存
※任意の項目全てを入力なしEnterですっ飛ばしたら、さくら共有からSSLでSVNチェックアウトをする際に以下のエラーがでて、無理だった。

svn checkout https://kjirou.org/repos/dotfiles
svn: PROPFIND リクエスト (相手: '/repos/dotfiles') が失敗しました
svn: PROPFIND (URL: '/repos/dotfiles'): Server certificate was missing
 commonName attribute in subject name (https://kjirou.org)

commonNameだけ必要なのか他の項目も居るのか、SVNクライアントの設定によるのかどうか、その辺は不明だが、とりあえず項目は全部入力する方がよい。

Apache起動時にSSLパスフレーズの入力を省略する設定

cd /usr/local/apache/ssl_key_and_crt
cp server.key server.nosigned.key
/usr/local/openssl/bin/openssl rsa -in server.nosigned.key -out server.key

パスフレーズが求められるので入力する

iptablesの確認

443ポートが開いてないなら空けること

ここまでの動作確認

/usr/local/apache/bin/apachectl start

で起動させ

http://mydomain.net/
https://mydomain.net/

でアクセスして"It Works!"が表示されていればOK

Subversionのインストール

yumで前準備

CentOS? の「yum install したもの達」を参照

インストール

※yum install subversion を、やってしまっている前提なので、普通にいれるとライブラリが無いエラーが出るかも

cd /usr/local/src
wget http://subversion.tigris.org/downloads/subversion-1.4.5.tar.bz2
wget http://subversion.tigris.org/downloads/subversion-deps-1.4.5.tar.bz2
tar jxf subversion-1.4.5.tar.bz2
tar jxf subversion-deps-1.4.5.tar.bz2
cd subversion-1.4.5
./configure \
--prefix=/usr/local/subversion-1.4.5 \
--with-apxs=/usr/local/apache-2.2.6/bin/apxs \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr \
--with-ssl \
--with-editor=/usr/local/bin/vim
make
make install

※--with-libsは、OpenSSLの場所を設定するらしい(参考 http://solaris.it-cafe.jp/tools/tools07.html)、今回はapache側で設定するので多分不要
※--with-sslは、SVNクライアントとして使用する際のSSL対応用オプション。OpenSSLのどこかを見に行ったほうがよかったかもしれない。(これだと多分、内包のneonを見ている)
※Berkeley DBが無いという警告が出まくるが、無い場合はデフォルトのFSFSを使用するので、特にいらないらしい。というか、大体はFSFSを使うものらしい。

シンボリックリンクを張る

cd /usr/local
ln -s subversion-1.4.5 subversion

※完了したら /usr/local/subversion/bin にパスを通すこと

WebDAV経由でSVNリポジトリを操作可能にする

httpd.confの設定

httpd.confを編集する

vim /usr/local/apache/conf/httpd.conf

以下、ふたつの書き方があるが、今回は全プロジェクトに通用する設定を記入した。

  • 各プロジェクトを個別に指定する場合の例
    <Location "/repos/project_name">
        DAV                 svn
        SVNPath             /home/webadmin/var/repos/project_name
        AuthType            Digest
        AuthName            "Realm String"
        AuthDigestProvider  file
        AuthUserFile        /home/webadmin/path/to/users
        Require             valid-user
        BrowserMatch "MSIE" AuthDigestEnableQueryStringHack = On
    </Location>
    ※SVNPathは、リポジトリの絶対パスを指定する。1リポジトリにつき1Locationが必要
  • 全プロジェクトに通じる指定をする場合の例
    <Location "/repos/">
        DAV                 svn
        SVNParentPath       /home/webadmin/var/repos
        SVNListParentPath   On
        AuthType            Digest
        AuthName            "Realm String"
        AuthDigestProvider  file
        AuthUserFile        /home/webadmin/path/to/users
        Require             valid-user
        BrowserMatch "MSIE" AuthDigestEnableQueryStringHack = On
    </Location>
    ※リポジトリのルートにアクセスする場合は、この設定だと http://mydomain.com/repos/ のように、最後が"/"で終わらないとアクセスできない。
    その点、LocationMatch?を使って以下のように対応しようとしたが
    <LocationMatch "^/repos/?">
    Apacheは認識してくれるがSVN側で認識してくれなかった。どうも SVNParentPath? と組み合わせると上手く動かないらしい。
    http://sugi.nemui.org/diary/20030714.html
    この点、Aliasで以下のように対応することもできるが、今回はやらない
    Alias /repos /home/webadmin/var/repos
  • 共通の補足
    ※Apacheレベルでの権限設定しかしていない。この上にSVNによる権限設定を介すならば "AuthzSVNAccessFile?"というディレクティブ名を設定する(Tips参照)
    AuthName?は、ダイジェスト認証時に暗号化のキーとして使用されるので、あまり適当な文字列にはしないこと。
    AuthUserFile?は、ダイジェスト認証用の権限ファイルの場所を指定する。
    BrowserMatch?の設定は、IEでもWeb経由でリポジトリを見れるようにする設定。(ダイジェスト認証の処理についてのIEのバグで、見れない場合がある)

httpd-ssl.confの設定

先ほどhttpd.confに行った設定を、httpd-ssl.conf にも行う。

vim /usr/local/apache/conf/extra/httpd-ssl.conf

ダイジェスト認証用の権限ファイルを作成

※特にLinuxユーザ名やパスワードとあわせる必要は無い

  • 権限ファイルを作成
    touch filename
  • ユーザを追加
    htdigest filename "Realm String" username
    続けて対話的にパスワードを入力する

SVNルートディレクトリの作成

Apache実行用のユーザになって

su - webadmin

今回は /var/repos をSVNルートディレクトリにするということで、普通にディレクトリを作成

mkdir -p ~/var/repos

動作確認

試験用リポジトリ作成

webadminユーザの権限で

svnadmin create ~/var/repos/testproject

を行ってリポジトリを作成。

httpd.confにLocationを設定

上記Locationディレクティブの設定をtestprojectに対しても行い、Apache再起動

Web経由でチェックアウトする

外部の無関係なサーバからチェックアウトする。
実際の動作確認時は、さくら共有サーバからチェックアウトした。

svn checkout http://mydomain.com/repos/testproject
svn checkout https://mydomain.com/reops/testproject

同様に内部からもWeb経由でチェックアウトする。
これはSVNのクライアントのチェックのため。


添付ファイル: fileApacheでSubversion.txt 3件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-02-10 (水) 12:00:06 (35m)