さくらサーバをオレ色に染めてみる

ホーム

私のレンタルサーバはさくらサーバ。sshでログインして色々できちゃう!
というわけでSubversionを使ったページ更新をしてみたくてsshでログインしてみたところ、デフォルトのシェルやviの使いにくさに号泣。
これじゃいかん。さくらサーバをオレ色に染めてやる!

  1. とりあえずログインシェルを変える
  2. 最新のviを入れる
  3. Subversion+Tracを入れる
  4. Tracを動かす
  5. svn+sshを使ってリポジトリに接続する
  6. まだここまでしかできてないよ!

ちなみに、インストールし終わったソースファイルはどんどん削除しないと結構サーバ容量を圧迫しますよ。

1. とりあえずログインシェルを変える

デフォルトのログインシェルはcsh。bashしか使ったことのない私には敷居が高い!
というわけで次のコマンドでデフォルトのログインシェルをbashに変更。

chsh -s /usr/local/bin/bash

んでもって.bashrcと.bash_profileを作る。
デフォルトのviがあまりに使い辛かったので、ローカルで作ってFTPでアップロードした。

# .bashrc

# set umask
umask 022

# set prompt
export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/~}"; echo -ne "\007"'
export PS1="[\w]\\$ "

# set paths
export PATH=$HOME/usr/bin:$PATH
export LD_LIBRARY_PATH=$HOME/usr/lib:$LD_LIBRARY_PATH

# set aliases
alias ls='ls -G'
alias ll='ls -l'
alias la='ls -a'
alias lla='ll -a'

# set LS_COLORS
export LS_COLORS='no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:'

# vim:ts=4:sw=4
# .bash_profile

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

2. 最新のviを入れる

やっぱviは使いやすくないと!
というわけで最新のviを入れる。

まずインストール先ディレクトリ~/usrと作業用ディレクトリ~/workを作成。

cd
mkdir usr
mkdir work

んでworkに入ってソース群をダウンロード。

cd work
wget ftp://ftp.vim.org/pub/vim/unix/vim-7.1.tar.bz2
wget ftp://ftp.vim.org/pub/vim/extra/vim-7.1-extra.tar.gz
wget ftp://ftp.vim.org/pub/vim/extra/vim-7.1-lang.tar.gz

展開する。全部vim71というディレクトリに展開される。

tar jxfv vim-7.1.tar.bz2
tar zxfv vim-7.1-extra.tar.gz
tar zxfv vim-7.1-lang.tar.gz

ソースにパッチを適用する。作業時点で293まで出てた。

mkdir vim71/patches
cd vim71/patches
zsh -c "wget ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.{001..293}" 
cd ../
cat patches/7.1.* | patch -p0

おなじみのコンパイル作業。--prefixオプションでインストール先を変えるのを忘れずに。

./configure --prefix=$HOME/usr \
 --enable-multibyte \
 --enable-xim \
 --enable-fontset \
 --with-features=big
make
make install

パスは.bashrcで設定済み。vimへのシンボリックリンクviを作る。

cd ~/usr/bin
ln -s vim vi

これでインストール完了。ついでに~/.vimrcも作っておく。
といってもよく知らんのでずんWikiさんからパクってくるだけだけど。

" vim: set ts=4 sw=4 sts=0:
"-----------------------------------------------------------------------------
" 文字コード関連
"
if &encoding !=# 'utf-8'
    set encoding=japan
    set fileencoding=japan
