2007年8月29日水曜日

WEBrickから別のサーバへ

fcgiがインストールできなかったので、Mongrelをインストール

いろいろ調べて、lighttpd + FastCGIでRailsを動かしてみようとして、FastCGIのインストールで
断念。わけわからんErrorでインストールできない。
なので、lighttpd + Mongrelにチャレンジ

参考ページ
神原日記
バリケンのRuby日記
Apache+mod_perlからLighttpd+FastCGIに移行

■Mongrelをインストール

gemコマンドで簡単に入る
[root@mycentos ~]# gem install mongrel


質問には、> 2、> 1で答えた。わかってないので雰囲気で。
Need to update 2 gems from http://gems.rubyforge.org
..
complete
Select which gem to install for your platform (x86_64-linux)
1. mongrel 1.0.1 (mswin32)
2. mongrel 1.0.1 (ruby)
3. mongrel 1.0 (mswin32)
4. mongrel 1.0 (ruby)
5. Skip this gem
6. Cancel installation
> 2
Install required dependency daemons? [Yn] y
Install required dependency fastthread? [Yn] y
Select which gem to install for your platform (x86_64-linux)
1. fastthread 1.0 (ruby)
2. fastthread 1.0 (mswin32)
3. fastthread 0.6.4.1 (mswin32)
4. fastthread 0.6.4.1 (ruby)
5. Skip this gem
6. Cancel installation
> 1
Building native extensions. This could take a while...
Install required dependency gem_plugin? [Yn] y
Install required dependency cgi_multipart_eof_fix? [Yn] y
Building native extensions. This could take a while...
Successfully installed mongrel-1.0.1
Successfully installed daemons-1.0.7
Successfully installed fastthread-1.0
Successfully installed gem_plugin-0.2.2
Successfully installed cgi_multipart_eof_fix-2.3
Installing ri documentation for mongrel-1.0.1...
Installing ri documentation for daemons-1.0.7...
Installing ri documentation for gem_plugin-0.2.2...
Installing ri documentation for cgi_multipart_eof_fix-2.3...
Installing RDoc documentation for mongrel-1.0.1...
Installing RDoc documentation for daemons-1.0.7...
Installing RDoc documentation for gem_plugin-0.2.2...
Installing RDoc documentation for cgi_multipart_eof_fix-2.3...
[root@mycentos ~]#


起動確認してみる。RailsRootへ移動し以下のコマンド
[root@mycentos jr01]# ruby script/server
=> Booting Mongrel (use 'script/server webrick' to force WEBrick)
=> Rails application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with development environment...
** Rails loaded.
** Loading any Rails specific GemPlugins
** Signals ready. TERM => stop. USR2 => restart. INT => stop (no restart).
** Rails signals registered. HUP => reload (without restart). It might not work well.
** Mongrel available at 0.0.0.0:3000
** Use CTRL-C to stop.


WEBrickの起動がされずに、Mongrelが起動するようになった。
WEBrickを起動したい場合は、以下のコマンドでできる
[root@mycentos jr01]# ruby script/server webrick


■Lighttpdをインストール

yumでインストールできるように少し、/etc/yum.repos.d/CentOS-Base.repoファイルをいじる。
(CentOSはRHELのクローンOSなので、こういうときはRHELのパッケージから探すためらしい。)
viの使い方はviを使い倒そうで覚えました。
[root@mycentos ~]# vi /etc/yum.repos.d/CentOS-Base.repo


