Home > 開発環境 | > Subversion

Subversion Archive

サーバの設定ファイルをsubversionで管理してみる このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

サーバを管理する上で、各種の設定ファイルを管理したくなり、簡単にshellを書いてみました。
スクリプトはとても単純で、自分で用意したsvnレポジトリに指定したファイル/ディレクトリをコミットする、というだけです。

色々やり方はありそうですが、

  • 現時点では大量のサーバを管理するわけではなく、あくまで数台レベルでOK
  • 自分で分かる技術の方がやりやすい

ということで、自分のsubversionレポジトリに適当にコミットして管理することにしました。

  • ローカルにチェックアウトされたsvnレポジトリがあることが前提です。
  • そのsvnレポジトリに対して、ファイルシステムのパス(/etc/httpd/など)を保ったまま、コミットします
  • ディレクトリごとコミットもできるが、不要なディレクトリの削除はしない(不要なファイルの削除はできる)
  • コミットの逆、古いバージョンから戻すコマンドは現時点ではない。実際問題として、戻すようなことは殆ど発生していないため。戻す場合は手動で戻します。
  • 何かあったら、svnコマンド直叩きで解決。

使い方

パスの通った箇所に次のファイルを保存して置きます。
また管理するファイル群はroot(sudo)で扱うことが多いので、
実行の際にはsudo addscmしてます。


 $ sudo addscm /etc/httpd/conf/httpd.conf  ## httpd.confをバージョン管理する場合
 $ sudo addscm /etc/httpd/conf.d/          ## conf.dディレクトリ全体をバージョン管理する場合

スクリプトの以下の箇所は環境に合わせて修正下さい。
MAX_SIZEMAX_COUNTはどちらもディレクトリ全体をバージョン管理する場合のファイル数/ファイルサイズ(KB)の制限値です。
間違ってaddscm /としたときなどに困らないように、この設定を入れています。

REP_DIRはチェックアウトしたローカルのパスです。
複数のサーバの設定ファイルを管理する場合には、server01のところを適当なサーバ名(hostname)で置き換えています。

# edit setting
MAX_SIZE=10000   # ディレクトリをバージョン管理する場合の、指定ディレクトリのサイズ制限値(KB)。これを超えると、addscmできない。
MAX_COUNT=100    # ディレクトリをバージョン管理する場合の、指定ディレクトリのファイル数制限値)。これを超えると、addscmできない。
REP_DIR=/home/kuboma/repos/trunk/server/server01/ROOT  # レポジトリのコミットパス。予めこのパスにsvn checkoutしておいてください。

コード

見て分かる通り厳密なエラー処理はしてませんし、無茶なコードもあります(svn deleteしてるところとか)ので、くれぐれもご注意を!

またコード上一箇所 rm -iしている箇所があります。
これはディレクトリ単位のバージョン管理の場合に、削除済みファイルを一旦全てローカルの作業コピーから削除するためのものです。
問題なさそうならrm -irm -fに変更することをおすすめします。

#/bin/sh
# addscm
#
# TODO: wildcard
#

# $1: source files

# edit setting
MAX_SIZE=10000
MAX_COUNT=100
REP_DIR=/home/kuboma/repos/trunk/server/server01/ROOT

# check REP_DIR
if [ "x${REP_DIR}" = "x" ]; then
   echo "REP_DIR is not set. Please set REP_DIR."
   exit
fi

# don't edit
ABS_PATH=$(cd $(dirname "$1") && pwd)/$(basename "$1")

if [ -f $ABS_PATH ]; then
    # target is file
    echo "FILE PATH: ${ABS_PATH}"
elif [ -d $ABS_PATH ]; then
    # target is dir(ex: /usr/local/bin )
    echo "DIR PATH: ${ABS_PATH}"
    DIR_SIZE=`du -sbk ${ABS_PATH} | cut -f 1`
    FILE_COUNT=`find ${ABS_PATH} | wc -l`

    # dir size check
    if [ ${MAX_SIZE} -lt ${DIR_SIZE} ]; then
        echo "DIR_SIZE  : ${DIR_SIZE}(KB), over MAX_SIZE(${MAX_SIZE})"
        exit;
    else
        echo "DIR_SIZE  : ${DIR_SIZE}(KB)... OK"
    fi

    # file count check
    if [ ${MAX_COUNT} -lt ${FILE_COUNT} ]; then
        echo "FILE_COUNT: ${FILE_COUNT}(Files), over MAX_COUNT(${MAX_COUNT})"
        exit;
    else
        echo "FILE_COUNT: ${FILE_COUNT}(Files).. OK"
    fi 