endif
if has('iconv')
    let s:enc_euc = 'euc-jp'
    let s:enc_jis = 'iso-2022-jp'
    " iconvがeucJP-msに対応しているかをチェック
    if iconv("\x87\x64\x87\x6a", 'cp932', 'eucjp-ms') ==# "\xad\xc5\xad\xcb"
        let s:enc_euc = 'eucjp-ms'
        let s:enc_jis = 'iso-2022-jp-3'
    " iconvがJISX0213に対応しているかをチェック
    elseif iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb"
        let s:enc_euc = 'euc-jisx0213'
        let s:enc_jis = 'iso-2022-jp-3'
    endif
    " fileencodingsを構築
    if &encoding ==# 'utf-8'
        let s:fileencodings_default = &fileencodings
        let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
        let &fileencodings = &fileencodings .','. s:fileencodings_default
        unlet s:fileencodings_default
    else
        let &fileencodings = &fileencodings .','. s:enc_jis
        set fileencodings+=utf-8,ucs-2le,ucs-2
        if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'
            set fileencodings+=cp932
            set fileencodings-=euc-jp
            set fileencodings-=euc-jisx0213
            set fileencodings-=eucjp-ms
            let &encoding = s:enc_euc
            let &fileencoding = s:enc_euc
        else
            let &fileencodings = &fileencodings .','. s:enc_euc
        endif
    endif
    " 定数を処分
    unlet s:enc_euc
    unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
if has('autocmd')
    function! AU_ReCheck_FENC()
        if &fileencoding =~# 'iso-2022-jp' && search("[^\x01-\x7e]", 'n') == 0
            let &fileencoding=&encoding
        endif
    endfunction
    autocmd BufReadPost * call AU_ReCheck_FENC()
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
    set ambiwidth=double
endif

"-----------------------------------------------------------------------------
" 編集関連
"
"オートインデントする
set autoindent
"バイナリ編集(xxd)モード(vim -b での起動、もしくは *.bin で発動します)
augroup BinaryXXD
    autocmd!
    autocmd BufReadPre  *.bin let &binary =1
    autocmd BufReadPost * if &binary | silent %!xxd -g 1
    autocmd BufReadPost * set ft=xxd | endif
    autocmd BufWritePre * if &binary | %!xxd -r | endif
    autocmd BufWritePost * if &binary | silent %!xxd -g 1
    autocmd BufWritePost * set nomod | endif
augroup END

"-----------------------------------------------------------------------------
" 検索関連
"
"検索文字列が小文字の場合は大文字小文字を区別なく検索する
set ignorecase
"検索文字列に大文字が含まれている場合は区別して検索する
set smartcase
"検索時に最後まで行ったら最初に戻る
set wrapscan
"検索文字列入力時に順次対象文字列にヒットさせない
set noincsearch

"-----------------------------------------------------------------------------
" 装飾関連
"
"シンタックスハイライトを有効にする
if exists("syntax")
    syntax on
endif
"行番号を表示しない
set nonumber
"タブの左側にカーソル表示
set listchars=tab:\ \ 
set list
"タブ幅を設定する
set tabstop=4
set shiftwidth=4
"入力中のコマンドをステータスに表示する
set showcmd
"括弧入力時の対応する括弧を表示
set showmatch
"検索結果文字列のハイライトを有効にする
set hlsearch
"ステータスラインを常に表示
set laststatus=2
"ステータスラインに文字コードと改行文字を表示する
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P

"-----------------------------------------------------------------------------
" マップ定義
"
"バッファ移動用キーマップ
" F2: 前のバッファ
" F3: 次のバッファ
" F4: バッファ削除
map <F2> <ESC>:bp<CR>
map <F3> <ESC>:bn<CR>
map <F4> <ESC>:bw<CR>
"表示行単位で行移動する
nnoremap j gj
nnoremap k gk
"フレームサイズを怠惰に変更する
map <kPlus> <C-W>+
map <kMinus> <C-W>-

3. Subversion+Tracを入れる

Subversion(SVN)の説明…は省略。ググれ。
ファイルのバージョン管理を容易にするものです(CVSみたいなもの)。

今回はtalk to oneself 2さん等を参考に、Web上で情報が見られるようにもする。
要はSubversion+Trac。

とりあえず必要なソース一式をダウンロード。やたらと必要。