CentOS-Base.repoに以下を追加する
[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=1
includepkgs=lighttpd lighttpd-fastcgi


yumでLighttpdをインストールする
(今回は結局使わないけど、流れで、Lighttpd-fastcgiもインストールしちゃってます。)
[root@mycentos ~]# yum install lighttpd lighttpd-fastcgi
Loading "fastestmirror" plugin
Setting up Install Process
     ・
     ・
Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
lighttpd x86_64 1.3.16-1.2.el4.rf dag 283 k
lighttpd-fastcgi x86_64 1.3.16-1.2.el4.rf dag 38 k

Transaction Summary
=============================================================================
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 322 k
Is this ok [y/N]: y
Downloading Packages:
(1/2): lighttpd-fastcgi-1 100% |=========================| 38 kB 00:00
(2/2): lighttpd-1.3.16-1. 100% |=========================| 283 kB 00:05
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: lighttpd ######################### [1/2]
Installing: lighttpd-fastcgi ######################### [2/2]

Installed: lighttpd.x86_64 0:1.3.16-1.2.el4.rf lighttpd-fastcgi.x86_64 0:1.3.16-1.2.el4.rf
Complete!
[root@mycentos ~]#


lighttpd.confファイルの設定をする。
[root@mycentos ~]# vi /etc/lighttpd/lighttpd.conf


必要そうなとこを変更。PATH系は各々の環境で置き換える。
特に必要なのは以下の2つかな。
mod_proxyのコメントを外す

$HTTP["url"] !~ "\.(html|png|gif|svg|xml|js|css|swf|ico)$" {
proxy.server = ("/" => (
("host" => "127.0.0.1", "port" => 3000)
))
}
を追加する


[root@mycentos ~]# cat /etc/lighttpd/lighttpd.conf
# lighttpd configuration file
#
# use a it as base for lighttpd 1.0.0 and above
#
# $Id: lighttpd.conf,v 1.7 2004/11/03 22:26:05 weigon Exp $

############ Options you really have to take care of ####################

## modules to load
# at least mod_access and mod_accesslog should be loaded
# all other module should only be loaded if really neccesary
# - saves some time
# - saves memory
server.modules = (
"mod_rewrite",
# "mod_redirect",
# "mod_alias",
"mod_access",
# "mod_cml",
# "mod_trigger_b4_dl",
# "mod_auth",
# "mod_status",
# "mod_setenv",
# "mod_fastcgi",
"mod_proxy",
     ・
     ・
"mod_accesslog" )

## a static document-root, for virtual-hosting take look at the
## server.virtual-* options
#server.document-root = "/srv/www/lighttpd/"
server.document-root = "/var/raily/jr01/public/"
     ・
     ・
## deny access the file-extensions
#
# ~ is for backupfiles from vi, emacs, joe, ...
# .inc is often used for code includes which should in general not be part
# of the document-root
url.access-deny = ( "~", ".inc" )

$HTTP["url"] =~ "\.pdf$" {
server.range-requests = "disable"
}

$HTTP["url"] !~ "\.(html|png|gif|svg|xml|js|css|swf|ico)$" {
proxy.server = ("/" => (
("host" => "127.0.0.1", "port" => 3000)
))
}

######### Options that are good to be but not neccesary to be changed #######

## bind to port (default: 80)
server.port = 3210
     ・
     ・
## to help the rc.scripts
server.pid-file = "/var/run/lighttpd.pid"
     ・
     ・
## for mod_cml
## don't forget to add index.cml to server.indexfiles
# cml.extension = ".cml"
# cml.memcache-hosts = ( "127.0.0.1:11211" )


起動確認してみる。うごいたよ。
[root@mycentos ~]# service lighttpd start
Starting lighttpd: [ OK ]


■mongrel_clusterのインストール

mongrelをいっぺんに複数起動してくれる、mongrel_clusterをインストールしてみる
これもgemコマンドで簡単。
[root@mycentos ~]# gem install mongrel_cluster
Need to update 1 gems from http://gems.rubyforge.org
.
complete
Successfully installed mongrel_cluster-1.0.2


mongrel_clusterの設定ファイルを作成する、各々の環境で置き換える
RailsRootへ移動し以下のコマンド
[root@mycentos jr01]# mongrel_rails cluster::configure -e development -p 3000 -a 0.0.0.0 -l /var/raily/jr01/log/mongrel.log -P /var/run/rails.pid -c /var/raily/jr01 -r /var/raily/jr01 -N 1 --user root


引数の意味は以下で、大体わかる。-Nは起動したいMongrelの数。(後で変えれるからビビることなかった。。)
mongrel_rails start -h
Usage: mongrel_rails [options]
-e, --environment ENV Rails environment to run as
-d, --daemonize Whether to run in the background or not
-p, --port PORT Which port to bind to
-a, --address ADDR Address to bind to
-l, --log FILE Where to write log messages
-P, --pid FILE Where to write the PID
-n, --num-procs INT Number of processors active before clients denied
-t, --timeout TIME Timeout all requests after 100th seconds time
-m, --mime PATH A YAML file that lists additional MIME types
-c, --chdir PATH Change to dir before starting (will be expanded)
-r, --root PATH Set the document root (default 'public')
-B, --debug Enable debugging mode
-C, --config PATH Use a config file
-S, --script PATH Load the given file as an extra config script.
-G, --generate CONFIG Generate a config file for -C
--user USER
User to run as
--group GROUP
Group to run as
--prefix PATH
URL prefix for Rails app
-h, --help Show this message
--version Show version


configの下にmongrel_cluster.ymlファイルが作成される
Writing configuration file to config/mongrel_cluster.yml.
[root@mycentos jr01]#
[root@mycentos jr01]# cat config/mongrel_cluster.yml
---
user: root
cwd: /var/raily/jr01
log_file: /var/raily/jr01/log/mongrel.log
port: "3000"
environment: development
address: 0.0.0.0
pid_file: /var/run/rails.pid
servers: 1


clusterを使って、Mongrelを起動する(RailsRootで)
[root@mycentos jr01]# mongrel_rails cluster::start
starting port 3000
!!! You must also specify a group.
mongrel::start reported an error. Use mongrel_rails mongrel::start -h to get help.


失敗したのかな?。よくわからんが、config/mongrel_cluster.ymlファイルのuser: rootを削除して再チャレンジ
[root@mycentos jr01]# mongrel_rails cluster::start
starting port 3000


無事起動でしたようです。止めるときは、以下のコマンド
[root@mycentos jr01]# mongrel_rails cluster::stop
stopping port 3000


RailsRootまで移動して、いちいち起動が面倒なので、自動起動用スクリプトをコピー作成する
mongrel_clusterの自動起動用スクリプトを探す
[root@mycentos /]# find -name mongrel_cluster
./usr/local/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.2/resources/mongrel_cluster
./usr/local/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.2/lib/mongrel_cluster


/etc/rc.d/init.dへコピーし(名前は何でもいい。)、作成したファイルに実行権をつける(自動起動の設定はとりあえずしない)
[root@mycentos ~]# cp /usr/local/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.2/resources/mongrel_cluster /etc/rc.d/init.d/mongrel_jr01
chmod 755 /etc/rc.d/init.d/mongrel_jr01


自動起動用スクリプトを編集し、mongrel_cluster.ymlの場所を指定する
[root@mycentos ~]# vi /etc/rc.d/init.d/mongrel_jr01


以下のような感じ。exportは重要です。(各々の環境で。)
[root@mycentos ~]# cat /etc/rc.d/init.d/mongrel_jr01
#!/bin/bash
#
# Copyright (c) 2007 Bradley Taylor, bradley@railsmachine.com
#
# mongrel_cluster Startup script for Mongrel clusters.
#
# chkconfig: - 85 15
# description: mongrel_cluster manages multiple Mongrel processes for use \
# behind a load balancer.
#

CONF_DIR=/var/raily/jr01/config
PID_DIR=/var/run
USER=root

RETVAL=0

export PATH=/usr/local/bin:$PATH
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"

# Gracefully exit if the controller is missing.
which mongrel_cluster_ctl >/dev/null || exit 0

# Go no further if config directory is missing.
[ -d "$CONF_DIR" ] || exit 0

case "$1" in
start)
# Create pid directory
mkdir -p $PID_DIR
chown $USER:$USER $PID_DIR

mongrel_cluster_ctl start -c $CONF_DIR
RETVAL=$?
;;
stop)
mongrel_cluster_ctl stop -c $CONF_DIR
RETVAL=$?
;;
restart)
mongrel_cluster_ctl restart -c $CONF_DIR
RETVAL=$?
;;
status)
mongrel_cluster_ctl status -c $CONF_DIR
RETVAL=$?
;;
*)
echo "Usage: mongrel_cluster {start|stop|restart|status}"
exit 1
;;
esac

exit $RETVAL


これでどこでも起動できるようなった。しかし、変な文句を言われる。わからない。。
でも動いてるから今回はよしとする。
[root@mycentos ~]# service mongrel_jr01 start
Starting all mongrel_clusters...
!!! Path to log file not valid: log/mongrel.3000.log
mongrel::start reported an error. Use mongrel_rails mongrel::start -h to get help.
!!! Path to log file not valid: log/mongrel.3001.log
mongrel::start reported an error. Use mongrel_rails mongrel::start -h to get help.


