前の日 / 次の日 / 2007-02
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

2007-02-14 Wed

Debian Etch Linuxをインストールした

手元の開発環境のDebian Sarge Linuxのイメージが微妙な感じなのと、
自宅サーバの調子がよろしくないことから、
ここはひとつ両方一度に解決することにしました。

Debian Linux etch(testing)のインストール手順メモ


イメージのダウンロードからVMware起動まで

- Debianの日本語サイトからetch(testing)のイメージをダウンロード
-- http://www.debian.org/devel/debian-installer/
-- 32bitなのでi386
- VMwareのイメージをQemuでつくる
-- qemu-img.exe create -f vmdk d:\vmware\debian400g.vmdk 400G
-- あとあと面倒なので最大容量を400GByteにしておいた
- VMmwareの設定ファイル(*.vmx)を作る
起動してインストール

- カーネルが2.6系でlinux26とかいらない。「linux:」と出たらリターン
- 住んでる地域は「Asia->Tokyo」
- キーマップは「keymap->japanese」
- ディスクはマニュアルでパーティショニング。これも大雑把に。
-- /boot 128M
-- swap 2G
-- 残りは/
- rootのパスワード設定
- ユーザアカウント作成

ひたすら待つ

- ネットインスト使った
-- 標準パッケージは入れることにした。
-- apt用のミラーはasahiにした

再起動
インストール済みのパッケージをアップデート

- editorで /etc/apt/source.listを編集
-- /etc/apt/source.listからcdromをはずす
-- main contrib non-freeを付ける

- apt-get update
- apt-get upgrade
-- updateとupgradeを何度かやる
- apt-get installで残ってるものもいれちゃう
aptで必要なパッケージをインストール

- emacs mule-ucs
- jed vim screen zsh
- csh ruby gcc g++
- ftp ssh samba
- migemo sudo
- bzip2 unzip tar
- w3m-el python-mode perltidy
- ruby1.8-elisp ack nkf lv
- screen cvs subversion
- ncftp wget
- python php5 lighttpd
- apache2 trac
- lynx expat libxslt-dev libxml2-dev libexpat1-dev
- lookup lookup-el aspell aspell-en libxml-dev
- tidy libtidy-dev
- autoconf automake binutils gawk binutils-dev
- gdb libc6-dev sary libsdl-perl
- libperl-dev patch g77 libtool
- libmng-dev libungif4-dev
- bison libxpm-dev
- memcached libgd2-dev smbfs uuid-dev
- canna kinput2-canna xfonts-base language-env
- libglib2.0-dev pkg-config libdb3-dev openssl flex
- libgd-dev proftpd ntp ntpdate ntp-doc ntp-simple
- mysql-client dbishell libcompress-zlib-perl
# tinyca入れたら?といわれたけど入れなかった。
- mysql-server alsa-base alsa-utils
- sun-java5-bin sun-java5-jdk
- libpari-dev libpari-dbg pari-gp2c pari-doc pari-extra
- tetex-extra ptex-bin
- tetex-doc psutils perl-tk libxml-parser-perl latex-beamer
- libunicode-string-perl libmailtools-perl libhtml-format-perl
- dvipsk-ja jbibtex-bin jmpost mendexk
- dvi2ps-fontdata-ja
- defoma-doc psfontmgr x-ttcidfont-conf dfontmgr gs-gpl gs-esp
- gs-afpl gv libjasper-runtime
- gsfonts-x11 xpdf-reader texi2html dvipng chktex
- lacheck rubber sam2p
- latex-xcolor lmodern pgf preview-latex-style
- kakasi sary apache libgmp3-dev kakasi-dev
- svk libvcp-perl libvcp-dest-svk-perl
- libsqlite3-0 libsqlite3-dev sqlite3
- libdate-simple-perl
- libgd-gd2-perl libgd2-xpm-dev libgd-tools
- libcompress-zlib-perl libio-zlib-perl zlib-bin zlibc
- libgdbm-dev php5-cgi php-pear php5-dev php4-dev
- libfcgi-ruby1.8 libfcgi0c2 libfcgi-perl libfcgi-dev
- rsync libsvn-ruby
- imagemagick perlmagick libmagick9 libmagick9-dev
- gs gs-esp gs-cjk-resource
- libsyck-dev python-syck php4-syck
- ruby1.8-dev rubygems rdoc libyaml-ruby libzlib-ruby rails
- libapache2-mod-ruby libapache-mod-ruby libapache2-mod-fcgid
- ant junit

SSLだけ、別にインストールしておく。