cd ~/work
wget http://jaist.dl.sourceforge.net/sourceforge/swig/swig-1.3.29.tar.gz
wget http://www.webdav.org/neon/neon-0.26.4.tar.gz
wget http://ftp.riken.jp/net/apache/apr/apr-0.9.17.tar.gz
wget http://ftp.riken.jp/net/apache/apr/apr-util-0.9.15.tar.gz
wget http://subversion.tigris.org/downloads/subversion-1.4.6.tar.bz2
wget http://initd.org/pub/software/pysqlite/releases/2.4/2.4.1/pysqlite-2.4.1.tar.gz
wget http://www.clearsilver.net/downloads/clearsilver-0.9.14.tar.gz
wget http://jaist.dl.sourceforge.net/sourceforge/docutils/docutils-0.4.tar.gz
wget http://www.i-act.co.jp/project/products/downloads/trac-0.10.4-ja-1.zip

SWIGを展開&コンパイル&インストール。

tar zxvf swig-1.3.29.tar.gz
cd swig-1.3.29
./configure --prefix=$HOME/usr
make
make install
cd ..
rm -rf swig-1.3.29*

Neonを展開&コンパイル&インストール。

tar zxvf neon-0.26.4.tar.gz
cd neon-0.26.4
./configure --prefix=$HOME/usr \
 --with-ssl \
 --with-libs=/usr/local \
 --enable-shared
make clean
make
make install
cd ..
rm -rf neon-0.26.4*

Subversionを展開し、APR、APR-utilを展開したものをその中に置く。

tar jxvf subversion-1.4.6.tar.bz2
tar zxvf apr-0.9.17.tar.gz
tar zxvf apr-util-0.9.15.tar.gz
cp -rf apr-0.9.17 subversion-1.4.6/apr
cp -rf apr-util-0.9.15 subversion-1.4.6/apr-util
rm -rf apr-*

Subversionをコンパイル&インストール。Pythonはさくらサーバに入っているものを使わせてもらう。

cd subversion-1.4.6
./configure --prefix=$HOME/usr \
 --without-berkeley-db \
 --with-python=/usr/local/lib/python2.4 \
 --enable-swig-bindings=python \
 --with-swig=$HOME/usr/bin/swig \
 --with-neon=$HOME/usr \
 --with-ssl \
 --with-libs=$HOME/usr \
 --disable-static
make clean
make
make install
make swig-py
make install-swig-py
cd ..
rm -rf subversion-1.4.6*

ここまででSubversionのインストールは完了。
以降はTrac関連。

pysqliteを展開&ビルド&インストール。sqliteはさくらサーバに入っているものを使わせてもらう。

tar zxvf pysqlite-2.4.1.tar.gz
cd pysqlite-2.4.1
cp -f setup.cfg setup.cfg.bak
cat setup.cfg.bak | sed -e "s/#//g" >setup.cfg
python setup.py build
python setup.py install --prefix=$HOME/usr
cd ..
rm -rf pysqlite-2.4.1*

clearsilverを展開&コンパイル&インストール。makeではなくgmakeを使う…らしい。

tar zxvf clearsilver-0.9.14.tar.gz
cd clearsilver-0.9.14
./configure --prefix=$HOME/usr \
 --oldincludedir=$HOME/usr/include \
 --disable-ruby \
 --disable-java \
 --disable-perl \
 --disable-csharp \
 --disable-python \
 --disable-static
gmake
gmake install
cd python/
python setup.py build
python setup.py install --prefix=$HOME/usr
cd ../..
rm -rf clearsilver-0.9.14*

docutilsを展開&インストール。

tar zxvf docutils-0.4.tar.gz
cd docutils-0.4
python setup.py install --home=$HOME/usr
cd ..
rm -rf docutils-0.4*

Tracを展開&インストール。

unzip trac-0.10.4-ja-1.zip
cd trac-0.10.4-ja-1
python setup.py install --prefix=$HOME/usr
cd ..
rm -rf trac-0.10.4-ja-1*

更に、次の1行を~/.bashrcに書き加えて、`source .bashrc`なり再ログインなりで認識させる。

