タグ: Subversion

CentOS5にSubversion1.7.6をソースからインストール

RPMで入っているSubversionが古いので、最新のSubversionをソースからインストールする。

条件

  • mod_dav_svnは今回使わないのでインストールしない
    (すでにRPMでインストールされているものを上書きしない)
  • 個人的にしか使わないので、/usr/localにインストールするのではなく、$HOME/local以下でビルドとインストールを行う
  • PATHは/usr/binよりも$HOME/local/binが上位になるように定義しておく
    export PATH=$HOME/local/bin:$PATH

手順

ソースのダウンロード

$ cd $HOME/local/src
$ wget http://ftp.tsukuba.wide.ad.jp/software/apache/subversion/subversion-1.7.6.tar.bz2
$ tar -xvf subversion-1.7.6.tar.bz2
$ cd subversion-1.7.6

Makefileの作成

$ ./configure --prefix=$HOME/local --without-apxs

RPMで入っているSQLiteのバージョンが要件を満たしていないとの表示

checking sqlite library version (via pkg-config)... none or unsupported 3.3
no

An appropriate version of sqlite could not be found. We recommmend
3.7.6.3, but require at least 3.6.18.
Please either install a newer sqlite on this system

or

get the sqlite 3.7.6.3 amalgamation from:
http://www.sqlite.org/sqlite-amalgamation-3.7.6.3.tar.gz
unpack the archive using tar/gunzip and copy sqlite3.c from the
resulting directory to:
$HOME/local/src/subversion-1.7.6/sqlite-amalgamation/sqlite3.c

configure: error: Subversion requires SQLite

インストールしたくないので、後者の指示に従ってSQLiteの最新ソースコードを入手して配置する

$ wget http://www.sqlite.org/sqlite-amalgamation-3071400.zip
$ unzip sqlite-amalgamation-3071400.zip
$ mv sqlite-amalgamation-3071400 sqlite-amalgamation

再度configure && make

$ ./configure --prefix=$HOME/local --without-apxs
$ make

make中にエラーが発生

libtool: link: only absolute run-paths are allowed
make: *** [subversion/mod_dav_svn/mod_dav_svn.la] エラー 1

直前のコマンド

cd subversion/mod_dav_svn && /bin/sh $HOME/local/src/subversion-1.7.6/libtool --tag=CC --silent --mode=link gcc -g -O2 -g -O2 -pthread -D_LARGEFILE64_SOURCE -DNE_LFS -rpath -avoid-version -module -o mod_dav_svn.la activity.lo authz.lo deadprops.lo liveprops.lo lock.lo merge.lo mirror.lo mod_dav_svn.lo posts/create_txn.lo reports/dated-rev.lo reports/deleted-rev.lo reports/file-revs.lo reports/get-location-segments.lo reports/get-locations.lo reports/get-locks.lo reports/log.lo reports/mergeinfo.lo reports/replay.lo reports/update.lo repos.lo util.lo version.lo ../../subversion/libsvn_repos/libsvn_repos-1.la ../../subversion/libsvn_fs/libsvn_fs-1.la ../../subversion/libsvn_delta/libsvn_delta-1.la ../../subversion/libsvn_subr/libsvn_subr-1.la

をよくみると、libtoolの -rpath の引数がない。Makefileを確認すると

-rpath $(APACHE_LIBEXECDIR)

という箇所があり、APACHE_LIBEXECDIRをたどっていくと

APACHE_LIBEXECDIR = $(DESTDIR)

にたどり着くが、DESTDIRを定義している箇所がない。
これはapxsを省略したための模様。

とりあえずインストール先のlibを指定してビルドを続行させる。

$ DESTDIR=$HOME/local/lib make

インストール

$ make install
$ svn --version
svn, バージョン 1.7.6 (r1370777)

参考

広告

RedmineとSubversion・Git・Mercurialのリポジトリ(ともに同じCentOSサーバ上)の連携(リポジトリの作成とアクセス・認証)

Redmine上からSubversion,Git,Mercurialのリポジトリ作成ができ、公開したリポジトリにプロジェクトに所属したユーザであれば、Redmineのユーザアカウントでアクセスできるようになります。

Subversion,GitなどのツールやRedmineとアジャイル開発、継続的インテグレーションに便利な各種プラグインに加え、今回の連携設定などをまとめてインストールできるALMiniumというものがあります。