■じゃ、LighttpdとMongrelを両方起動して確認

ポート3210に接続して、Railsアプリのパスへ接続。
うごいた!

2007年8月20日月曜日

RailsとPostgreSQLの接続を作る

RailsからPostgreSQLへ接続してみる

PostgreSQLのセットアップが完了したので、Ruby on Railsとの接続確立を確認します。

参考ページ
Postgresql on Rails and OSX (Potential Energy)

■RailsにPostgreSQL用のアダプタを与える

アダプタは2種類あるようです。どちらもgemコマンドでインストールできます。
違いは、わかりません。。1つ目の方法は、引数のパスを環境に合わせて変更する必要があります。
gem install postgres -- --with-pgsql-include-dir=/usr/local/pgsql/include --with-pgsql-lib-dir=/usr/local/pgsql/lib

gem install postgres-pr


結果ですが、1つ目の方法はパスをさらに設定してやらないとエラーになりました。
/etc/ld.so.confとやらに追記する方法もあるようですが、熟練者向けってどこかで書いてたのでやめました。

今回はサーバーを起動するユーザの(root).bash_profileファイルにLD_LIBRARY_PATHを設定しました。
以下を追加しました。
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
[root@mycentos ~]# cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
unset USERNAME


.bash_profileを反映します。再読込み。
[root@mycentos ~]# source ~root/.bash_profile


2つ目の方法はインストールするだけで使えました。
うわさでは、1つ目のアダプタの方が処理が速いとか。。

■RailsのPostgreSQLへの設定をして接続を確認

続いて、RailsにDB接続確認用の画面を作ってみます。
任意の場所に任意のフォルダを作ります。
[root@mycentos var]# mkdir raily
[root@mycentos var]# cd raily
[root@mycentos raily]#


railsコマンドでDBテストプロジェクトを作成する
[root@mycentos raily]# rails dbtest
create
create app/controllers
create app/helpers
create app/models
     ・
     ・
     ・
create public/javascripts/application.js
create doc/README_FOR_APP
create log/server.log
create log/production.log
create log/development.log
create log/test.log
[root@mycentos raily]#


database.ymlを編集して、PostgreSQLのアダプタを使うようにします
viの使い方はviを使い倒そうで覚えました。
[root@mycentos raily]# cd dbtest/config
[root@mycentos config]# vi database.yml


とりあえず、development、test、productionの3箇所を以下のように変えました。
先に、pgAdminⅢを使ってスキーマを作成しました。pgAdminⅢはGUIなので方法は書きません。
(Railsのプロジェクトとスキーマは1対1でないと駄目だと思うよ)
adapterはそのままpostgresql、databaseは作成したDBの名前、usernameは作成したDBを編集できるロールの名前、passwordはそのロールのパスワード、encodingは作成したDBの文字コード(今回はUTF8で作成した)
adapter: postgresql
database: dbtest
username: ruby
password: rails
host: localhost
encoding: utf8
[root@mycentos config]# cat database.yml
# MySQL (default setup). Versions 4.1 and 5.0 are recommended.
#
# Install the MySQL driver:
# gem install mysql
# On MacOS X:
# gem install mysql -- --include=/usr/local/lib
# On Windows:
# gem install mysql
# Choose the win32 build.
# Install MySQL and put its /bin directory on your path.
#
# And be sure to use new-style password hashing:
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
development:
adapter: postgresql
database: dbtest
username: ruby
password: rails
host: localhost
encoding: utf8

# Warning: The database defined as 'test' will be erased and
# re-generated from your development database when you run 'rake'.
# Do not set this db to the same as development or production.
test:
adapter: postgresql
database: dbtest
username: ruby
password: rails
host: localhost
encoding: utf8

production:
adapter: postgresql
database: dbtest
username: ruby
password: rails
host: localhost
encoding: utf8


では、プログラムを作成します。コマンドで雛形を作成してくれます。助かります。
candyモデルを作成
[root@mycentos config]# cd ../
[root@mycentos dbtest]# ruby script/generate model candy
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/candy.rb
create test/unit/candy_test.rb
create test/fixtures/candies.yml
create db/migrate
create db/migrate/001_create_candies.rb
[root@mycentos dbtest]#


作成されたdb/migrate/001_create_candies.rbを編集して、テーブルを作成します。
以下のように編集
[root@mycentos dbtest]# vi db/migrate/001_create_candies.rb

class CreateCandies < ActiveRecord::Migration
def self.up
create_table :candies do |t|
t.column :name, :string, :limit => 30, :null => false
t.column :volume, :integer, :default => 0, :null => false
t.column :bb_date, :date
t.column :created_at, :timestamp
end
end

def self.down
drop_table :candies
end
end


rake db:migrateコマンドを実行する。
[root@mycentos dbtest]# rake db:migrate
(in /var/raily/dbtest)
== CreateCandies: migrating ===================================================
-- create_table(:candies)
NOTICE: CREATE TABLE will create implicit sequence "candies_id_seq" for serial column "candies.id"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "candies_pkey" for table "candies"
-> 0.0127s
== CreateCandies: migrated (0.0129s) ==========================================
[root@mycentos dbtest]#


んー出来たか不安だけど、次にcandyのscaffoldを作ります。
[root@mycentos dbtest]# ruby script/generate scaffold candy
exists app/controllers/
exists app/helpers/
exists app/views/candies
exists app/views/layouts/
exists test/functional/
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
identical app/models/candy.rb
identical test/unit/candy_test.rb
identical test/fixtures/candies.yml
create app/views/candies/_form.rhtml
create app/views/candies/list.rhtml
create app/views/candies/show.rhtml
create app/views/candies/new.rhtml
create app/views/candies/edit.rhtml
create app/controllers/candies_controller.rb
create test/functional/candies_controller_test.rb
create app/helpers/candies_helper.rb
create app/views/layouts/candies.rhtml
create public/stylesheets/scaffold.css
[root@mycentos dbtest]#


では、WEBrickを起動してみましょう。
[root@ndatacom dbtest]# ruby script/server
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2007-08-20 11:58:39] INFO WEBrick 1.3.1
[2007-08-20 11:58:39] INFO ruby 1.8.6 (2007-03-13) [x86_64-linux]
[2007-08-20 11:58:39] INFO WEBrick::HTTPServer#start: pid=23716 port=3000