何かと使うことが多いのでOpenSSLをソースからインストールしておく。
- http://www.openssl.org/source/からwgetする
- 解凍
- %./config --prefix=/usr/local/openssl
- %make
- %make test
- %make install
zshを使うようにする

- /etc/passwdの普段使うユーザのシェルをbashからzshに変更
- $HOMEに.zshrcを書く
そろそろ日本語の設定する(etchをUTF-8環境に)

まずは、OS側をUTF-8にする。

- # dpkg-reconfigure localesする
-- en_USのUTF8とISO08859-1、ja_JPのUTFとEUCにチェックを入れた。
-- ja_JP.UTF-8を選択

ここから先設定ファイルをいじるのでemacsを先になんとか。
結局emacsはsidのものを使うことにした。
なんかうまくいかなかったので。

- /etc/apt/source.listにsid用の行を追加
- apt-get update
- apt-get install emacs-snapshot emacs-snapshot-el anthy-el
- さっき追加したsidの行をコメントアウト

このままだと、emacs21が使われるのでemacs22を使うようにする
- update-alternatives --config emacs
-- 2(emacs-snapshot)を選択する
- emacs --versionして、emacs22を使えるようなったか確かめる。

- .zshrcの設定
-- LANG=ja_JP.utf8と記述。LC_ALLやLOCALは記述しない。
--- 3つの環境変数は使われ方はほぼ同じで、優先順位が違う。
--- LC_ALL > LANG > LOCAL
--- ALLは他を上書きしてしまうし、LOCALはなー、ということでLANG。
- .bash
-- export LANG=ja_JP.utf8と記述
- .screenrc
-- defencoding UTF-8と記述

ちなみに、.zshや.bashrcを変更したら、% source $HOME/.hogefugaする。