export PYTHONPATH="$HOME/usr/lib/python2.4:$HOME/usr/lib/python2.4/site-packages"

最後に、これをやらないとPythonがSVNを見つけてくれないらしい。

ln -s $HOME/usr/lib/svn-python $HOME/usr/lib/python2.4/site-packages/svn-python
ln -s $HOME/usr/lib/svn-python/svn $HOME/usr/lib/python2.4/site-packages/svn
ln -s $HOME/usr/lib/svn-python/libsvn $HOME/usr/lib/python2.4/site-packages/libsvn

これでとりあえず一通りインストールは完了。

次は動くようにします。
何かトラブルが起きたら書き換えるかも。

4. Tracを動かす

HirobeのHack倉庫さんを参考に。
というかほとんどコピペだなこりゃ。

まずSubversionのリポジトリ作成。
私はプロジェクトごとにリポジトリを作りたい人なので、今回はこのサイト用のリポジトリを作る。

cd
mkdir -p var/svn
svnadmin create --fs-type=fsfs var/svn/homepage

んでもっておなじみの trunk branches tags をインポートする。

mkdir tmp
cd tmp
mkdir trunk branches tags
cd ..
svn import tmp file://$HOME/var/svn/homepage -m "First import."
rm -rf tmp

次にTracの環境設定。
trac-adminコマンドのinitenv以降の引数はそれぞれ「プロジェクト名」、「DB接続文字列」、「リポジトリの場所」、「テンプレートの場所」。
プロジェクト名とリポジトリの場所以外は書いてある通りでOK。

cd usr/lib/python2.4/site-packages/
echo "$HOME/usr/lib/python2.4/site-packages/trac" >trac.pth
cd
trac-admin var/trac/homepage initenv \
 "Homepage" \
 "sqlite:db/trac.db" \
 "$HOME/var/svn/homepage" \
 "$HOME/usr/share/trac/templates"

次にTracを呼び出すスクリプトを作成する。
後々複数のリポジトリを参照することを考えて、共通のTrac呼び出し用スクリプトを作っておく。

vi var/trac/trac.inc.sh
#!/bin/sh
## trac.inc.sh
## require variable $REPO

# set home directory
HOME="$DOCUMENT_ROOT/.."

# check variable
if [ "$REPO" = "" ]; then
    # error, go to home
    echo "Location: http://$SERVER_NAME/"; echo; exit
fi

# set repository path
export TRAC_ENV="$HOME/var/trac/$REPO"
if [ ! -d "$TRAC_ENV" ]; then
    # error, go to home
    echo "Location: http://$SERVER_NAME/"; echo; exit
fi

# set environments
export LD_LIBRARY_PATH="$HOME/usr/lib"
export PYTHONPATH="$HOME/usr/lib/python2.4:$HOME/usr/lib/python2.4/site-packages"

# call trac script
/usr/local/bin/python2.4 "$HOME/usr/share/trac/cgi-bin/trac.cgi"

次にTrac関連CGI置き場を作成して移動。

cd ~/www
mkdir trac
cd trac

不正呼び出し用スクリプトを作成。ディレクトリパスを直接指定するとこれが呼ばれてホームへ強制送還。

touch index.cgi
chmod 755 index.cgi
vi index.cgi
#!/bin/sh
## index.cgi (for invalid call)
REPO=""
. "$DOCUMENT_ROOT/../var/trac/trac.inc.sh"

今回のHomepageプロジェクト用のスクリプトを作成。

touch homepage.cgi
chmod 755 homepage.cgi
vi homepage.cgi
#!/bin/sh
## homepage.cgi
REPO="homepage"
. "$DOCUMENT_ROOT/../var/trac/trac.inc.sh"

ここまででTracにアクセス可能になっているはず。
/trac/homepage.cgi にブラウザでアクセスしてみる。

まぁリポジトリの中身が見られれば満足なので、Trac周りはここまで。

5. svn+sshを使ってリポジトリに接続する

to be continued...