UNIX/Linuxの最近のブログ記事

Clam AV(Anti Virus)のDaily ScanがCPU(Disk I/O)を喰って重いので、とりあえずnice値を下げる。

#!/bin/bash

PATH=/usr/bin:/bin

# clamd update
yum -y update clamd > /dev/null 2>&1

# excludeopt setup
excludelist=/root/clamscan.exclude
if [ -s $excludelist ]; then
for i in `cat $excludelist`
do
if [ $(echo "$i"|grep \/$) ]; then
i=`echo $i|sed -e 's/^\([^ ]*\)\/$/\1/p' -e d`
excludeopt="${excludeopt} --exclude-dir=$i"
else
excludeopt="${excludeopt} --exclude=$i"
fi
done
fi

# signature update
freshclam > /dev/null

# virus scan
CLAMSCANTMP=`mktemp`
nice -n 19 clamscan --recursive --remove ${excludeopt} / > $CLAMSCANTMP 2>&1
[ ! -z "$(grep FOUND$ $CLAMSCANTMP)" ] && \

# report mail send
grep FOUND$ $CLAMSCANTMP | mail -s "Virus Found in `hostname`" harahoro.hirehare@gmail.com
rm -f $CLAMSCANTMP

ついでに、/etc/cron.daily/* の実行時間も変更。
サーバが米国中西部標準時(-0600)で動作しているので、9時間ほど後ろにずらしてみた。

# vi /etc/crontab

PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 13 * * * root run-parts /etc/cron.daily
22 13 * * 0 root run-parts /etc/cron.weekly
42 13 1 * * root run-parts /etc/cron.monthly

Dom0からしか時刻を更新できないというXenの仕様で、ずっと嵌りっぱなし。
今日もタイムゾーンはCDTのまま。

パラメタの変更が必要らしいですが。

# echo 1 >/proc/sys/xen/independent_wallclock

or
vi /etc/sysctl.conf
xen.independent_wallclock = 1

してから
/usr/sbin/timeconfig

だの
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

しても、
# date

Sat Aug 16 15:00:03 CDT 2008

何故でしょう。

アホほどのデータがある猫関連画像&動画をサーバ側にバックアップ。
とりあえずはWebDAVではじめてみたものの、復旦大学で情報科学を学んだ割にはPCもろくに触れない嫁にはハードルが高く、写真の整理がコチラの仕事になりそうだったので、AjaXplorerを入れてみた。

良い。

ajaxplorer1.JPG

セキュリティの面も含め、最近叩かれがちなPHP製のWebファイラ。

ajaxplorer2.JPG

名前の通りAjaxなインタフェースで、Windowsのエクスプローラライクな操作感。
日本語ファイル名こそ表示されないものの、操作自体には問題なし。
これなら嫁でも大丈夫。
ちょっと日本語化に挑戦してみよう。

Perlモジュールのインストールといえば、perl -MCPAN -e shellが定番。依存関係も(ある程度は)自動解決してくれます。
しかし、当然ながらRPM管理の埒外としてインストールされてしまいます。

これから、Plaggerをインストールするのですが、コレもRPM管理できないかなということで探してきたのが、PerlのCPANモジュールをRPM化してくれるcpan2rpm
あ、勿論、rpmforgeにあるヤツはyum install --enablerepo=rpmforge でも良いです。コチラの方がupdateが容易でしょう。

Plaggerは残念ながらrpmforgeには無さそうなのですよ。


# yum list --enablerepo=rpmforge | grep -i plagger
#

■cpan2rpmのインストール


% wget http://jaist.dl.sourceforge.net/sourceforge/cpan2rpm/cpan2rpm-2.027-1.src.rpm
# rpmbuild --rebuild cpan2rpm-2.027-1.src.rpm
# rpm -Uvh /usr/src/redhat/RPMS/noarch/cpan2rpm-2.027-1.noarch.rpm

使い方は、パッケージを指定するだけ。例えば、

# cpan2rpm Test::Base

みたいな感じ。自動的にCPANからtarballを取ってきて、RPMとSRPMを作成してくれます。
依存関係の不足は表示されるので、yum install --enablerepo=rpmforgecpan2rpmで解決してあげればよいでしょう。

うまく使い分ければ相当に便利そう。

これまで8GBのVPSでも、Web関連のキャッシュ&ログに気をつけている限りは容量を使い切れなかったのに、今のサービスは50GB。

というわけで、総容量が10GBを超えそうな猫写真&猫動画のバックアップ領域を嫁に提供するべくWebDAVの設定。

GETで取得したquery文字列に含まれる日本語が化ける問題に対応するパッチというのも当ててみた。

CentOS5の場合、標準でWebDAVモジュールは入っているので、mod_encodingでの日本語対応と、httpd.confでの設定のみでOK.

先ずは材料として、WebDAV Resources JPのダウンロードページから、


と、先ほどのGETで取得したquery文字列に含まれる日本語が化ける問題に対応するパッチ(以下、mod_encoding-20020611a-safequery.patch
)
を用意。

■インストール


$ gunzip -dc mod_encoding-20021209.tar.gz | tar xvf -
$ cd mod_encoding-20021209
$ ./configure --with-apxs=/usr/sbin/apxs
$ cp ../mod_encoding.c.apache2.20040616 mod_encoding.c
$ patch -p0 < ../mod_encoding-20020611a-safequery.patch
$ cd lib

$ ./configure
# make
# make install
# cd ..
# make
# gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -L/usr/local/lib -Llib -liconv_hook
# cp mod_encoding.so /etc/httpd/modules/
# ln -s /usr/local/lib/libiconv_hook.so /usr/lib/httpd/libiconv_hook.so.1

■設定

# vi /etc/httpd.conf

<IfModule mod_encoding.c>
  EncodingEngine        on
  SetServerEncoding     UTF-8
  DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
  AddClientEncoding "Microsoft .* DAV 1.1" ASCII CP932 UTF-8
  AddClientEncoding "Microsoft .* DAV" UTF-8 CP932
  AddClientEncoding "(Microsoft .* DAV $)" UTF-8 CP932
  AddClientEncoding "(Microsoft .* DAV 1.1)" CP932 UTF-8
  AddClientEncoding "Microsoft-WebDAV*" UTF-8 CP932
  AddClientEncoding "RMA/*" CP932
  AddClientEncoding "xdwin9x/" CP932
  AddClientEncoding "cadaver/" UTF-8 EUCJP-MS
  AddClientEncoding "Mozilla/" EUCJP-MS
  NormalizeUsername on
</IfModule>
Alias /alias_directry_name /real_directry_in_full_path
<Location /alias_directry_name>
  AddDefaultCharset UTF-8
  Options +Indexes
  IndexOptions FancyIndexing FoldersFirst TrackModified
  DAV on
  AuthName "WebDAV Folder"
  AuthType Basic
  AuthUserFile /somewhere/.davpasswd
  Require user some_username_for_basic_authentication
  <LimitExcept HEAD OPTIONS>
       Require user some_username_for_basic_authentication
  </LimitExcept>
  Header add MS-Author-Via "DAV"
</Location>

# htpaswd -c /somewhere/.davpasswd some_username_for_basic_authentication
# /etc/init.d/httpd configtest
# /etc/init.d/httpd reload

Windows XP SP2以降では、Webフォルダ機能でのBASIC認証はhttpsでしか受け付けません。CentOS5は、標準でオレオレ証明書でのSSLが有効になっているので問題になりませんが、面倒な場合は自己責任でレジストリを変更して対処する方法もあるようです。

というわけで、着々とディスク使用量増加中

サーバ移行していると、ソフトウェアをダウンロードしたり、旧サーバからファイルを取ってきたりとファイル転送を使用することがしばしば。
単一ファイルであれば、wgetが手軽です。-r オプションで再帰的な取得もできますが、anonymous FTPのディレクトリ内を眺めながらGETしたりする際にはやはり手に馴染んだFTPクライアントが欲しいところ。

ということで、NcFTPを入れましょう。perl -MCPAN -e shellとか、結構いろんなプログラムでFTP用途に呼び出されたりしますし。

ところが、CentOS 5標準のyumレポジトリにはncftpがありません。
そこで、yumからRedHat系OS向けに4,000以上のプロジェクトをRPM化して提供しているrpmforgeのパッケージが扱えるようにしてみましょう。

ちなみに、この作業の前はこんな感じ。


# yum install ncftp

Loading "installonlyn" plugin

Loading "fastestmirror" plugin

Setting up Install Process

Setting up repositories

extras 100% |=========================| 1.1 kB 00:00

updates 100% |=========================| 951 B 00:00

base 100% |=========================| 1.1 kB 00:00

addons 100% |=========================| 951 B 00:00

Loading mirror speeds from cached hostfile

Reading repository metadata in from local files

Parsing package install arguments

Nothing to do

そこで、"Installation and Configuration" を見ながらインストールしてみましょう。
といっても、

# rpm -Uhv http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

で終了。必要な時だけ、rpmforgeを見るように、設定ファイルを書き換えます。

# vi /etc/yum.repos.d/rpmforge.repo

enabled = 1

enabled = 0


そうしますと、yum に --enablerepo=rpmforge オプションを付加することで、rpmforgeのRPMを見に行くようになります。どのくらいファイル数が増えるか比較してみましょう。

# yum list | wc -l

3333

# yum list --enablerepo=rpmforge | wc -l

7147

まぁ、素敵。

では、NcFTPを......

# yum --enablerepo=rpmforge install ncftp

.
.
.
.

Nothing to do

なに?
# yum list --enablerepo=rpmforge | grep -i ncftp

#

ねーんでやんの。orz

なんだそれ?仕方ない。FedoraのSRPM持ってきてrpmbuildだ。

ちなみに、perlのモジュールがRPM化されたヤツがいっぱいあり、Plagger入れるときのモジュールの依存関係辺りで悩まずにすむかもしれないし、zopeなんかもRPM一発で入れられる(使わないけど).......ので、この作業は無駄ではない.....と信じたい。

久々に素のOSを育ててますが、トキメキよりも面倒くささが先にたち、「あぁ、もうオッサンだなぁ」と嘆息しているわけです。先ほどTSUTAYAに返しに行ったDVDには「北の国から 83 冬」が混じってましたし、一番最近買ったCDは、盗んだバイクで走り出す人を謳ったモノ(BookOFFで250円)だし。

なので、configファイルをviでガシガシ編集するよりも、適当なツールで基本設定をしてもらうという手抜き工事に走っています。

となると俄然便利なのがwebmin

ただし、このコは結構なメモリ喰い。常駐させるのはヤな感じです。
そういう時は、xinetdでアクセスした時だけ起動させましょう。

先ずは、xinetdをインストール。なんて楽なんでしょう。PKG管理バンザイ。

# yum install xinetd
# sbin/chkconfig xinetd on

続いて、webminのインストール。これも楽勝。

# wget http://prdownloads.sourceforge.net/webadmin/webmin-1.400-1.noarch.rpm
# rpm -Uvh webmin-1.400-1.noarch.rpm

常駐でOKならば、ここで # /sbin/chkconfig webmin on しちゃえばいいですが、webminのFAQで手順を確認しつつ、xinetd経由に設定しましょう。

ちなみに、webminはdefaultでは、10000番のポートを使用するようになっていますが、このポート番号はndmpに予約されちゃってますので、ianaのポート番号表を確認のうえ、適当な空きポートに設定しましょう。
49152以上はPRIVATE PORTSなので、ココを使うのが無難でしょう。
「会社からは80番しか行けないんだよ。」な場合はReverse Proxyするということで。

# vi /etc/services
webmin 49152/tcp
# vi /etc/webmin/miniserv.conf
#port=10000
port=49152
#session=1
inetd=1
# vi /etc/xinetd.d/webmin
service webmin
{
user = root
env = LANG=
port = 49152
socket_type = stream
protocol = tcp
wait = no
disable = no
type = UNLISTED
server = /usr/libexec/webmin/miniserv.pl
server_args = /etc/webmin/miniserv.conf
}

# /etc/init.d/xinetd restart

ついでですから、SSL対応も済ませちゃいましょう。perl-Net-SSLeayモジュールが必要になりますので、入ってない場合は

# yum install perl-Net-SSLeay

してから、Webminの[Webmin設定]->[SSL暗号化]メニューで設定。

userminを導入する場合も、PATHと使用ポート以外は全く同じ設定でイケます。

前のエントリに書いた、ServerAxisのVPSにサインアップ。
クレジットカードをデジカメで撮影して添付する必要がありました。

ただ今sshログイン中。ちょっと眺めてみたところ、本当に素の状態で、ただOSが起動しているだけ。
sshもrootでリモートログインできちゃう。

# ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 init [3]
    2 ?        S      0:00 [migration/0]
    3 ?        SN     0:00 [ksoftirqd/0]
    4 ?        S      0:00 [watchdog/0]
    5 ?        S<     0:00 [events/0]
    6 ?        S<     0:00 [khelper]
    7 ?        S<     0:00 [kthread]
    9 ?        S<     0:00 [xenwatch]
   10 ?        S<     0:00 [xenbus]
   16 ?        S<     0:00 [migration/1]
   17 ?        SN     0:00 [ksoftirqd/1]
   18 ?        S<     0:00 [watchdog/1]
   19 ?        S<     0:00 [events/1]
   22 ?        S<     0:00 [kblockd/0]
   23 ?        S<     0:00 [kblockd/1]
   24 ?        S<     0:00 [cqueue/0]
   25 ?        S<     0:00 [cqueue/1]
   29 ?        S<     0:00 [khubd]
   31 ?        S<     0:00 [kseriod]
   91 ?        S      0:00 [pdflush]
   92 ?        S      0:00 [pdflush]
   93 ?        S<     0:00 [kswapd0]
   94 ?        S<     0:00 [aio/0]
   95 ?        S<     0:00 [aio/1]
  225 ?        S<     0:00 [kpsmoused]
  249 ?        S<     0:00 [kjournald]
  286 ?        S<     0:00 [kauditd]
  993 ?        Ss     0:00 dbus-daemon --system
 1082 ?        SNs    0:00 anacron -s
 1091 ?        Ss     0:00 /usr/sbin/atd
 1111 ?        Ss     0:00 hald
 1112 ?        S      0:00 hald-runner
 1141 ?        Ss     0:00 login -- root
 1142 tty1     Ss+    0:00 /sbin/mingetty tty1
 1144 tty2     Ss+    0:00 /sbin/mingetty tty2
 1147 tty3     Ss+    0:00 /sbin/mingetty tty3
 1149 tty4     Ss+    0:00 /sbin/mingetty tty4
 1154 tty5     Ss+    0:00 /sbin/mingetty tty5
 1156 tty6     Ss+    0:00 /sbin/mingetty tty6
 1231 ?        S      0:00 /usr/bin/python /usr/sbin/yum-updatesd
 1240 ?        Ss     0:00 -bash
 1428 ?        S<s    0:00 /sbin/udevd -d
 1522 ?        Ss     0:00 syslogd -m 0
 1525 ?        Ss     0:00 klogd -x
 2016 ?        Ss     0:00 crond
 2067 ?        S<sl   0:00 auditd
 2069 ?        S<s    0:00 python /sbin/audispd
 2110 ?        Ss     0:00 /usr/sbin/sshd
 2123 ?        R+     0:00 ps ax

httpdやMTAは勿論、xinetdさえ入ってません。:-)

弄りだしたらOS再インストールなんて滅多にやらないだろうと思い、一度試してみたのですが本当に簡単。

reinstall.jpg

こんな画面で数回クリックするだけで、数分後には新しいOSで起動します。素敵。

さて、先ずはsshのrootログインでも塞ぐか....

# vi /etc/ssh/sshd_config
.
.
#PermitRootLogin yes
PermitRootLogin no
.
.
# /usr/sbin/sshd -t
# /etc/init.d/sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

事前の一般ユーザ作成をお忘れなく。
でも、失敗してもVirtual Consoleからのログインも可能なので問題なし。素敵。

後は、インストール直後で見通しが良いうちに、不要なサービスの停止だの仮想コンソール数の削減だのを行いますが、この辺りは開設されているサイトも多いので割愛。
あ、タイムゾーンもJSTにしておこう。

というわけで、徐々に候補が絞り込まれてきたVPSサーバ。 スペック比較はこんな感じ。
クララオンライン Quantact Server Axis
概要 国内。サービスを乗り換えつつ数年使用。サポート抜群。不満はVirtuozzo採用による(と思われる)パフォーマンスの低さ。回線速度は優秀。 海外。XenとOpenVZが選択できる。後者なら、月額$9.99~と、コストパフォーマンス良好。ユーザの評判も良好。 海外。情報はあまり無いが、割り当てられるリソースが非常に豊富。GlobalIPも標準で5コもらえちゃう。こちらも、国内勢に比べると高コストパフォーマンス。
(検討しているコースの)費用 初期:\0-
月額\6,980-
初期:$0-
月額$34.99-
初期:$0-
月額$35-
CPU Intel(R) Xeon(R) CPU 5110 @ 1.60GHz *4 (*2?) Dual Xeon Multi-Core Opteron
RAM freeで見ると、5GB見えますが、# cat /proc/user_beancountersの出力からして、Maxで768MBと思われ。 160MB 512MB
Disk 8GB 7.5GB 50GB
仮想化 Virtuozzo Xen
OS
  • CentOS4 or 5
契約時に選択。re-installは\10,000-
  • Fedora 3/4/5/6
  • Centos 4/5
  • Debian 3.1/4.0
  • Ubuntu 6.06/7.04
  • Gentoo 2005 S1
  • Slackware 10/11/12
コントロールパネルからre-install可能
  • Fedora 3/4/5/6
  • Centos 4/5
  • Debian 4
  • Gentoo Linux 2007.0
  • OpenSUSE 10.1
  • Ubuntu 6.06/7.04/7.10
コントロールパネルからre-install可能
ってな感じ。
お小遣い使用可能なCredit CardはJCBなので、海外だと使えない。Quantactは2ヶ月目からPayPalで良いらしいので、1ヶ月目だけ自宅カードで払うとしても、Server AxisはWebに支払方法の記載が無い。
スペック的には、フツーに考えたらServer Axis。でも、ココは、Webの出来の悪さがサポート品質の悪さを想起させるなぁ。オンラインサインアップのページも無いし。
確認がてら、支払方法などメールで聞いてみよう。
でかでかと書いてありましたね。Order Now!って......orz 今日は遅いし、週末は3連休だから、嫁さんにVISA決済の交渉して、明日signupしてみよう。

安くて安定しているVPSサーバ探しの旅をしているわけで。
現在契約しているヤツは、VirtuozzoVPSなのです。

同じプロバイダで、CentOS5が載っているものに契約変更しよう思い、とりあえず2週間の無料試用を申し込みました。で、現在SSHログイン中。

# cat /proc/cpuinfo してみたところ、新しい方はIntel(R) Xeon(R) CPU 5110 @ 1.60GHzが4つ見え、現在のはIntel(R) Xeon(TM) CPU 2.80GHzが、同じく4つ。
20世紀に組み立てPC(自作という言葉は嫌い)は卒業したので、最近の情報には疎いですが、クロック低くても前者のほうが偉いのかしら?

メモリ周り他に関して、Virtuozzoの割り当てリソースは、
# cat /proc/user_beancountersで確認できまして、こんな感じ。

Version: 2.5
uid resource held maxheld barrier limit failcnt
930: kmemsize 2938470 2960867 10485760 10485760 0
lockedpages 0 0 512 512 0
privvmpages 36457 36487 196608 196608 0
shmpages 768 768 65536 65536 0
dummy 0 0 0 0 0
numproc 35 35 150 150 0
physpages 6606 6612 0 2147483647 0
vmguarpages 0 0 61440 2147483647 0
oomguarpages 6606 6612 1228800 2147483647 0
numtcpsock 11 11 256 256 0
numflock 7 8 400 420 0
numpty 1 1 32 32 0
numsiginfo 0 0 512 512 0
tcpsndbuf 98384 98384 1920000 31457280 0
tcprcvbuf 180224 180224 1920000 31457280 0
othersockbuf 42484 42484 960000 3284582 0
dgramrcvbuf 0 0 960000 3284582 0
numothersock 28 28 512 512 0
dcachesize 313484 316429 3145628 3145728 0
numfile 1356 1365 8192 8192 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
numiptent 10 10 128 128 0

表示項目の詳細は、ココを参照していただくとして、上の数値は、現在契約しているCentOS3な環境と全く同じ。
で、そちらで同じコマンドをたたくと、1行目から

uid resource held maxheld barrier limit failcnt
206: kmemsize 5178431 5196420 10485760 10485760 12699

というイカしたfailcnt値。過去には、1度だけですがメモリ喰い尽くして無反応になり、サポートにrebootをお願いした経緯もあり。

ググッてみると、

Jetspeed Blog『Xen、OpenVZ、VMWareなど仮想化環境の印象』

メモリ周りの制限が厳しい。
実際にゲストOSに割り当てら得れたメモリがまるまる使えるというわけではないようで、レンタルサーバでは512MBのプランを契約しているが、デフォルトの設定ではApacheとMySQLを立ち上げただけで空きメモリがほとんどなくなってしまうなど、メモリ周りの処理に不安を感じる。

というような報告をされている方もあり。
どうせ遊びの鯖だし、ここは趣向を変えてXenなVPSにしてみようかと思い始めました。
パーティショニングで仮想化しているVirtozzoよりも、それぞれのGuestOSのカーネルを起動してくれるXenの方が良いような気もしますし、ちょいと魅力的なプロバイダも見つけてしまいましたので。

このアーカイブについて

このページには、過去に書かれたブログ記事のうちUNIX/Linuxカテゴリに属しているものが含まれています。

前のカテゴリはQUEENです。

次のカテゴリはVan Halenです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。