else
    # target is not dir, file
    echo "Sorry, target is file or dir only."
    exit
fi

FILES=`basename "${ABS_PATH}"`
DIR=`dirname ${ABS_PATH}`

COMMIT_DIR=${REP_DIR}${DIR}
echo "mkdir -p ${COMMIT_DIR}"
mkdir -p ${COMMIT_DIR}

# files in repos deleted
if [ -d $ABS_PATH ]; then
    echo "rm -i ${COMMIT_DIR}/${FILES}/*"
    rm -i ${COMMIT_DIR}/${FILES}/*
fi

echo "cp -pi ${ABS_PATH} ${COMMIT_DIR}"
cp -r ${ABS_PATH} ${COMMIT_DIR}

cd ${REP_DIR}
svn add * --force
svn commit -m "committed by addscm command"

# files in repos deleted
if [ -d $ABS_PATH ]; then
    cd ${REP_DIR}
    for i in `svn status`; do
        if [ "x!" != "x${i}" ]; then
            # deleted file
            svn delete ${i}
        fi
    done
fi

cd ${REP_DIR}
svn commit -m "delete committed by addscm command"

echo "success addscm."

関連URL

さくらインターネットで、Subversion運用と、Eclipse+Subversiveでのsvn+ssh接続と、RedmineとSubversion連携を行う このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

こんにちは。kubomaです。

今日はさくらインターネットでのSubversion運用と、そのSubversionに対するEclipse+Subversiveからの鍵交換方式SSHの接続設定(svn+ssh)をするまでの設定について記載します。
またRedmineとSubversionの連携についても記載します。

ここではRedmineは別サーバで稼働するケースを想定しています。
# 実際さくらインターネット上でのRedmine稼働は可能ですが、かなり遅くて実用には向かないと思いました。

今回のゴール

  1. さくらインターネットのサーバとPoderosaを用いて鍵交換方式のSSH接続を行う
  2. さくらインターネットのサーバでSubversionを稼働させる
  3. さくらインターネットのサーバ上のSubversionに、クライアント側(Windows)のEclipse+Subversiveから接続、使用できるようにする
  4. 別サーバのRedmineとさくらインターネットのサーバ上のSubversionを連携させる

サーバはさくらインターネットのレンタルサーバ、クライアントは自宅のWindows XPです。
またRedmineが別サーバのCentOS上にインストール済みです。
Redmineのインストールから稼働までについては、当ブログの以前の記事サクッとCentOS 5.3にRedmine + Passenger環境をインストールを参考にしてください。

全文を読む

Subversiveで鍵交換方式によるSSH接続 このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

本日はSubversive鍵交換方式によるSSHで使う方法を紹介します。

Subversiveは、Eclipse 3.4(Ganymede)からSubcripseに代わって標準のSubversion用クライアントとなっています。

仕事ではmod_dav_svn経由でのhttpアクセスでSubversionを使っているのですが、個人使用でのSubversionサーバーへのアクセスにはSSHを使用することにしました。

Gitによるバージョン管理も考えていましたが、TortoiseSVNのようにこれさえ入れておけば手軽に利用出来る!!というツールが今のところ無いのと、Git Extensionsを使ってみたら上手く動いてくれなかったので、そちらで悩むよりは手軽に使い慣れたSubversionでサクッとやってしまおうということからGitは今回は諦めました。

でも分散リポジトリの概念とWEB + DB PRESS Vol.50に掲載されているGit特集でのテクニックには惹かれるものがありますので、そのうちGitに移行しようとは思っているんですが・・・

そんなこんなでサクッとSubversionでの環境を整えてしまおうかと思っていたのですが、Eclipse標準のSubversiveによるSSHでのアクセスが出来るようになるまで結構ハマってしまったのでここに手順をメモしておこうと思います。

全文を読む

ホーム > 開発環境 | > Subversion

固定ページ
アーカイブ
商品を検索

Return to page top