画面でみれた。登録もできる。日本語もでた。

2007年8月17日金曜日

CentOSへRailsのためにPostgreSQL

PostgreSQLのセットアップ

Ruby on RailsのDBとして、PostgreSQLを使いたいので、セットアップします。

参考ページ
Linuxで自宅サーバー
データベースサーバー構築(PostgreSQL)

■CentOSにインストールされているPostgreSQLを確認

yumコマンドで確認してみる
[root@mycentos ~]#Installed Packages
Name : postgresql
Arch : x86_64
Version: 7.4.17
Release: 1.RHEL4.1
Size : 7.8 M
Repo : installed
Summary: PostgreSQL client programs and libraries.


psqlコマンドでも確認してみる
[root@mycentos ~]# psql --version
psql (PostgreSQL) 7.4.17


7.4.17がインストールされているようです。
現在(2007年8月17日)時点で、8.2.4が最新なのでそれにバージョンアップを試みる。
最新ソースは日本PostgreSQLユーザ会から取得できます。


■とりあえず7.4.17のPostgreSQLをセットアップしてみる

PostgreSQLを起動します
[root@mycentos ~]# service postgresql start
Starting postgresql service: [ OK ]


自動起動も設定しておく
[root@mycentos ~]# chkconfig postgresql on


システム上のpostgresユーザのパスワードを設定
[root@mycentos ~]# passwd postgres
Changing password for user postgres.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.


PostgreSQL上のpostgresユーザのパスワードを設定
postgresユーザにスイッチする
[root@mycentos ~]# su - postgres
-bash-3.00$


psqlコマンドでPostgreSQLに接続
-bash-3.00$ psql template1
Welcome to psql 7.4.17, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit

template1=#


SQLでpostgresユーザのパスワードを設定する
;を忘れずにEnterするとパスワード設定完了
template1=# alter user postgres with password 'ひみつー';
ALTER USER


PostgreSQLから接続を切断
template1=# \q


PostgreSQL設定ファイルを編集して、リモートでpgAdminⅢを使って接続できるようにしてみる
まず、postgresql.confを編集し、TCP/IP経由でのデータベース接続許可する
viの使い方はviを使い倒そうで覚えました。
-bash-3.00$ vi /var/lib/pgsql/data/postgresql.conf


tcpip_socket = falseの部分をコメントアウトしてtrueにする
#---------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#---------------------------------------------------------------------------

# - Connection Settings -

#tcpip_socket = false
tcpip_socket = true


次、pg_hba.confを編集し、リモートでの接続を許可する
-bash-3.00$ vi /var/lib/pgsql/data/pg_hba.conf


ファイルの最後に以下を追加する。上から、ローカルからのアクセスは無条件に許可・内部からのアクセスは無条件に許可・上記以外からのアクセスはパスワード認証により許可
local all all trust
host all all 127.0.0.1 255.255.255.255 trust
host all all 0.0.0.0 0.0.0.0 password crypt


これでPostgreSQLの設定はひとまず完了
ルートユーザに戻り、PostgreSQLを再起動する
-bash-3.00$ exit
[root@mycentos ~]# service postgresql restart
Stopping postgresql service: [ OK ]
Starting postgresql service: [ OK ]


リモートでpgAdminⅢを使って接続できたので、無事にセットアップできました。
pgAdminⅢの使い方は、GUIだし書かない。
あと、リモートでそのまま通信するのはセキュリティーとか不安なので、SSHを使ってポートフォアードなんてのを利用した。
PoderosaプラグインサイトのSSHのポートフォワーディングツールを使ってます。
あまりわかってないので詳しい話はできません。SSHポートフォワーディングによる接続を参考にしました。

■PostgreSQLをバージョンアップ

最新のPostgreSQLにバージョンアップします。7.4.17も少し動かしていたので、勉強もかねてバックアップをまず取ります。
コマンドは、pg_dumpall > ファイル名です
[root@mycentos ~]# su - postgres
-bash-3.00$ pg_dumpall > postgresBK


データが少ないから、すぐ終わった。できてるね。場所も覚えておこう。
-bash-3.00$ ls
backups data initdb.i18n postgresBK
-bash-3.00$ pwd
/var/lib/pgsql
-bash-3.00$ exit


PostgreSQLを止めます
[root@mycentos ~]# service postgresql stop
Stopping postgresql service: [ OK ]


古いPostgreSQLを削除します。yumでインストールしているので、yumでアンインストールする
[root@mycentos ~]# yum remove postgresql


途中で確認でとまるのでyを入力し、Enter。無事に削除できた。
Loading "fastestmirror" plugin
Setting up Remove Process
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Package postgresql.x86_64 0:7.4.17-1.RHEL4.1 set to be erased
--> Running transaction check
Setting up repositories
update 100% |=========================| 951 B 00:00
base 100% |=========================| 1.1 kB 00:00
     ・
     ・
     ・
Install 0 Package(s)
Update 0 Package(s)
Remove 2 Package(s)
Total download size: 0
Is this ok [y/N]: y
Downloading Packages:
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Removing : postgresql-server ######################### [1/2]
Removing : postgresql ######################### [2/2]

Removed: postgresql.x86_64 0:7.4.17-1.RHEL4.1
Dependency Removed: postgresql-server.x86_64 0:7.4.17-1.RHEL4.1
Complete!


postgresユーザを作成する。PostgreSQLのインストールはrootで行ってはいけないらしい
[root@mycentos postgresql-8.2.4]# groupadd postgres
[root@mycentos postgresql-8.2.4]# useradd -g postgres postgres
[root@mycentos postgresql-8.2.4]# passwd postgres
Changing password for user postgres.
New UNIX password:ひみつ
Retype new UNIX password:ひみつ
passwd: all authentication tokens updated successfully.


wgetコマンドで最新バージョンをダウンロード
[root@mycentos ~]# su - postgres
[postgres@mycentos ~]# wget ftp://ftp.jp.postgresql.org/source/v8.2.4/postgresql-8.2.4.tar.gz


ソースの解凍、そしてできたディレクトリに移動します。
[postgres@mycentos ~]# tar zxvf postgresql-8.2.4.tar.gz
     ・
     ・
     ・
[postgres@mycentos ~]# cd postgresql-8.2.4


