35%オフのクーポンが今日で切れるというメールにつられて購入。
The Pragmatic Bookshelf | Hello, Android
The Pragmatic Bookshelf | iPhone SDK Development
ものすごい勢いで忘れる私のために未整理でもいいからとりあえずメモ
35%オフのクーポンが今日で切れるというメールにつられて購入。
The Pragmatic Bookshelf | Hello, Android
The Pragmatic Bookshelf | iPhone SDK Development
Manning: Secrets of the JavaScript Ninja
early access editionなのでまだ一部の章しかありませんが、さすがjQueryのJohn Resigさんの著書だけあって深いです。
昨日の記事の続きです。
検索してみると
というページを発見。
まねしてやってみる。
# vi /vz/template/centos/5/x86_64/config/install-post
===================================================================
--- /vz/template/centos/5/x86_64/config/install-post 2008/12/17 15:14:07 1.1
+++ /vz/template/centos/5/x86_64/config/install-post 2008/12/17 15:25:17 1.4
@@ -35,10 +35,10 @@
$VZCTL exec2 $VEID sed -i -e '/getty/d' /etc/inittab
# Disable klogd
-$VZCTL exec2 $VEID \
- "sed -i -e 's/daemon\\ klogd/passed\\ klogd\\ skipped/' \
- -e 's/killproc\\ klogd/passed\\ klogd\\ skipped/' \
- /etc/init.d/syslog"
+#$VZCTL exec2 $VEID \
+# "sed -i -e 's/daemon\\ klogd/passed\\ klogd\\ skipped/' \
+# -e 's/killproc\\ klogd/passed\\ klogd\\ skipped/' \
+# /etc/init.d/syslog"
# FIXME: fix '/etc/init.d/syslog status' to return 0
# even if klogd is not running
@@ -55,7 +55,7 @@
# Disable fsync() in syslog
$VZCTL exec2 $VEID \
'sed -i -e s@\\\([[:space:]]\\\)\\\(/var/log/\\\)@\\\1-\\\2@' \
- /etc/syslog.conf
+ /etc/rsyslog.conf
# Disable X11Forwarding by default
$VZCTL exec2 $VEID \
@@ -85,3 +85,5 @@
#echo "Rebuilding RPM DB ..."
#$RPM --root $VE_ROOT --rebuilddb
#rm -f $VE_ROOT/var/lib/rpm/__db.0*
+
+mkdir -p $VE_ROOT/var/lib/yum || abort "Can't create /var/lib/yum"
===================================================================
# vzpkgcache -f centos-5-x86_64-minimal
...
しかし、やはり
could not open ts_done file: [Errno 2] No such file or directory: '/vz/root/100001/var/lib/yum/transaction-done.2008-12-18.00:31.05'
のようなエラーが連発しているので、別の端末から手動で
# mkdir -p /vz/root/100001/var/lib/yum
として作成。
その後
...
Complete!
chmod: cannot access `/etc/cron.daily/slocate.cron': No such file or directory
chmod: cannot access `/etc/cron.daily/makewhatis.cron': No such file or directory
Packing cache file centos-5-x86_64-minimal.tar.gz ...
Cache file centos-5-x86_64-minimal.tar.gz [129M] created.
#
となって一応終了。cron.dailyでエラーが出てますがInstall OpenVZ on a x86 64 system Centos-Fedora - OpenVZ Wikiにも
It finishes with complaints about cron.daily, but don't worry about it.
と書いてあるので気にしないことにします。
で、そのページの続きに従って実行。あとBasic operations in OpenVZ environment - OpenVZ Wikiも見つつ。
# vzpkgls -c
centos-5-x86_64-minimal
# vzctl create 200 --ostemplate centos-5-x86_64-minimal
Creating container private area (centos-5-x86_64-minimal)
Performing postcreate actions
Container private area was created
# vzctl create 200 --ostemplate centos-5-x86_64-minimal
# vzctl start 200
パッケージインストールのテスト。fastestmirrorが効いてなくて遅いミラーを選んでしまったようで1分程度かかったが成功。
# vzyum 200 install nano
# vzrpm 200 -qa
# vzctl set 200 --ipadd 192.168.1.101 --save
# vzctl set 200 --nameserver 192.168.1.1.1 --save
# vzctl stop 200
# vzctl start 200
# vzctl exec 200 ps ax
PID TTY STAT TIME COMMAND
1 ? Ss 0:00 init [3]
9513 ? Ss 0:00 /usr/sbin/sshd
9524 ? Rs 0:00 ps ax
# vzctl enter 200
# ps ax
PID TTY STAT TIME COMMAND
1 ? Ss 0:00 init [3]
9513 ? Ss 0:00 /usr/sbin/sshd
9526 ? Ss 0:00 vzctl: pts/0
9527 pts/0 Ss 0:00 -bash
9542 pts/0 R+ 0:00 ps ax
# exit
# vzctl stop 200
てなわけでとりあえず動きました!
Linux-VServerはバニラカーネルへのパッチとして提供されていて、パッチあたりまくりのCentOSだとうまく当たらないし、そうかといってバニラカーネル+Linux-VServerにしてしまうとCentOSとは別物になってしまってCentOSの検証環境としては使えないなあと悩んでいて以下のページを見つけました。
そうかOpenVZならCentOSのカーネルにも対応していたのか(もっと早く気付けよ>私)。ということでトライしてみました。
# cd /etc/yum.repos.d/
# wget http://download.openvz.org/openvz.repo
# rpm --import http://download.openvz.org/RPM-GPG-Key-OpenVZ
# yum search ovzkernel
# yum install ovzkernel.x86_64
# vi /etc/sysctl.conf
===================================================================
RCS file: /etc/sysctl.conf,v
retrieving revision 1.1
diff -u -r1.1 /etc/sysctl.conf
--- /etc/sysctl.conf 2008/12/16 16:13:56 1.1
+++ /etc/sysctl.conf 2008/12/16 16:15:34
@@ -4,15 +4,19 @@
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
-net.ipv4.ip_forward = 0
+net.ipv4.ip_forward = 1
+net.ipv4.conf.default.proxy_arp = 0
# Controls source route verification
+net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
+net.ipv4.conf.default.send_redirects = 1
+net.ipv4.conf.all.send_redirects = 0
# Do not accept source routing
# Controls the System Request debugging functionality of the kernel
-kernel.sysrq = 0
+kernel.sysrq = 1
# Controls whether core dumps will append the PID to the core filename
# Useful for debugging multi-threaded applications
===================================================================
# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_syncookies = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
# reboot
uname -r
2.6.18-92.1.13.el5.028stab059.6
# yum install vzctl vzctl-lib vzpkg vzquota vzyum vzrpm43 vzrpm43-python vzrpm44 vzrpm44-python
oading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
* addons: ftp2.riken.jp
* extras: ftp2.riken.jp
* base: ftp2.riken.jp
* openvz-kernel-rhel5: ftp.iij.ad.jp
* openvz-utils: ftp.iij.ad.jp
* updates: ftp2.riken.jp
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package vzctl.i386 0:3.0.23-1 set to be updated
---> Package vzpkg.noarch 0:2.7.0-18 set to be updated
---> Package vzrpm44-python.i386 0:4.4.1-22.5 set to be updated
---> Package vzquota.i386 0:3.0.12-1 set to be updated
---> Package vzyum.noarch 0:2.4.0-11 set to be updated
--> Processing Dependency: cElementTree.so for package: vzyum
---> Package vzrpm43-python.i386 0:4.3.3-7_nonptl.6 set to be updated
---> Package vzrpm44.i386 0:4.4.1-22.5 set to be updated
---> Package vzctl.x86_64 0:3.0.23-1 set to be updated
---> Package vzquota.x86_64 0:3.0.12-1 set to be updated
---> Package vzrpm43.i386 0:4.3.3-7_nonptl.6 set to be updated
---> Package vzctl-lib.i386 0:3.0.23-1 set to be updated
---> Package vzctl-lib.x86_64 0:3.0.23-1 set to be updated
--> Finished Dependency Resolution
Error: Missing Dependency: cElementTree.so is needed by package vzyum
おおっとなんかエラーが。
で、検索したら本家のドキュメントに行き着く(最初からこちらを見ようね>私)。
というわけで続き。
# yum install vzctl vzquota
# /sbin/service vz start
# /sbin/chkconfig --list vz
# wget http://linux.carreira.com.pt/ovzutils/setx86_64-0.3.tar.gz
# tar zxf setx86_64-0.3.tar.gz
# sh setx86_64
# vi /vz/template/centos/5/x86_64/config/.rpmmacros
===================================================================
RCS file: /vz/template/centos/5/x86_64/config/.rpmmacros,v
retrieving revision 1.1
diff -u -r1.1 /vz/template/centos/5/x86_64/config/.rpmmacros
--- /vz/template/centos/5/x86_64/config/.rpmmacros 2008/12/16 16:34:18 1.1
+++ /vz/template/centos/5/x86_64/config/.rpmmacros 2008/12/16 16:34:35
@@ -1 +1 @@
-%_install_langs C
+%_install_langs C:ja_JP.UTF-8
===================================================================
# vzpkgls | grep x86_64
fedora-7-x86_64-small
fedora-7-x86_64-default
fedora-7-x86_64-minimal
fedora-core-5-x86_64-default
fedora-core-5-x86_64-minimal
fedora-core-3-x86_64-default
fedora-core-3-x86_64-minimal
fedora-core-6-x86_64-default
fedora-core-6-x86_64-minimal
fedora-core-4-x86_64-default
fedora-core-4-x86_64-minimal
centos-5-x86_64-default
centos-5-x86_64-minimal
centos-4-x86_64-default
centos-4-x86_64-minimal
# vzpkgcache -f centos-5-x86_64-minimal
...
Installing: libgcc ####################### [ 1/87]
could not open ts_done file: [Errno 2] No such file or directory: '/vz/root/100001/var/lib/yum/transaction-done.2008-12-17.01:43.38'
Installing: setup ####################### [ 2/87]
could not open ts_done file: [Errno 2] No such file or directory: '/vz/root/100001/var/lib/yum/transaction-done.2008-12-17.01:43.38'
...
Complete!
sed: can't read /etc/init.d/syslog: No such file or directory
ERROR: Script install-post failed
途中で/vz/root/100001/var/lib/yum/というディレクトリが無いっぽいエラー連発。最後にもエラーが。なんか間違えたかな。
調べてみると/vz/root/まではあるがその下はないようだ。/etc/init.d/syslogのほうはあるんだけどな。続きはまた今度。
ついにサーバーマシンを買ってしまいました。coLinuxとLinux-VServerという2段仮想は初心者にはつらいし、CentOSはカーネルにパッチあたりまくりでcoLinuxもLinux-VServerもバニラカーネルへのパッチが基本なようなので、これはもうサーバーマシンを買った方が早いだろうと思ったのがきっかけです。
ウェブで情報収集して検討した結果、HP-ProLiant-ML115 G5にしました。まとめサイトHP-ProLiant-ML115 G5がとても参考になりました。先駆者のみなさまに感謝です。
購入費用は
PC | HP-ProLiant-ML115 G5 | ¥13,750 | NTT-X Store |
RAM | CFD ELIXIR W2U800CQ-2GL5J 2GBx2 | ¥3,480 | ドスパラ |
モニタ | 中古15インチ | ¥4,000 | ソフマップ |
合計 | ¥21,230 |
でした。土曜の深夜に情報収集始めて日曜の昼過ぎにNTT-X Storeでポチって、秋葉原に行ってRAMとモニタを買って(本当は安いキーボードも買ったけどProLiantに同梱されてて無駄になったのはナイショ)、月曜の夜にはProLiantが届きました。
静音性重視でHP ProLiant ML110 G5にしようかとも迷ったのですが(中古パソコンとパソコンパーツの通販ショップGENOで¥11,490と安かったし)、やっぱりこっちにしました。
ファンの音はそこそこしますが、そのうち慣れるでしょう(と期待)。
ホストからゲストにsshできないの続きです。
util-vserver:Capabilities and Flags - Linux-VServerを見て
SYS_CHROOT
という内容で/etc/vservers/vserver1/bcapabilitiesファイルを作成してからvserver1起動して、ホストからゲストにsshしてみるといけましたよ!
util-vserver:Capabilities and Flags - Linux-VServerのページはここ数日何回か見てたんだけどdefault bcaps are:というところにSYS_CHROOTが含まれているし、/etc/vservers/vserver1/bcapabilitiesファイルは無いからデフォルトになってるんだろうな、と思って試してなかったのですが、明示的に指定すれば行けたってことですね。
となるとreducecap --showで表示された情報ってのもなんだったのか。あれはホストで実行するとホストのcapabilitiesを表示しているのかな?これも要調査。というかまだまだ基本的なところがわかってないな。
まあ何はともあれ一歩前進。
guest# yum install httpd
guest# /etc/init.d/httpd start
guest# echo 'It works' > /var/www/html/index.html
guest# wget http://192.168.0.3/
でまず自分自身では取得できた(192.168.0.3はguestのIPアドレス。lo(loopback)が無い状態なのでlocalhostとは指定できない状況)
次にホストから
host$ wget http://192.168.0.3/
でも取得できた。
ホストからゲストにsshで入ろうとすると
$ ssh 192.168.0.3
Read from socket failed: Connection reset by peer
$
となってしまいます。
ゲストの/var/log/secureには
Dec 3 16:58:51 vserver1 sshd[4587]: fatal: chroot("/var/empty/sshd"): Operation not permitted
という行ができてた。
Capabilities and Flags - Linux-VServerのSystem capabilities (bcaps) のSYS_CHROOTが無いのかなと思ったけどutil-vserver:Capabilities and Flags - Linux-VServerを見てもデフォルトで入ってるらしい。/etc/vservers/vserver1/にbcapabilitiesというファイルは無い状態なのでデフォルト値になってるはず。
vserver development mailing list: [Vserver] "Defaults Caps of chcontext" and whish listというページでreducecapというコマンドの存在を知り(dpkg -S /usr/sbin/reducecapによるとutil-vserverパッケージに含まれる)、ホストで実行してみると
# reducecap --show
Capability Effective Permitted Inheritable
...
CAP_SYS_RAWIO X X
となるので、やはり許可されているようだ。
今後さらに調査が必要ということで一旦棚上げ。
新山 祐介さん著の入門OpenSSH(サポートページ)で/etc/sudoersでwheelグループに対して許可を与える設定を使っているというのを呼んでまねしようとしたのですが(私はそれまでは直接ユーザーに許可を与えていた)、CentOSではwheelグループがあるのにDebianには無いことに気づきました。
検索するとDebian referenceに9.2.2 "Why GNU su does not support the wheel group"という節があることを発見。じゃあadmグループで代用するのかと思いきや、Securing Debian Manualに4.10 Providing secure user accessという節があり、wheelグループを追加するのがもっともきれいな方法だとされている。
で、/etc/pam.d/suを見ると以下のようなセクションがある。
# Uncomment this to force users to be a member of group root
# before they can use `su'. You can also add "group=foo"
# to the end of this line if you want to use a group other
# than the default "root" (but this may have side effect of
# denying "root" user, unless she's a member of "foo" or explicitly
# permitted earlier by e.g. "sufficient pam_rootok.so").
# (Replaces the `SU_WHEEL_ONLY' option from login.defs)
# auth required pam_wheel.so
とりあえず
auth required pam_wheel.so group=wheel
と書き換えた後、
# addgroup --gid 11 wheel
# usermod -a -G wheel root
# usermod -a -G wheel rails # railsはsudoを許可したい一般ユーザー
を実行して(wheelのgidはCentOS5では10だが/etc/groupを見るとuucpにとられていて10の次は12だったので11にしてみた)
# su - rails
$ sudo whoami
Password:
rails is not in the sudoers file. This incident will be reported.
と試してみたがエラーになった。
/etc/sudoersへの追加は結局必要らしい(というかPAMのことがよくわかっていないことに今気づいた。後日勉強すること)。
# visudo
で
%wheel ALL=(ALL) ALL
という行を追加して再度sudoを試すと今度はできた。
その後再度/etc/pam.d/suを見てたら、さっきの節の前に
# This allows root to su without passwords (normal operation)
auth sufficient pam_rootok.so
と書かれていることを発見。rootユーザーをwheelグループに追加するというのは不要でした。