‘Linux’ カテゴリーのアーカイブ

PHP:PECL::ssh2のインストール

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

PHPでssh2を使う必要が出てきた。
方法としては、PECL::ssh2をインストールしておけばよいらしい。
依存ライブラリとして、libssh2が必要なので、yumにてlibssh2をインストールしておく。
libssh2-develはいらないかもしれない。

yum -y install libssh2 libssh2-devel

その後、peclコマンドでssh2拡張をインストールする。

pecl install ssh2
downloading ssh2-0.11.0.tgz ...
Starting to download ssh2-0.11.0.tgz (22,884 bytes)
........done: 22,884 bytes
5 source files, building
running: phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
 1. libssh2 prefix? : /usr

1-1, 'all', 'abort', or Enter to continue: all # libssh2.soへのprefixが/usrではない場合、修正
libssh2 prefix? [/usr] : /usr/lib
 1. libssh2 prefix? : /usr/lib
1-1, 'all', 'abort', or Enter to continue: # 何も入力せずにenterを押す
# インストールが始まる
...
# インストール完了通知
Build process completed successfully
Installing '/usr/lib/php/modules/ssh2.so'
install ok: channel://pear.php.net/ssh2-0.11.0

ssh2.soがインストールされたので、権限を変更する

chmod 755 /usr/lib/php/modules/ssh2.so

php.iniを修正してextensionを組み込む。自分の環境では、extensionの組み込みが外部ファイル化してあったので、そちらを修正する。gd.iniとかをコピーしてssh2.iniを作り、それを修正した。その後は、apacheの再起動を行う。

cd /etc/php.d
cp gd.ini ssh2.ini
vi ssh2.ini
# gdをssh2に変更
extension=gd.so
↓
extension=ssh2.so
# 編集終了

# apacheの再起動
service httpd restart

これで、phpinfo()を確認したところ、ssh2が組み込まれていたのでOK!!


Linux:cp -f で上書きできないに対処!

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

急遽、CentOS上でディレクトリをごっそりと上書きしなければならなくなったのですが、