PostgreSQLをビルドします。
[postgres@mycentos postgresql-8.2.4]# ./configure --prefix=/usr/local/pgsql
     ・
     ・
[postgres@mycentos postgresql-8.2.4]# make
     ・
     ・


なんとか成功。./configureのオプションはいろいろ調べてけど、シンプルにprefixだけにしました。良くわかってないけど。
あと、./configure時に、readlineライブラリが無いよ!て怒られて困ったけど(readlineパッケージはインストール済みやったもん。。)
調べたところreadline-develもいるらしい。なのでyum install readline-develをしました。

checkinstallを使ってRPM化します。checkinstallの導入
[postgres@mycentos postgresql-8.2.4]# checkinstall
     ・
     ・
Building file list...OKtar: /usr/src/redhat/SOURCES/postgresql-8.2.4.tgz: Cannot open: Permission denied
     ・
     ・


あらら、権限がない。んーじゃrootでやるしかないのか。
[postgres@mycentos postgresql-8.2.4]# exit
[root@mycentos ~]# cd /home/postgres/postgres-8.2.4
[root@mycentos postgresql-8.2.4]# checkinstall
     ・
     ・
     ・
**********************************************************************

Done. The new package has been saved to

/usr/src/redhat/RPMS/x86_64/postgresql-8.2.4-1.x86_64.rpm
You can install it in your system anytime using:

rpm -i postgresql-8.2.4-1.x86_64.rpm
**********************************************************************


とりあえずRPMの作成は成功。いけんのかね?
でまたしらべてみたら、インストールまではrootでもよぐねくねくね?BitArtsをみて続きをする。
rootのままパッケージをインストールする
[root@mycentos postgresql-8.2.4]# rpm -ivh /usr/src/redhat/RPMS/x86_64/postgresql-8.2.4-1.
x86_64.rpm
Preparing... ########################################### [100%]
1:postgresql ########################################### [100%]
[root@mycentos postgresql-8.2.4]#


あっさり。じゃー初期設定します。
データ保存用のディレクトリを作ります。
[root@mycentos postgresql-8.2.4]# cd /usr/local/pgsql
[root@mycentos pgsql]# mkdir data
[root@mycentos pgsql]# chown postgres:postgres data


postgresユーザになってから、データ初期化コマンド実行
[root@mycentos pgsql]# su - postgres
[postgres@mycentos ~]# /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale C.

fixing permissions on existing directory /usr/local/pgsql/data ... ok
     ・
     ・
copying template1 to postgres ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.

Success. You can now start the database server using:

/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
or
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start


データ初期化は成功したようです。pg_hba.confの編集をわすれるなよ。っていわれてます。あとでね。
postgresユーザの.bash_profileファイルにPATHを設定します。
[postgres@mycentos ~]# vi .bash_profile


以下を追加しました。
export PATH=$PATH:/usr/local/pgsql/bin
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$POSTGRES_HOME/data
export MANPATH="$MANPATH":$POSTGRES_HOME/man
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
[postgres@mycentos ~]# cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
export PATH=$PATH:/usr/local/pgsql/bin
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$POSTGRES_HOME/data
export MANPATH="$MANPATH":$POSTGRES_HOME/man
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"

unset USERNAME


.bash_profileを反映します。再読込み。
[postgres@mycentos ~]# source ~postgres/.bash_profile


データベースができるかな。
[postgres@mycentos ~]# pg_ctl start
[postgres@mycentos ~]# createdb --encoding=UTF8
ERROR: database "postgres" already exists
STATEMENT: CREATE DATABASE postgres ENCODING 'UTF8';

createdb: database creation failed: ERROR: database "postgres" already exists

[postgres@mycentos ~]# psql
Welcome to psql 8.2.4, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

postgres=#
postgres=#\q
[postgres@mycentos ~]#


なんか既にありまっす。ていわれたので、そのまま接続。できた。

■じゃー8.2.4のPostgreSQLをセットアップしてみる

rootで、まず自動起動用スクリプトをコピーする
[root@mycentos ~]# cp /home/postgres/postgresql-8.2.4/contrib/start-scripts/linux /etc/rc.d/init.d/postgres


作成したファイルに実行権をつけ、自動起動も設定しておく。
[root@mycentos ~]# chmod 755 /etc/rc.d/init.d/postgres
[root@mycentos ~]# chkconfig postgres on


PostgreSQL上のpostgresユーザのパスワードを設定
postgresユーザにスイッチし、psqlコマンドでPostgreSQLに接続後、パスワード設定する(7.4.17とはちょっと違うからね)
[root@mycentos ~]# su - postgres
[postgres@mycentos ~]# psql template1
Welcome to psql 8.2.4, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

template1=# alter role postgres with password 'ひみつー';
template1=# \q


次は、postgresql.confを編集し、TCP/IP経由でのデータベース接続許可する(7.4.17とはちょっと違うからね)
viの使い方はviを使い倒そうで覚えました。
[postgres@mycentos ~]# vi /usr/local/pgsql/data/postgresql.conf


listen_addresses = '*'を追加する
#---------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#---------------------------------------------------------------------------

# - Connection Settings -

#listen_addresses = 'localhost' # what IP address(es) to listen on;
listen_addresses = '*' # comma-separated list of addresses;
# defaults to 'localhost', '*' = all


次、pg_hba.confを編集し、リモートでの接続を許可する(7.4.17とはちょっと違うからね)
[postgres@mycentos ~]# vi /usr/local/pgsql/data/pg_hba.conf


ファイルの最後のとこを以下のように変更
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 0.0.0.0/0 password
# IPv6 local connections:
#host all all ::1/128 trust


ルートユーザに戻り、PostgreSQLを再起動する
[postgres@mycentos ~]# exit
[root@mycentos ~]# service postgres restart
service postgres restart
Restarting PostgreSQL: server stopped
ok


Autovacuumをお勧めします。とpgAdminⅢにいわれたので設定する
[root@mycentos ~]# su - postgres
[postgres@mycentos ~]# vi /usr/local/pgsql/data/postgresql.conf


stats_row_level = onにします
#---------------------------------------------------------------------------
# RUNTIME STATISTICS
#---------------------------------------------------------------------------

# - Query/Index Statistics Collector -

#stats_command_string = on
#update_process_title = on

