先日記述したとおりのパーツがひと通り揃った(RAIDカードは注文中なので除く)ので仮組みしてみました。
結論的には何も問題はありませんでした。
ただ、CentOS5.4ではNICやGPUにドライバが認識しませんでしたがCentOS5.6では普通に認識しました。
__追記__
HP SC40Ge(SAS3042EL)も設定すれば問題なく使える事が分かりました。
先日記述したとおりのパーツがひと通り揃った(RAIDカードは注文中なので除く)ので仮組みしてみました。
結論的には何も問題はありませんでした。
ただ、CentOS5.4ではNICやGPUにドライバが認識しませんでしたがCentOS5.6では普通に認識しました。
__追記__
HP SC40Ge(SAS3042EL)も設定すれば問題なく使える事が分かりました。
8月ぐらいには構築したいので構成を決めて想定されるなるべく正確な金額をだしてみました。
=========================================
ハードディスク
=========================================
Yahoo!オークション(ID:************)
WD3200JS 2,799円 x 4 *
送料 945円 *
合計 13,120円 *
=========================================
=========================================
一般ユーザ向けサーバ
=========================================
ドスパラ
SILVERSTONE SST-GD05B 7,980円 *
HuntKey Jumper350 350W 3,980円 *
送料 740円 *
BESTDO! 通販部
P7H55-M 5,940円 *
送料 740円 *
Yahoo!オークション(ID:************)
HP SC40Ge(SAS3042EL) 3,990円 *
通常プラッタへの加工費 1,000円 *
SFF-8484 to SATAのケーブル 1,400円 *
送料 740円 *
合計 25,770円 *
=========================================
=========================================
高負荷CGI専用サーバ
=========================================
購入予定
=========================================
EC-JOY
Core i5 680 BOX 25,679円
送料 450円
TSUKUMO
CMX8GX3M2A1600C9 8,380円
送料 0円
ドスパラ
SILVERSTONE SST-GD05B 7,980円
HuntKey Jumper350 350W 3,980円
送料 740円
BESTDO! 通販部
P7H55-M 5,940円
送料 740円
Yahoo!オークション(ID:************)
HP SC40Ge(SAS3042EL) 3,990円
通常プラッタへの加工費 1,000円
SFF-8484 to SATAのケーブル 1,400円
送料 740円
合計 61,019円
=========================================
* 印 購入完了
全て合わせて大体10万円くらいでしょうか高いです・・・当初の予想より遥かに高い金額・・・
それでも毎月何もしなくても3万円ほどの電気代が飛んでいることを考えれば・・・
省エネで処理能力を落とさず冗長性を保ち、なおかつLinuxに対応させる構成を決めるのは予想以上に大変です。
誰かマジで寄付してください!いくらでも喜びます>ω<。
Red Hat系Linuxのパッケージ管理システムyumからインストールされたRubyはバージョンが古くRailsがインストール出来ないためソースからビルドしインストールした。
しかし、ソースからビルドし直接インストールした場合、削除・アップデートが非常に困難なためソースから管理を行い易いrpmパッケージを作成しインストールする。
rpmパッケージを作成するためのコマンドcheckinstallのインストール
# rpm -ivh http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/checkinstall-1.6.0-3.el5.rf.i386.rpm
Rubyをソースからrpmパッケージを作成しインストールする
rubyのソースファイルをダウンロード
# wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p302.tar.bz2
展開
# bzip2 -dc | tar xvf ruby-1.8.7-p302.tar.bz2
展開されたruby-1.8.7-p302ディレクトリへ移動
# cd ruby-1.8.7-p302
Makefileを作成する
# ./configure –prefix=/usr
ビルドする
# make
rpmパッケージを作成する checkinstallの使い方は下記に記載
# checkinstall –fstrans=no
checkinstall 1.6.0, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran
This software is released under the GNU GPL.
The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs? [y]: ← Enter
Preparing package documentation…OK
Please choose the packaging method you want to use.
Slackware [S], RPM [R] or Debian [D]? r ← Enter
Please write a description for the package.
End your description with an empty line or EOF.
>> ← Enter
**************************************
**** RPM package creation selected ***
**************************************
This package will be built according to these values:
1 – Summary: [ Package created with checkinstall 1.6.0 ]
2 – Name: [ ruby-1.8.7 ]
3 – Version: [ p302 ]
4 – Release: [ 1 ]
5 – License: [ GPL ]
6 – Group: [ Applications/System ]
7 – Architecture: [ x86_64 ]
8 – Source location: [ ruby-1.8.7-p302 ]
9 – Alternate source location: [ ]
10 – Requires: [ ]
11 – Provides: [ ruby-1.8.7 ]
Enter a number to change any of them or press ENTER to continue: ← Enter
rpmパッケージが作成されたディレクトリへ移動
# cd /usr/src/redhat/RPMS/x86_64
作成されたrpmパッケージでRubyをインストール
# rpm -ivh ruby-1.8.7-p302-1.x86_64.rpm
Rubyがインストールされたかを確認する
# ruby -v
ruby 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux]
Rubyのライブラリを管理するrubygemsをソースからrpmパッケージを作成しインストールする
rubygemsのソースファイルをダウンロード
# wget http://rubyforge.org/frs/download.php/74234/rubygems-1.5.2.tgz
展開
# tar zxvf rubygems-1.5.2.tgz
展開されたrubygems-1.5.2ディレクトリへ移動
# cd rubygems-1.5.2
rpmパッケージを作成する checkinstallの使い方は上記に記載
# checkinstall -R ruby setup.rb
rubygemsからRailsをインストール
# gem install rails –include-dependencies
Railsがインストールされているか確認する
# rails -v
Rails 3.0.7
インターネットで調べると皆必死にソースからmake installしてるサイトしか見当たらないので一応rpmパッケージもあるよと紹介しちゃいます。
とりあえずrpmをダウンロードしてきます。そして適当なUSBメモリーの直下に保存しましょう。
http://pkgs.org/download/centos-5-rhel-5/centos-rhel-x86_64/module-init-tools-3.3-0.pre3.1.60.el5_5.1.x86_64.rpm.html
http://pkgs.org/download/centos-5-rhel-5/elrepo-x86_64/kmod-jme-1.0.7.1-1.el5.elrepo.x86_64.rpm.html
そのままだとUSBメモリーをXS35に挿しても認識しないかと思いますので一応kudzuを起動しておきます。
# service kudzu start
毎回起動するのは面倒なので自動起動させちゃいます。
# chkconfig kudzu on
マウント先を作成します。
# mkdir /media/usb
マウントします。(私の環境では/dev/sdaとなってましたが各自合わせてください)
# mount /dev/sda /media/usb
マウント先に移動します。
# cd /media/usb
module-init-tools-3.3-0.pre3.1.60.el5_5.1.x86_64.rpmをインストールします。
# rpm -Uvh module-init-tools*.rpm
kmod-jme-1.0.7.1-1.el5.elrepo.x86_64.rpmをインストールします。
# rpm -Uvh kmod-jme*.rpm
毎回USBメモリーをマウントしてインストールするのは面倒なのでとりあえずrootディレクトリにコピーしておきます。
# cp module-init-tools*.rpm /root/
# cp kmod-jme*.rpm /root/
アンマウントするために戻りましょう。
# cd
USBをアンマウントして取り外します。
# umount /media/usb
これでドライバのインストールは完了しました。system-config-networkでもrebootでもお好きにどうぞ。
他のサイトのソースからビルドするやり方は一斉にパッケージをアップデートするとドライバが外れてNICが認識されなくなってしまうようですが上記のやり方ならそのような事はありませんでした。
参考
Shuttle XS35にCentOS5.5を導入して無音サーバ構築 (CentOS導入編)
Shuttle XS35買ってきたよ CentOSインストール
OpenVPN専用サーバ作成
とりあえずRubyの参考書を読みながらメールフォームを作成してみました。普段はPerlでオブジェクト指向なモジュールを使って色々書いてますが自分でクラスやメソッドを定義することなんてなかったので今回かなり手こずりました。
メールフォームを表示して受け取ったデータをSendmailに渡して送信するだけのメールフォームです。確認画面はおろかメールアドレスのチェックなんて一切しません。。。
実用的には全く役に立たないが、Rubyを勉強しようかな?って人には役に立たないかもしれない。。。。
うん。役に立たない。。。
mailform.yml (設定ファイル)
# サイトのタイトル Title: Ruby製のメールフォーム # 管理者のメールアドレス(お問い合わせ送信先) To: mogumogu@gokugoku.oe # メールの件名 Subject: Ruby製のメールフォーム
mailform.rb (メールフォームのindex)
#!/usr/bin/ruby -w require 'contform.rb' require 'viewform.rb' require 'sendform.rb' cont = Cont.new puts cont.Output exit
contform.rb (メールフォームの大元のクラス)
class Cont require 'cgi' require 'yaml' require 'kconv' # 変数Yamlに設定ファイルのパスを格納 Yaml = 'mailform.yml' #インスタンス変数生成 def initialize begin # YAML.load_fileメソッド呼び出し 設定内容をインスタンス変数に格納 @yaml = YAML.load_file(Yaml) rescue # 例外発生時の処理(errorメソッドの呼び出し) error('YAMLファイルが読み込めませんでした。') end # 各種オブジェクトを設定を渡しながら生成する @cgi = CGI.new @view = View.new(@yaml) @send = Send.new(@yaml) end # フォーム画面表示 def Output # 送信する if(@cgi['page'] == 'sendmail') puts "content-type:text/htmlnn" # メール送信 @send.sendmail(@cgi['from'], @yaml['To'], nil, nil, @yaml['Subject'], @cgi['textdata']) # メール送信完了のメッセージを引数として返す return @view.Success else # フォームを表示する puts "content-type:text/htmlnn" return @view.TopPage end end # エラー出力 def error(errstr) puts "content-type:text/htmlnn" puts <<-__END エラーが発生しました! #{errstr} __END exit end end
viewform.rb (メールフォームのHTML関連表示クラス)
class View def initialize(yaml) @yaml = yaml end def TopPage # メールフォームの表示 html = <<-__EOT <HTML> <HEAD> <TITLE>#{@yaml['Title']}</TITLE> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript"> <!-- function check(){ if(window.confirm('送信してよろしいですか?')){ return true; }else{ window.alert('キャンセルされました'); return false; } } // --> </script> </HEAD> </BODY> <p>#{@yaml['Title']}</p> <form action="mailform.rb" method="post" onSubmit="return check()"> <INPUT TYPE="hidden" NAME="page" VALUE="sendmail"> <p>メールアドレス</p> <input type="text" name="from" size="35"> <p>お問い合わせ用メッセージ</p> <textarea name="textdata" rows="6" cols="50"></textarea><br> <input type="submit" value="送信する" onClick="disp()"><input type="reset" value="リセット"> </BODY> </HTML> __EOT end def Success # 送信成功画面 html = <<-__EOT <HTML> <HEAD> <TITLE>#{@yaml['Title']}</TITLE> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> </script> </HEAD> </BODY> <p>#{@yaml['Title']}</p> <p>送信しました</p> </BODY> </HTML> __EOT end end
sendform.rb (メールフォームのメール送信クラス)
class Send def initialize(yaml) @yaml = yaml end # メール送信メソッド def sendmail(from, to, cc, bcc, subject, body) path = "/usr/sbin/sendmail" # sendmailのパス subject = subject.tojis subject = [subject].pack('m') # Base64 subject.gsub!(/n/, "") subject = "=?ISO-2022-JP?B?#{subject}?=" body = body.tojis IO.popen("#{path} -t", "r+") { |io| io.print "From: #{from}n" io.print "To: #{to}n" io.print "Cc: #{cc}n" if cc != nil io.print "Bcc: #{bcc}n" if bcc != nil io.print "Subject: #{subject}n" io.print "MIME-Version: 1.0n" io.print "Content-Type: text/plain; charset=iso-2022-jpn" io.print "Content-Transfer-Encoding: 7bitn" io.print "n" io.print "#{body}n" } end end
そういえば、Javaとは違ってクラス名とファイル名が違っても怒られないんですね~
バージョン管理が大変なPHPを簡単にアップデートできます
※下記を実行するとPHP以外のパッケージも全てアップグレードされてしまいます。気になる人はリポリトジの設定で普段は無効にしておいてください。
# wget -q -O – http://www.atomicorp.com/installers/atomic.sh | sh yum update
# yum install php php-mbstring
# wget http://ftp.iij.ad.jp/pub/linux/fedora/epel/5/i386/epel-release-5-4.noarch.rpm
# rpm -Uvh epel-release-5-4.noarch.rpm
# wget http://rpms.famillecollet.com/enterprise/5/remi/i386/remi-release-5-8.el5.remi.noarch.rpm
# rpm -Uvh remi-release-5-8.el5.remi.noarch.rpm
# vi /etc/yum.repos.d/remi.repo
[remi]の中のenable=0をenable=1に変更
# yum update
# yum install pcre-devel
# yum install google-perftools-devel
# wget http://www.invoca.ch/pub/packages/pound/pound-2.5-1.src.rpm
# rpm -ivh pound-2.5-1.src.rpm
# rpmbuild -ba /usr/src/redhat/SPECS/pound.spec
32Bit版の場合
# rpm -ivh /usr/src/redhat/RPMS/i386/pound-2.5-1.i386.rpm
64Bit版の場合
# rpm -ivh /usr/src/redhat/RPMS/x86_64/pound-2.5-1.x86_64.rpm
設定ファイルの場所
# vi /etc/pound/pound.cfg
ダウンロードして展開する
# wget ftp://ftp.delegate.org/pub/DeleGate/delegate9.9.7.tar.gz
# tar zxvf delegate9.9.7.tar.gz
# cd delegate9.9.7
# make ← 途中で管理者宛のメールアドレスを聞かれるので入力してEnterを押す
作成された実行ファイルをコピーする
# cp src/delegated /usr/local/sbin/
コピーした実行ファイルにハードリンクを貼る
# ln /usr/local/sbin/delegated /usr/sbin/delegated
設定ファイル格納用のディレクトリを作成する
# mkdir /etc/delegate
キャッシュ格納用ディレクトリを作成してその他フォルダのパーミッションを設定する
# mkdir /var/spool/delegate-nobody/cache
# chown nobody:nobody /var/spool/delegate-nobody
# chown nobody:nobody /var/spool/delegate-nobody/*
# chmod 755 /var/spool/delegate-nobody
# chmod 755 /var/spool/delegate-nobody/*
serviceコマンドで管理できるように起動ファイルを作成する
# vi /etc/init.d/delegated
#!/bin/sh # # chkconfig: 35 90 10 # description: delegated ftp proxy # processname: delegated # config: /etc/delegate/*.conf DELEGATE=/usr/sbin/delegated CONFDIR=/etc/delegate DGROOT=/var/spool/delegate-nobody if [ ! -x $DELEGATE ]; then echo -n $"$DELEGATE does not exist."; warning; echo exit 0 fi if [ ! -r $CONFDIR ]; then echo -n $"$CONFDIR does not exist."; warning; echo exit 0 fi RETVAL=0 start() { echo -n $"Starting up Http DeleGate daemon: " for CONFIG in $CONFDIR/*.conf ; do $DELEGATE DGROOT=$DGROOT +=$CONFIG echo done return 0 } stop() { echo -n $"Shutting down Http DeleGate daemon: " for CONFIG in $CONFDIR/*.conf ; do $DELEGATE DGROOT=$DGROOT +=$CONFIG -Fkill echo done return 0 } restart() { stop start } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac exit 0
Proxyの設定例
※ あまり紹介しているところもなくマニュアルを読みながらの設定なので色々他のサイトの設定例とは違うかも・・・・
あと設定に実用的な意図はありません。リバースプロキシ(キャッシュサーバ)の動作確認だけです。
# ポート番号 -P8080 SERVER=http # オリジナルサーバとの関連性についての設定 MOUNT="/* https://www.orsx.net/* vhost=-www1.orsx.net" REACHABLE=27.96.63.202 MOUNT="/* http://www.xrsp.net/* vhost=-www2.orsx.net" REACHABLE=27.96.63.203 RELIABLE="*" # 接続元の制限をしない CACHE=do # キャッシュサーバとしての機能を持たすためキャッシュを取る EXPIRE=3d # キャッシュの期限を3日と指定 CRON="0 2 * * * -expire 30d" # ログテーションを30日と指定 # ログフォーマット CACHEFILE='$[server:%P]/$[hash:%H]/$[server:%L/%p]' # ログファイルの形式 LOGFILE='${LOGDIR}/${PORT}[date+%d]' PROTOLOG='${LOGDIR}/${PORT}/[date+%d].${PROTO}' CONNECT=c,d:*:*:* # キャッシュを調べてからサーバに取りに行く MOUNT="/favicon.ico =" #ファビコンを勝手に返さない # エラーページにオリジナルのメッセージを表示する MOUNT="/-/* /var/spool/delegate-nobody/tmp/forbidden.dhtml" # Delegateのバージョンを非表示にする DGSIGN="V.x.x/Y.x.x" # 管理者の連絡先 ADMIN=orbit@mail.ほげほげ.net
PHPのバージョンを上げた時にアンインストールされてしまっていたので再インストールしました。
32bit版
# yum install php-xml php-xmlrpc php-soap
64bit版
# yum install php-xml.x86_64 php-xmlrpc.x86_64 php-soap.x86_64
最近のコメント