前提

  • OSがCentOS
  • Apacheをインストール済み
    (# yum install httpd)
  • Apacheの実行ユーザ名とグループ名はapache
  • Subversionとmod_dav_svnモジュールがインストール済み
    (# yum install subversion mod_dav_svn)
  • Gitインストール済み(# yum install git)
  • Mercurialインストール済み(# yum install mercurial)
  • Redmineをインストール済み
    (http://blog.redmine.jp/articles/redmine-1_2-installation_centos/)
  • redmineのDBはMySQLで同じサーバで稼働
  • redmineのインストールディレクトリを$REDMINE_ROOTとする
  • SVNリポジトリを格納する親ディレクトリを/var/www/repos/svnとする
  • GITリポジトリを格納する親ディレクトリを/var/www/repos/gitとする
  • Mercurial(Hg)リポジトリを格納する親ディレクトリを/var/www/repos/hgとする
  • http://example.jp/repos/svnがSVNリポジトリのURLとする
  • http://example.jp/repos/gitがGITリポジトリのURLとする
  • http://example.jp/repos/hgがHgリポジトリのURLとする

1.リポジトリの親フォルダの作成

# mkdir -p /var/www/repos/{svn,git,hg}
# chown -R apache /var/www/repos

2.SCM Repository Creation pluginのインストール

RedmineからSubversion・Git・Mercurialのリポジトリの作成ができるプラグイン

a). ダウンロード

http://projects.andriylesyuk.com/projects/redmine-svn/wiki/Installの横にあるダウンロードリンクからredmine_scm-0.2.0.tar.bz2をダウンロード

b). インストール

解凍としてできたredmine_scmをフォルダ丸ごと$REDMINE_ROOT/vendor/pluginsに移動

c). DBマイグレーション

$ rake db:migrate:plugins RAILS_ENV=production

d). プラグインの設定ファイルの追加

$cp $REDMINE_ROOT/vendor/plugins/redmine_scm/config/scm.yml $REDMINE_ROOT/config/scm.yml
$vi $REDMINE_ROOT/config/scm.yml

production:
  auto_create: false
  deny_delete: true
  svn:
    path: /var/www/repos/svn
    svnadmin: /usr/bin/svnadmin
    url: http://example.jp/repos/svn
  git:
    path: /var/www/repos/git
    git: /usr/bin/git
    options: --bare
    url: http://example.jp/repos/git
    update_server_info: true
    git_ext: true
  mercurial:
    path: /var/www/repos/hg
    hg: /usr/bin/hg
    url: http://example.jp/repos/hg

development:

※不要なSCM部分はカットする
deny_delete
リポジトリの削除を禁止するか
falseに設定するとプロジェクトの「設定」→「リポジトリ」に「削除」のリンクが現れる
削除するとリポジトリ情報リポジトリ自体も削除される
path
リポジトリの親ディレクトリ
この下に各プロジェクトのリポジトリが作成される
url
HTTPでアクセスする際のURLプレフィックス
リポジトリを作成した後、プロジェクトの「設定」→「リポジトリ」の画面にURLが表示される

e). Redmine再起動

# service httpd graceful
(Passengerを使用しているのでApacheの再起動で代用)

f). 「管理」→「プラグイン」「SCM Creator」が追加されているのを確認

g). 所属しているプロジェクト→設定→リポジトリと移動し、リポジトリを作成してみる

「バージョン管理システム」から「Subversion」を選択すると、
URLに親フォルダ+プロジェクト識別子が入力された状態になる
ログイン、パスワードは空のまま「Create new repository」を押すとURLの場所にリポジトリが作成される

3.各リポジトリのHTTPアクセスとRedmineの認証情報の連携

参考:http://www.redmine.org/projects/redmine/wiki/Repositories_access_control_with_apache_mod_dav_svn_and_mod_perl

a). 必要パッケージのインストール

# yum install mod_perl perl-DBI perl-Digest-SHA1 perl-DBD-MySQL

b). Redmine.pmにパッチを当てる(Git用)

SubversionのリポジトリにHTTPでアクセスする際、Redmineに付属しているRedmine.pmを使用して認証を行います。
Redmine.pmはSubversion用のものなので、http://www.redmine.org/issues/4905にあるパッチを当てることでGitリポジトリにHTTPでアクセスできるようになります。