#stats_start_collector = on # needed for block or row stats
# (change requires restart)
#stats_block_level = off
#stats_row_level = off
stats_row_level = on


autovacuum = onにします。
#---------------------------------------------------------------------------
# AUTOVACUUM PARAMETERS
#---------------------------------------------------------------------------

#autovacuum = off # enable autovacuum subprocess?
autovacuum = on # 'on' requires stats_start_collector
# and stats_row_level to also be on


ルートユーザに戻り、PostgreSQLを再起動する。これでAutovacuumが有効になりました。
[postgres@mycentos ~]# exit
[root@mycentos ~]# service postgres restart
service postgres restart
Restarting PostgreSQL: server stopped
ok


■バックアップデータを戻してみる

バックアップファイルをコピーしきて、リストアコマンドをたたく
[root@mycentos ~]# cd /var/lib/pgsql/
[root@mycentos ~]# cp postgresBK /home/postgres/postgresBK
[root@mycentos ~]# su - postgres
[postgres@mycentos ~]# psql -f postgresBK postgres
You are now connected to database "template1".
psql:postgresBK:11: ERROR: cannot delete from a view
HINT: You need an unconditional ON DELETE DO INSTEAD rule.
psql:postgresBK:13: NOTICE: SYSID can no longer be specified
CREATE ROLE
psql:postgresBK:20: ERROR: cannot delete from a view
HINT: You need an unconditional ON DELETE DO INSTEAD rule.
CREATE DATABASE
You are now connected to database "template1".
SET
SET
     ・
     ・
SET
CREATE TABLE
psql:postgresBK:131: NOTICE: CREATE TABLE will create implicit sequence "members_id_seq" for serial column "members.id"
CREATE TABLE
CREATE INDEX
psql:postgresBK:169: NOTICE: ALTER TABLE / ADD PRIMARY KEY will create implicit index "members_pkey" for table "members"
ALTER TABLE
setval
--------
2
(1 row)

SET
COMMENT


大事なデータじゃないし、なんかわからんけどOKとする。
無事リモートでも接続できた。SSHでもできた。

CentOSにRailsをインストール

Railsをインストール。

Ruby、RubyGemsのインストールが無事に終わったので、Railsをいれます。

■gemsコマンドでRailsをインストール

Ruby、RubyGems入ってる。
[root@mycentos ~]# gem -v
0.9.4
[root@mycentos ~]# ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [x86_64-linux]


gemsコマンド実行
[root@mycentos ~]# gem install rails


あらら、エラーがでた。
Bulk updating Gem source index for: http://gems.rubyforge.org
ERROR: While executing gem ... (Gem::GemNotFoundException)
Could not find rails (> 0) in any repository


ちょっと調べたら、引数をつけないと駄目なようでした。再度コマンド
[root@mycentos ~]# gem install rails --include-dependencies


うまくいった。
Bulk updating Gem source index for: http://gems.rubyforge.org
Successfully installed rails-1.2.3
Successfully installed rake-0.7.3
Successfully installed activesupport-1.4.2
Successfully installed activerecord-1.15.3
Successfully installed actionpack-1.13.3
Successfully installed actionmailer-1.3.3
Successfully installed actionwebservice-1.2.3
Installing ri documentation for rake-0.7.3...
Installing ri documentation for activesupport-1.4.2...
Installing ri documentation for activerecord-1.15.3...
Installing ri documentation for actionpack-1.13.3...
Installing ri documentation for actionmailer-1.3.3...
Installing ri documentation for actionwebservice-1.2.3...
Installing RDoc documentation for rake-0.7.3...
Installing RDoc documentation for activesupport-1.4.2...
Installing RDoc documentation for activerecord-1.15.3...
Installing RDoc documentation for actionpack-1.13.3...
Installing RDoc documentation for actionmailer-1.3.3...
Installing RDoc documentation for actionwebservice-1.2.3...
[root@mycentos ~]#


ブラウザで確認できるか簡単なWEBrickを起動してみる。
[root@mycentos ~]# mkdir raily
[root@mycentos ~]# cd raily
[root@mycentos raily]# rails hello
create
create app/controllers
      ・
      ・
      ・
create doc/README_FOR_APP
create log/server.log
create log/production.log
create log/development.log
create log/test.log
[root@mycentos raily]# cd hello
[root@mycentos hello]# ruby script/server
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2007-08-16 16:42:37] INFO WEBrick 1.3.1
[2007-08-16 16:42:37] INFO ruby 1.8.6 (2007-03-13) [x86_64-linux]
[2007-08-16 16:42:37] INFO WEBrick::HTTPServer#start: pid=16006 port=3000




ポート3000にアクセスし、無事に見れました。ポートを変えたいときは引数を付けて起動する例えば、--port=3210
Ctrl+CでWEBrickを停止する。

[2007-08-16 16:43:30] INFO going to shutdown ...
[2007-08-16 16:43:30] INFO WEBrick::HTTPServer#start done.
[root@mycentos hello]#

2007年8月16日木曜日

CentOSへRubyGemsをインストール

Rubyのインストールの次に。

Ruby on RailsをインストールするためにRubyの次に、RubyGemsの最新バージョンをインストール。

参考ページ
CentOS で構築する自宅サーバ

参考ページのまねで、checkinstall を使って RPM 化してからインストールする。

checkinstallを先に導入しておきます。

■RubyGemsの最新をインストール

2007年8月16日現在で最新バージョンはrubygems-0.9.4です。
最新版は RubyForgeで確認できます。

今回はwgetコマンドで最新バージョンをダウンロード
[root@mycentos ~]# wget http://rubyforge.org/frs/download.php/20989/rubygems-0.9.4.tgz


ソースの解凍、そしてできたディレクトリに移動します。
[root@mycentos ~]# tar zxvf rubygems-0.9.4.tgz
     ・
     ・
[root@mycentos ~]# cd rubygems-0.9.4


checkinstall を使って RPM 化します。
[root@mycentos rubygems-0.9.4]# checkinstall -R "ruby setup.rb"


以下の状態で止まります。デフォルトのパッケージドキュメントを作っていいかと聞かれます。作ってもいいのでそのまま Enter (デフォルトで Yes なので)を押します。
checkinstall 1.6.0, Cocheckinstall 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 write a description for the package.
End your description with an empty line or EOF.>>