cp -Rf hoge_bk/* hoge/

って書いたら、上書き確認が出てきた。それを出さないためのオプションがfなんじゃないの?
上書き対象のファイルがあまりにも膨大だったため、ctrl + cでキャンセルして、
なんで強制上書きできないのか調査してみたら、書いてあった。VineのMLだけど。

http://search.luky.org/vine-users.7/msg02407.html

alias cp
alias cp="cp -i" # エイリアスとしてcp="cp -i"になってる

だってさ。iオプションは、上書き確認をするっていうオプションなわけなので、勝手に上書きにならないようにエイリアスで強制確認するようになってたというわけです。
ホームディレクトリにある.bashrcファイルを編集して、cpについているエイリアスをコメントアウトすれば終了です!


CentOS: MondoRescueの導入

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

CentOS5.4でのMondo Resqueのインストール方法を書いとく。

最初に楽をしようと思ってyumでのインストールを試みた。すると、remiやepelのyumリポジトリを入れてると、Mondo Resqueをyumでインストールできる。しかし、バックアップ中にこけた。なので、素直にMondo Rescueのサイトからrpmをダウンロードする。

参考サイトは以下より。
Mondo Rescue 丸ごとバックアップ

ISOファイルを作るので、mkisofsを入れる。
また、高速圧縮で使うlzo, lzopを入れる。
cdrecordを入れて、バックアップメディアに焼けるようにする。
(しかし、自分のはDVD-RWドライブが壊れたので意味なかった。合掌!)
そしてMondo Resqueに必要なファイル群をDLして、一気にインストール!

yum -y install mkisofs cdrecord lzo lzop
wget ftp://ftp.mondorescue.org/rhel/5/afio-2.4.7-1.i386.rpm
wget ftp://ftp.mondorescue.org/rhel/5/buffer-1.19-1.i386.rpm
wget ftp://ftp.mondorescue.org/rhel/5/mindi-2.0.7-1.rhel5.i386.rpm
wget ftp://ftp.mondorescue.org/rhel/5/mindi-busybox-1.7.3-1.rhel5.i386.rpm
wget ftp://ftp.mondorescue.org/rhel/5/mondo-2.2.9-1.rhel5.i386.rpm
rpm -ivh *.rpm

ここまででインストールは完了!

次に、フルバックアップを取る。
バックアップ先ディレクトリを作成。

mkdir /backup
mondoarchive -Oi -L -d /backup -E /backup -s 4700m

オプションの説明は、

  • -O バックアップ
  • -i ISOイメージ
  • -L lzoで圧縮
  • -d バックアップ先ディレクトリ名
  • -E バックアップ除外ディレクトリ名
  • -s ISOファイルの分割サイズ ここでは4700MBを指定

ずっと待ってると、/backupに、バックアップされたisoイメージが作成される。
あとはそれをDVDメディアに焼くだけです。
自分の場合はDVDドライブが死んでたので、バックアップしたのに意味なし!
外付けDVDドライブ買うしかない!!

あとはUSBにもバックアップできるらしいので、
cronでバックアップ運用するのもありでしょう。


CentOS:Mondo ResqueによるP2Pリストア(実験中)

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

会社で使っているRedMine,Subversion用のサーバを今より高機能のサーバに移設してもよいよという許可が下りたので、それを楽にするためにMondo Rescueを使ってみることにした。Mondo Resqueは様々なデバイスにバックアップを取ることが可能、かつ、フルバックアップ可能で、しかもハードウェア環境に依存せずにサーバを移動させることができるということだった!ここに惚れた!

インストールについては、日を改めて書くとして、今は、P2P(Physical to Physical)リストアが成功したので、その方法を刻む。

■移動元のサーバ構成
Pen4 1.4G
メモリ 512MB
HDD 40GB

■移動先のサーバ構成
PenD 2.0G
メモリ 2GB
HDD 500GB

【参考URL】
Mondo Rescueを使ってXenServerの仮想ホストへ

KnoppixなどのCDブートLinuxで、移動先サーバのHDDを初期化する。

fdisk /dev/sda
----以下 fdiskコマンド----
Command (m for help): n
Command action: p
Partition number (1-4): 1
First cylinder : enter
Last cylinder: +256M

Command (m for help): n
Command action: p
Partition number (1-4): 2
First cylinder : enter
Last cylinder: enter

Command (m for help): t
Partition number (1-4): 2
Hex Code: 8e

Command (m for help): a
Partition number (1-4): 1

Command (m for help): p
# 構成を確認

Command (m for help): w
----ここまで----

パーティションの作成ができたので、次はLVMで論理ボリュームを作成する。
ボリュームグループ名は、移動元のボリュームグループ名にしておく。

# 物理ボリュームの作成
pvcreate /dev/sda2
pvdisplay /dev/sda2

# ボリュームグループの作成
vgcreate VolGroup00 /dev/sda2
vgdisplay

# 論理ボリュームの作成
lvcreate -L 38912m -n LogVol00 VolGroup00
lvcreate -L 2048m -n LogVol01 VolGroup00
lvdisplay /dev/VolGroup00/LogVol00
lvdisplay /dev/VolGroup00/LogVol01

# 各パーティションのフォーマット
mkfs.ext3 -j /dev/sda1
mkfs.ext3 -j /dev/VolGroup00/LogVol00
mkswap /dev/VolGroup00/LogVol01

以上が、Knoppixでの作業。

次に、mondoarchiveコマンドで作成されたisoファイルをDVDに焼いて、移動先サーバをDVDでブートする。
boot:と表示されたところで、

interactive ramdisk_blocksize=1024 quiet textonly

で起動させる。(別に、expertでも大丈夫だと思うけど。)

DVDからリストアを選択。
mountlistの書き換えを行う。
移動元がhdaだったので、移動先のsdaに書き換えを行う。

Device                    Mountpoint   Format   Size(MB)
/dev/sda2                 lvm          lvm        0
/dev/VolGroup00/LogVol00  /            ext3       0
/dev/sda1                 /boot        ext3       0
/dev/VolGroup00/LogVol01   swap        swap       0
---

Are you sure want to save your mountlist and continue?: yes

Do you want to erase and partition your hard drivers?: no

Do you want to format your hard drivers?: no

Do you want to restore all of your data?: yes

Initiarize the boot loader?: yes

Did you change the mountlist?: yes

# あと何種類かあったが、思い出せない…
# multipath.confを修正しろとか。でも、何も書き換えずにすぐq!で終了。
# mkinitrd -f -v initrd-2.6.x.y.img 2.6.x.yみたいなのをしろとかあった。

# fstabで書き換え
vi /etc/fstab
LABEL=/boot → /dev/sda1

# grubのパスを変える
grub-install --recheck /dev/sda
grub-install /dev/sda

cd /boot
mkinitrd -f -v initrd-2.6.18.164.6.1.el5.centos.plus.img 2.6.18.164.6.1.el5.centos.plus

# 再起動。-fがないと再起動しなかったので、-fを付けた。
reboot -f

走り書きで書いたが、こんな感じだった。
うまくP2Pでサーバの移設ができたっぽい。ハードウェア構造が全く異なるのに、OSが動いて感動。実際は、grubのあたりでいろいろとトラブったんで、すごく感動した。
今回は実験だったので、本番移設はまだだが、この経験を生かしたい。


CentOS:yumでImageMagick2をインストール

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

RedMineでRMagickの使用可能状態が×になっていたので、RMagickをインストールするためにImageMagickをインストールすることにした。そうしたら、ImageMagickではなく、ImageMagick2をインストールしたほうがよさそうだという情報を得た。

yumのリポジトリにremiとepelを追加する。

wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
rpm -Uvh epel-release-5-3.noarch.rpm
wget http://rpms.famillecollet.com/el5.i386/remi-release-5-6.el5.remi.noarch.rpm
rpm -Uvh remi-release-5-6.el5.remi.noarch.rpm

remiのenabledを1にしておく

vi /etc/yum.repos.d/remi.repo
enabled=1

ImageMagick2とRMagickをインストールする。

yum -y install ImageMagick2 ImageMagick2-devel
gem install rmagick

ちなみに、この状態でyumでupdateをしたら、phpのバージョンが5.3になった。
まぁ、5.3って使ったことないけど、そのままにしてみるか。


Apache:画像やCSSやjavascriptのログを出さない

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

久々にメモってことで。
開発してると、画像とかCSSとかJSのファイルのログに、見たいログが埋もれてしまう時がある。
httpd.confをちょっと修正するだけでこれは解消される。

Apacheのログに、余計なログを出さないように設定する方法。

CustomLog logs/access_log combined env=!nolog

SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(css)|(js)$" nolog

あとは、apacheを再起動して終了!


RedMine:アップグレードに失敗したのちに復旧

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

会社の開発用サーバに入れているRedMineのバージョンアップを試みたが失敗したので、その軌跡を書いておく。

まず、RedMine 0.8.4 にしようとして、svn updateをしてRedMineのソースを最新版にした後に、rubyのバージョンが1.8.7でないといけないことに気付いた。CentOS5.3でyumを使ってrubyをインストールすると1.8.5が入ってしまい、バージョンアップが必要となった。そこで、rubyのバージョンアップを行った。

参考にしたサイト:http://d.hatena.ne.jp/amacou/20090409/1239245934

まず、yumで必要なものをインストール

yum install gcc
yum install zlib-devel
yum install rpm-build
yum install openssl-devel
yum install readline-devel
yum install nkf
yum install mysql-devel

次に、今まで使っていたrubyとおさらばする。

yum remove ruby

次に、ruby-1.8.7をインストールする

wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p174.tar.bz2
tar xfj ruby-1.8.7-p174.tar.bz2
cd ruby-1.8.7-p174
./configure --prefix=/usr --with-install-readline
make
checkinstall --fstrans=no

バージョン違いのものが残っていたらいけないからだと思うが、rubyにまつわるものを消しとく。

rm -rf /usr/bin/ruby
rm -rf /usr/lib/ruby

で、さっき作ったrubyのRPMをインストールする。

rpm -ivh /usr/src/redhat/RPMS/i386/ruby-1.8.7-p174-1.i386.rpm

次に、RubyGemsをインストール。最新版の1.3.5にした。

wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.5.tgz
tar xfz rubygems-1.3.5.tgz
cd rubygems-1.3.5
checkinstall -R "ruby setup.rb"
rpm -ivh /usr/src/redhat/RPMS/i386/rubygems-1.3.5-1.i386.rpm

ここで、Railsのインストール。バージョンを指定しないと、最新版が入ってしまうので注意。RedMine 0.8.4は、2.2.2が指定されているので、とりあえずそれを入れてみた。

gem install rails -v=2.2.2

ここで、ようやくRedMineのアップグレードを行う。
データベースのバックアップは必須!!私は毎日自動でバックアップをするシェルスクリプトを組んでたので、今回は助かった。
svnからチェックアウトしている前提です。

参考にしたのは、RedMine.JPのアップグレード方法です。

svn update
rake db:migrate RAILS_ENV=“production”
rake tmp:cache:clear
rake tmp:sessions:clear

アプリケーションを再起動後、権限のあたりを修正ということだったので、Apacheを再起動したら、RedMineがInternal Server Errorになった…。ここからが悲劇の始まりだった。(いろいろやって記憶が曖昧なので、情報が違う可能性がありますがご容赦ください)

まず、何が悪いのかわからない。.htaccessを見る限り、俺がRedMineをインストールしたのはFastCGIを使っている状態で、Passengerを使ってなかったので、それが原因かなぁと思った。入門RedMineに、よほどのことがない限りはPassengerのほうがいいよと書いてあったので、Passengerに変更しようとした。

Passengerをインストールした。

gem install passenger

その後、Passengerモジュールをインストール。

passenger-install-apache2-module

Passenger用にApacheのconfファイルを作成しておく。
/etc/httpd/conf.d/passenger.confを作成。conf.dにある*.confは自動的に読み込まれるようにしてあるのが前提。

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.4/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.4
PassengerRuby /usr/bin/ruby

RedMineはサブディレクトリで運用していたので、/etc/httpd/conf.d/redmine.confに以下を追加した(redmine.confは私が作成しただけで、普通にあるわけではない。しかも、FastCGI用の設定を書いていた)。

# PassengerでサブディレクトリのRedMineを動かすため
RailsBaseURI /redmine

# その後、FastCGIで設定していたものなどをコメントアウト
# ただし、それらがあっていたかはわからない。

Apacheを再起動したが、駄目。RedMineのpublicディレクトリの.htaccessを修正しても、駄目。1日かけて作業をしたのだが、RedMineのアップグレードができなかったので、元に戻すことにした…。

まず、既存のRedMineディレクトリをバックアップしておく。
その後、svnで自分が使っていたRedMineのバージョンをチェックアウトする。自分が使ってたのは、RedMine-0.7.0。
バックアップしていたRedMineから設定ファイル(database.yml, email.ymlなど)をコピーする。
データベースからテーブルを削除して、バックアップデータから復元する。(phpmyadmin経由で)
ruby-1.8.7, RubyGems-1.3.5を削除する。

rpm -e rubygems
rpm -e ruby-1.8.7
rm -rf /usr/lib/ruby

yumで、ruby-1.8.5を再インストールする。

yum -y install ruby ruby-devel ruby-irb ruby-rdoc ruby-ri

RubyGems-1.3.5を再インストールする。

cd rubygems-1.3.5
checkinstall -R "ruby setup.rb"
rpm -ivh /usr/src/redhat/RPMS/i386/rubygems-1.3.5-1.i386.rpm

Railsのインストール。0.7.0では、Rails 2.0.2を指定する。
あと、fcgiも入れとく。

gem install rails -v=2.0.2
gem install fcgi

以前のredmine.confとpublicディレクトリ以下の.htaccessを以前のものに戻して、Apacheの再起動をしたら、見事に復旧した。とりあえず、ほっとした。ただ、1日何やってたんだろうという徒労感だけは半端なかったけど、データのバックアップって大事だなぁと痛感されられた。アップグレードできなかった原因はまた後日、余裕があるときにやろうと思う。


WinSCPでバッチ処理を行う

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

会社で使ってるプロジェクト管理ツールのRedMineのバックアップを全然やってなかったので、さすがにそろそろバックアップしとくかということで、シェルスクリプトを書いた。あんまりシェルスクリプト書かないので、こういう書き方が正しいのかはわからないが、一応動いているので、メモとして残しておく。ちなみに、運用として、日付でバックアップしていくとどんどん増殖していくので、7日分もあれば十分だろうと思われるので、曜日で管理する。また、ファイルサイズも大したことなかったので、非圧縮である。

まずは、シェルスクリプトを書く。

vi redmine-backup.sh
#!/bin/bash

#Apacheの停止
service httpd stop > /dev/null

# RedMineのファイルディレクトリを指定
ATTATCHDIR=/path/to/files

# バックアップ先ディレクトリを指定
BACKDIR=/path/to/backup

# MySQLrootパスワード
ROOTPASS=********

# 曜日を取得
int_youbi=`date +%w`

case "$int_youbi" in
# 日曜日
0)
        youbi="sun"
        ;;
# 月曜日
1)
        youbi="mon"
        ;;
# 火曜日
2)
        youbi="tue"
        ;;
# 水曜日
3)
        youbi="wed"
        ;;
# 木曜日
4)
        youbi="thu"
        ;;
# 金曜日
5)
        youbi="fri"
        ;;
# 土曜日
6)
        youbi="sut"
        ;;
esac

# MySQLのredmineデータベースのバックアップ
mysqldump -u root -p$ROOTPASS redmine > $BACKDIR"/redmine_"$youbi".dump"
# RedMineのファイルディレクトリのバックアップ
rsync -a $ATTACHDIR $BACKDIR > /dev/null

# ファイルの持ち主をWinSCP接続するユーザに変更
chown -R hoge. $BACKDIR
# Apacheの起動
service httpd start

これで、RedMineのバックアップを取るシェルスクリプトが出来た。
次に、rootのみの権限に変更した。

chmod 700 redmine-backup.sh

これを、cronに登録する。

echo "0 5 * * * root /root/redmine-backup.sh" > /etc/cron.d/backup

ここからWindows側の作業。
さきほどのシェルスクリプトで保存したデータをWindows側に自動に保存する。
通信方法はSSH。SSHクライアントとしてWinSCPを使う。

参考情報はこちら:WinScpをWindowsバッチで自動的に動かす方法

まずは、バッチファイルを作成する。ファイル名は、redmine.batとでもする。
ユーザ名とホスト名は、事前にWinSCP側に登録しておくこと。
/scriptで指定するファイルに、WinSCPに行わせる作業を記述する。

"C:\Program Files\WinSCP\WinSCP.exe" username@hostname /console /script=.\redmine.scr

次に、redmine.scrを記述する。
バッチ処理なので、上書き確認などはしないようにする。
バックアップ先は、E:\backup\redmineとする。

option batch on
option confirm off
option transfer binary
cd /path/to/backup/
lcd "E:\backup\redmine"
get -preservetime * .\
close
exit

redmine.batを実行してみて、ちゃんとダウンロードできたか確認する。
バックアップがダウンロードできているようだったら、
コントロールパネル > タスク > スケジュールされたタスクの追加
より、RedMineバックアップ用のタスクを作成する。基本的に1日1回だろうから、システム起動時に自動的にDLさせるようにしておいた。これで、RedMineサーバが故障してもデータの心配はなくなったと思われる。(サーバと俺のPCが同時にお亡くなりになったら終了だが。。。)