# cd $REDMINE_ROOT/extra/
# cp Redmine.pm Redmine.pm.orig (バックアップのため)
# wget "http://www.redmine.org/attachments/download/5989/0001-merged-LeeF-s-patch-with-Michael-Fox-s-security-fix-redminetrunk.patch" (上記URLの最新のパッチ)
# patch Redmine.pm < 0001-merged-LeeF-s-patch-with-Michael-Fox-s-security-fix-redminetrunk.patch

c). Redmine.pmをperlのインクルードパスが通っている場所に設置する

設置例:

  • /etc/httpdにApacheディレクトリを作成し、その中にAuthnディレクトリを作成しその中にRedmine.pmを入れる
  • /usr/lib/perl5/Apache/Authn/にRedmine.pmを入れる(ディレクトリがない場合は作成する)

d). hgweb.cgiの設定(Mercurial用)

#cp /usr/share/doc/mercurial-x.x.x/hgweb.cgi /var/www/repos/hg/  (x.x.xはインストールされたmercurialのバージョンです。)

#vi /var/www/repos/hg/hgweb.config
[paths]
/=/var/www/repos/hg/**

[web]
allow_push = *
allowbz2 = yes
allowgz = yes
allowzip = yes

#vi /var/www/repos/hg/hgweb.cgi
7行目
config = "/path/to/repo/or/config"
↓
config = "hgweb.config"

e). Apacheの設定

# vi /etc/httpd/conf.d/redmine.conf
  PerlLoadModule Apache::Authn::Redmine

  # Subversion
  <Location /repos/svn>
    DAV svn
    SVNParentPath "/var/www/repos/svn"

    AuthType Basic
    AuthName "Redmine SVN Repository"
    Require valid-user

    PerlAccessHandler Apache::Authn::Redmine::access_handler
    PerlAuthenHandler Apache::Authn::Redmine::authen_handler

    ## for mysql
    RedmineDSN "DBI:mysql:database=redmine_db;host=localhost"
    RedmineDbUser "redmine_user"
    RedmineDbPass "redmine_pass"
  </Location>

  # Git
  SetEnv GIT_PROJECT_ROOT /var/www/repos/git
  SetEnv GIT_HTTP_EXPORT_ALL
  ScriptAlias /repos/git/ /usr/libexec/git-core/git-http-backend/
  <Location /repos/git>
    AuthType Basic
    AuthName "Redmine Git Repository"
    Require valid-user

    PerlAccessHandler Apache::Authn::Redmine::access_handler
    PerlAuthenHandler Apache::Authn::Redmine::authen_handler

    RedmineDSN "DBI:mysql:database=redmine_db;host=localhost"
    RedmineDbUser "redmine_user"
    RedmineDbPass "redmine_pass"
    RedmineGitSmartHttp yes
  </Location>

  # Mercurial
  ScriptAliasMatch ^/repos/hg(.*)  /var/www/repos/hg/hgweb.cgi/$1
  <Location /repos/hg>
    AuthType Basic
    AuthName "Redmine Mercurial Repository"
    Require valid-user

    PerlAccessHandler Apache::Authn::Redmine::access_handler
    PerlAuthenHandler Apache::Authn::Redmine::authen_handler
    RedmineDSN "DBI:mysql:database=redmine_db;host=localhost"
    RedmineDbUser "redmine_user"
    RedmineDbPass "redmine_pass"
  </Location>

データベース名、データベースアクセスユーザ名・パスワードは適宜変更して、Apache再起動

# service httpd configtest
# service httpd graceful

f). 認証が有効になっているか実際にアクセスする

  • svn ls / git clone / hg clone
  • TortoiseSVN・TortoiseGit・TortoiseHgなどを使用してアクセス

Redmineユーザ名とパスワードでアクセスできるか確認する

Shibuya.trac 分散バージョン管理勉強会

URL:http://kokucheese.com/event/index/6329/

場所:江東区 古石場文化センター 2階 第1,2研修室

「分散バージョン管理システムってなんなん?」(おかもとさん)

TracLightning 3.0からアジャイル対応

バージョン管理の変遷

CSV:共有モデルのファイル管理

SVN:アトミックなコミット(コミットされるかされないか、リビジョンごとの管理が可能に)

DVCS(分散バージョン管理):ブランチ・マージモデル、ローカルコミット、ローカルでのdiffやログ参照、ログのリファクタリング、マージトラッキング

「GitとHudsonによるきれいなリポジトリの作り方」(bleis さん)

集中型と比較した分散型の利点

  • 集中型
    • 間違った操作が全体に影響
    • 気後れしてしまう
  • 分散型
    • 自由なコミット
    • 作業のやり直しが可能

リポジトリとWCの関係

  • 集中型
    1つのリポジトリに複数ののワーキングコピー
  • 分散型
    1つのリポジトリに1つのワーキングコピー

=>意外と分散型のほうがシンプル

分散型は更新先を複数持てる。

きれいなリポジトリ

DVCSでも解決できない問題があるので、きれいなリポジトリを構成する必要がある

きれいなリポジトリ=最新版がいつでもビルド可能なリポジトリ

実現するには?

CIの導入
→リポジトリが更新されるたびにビルドを走らせることにより、素早いフィードバックを得ることができる

しかしフィードバックだけでは足りない=>ビルドが壊れるとその状態が取得できてしまう。

そこでDVCSを利用する。2つの利用方法

  • ブランチを分割
  • リポジトリを分割
    開発者ごとにリポジトリ(プライベートブランチ)
    きれいなリポジトリ(セントラルブランチ)

ブランチ分割法

hookでmasterブランチにpushできないようにする

プライベートブランチの更新をhookしてビルド

hudsonのgitプラグインの設定で簡単に設定できる

リポジトリ分割法

セントラルリポジトリは外部から取得専用にする

プライベートリポジトリの更新をhookしてビルド

開発者が増える際の設定が多い

まとめ:DVCSとCIできれいなリポジトリを。実現方法は複数ある。

「TracLightningとTortoiseHgのゆるふわな連携」(ゆかわさん)

Mercurial

  • 単機能(1コマンド1機能)
  • 拡張機能が豊富
  • 差分で履歴を管理(Gitはスナップショット)
  • 4種類のブランチ
    →名無しブランチというものがある

拡張機能をがしがし使う必要がある

「git-svn使ってみる?」(riskさん)

git-svnの基本的な説明

git-svnとはsvnとgitの中継

git-svnが利用可能なソフト(windows)

msysgit ・ cygwin

「Mercurialで別オリジンのリポジトリ間で同期を取る運用の仕方について」(monjudohさん)

Mercurialで別オリジンのリポジトリ間の同期を取る運用の仕方について – 文殊堂

LT1. 「Gitでの歴史の改変方法の紹介」(神速さん)

改変を実際にデモ

git add -p

複数の変更から一部選択してコミット

git rebase -i

rebaseする際にそれまでコミットした内容を再度編集でき、改変もできる

LT2. 「SVNユーザのためのBazaarガイド」(iwataさん)

Bazaarの紹介

Bazaarをおすすめするケース

  • デザイナさんとかにVCSを使って欲しい時
  • 日本語ファイル名を使いたい時
    (SVNと同じレベルで)
  • SVNを使いながら段階的にDVCSを利用したい
  • レベルの低い人

Bazaarをおすすめできないケース

  • VSインテグレーション機能が必要なとき

コンセプト

  • 誰でも使えるバージョン管理
  • better SVN

リモートリポジトリからチェックアウトするとリモートリポジトリとバインドすることができる
→ローカルリポジトリにコミットするとリモートにも反映される

LT3. 「Hudsonからみるバージョン管理」(さぼてんさん)

2011年2月25日にhudson勉強会やります。

HudsonでDVCSをつかうと

  • ヒエラルキー構造が持てる
  • pre tested commit
    コミット前のテストが可能

より柔軟な開発環境を構築可能

LT4. 「ビューティフルなデバッグの話」(かわにしさん)
「beautiful code」、「why programs fail」より「差分デバッグ」

git bisect

テストプログラムを作成して、どのリビジョンからテストが失敗するかを二分検索で見付け出してくれる。

後説

今日のメモ:
大福ロシアンルーレット(いちご=はずれ、バナナ、栗、わさび)の大当たりである、「わさび入り大福」は4つの中でいちばん値段が高い