emacsはあとでカスタマイズするだろうけど、とりあえず。
- .emacsの設定
-- 以下を記述する。片っ端からutf-8に。
(require 'un-define)
(coding-system-put 'utf-8 'category 'utf-8)
(set-language-info
"Japanese"
'coding-priority (cons 'utf-8
(get-language-info "Japanese" 'coding-priority)))
(set-language-environment "Japanese")
(set-default-coding-systems 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)


再起動して、ログインしたらzshになっていて、
screenを起動して、emacsを起動して日本語を読み書きできれば終了。
libファイル関係

- /etc/ld.so.confや、/etc/ld.so.conf.d/hogefuga.confにパスが通っているかを確認する。
- 以下を記述する。
/lib
/usr/lib
/usr/local/lib
/usr/X11R6/lib


emacs-lisp

- [O] 使ったことがないEmacsのマクロを使ってみるを参照。
CPANモジュール

- perl -MCPAN -e shell

地獄のCPANモジュールインストール大会。
まー、CatalystとPlaggerと、って最近流行のをインストールすると、
いい感じに大体そろうんじゃないだろうかww

- Bundle::CPAN
- Bundle::XML
- CPAN::Mini

一回じゃインストールが終わらない。
その後何回かBundle::XMLすると、
XML::SablotronとXML::Grove以外はインストールできた。
まー、この辺は放置。

足りないものを補うことにする。

- XML::Parser
- ExtUtils::MakeMaker
- ExtUtils::ParseXS
- Net::SSLeay
- XML::Atom
- XML::RSS
- SOAP::Lite
- Date::Range

HTML::Tidyはテストを最後のだけこけるけど、
まー、大丈夫そうなのでforceした。

- force install HTML::Tidy
- POE
- Cache
- Log::Dispatch
- force Log::WarnDie
- Catalyst
- force install HTML::Widget
- force install Error
- forcr install Test::NoWarnings
- Task::Catalyst
- Exporter::Lite
- Net::Domain::TLD
- UNIVERSAL::exports
- DB_File

- EtchになってからMySQLは5系なんだけど、testっていう名前の
  DatabaseがつくられなくなったからMySQL関連のモジュールは
  だいたいテストでコケル。他のDBもそうなのかもな。
-- かならずmysql_install_dbする
-- mysqlにログインして、空っぽでいいから
--- create database testする

- Tie::DBI


HTML::Widgetのテストは、致命的じゃなさそうなので
エラーが出たけどforce install HTML::Widgetした。

- Catalyst::Plugin::HTML::Widget
- Catalyst::Devel
- Math::BigInt
- Test::Simple
- Math::Bezier::Convert
- Font::TTF::Font
- HTML::Template

Pariはソースが必要
- ftp://megrez.math.u-bordeaux.fr/pub/pari/unix/pari-2.3.1.tar.gz
ソースを解凍して、自分でコンパイル
- % cd .cpan/build/Math-Pari-2.010709/
- % perl Makefile.PL paridir=/tmp/pari-2.3.1
あらかじめ、2.3は一部コケルよ、と警告があったのでこけても気にしない。
- % make
- % make test
まー、コケたけどいいや
- % make install

- Plagger
- Cache::File Catalyst::Plugin::Cache::Memcached

- Data::Hierarchy Locale::Maketext::Simple IO::Pager
- VCP::Dest::svk
- force install SVN::Mirror
SVK2.0をインストールするときのSVN::Mirrorのエラーは無視した。
- SVK

もう、なんか、ほかにもやったけど忘れたよ。orz。つかれた。

何とかインストールに成功したが、
別のことやりながらで2日かかった。
もう多分大半の普段使うものは入っているので、
サーバの設定をする。

サーバの設定


どんな感じにするか

サーバのできあがりはこんな感じ。
とりあえずPC1台のなかに構築しておいて、
あとで負荷が上がったら、proxyで他のPCに飛ばす予定。

+-------------------+

Apache2 mod_proxy |

+-------------------+-----------
|          |
+--------------------+ +----------+

Apache2 + mod_perl | | Lighttpd |

+--------------------+ +----------+
***んじゃ、まずはmod_proxy側から。

apache 2.2.4 + mod_proxy

いろいろ後で考えて最適化すればいいので、
とりあえず使いそうなモジュール全部乗せ。
mod_perlを静的に組み込んでいない以外は、mod_perl側と同じ。
% ./configure --with-ssl=/usr/local/openssl\
--prefix=/usr/local/httpd_proxy --enable-proxy-balancer\
--enable-proxy --with-mpm=prefork 適当なオプション

*** apache 2.2.4 + mod_perl 2.0.3
いろいろカッチリ決めるのが面倒なので、
mod_proxy側とまったく同じオプション指定。
以下のようなクソ長いオプションを指定していますが、
本当は指定しなくてよいのが混ざっていそうだな。
[src]
% perl Makefile.PL MP_USE_STATIC=1 MP_AP_PREFIX=../httpd-2.2.4\
MP_AP_CONFIGURE="--with-ssl=/usr/local/openssl\
--prefix=/usr/local/httpd_mp203 --enable-proxy-balancer\
--enable-proxy --with-mpm=prefork 適当なオプション"

% make
% make install


Portの設定

mod_proxyは80で、mod_perlとlightyは80以外の何か。
互いにかぶらなければ何でもいいのです。
htttpd.conf

lighttpd.conf

hostsの設定

/etc/hostsに、ドメイン名とmod_proxyのIPを登録

Apache2.0にmod_rpafのインストール


proxy側から送ったリクエストのリモートホストのIPアドレスを、
127.0.0.1からリクエスト元のIPに書き換えてあげます。
このモジュールを使わないと、サーバごとにとるログが
使えないごみになってしまいます。

まずはmod_rpafのソースを入手

mod_rpafの配布ページから、mod_rpaf-0.5.tar.gzをダウンロードします。
そんで解凍して中に入る。
tar xvfz mod_rpaf-0.5.tar.gz
cd mod_rpaf-0.5

Makefileに手を加える

バックエンドにする予定のApache2.0のbin/apxsを指定します。
Makefileの先頭の方に、以下のような感じで記述します。
他にAPXSの指定があったらコメントアウトします。
APXS=/usr/local/httpd_lb/bin/apax

makeしてmake install

configureはないので、すぐにmakeします。
make rpaf-2.0
make install-2.0

インストール先は、httpd_proxy/modules以下になります。
httpd.confにmod_rpafの設定を追記

--enable-soオプションをつけて、Apacheをコンパイルしておけば、
DSOをサポートしてくれるので、以下を記述すればOKになります。
# LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 127.0.0.1


Lighttpdのproxy経由のIPアドレスをリモートホストのアドレスに


Lighttpdの場合は、lighttpd.confで直接X-Forwarded-Forを指定した。
こうするとLighttpdでリモートホストのIPを記録できてウマー。
もうちょっと上手なやり方がしそうだけど、簡単なのでこれでいいや。

accesslog.format = "%{X-Forwarded-For}i %v %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""


【Apache2.0の関連リンク】


リバースプロキシを導入する際はmod_rpaf - Drk7jp
MODULE.JP - リソースプール適材適所

[2007-02-25]:追記
HDDがぶっ壊れたので、再度やりましたが、
メモがあったおかげで12時間程度でCPANインストール終了。
それでもスゴク時間がかかりましたね。
あ、あと、Class::DBIは使うのをあきらめますた。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |