Tag Archives: Linux (Server) - Page 6

P7H55-M + i3(内蔵GPU) + CentOS5

先日記述したとおりのパーツがひと通り揃った(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に対応させる構成を決めるのは予想以上に大変です。
誰かマジで寄付してください!いくらでも喜びます>ω<。

CentOS 5.5 Ruby on Rails 環境構築

 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

Shuttle XS35 CentOS 5.5 インストール NICドライバ簡単インストール

インターネットで調べると皆必死にソースから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専用サーバ作成

Shuttle XS35 無音サーバ構築

Atomの省エネサーバを構築しバックアップサーバとして動かす為に色々調べていましたがXS35が今販売されている中で最も安くバランスがいいのではないかと考えたので購入してみました。

XS35は1万5千円ほど
HDD 500G 5400rpmが5千円ほど
DDR2 2G 800が3千円ほど
スリムマルチDVDドライブが3千円ほどで計2万6千円くらいでした

本当に音がしないのでいいのですが
これそのままCentOSをインストールしてもNICが認識されないのでドライバを自分で入れないと行けないようです。

Ruby製の出来そこないメールフォーム

とりあえず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とは違ってクラス名とファイル名が違っても怒られないんですね~

CentOS 5 PHPの最新のバージョンをインストールする

バージョン管理が大変なPHPを簡単にアップデートできます
※下記を実行するとPHP以外のパッケージも全てアップグレードされてしまいます。気になる人はリポリトジの設定で普段は無効にしておいてください。
# wget -q -O – http://www.atomicorp.com/installers/atomic.sh | sh yum update
# yum install php php-mbstring

Pound 2.5 CentOS 5.5 rpm インストール

# 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

参考
CentOS5.5にPound最新版をRPMでインストール

Delegate 9.9.7 インストール CentOS 5.5

ダウンロードして展開する
# 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

CentOS XML-RPC 導入

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