パッケージの内容の確認がでます。ここで は11を入力します。で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: [ rubygems ]3 - Version: [ 0.9.4 ]4 - Release: [ 1 ]5 - License: [ GPL ]6 - Group: [ Applications/System ]7 - Architecture: [ x86_64 ]8 - Source location: [ rubygems-0.9.4 ]9 - Alternate source location: [ ]10 - Requires: [ ]11 - Provides: [ rubygems ]
Enter a number to change any of them or press ENTER to continue:


Rubyと関連付けが必要なのでrubyと入力します。でEnter。

Enter a number to change any of them or press ENTER to continue:11
Enter the additional requirements: >>


最後にまた同じパッケージの内容の確認がでます。11のところがrubyになっているのが確認できます。
ここで Enter を押すと RPM の作成処理が始まります。
Enter the additional requirements: >>ruby

This package will be built according to these values:
1 - Summary: [ Package created with checkinstall 1.6.0 ]2 - Name: [ rubygems ]3 - Version: [ 0.9.4 ]4 - Release: [ 1 ]5 - License: [ GPL ]6 - Group: [ Applications/System ]7 - Architecture: [ x86_64 ]8 - Source location: [ rubygems-0.9.4 ]9 - Alternate source location: [ ]10 - Requires: [ ruby ]11 - Provides: [ rubygems ]
Enter a number to change any of them or press ENTER to continue:



RPM の作成処理が始まりました。うまくいきました。

Installing with ruby setup.rb...

========================= Installation results ===========================---> bin
<--- bin
---> lib
    ・
    ・
    ・
<--- lib/rubygems/digest
<--- lib/rubygems
<--- lib
Successfully built RubyGem
Name: sources
Version: 0.0.1
File: sources-0.0.1.gem
Removing old RubyGems RDoc and ri...
Installing rubygems-0.9.4 ri...
Installing rubygems-0.9.4 rdoc...

As of RubyGems 0.8.0, library stubs are no longer needed.
Searching $LOAD_PATH for stubs to optionally delete (may take a while)...
...done.
No library stubs found.


======================== Installation successful ==========================
Copying documentation directory...
./
./TODO
./README
./doc/
./doc/makedoc.rb
./doc/doc.css
./ChangeLog

Copying files to the temporary directory...OK
Striping ELF binaries and libraries...OK
Compressing man pages...OK
Building file list...OK
Building RPM package...OK
NOTE: The package will not be installed
Erasing temporary files...OK
Writing backup package...OK
Deleting temp dir...OK

**********************************************************************

Done. The new package has been saved to

/usr/src/redhat/RPMS/x86_64/rubygems-0.9.4-1.x86_64.rpm
You can install it in your system anytime using:

rpm -i rubygems-0.9.4-1.x86_64.rpm
**********************************************************************


作成された RPM をインストールします。
[root@mycentos rubygems-0.9.4]# rpm -ivh /usr/src/redhat/RPMS/x86_64/rubygems-0.9.4-1.x86_64.rpm
Preparing... ########################################### [100%]
1:rubygems ########################################### [100%]


後片付けをします。別にしなくてもいいけど。
[root@mycentos rubygems-0.9.4]# rm /usr/src/redhat/RPMS/x86_64/rubygems-0.9.4-1.x86_64.rpm
[root@mycentos rubygems-0.9.4]# cd
[root@mycenos ~]# rm -rf rubygems-0.9.4*


参考ページのおかげで、エラー無く無事終了。最後にGemsのバージョンを確認。
[root@mycentos ~]# gems -v
0.9.4


そういえば、いちどzlibがないってエラーがでたきがする・・。
/usr/local/lib/ruby/site_ruby/1.8/rubygems/remote_fetcher.rb:4:in `require': no such file to load -- zlib (LoadError)


zlib がいるらしい。こちらのページを参考にしました。てかそのまま。
[root@mycenos ~]# yum install zlib-devel


続けて、
[root@mycenos ~]# cd ruby-1.8.6/ext/zlib
[root@mycenos zlib]# ruby extconf.rb --with-zlib-include=/usr/include --with-zlib-lib=/usr/lib
[root@mycenos zlib]# make
[root@mycenos zlib]# make install


これでいけたと思う。

追伸
もともと古いRubyやGemsがインストールされていて、古いの削除→最新をインストールとしてた場合、rubyやgemsを作成する場所を変えたら、インストール後にruby -vやgems -vを打っても、みつかんないよそんなもの~(英語)ていわれます。そのときは、一度ログアウトします。そしたら、パスが反映されました。これで半日ハマったし。

2007年8月6日月曜日

checkinstall の導入

Rubyをインストールする前に。

tar ボール(拡張子が tar.gz や tgz などのソースアーカイブファイル)からインストールの方法が良くわからない。
checkinstall は tar ボールからのインストールを監視して RPM を作ってくれる便利なツールです。

参考ページ
CentOS で構築する自宅サーバ

■checkinstallのインストール

checkinstall は yum でインストールできるので簡単です。
[root@mycentos ~]# yum --enablerepo=rpmforge install checkinstall


以下の状態で止まります。いいかい?ってきかれてるのでyでEnter。
Loading "fastestmirror" plugin
Setting up Install Process
Setting up repositories
Loading mirror speeds from cached hostfile
Reading repository metadata in from local files
Excluding Packages in global exclude list
Finished
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for checkinstall to pack into transaction set.
checkinstall-1.6.0-3.el4. 100% |=========================| 4.8 kB 00:00
---> Package checkinstall.x86_64 0:1.6.0-3.el4.rf set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
checkinstall x86_64 1.6.0-3.el4.rf rpmforge 82 k

Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 82 k
Is this ok [y/N]:


これでComplete!だそうです。
Downloading Packages:
(1/1): checkinstall-1.6.0 100% |=========================| 82 kB 00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: checkinstall ######################### [1/1]

Installed: checkinstall.x86_64 0:1.6.0-3.el4.rf
Complete!


ちなみに、わたしは【yum --enablerepo=rpmforge install checkinstall】でエラーになりました。
checkinstall は RPMForge のリポジトリを yum リポジトリに追加していなければならないそうです。
CentOS5の場合は、【el4】を【el5】にする。
[root@mycentos ~]# wget http://dag.wieers.com/packages/rpmforge-release/rpmforge-release-0.3.6-1.el4.rf.i386.rpm
[root@mycentos ~]# rpm -Uhv rpmforge-release-0.3.6-1.el4.rf.i386.rpm


参考ページにしたがって、
無用の混乱を避けるため、デフォルトでは有効にならないように設定ファイルを修正します。
[root@mycentos ~]# vi /etc/yum.repos.d/rpmforge.repo


viの使い方はviを使い倒そうで覚えました。
enabled = 1
  ↓
enabled = 0


またまた参考ページにしたがって、
次に RPM の署名を検証するためのキーを導入します。
[root@mycentos ~]# wget http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
[root@mycentos ~]# rpm --import RPM-GPG-KEY.dag.txt


これで設定は完了です。今後、RPMforge のリポジトリを使いたい場合は以下のように「--enablerepo=rpmforge」をつけます。
ちなみに以下は、RPMforge のものも含めたパッケージのリストを表示します。
なにやら、いっぱい表示されます。
[root@mycentos ~]# yum --enablerepo=rpmforge list


また、パッケージ認証用のキーをインストールするかきかれるのでそのときはyで応答します。
Importing GPG key 0x6B8D79E6 "Dag Wieers (Dag Apt Repository v1.0) "
Is this ok [y/N]:


これで【yum --enablerepo=rpmforge install checkinstall】がうまくいきます。

CentOS という Linux へ Ruby をインストール

Rubyの最新バージョンをインストール

Ruby on Railsをインストールするためにまず、Rubyの最新バージョンをインストール。
Ruby on Rails が求める Ruby のバージョンは 1.8.2 以上です。(※現在2007/08)
もともと、1.8.1がインストールされていたので、削除して、1.8.6をインストールします。

参考ページ
CentOS で構築する自宅サーバ

参考ページのまねで、checkinstall を使って RPM 化してからインストールする。

checkinstallを先に導入しておきます。

■Rubyの確認

rubyがあるか確認
[root@mycentos ~]# ruby -v


1.8.1がインストールされてます。
[root@mycentos ~]# ruby 1.8.1 (2003-03-13 patchlevel 0) [x86_64-linux]


インストールされてなければ、以下のように表示される。
[root@mycentos ~]# rubyなんてないよ(英語で)


参考ページにしたがって、ruby1.8.1をアンインストールする。
[root@mycentos ~]# yum remove ruby-libs


■Rubyの最新をインストール

2007年8月6日現在で最新バージョンはruby1.8.6です。
最新版は Ruby の公式ページで確認できます。

今回はwgetコマンドで最新バージョンをダウンロード
[root@mycentos ~]# wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6.tar.gz


ソースの解凍、そしてできたディレクトリに移動します。
[root@mycentos ~]# tar zxvf ruby-1.8.6.tar.gz
     ・
     ・
[root@mycentos ~]# cd ruby-1.8.6


Ruby をビルドします。checkinstall を使って RPM として管理するので、「--prefix=/usr/local」をつけてインストール先を /usr/local にします。
理解してません。参考ページのいいなりです。
[root@mycentos ruby-1.8.6]# ./configure --prefix=/usr/local
     ・
     ・
[root@mycentos ruby-1.8.6]# make
     ・
     ・


checkinstall を使って RPM 化します。
Ruby は「make install」でインストールするとインストールしたファイルを参照しながらインストール処理を続けるので、そのような場合は 「--fstrans=no」オプションをつける必要があります。
理解してません。参考ページのいいなりです。
[root@mycentos ruby-1.8.6]# checkinstall --fstrans=no


以下の状態で止まります。デフォルトのパッケージドキュメントを作っていいかと聞かれます。作ってもいいのでそのまま Enter (デフォルトで Yes なので)を押します。
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]:


続いてパッケージタイプを聞かれます。RPM なので r を入力します。
Preparing package documentation...OK
Please choose the packaging method you want to use.Slackware [S], RPM [R] or Debian [D]?


パッケージの詳細の入力を求められます。別によそに提供するわけでもないので、何も入力せずに Enter で良いそうです。
Please write a description for the package.
End your description with an empty line or EOF.>>


最後にパッケージの内容の確認がでます。ここで Enter を押すと RPM の作成処理が始まります。
**************************************
**** 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 ]3 - Version: [ 1.8.6 ]4 - Release: [ 1 ]5 - License: [ GPL ]6 - Group: [ Applications/System ]7 - Architecture: [ x86_64 ]8 - Source location: [ ruby-1.8.6 ]9 - Alternate source location: [ ]10 - Requires: [ ]11 - Provides: [ ruby ]
Enter a number to change any of them or press ENTER to continue:


RPM の作成処理が始まりました。うまくいきました。

Installing with make install...

========================= Installation results ===========================./miniruby ./instruby.rb --dest-dir="" --extout=".ext" --make="make" --mflags="" --make-flags="" --installed-list .installed.list --mantype="doc"
installing binary commands
installing command scripts
installing library scripts
installing headers
installing manpages
installing extension objects
installing extension scripts

======================== Installation successful ==========================
Copying documentation directory...
./
./README.ja
./README.EXT.ja
./COPYING
./COPYING.ja
    ・
    ・
Building RPM package...OK
NOTE: The package will not be installed
Erasing temporary files...OK
Deleting doc-pak directory...OK
Writing backup package...OK
Deleting temp dir...OK

**********************************************************************

Done. The new package has been saved to

/usr/src/redhat/RPMS/x86_64/ruby-1.8.6-1.x86_64.rpm
You can install it in your system anytime using:

rpm -i ruby-1.8.6-1.x86_64.rpm
**********************************************************************


作成された RPM をインストールします。【rpm -i ruby-1.8.6-1.x86_64.rpm】て書かれてるけど、参考ページにしたがって
[root@mycentos ruby-1.8.6]# rpm -Uvh /usr/src/redhat/RPMS/x86_64/ruby-1.8.6-1.x86_64.rpm
Preparing... ########################################### [100%]
1:ruby ########################################### [100%]


後片付けをします。別にしなくてもいいけど。
[root@mycentos ruby-1.8.6]# rm /usr/src/redhat/RPMS/x86_64/ruby-1.8.6-1.x86_64.rpm
[root@mycentos ruby-1.8.6]# cd
[root@mycentos ~]# rm -rf ruby-1.8.6*


参考ページのおかげで、エラー無く無事終了。最後にRubyのバージョンを確認。
[root@mycentos ~]# ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [x86_64-linux]