-->

2011-05-30

gentoo kurobox shutdown

インストールする。
http://buffalo.nas-central.org/index.php/Install_the_Gentoo_Image
http://downloads.buffalo.nas-central.org/ALL_LS_KB_PPC/Distributions/Gentoo/
http://ftp.jaist.ac.jp/pub/Linux/Gentoo/releases/ppc/current-stage3/
http://tinderbox.dev.gentoo.org/default-linux/powerpc/ppc32/
http://kuro.dsk.jp/
http://www.genbako.com/
http://www.gentoo.org/doc/ja/handbook/handbook-x86.xml?part=1

システムの更新をする。
http://www.gentoo.org/doc/ja/handbook/handbook-x86.xml?part=2&chap=1

シャットダウンを登録する。
rc-update add kuro-shutdown shutdown

確認する。
$ ls -l /etc/runlevels/shutdown/
total 0
lrwxrwxrwx 1 root root 21 2011-05-30 13:10:34 killprocs -> /etc/init.d/killprocs*
lrwxrwxrwx 1 root root 25 2011-05-30 16:18:51 kuro-shutdown -> /etc/init.d/kuro-shutdown*
lrwxrwxrwx 1 root root 20 2011-05-30 13:10:34 mount-ro -> /etc/init.d/mount-ro*
lrwxrwxrwx 1 root root 21 2011-05-30 13:10:34 savecache -> /etc/init.d/savecache*

例。
$ cat /etc/init.d/kuro-shutdown
#!/sbin/runscript

description="shutdown kurobox."

depend()
{
    need mount-ro
}

start()
{
    if [ "$RC_RUNLEVEL" = shutdown ]; then
        if yesno "$RC_REBOOT"; then
            #/etc/init.d/reboot.sh
            if [ -c "/dev/ttyS1" ] ; then
                echo -n "CCCC" > /dev/ttyS1
            else
                ewarn "No /dev/ttyS1 device found, your Kurobox may not reboot correctly!"
            fi
        else
            #/etc/init.d/shutdown.sh
            if [ -c "/dev/ttyS1" ] ; then
                echo -n "EEEE" > /dev/ttyS1
            else
                ewarn "No /dev/ttyS1 device found, your Kurobox may not halt correctly!"
            fi
        fi
    fi
}

バージョン。
$ eix -c "^(binutils|gcc|linux-headers|glibc|baselayout|sysvinit|util-linux)$"
[I] sys-apps/baselayout (2.0.2@05/28/11): Filesystem baselayout and init scripts
[I] sys-apps/sysvinit (2.88-r1@05/29/11): /sbin/init - parent of all processes
[I] sys-apps/util-linux (2.19.1@05/29/11): Various useful Linux utilities
[I] sys-devel/binutils (2.20.1-r1@05/28/11): Tools necessary to build programs
[I] sys-devel/gcc (4.3.4(4.3)@05/29/11): The GNU Compiler Collection
[I] sys-kernel/linux-headers (2.6.27-r2@05/25/11): Linux system headers
[I] sys-libs/glibc (2.11.3(2.2)@05/29/11): GNU libc6 (also called glibc2) C library
Found 7 matches.

2011-05-29

ext3のメモ

追記: dir_index, large_file を追加するとEMモード自体のfsckでエラーになります。

kuroboxHGのEMモードで mount -o rw でマウントできるファイルシステムの作成+fsckを手動で行う場合。
mke2fs -I 128 -O +has_journal,-ext_attr,-resize_inode,+dir_index,+filetype,\
-extent,-flex_bg,+sparse_super,+large_file,-huge_file,-uninit_bg,-dir_nlink,-extra_isize /dev/hda1 \
&& tune2fs -c 0 -i 0 /dev/hda1

mount -o ro で失敗: ext_attr, resize_inode, extent, flex_bg, uninit_bg
mount -o ro で成功: huge_file, dir_nlink, extra_isize

### ext3の機能追加 dir_index, large_file
Filesystem features:      has_journal filetype sparse_super
↓
Filesystem features:      has_journal dir_index filetype sparse_super large_file

### fsckは手動。
Maximum mount count:      -1
Check interval:           0 (<none>)

udevとkernel
$ qdepends -a udev
 * DEPEND
sys-fs/udev-151-r4: >=sys-apps/util-linux-2.16 >=sys-libs/glibc-2.9 virtual/os-headers !<sys-kernel/linux-headers-2.6.29
 * RDEPEND
sys-fs/udev-151-r4: >=sys-apps/util-linux-2.16 >=sys-libs/glibc-2.9 !sys-apps/coldplug !<sys-fs/lvm2-2.02.45 !sys-fs/device-mapper >=sys-apps/baselayout-1.12.5
 * PDEPEND
$ qdepends -aQ udev
 * DEPEND
sys-apps/openrc-0.8.2-r1
 * RDEPEND
sys-apps/openrc-0.8.2-r1
virtual/dev-manager-0
 * PDEPEND

$ grep "udev requires" /usr/portage/sys-fs/udev/udev-1[0-5]*ebuild
/usr/portage/sys-fs/udev/udev-146-r1.ebuild:    # udev requires signalfd introduced in kernel 2.6.25,
/usr/portage/sys-fs/udev/udev-149.ebuild:       # udev requires signalfd introduced in kernel 2.6.25,
/usr/portage/sys-fs/udev/udev-151-r4.ebuild:    # udev requires signalfd introduced in kernel 2.6.25,

http://www.kernel.org/doc/man-pages/online/pages/man2/signalfd.2.html

eix-remote(laymanのリポジトリの検索用データをeixに追加する)
2つ以上のgentooを持つ場合、1箇所で検索できるようにしておくと便利です。

常用の更新コマンドに追加します。
emerge --sync && layman -S && eix-update && eix-remote -l /var/lib/layman/ update など

before
$ layman -l
* graaff                    [Git       ] (http://git.overlays.gentoo.org/gitroot/dev/graaff.git                              )
* sunrise                   [Subversion] (svn://overlays.gentoo.org/proj/sunrise/reviewed/                                   )
$ eix -c|wc -l
15487

after
$ layman -l
* graaff                    [Git       ] (http://git.overlays.gentoo.org/gitroot/dev/graaff.git                              )
* sunrise                   [Subversion] (svn://overlays.gentoo.org/proj/sunrise/reviewed/                                   )
$ eix -c|wc -l
23408

$ layman -l
* graaff                    [Git       ] (http://git.overlays.gentoo.org/gitroot/dev/graaff.git                              )
* sunrise                   [Subversion] (svn://overlays.gentoo.org/proj/sunrise/reviewed/                                   )
$ eix ^glibc$
[I] sys-libs/glibc
     Available versions:  (2.2) [P]2.2.5-r10!s[2] [P]2.3.2-r12!s[2] [P]2.3.5-r3!s[2] [P]2.3.6-r4!s[2] [P]2.3.6-r5!s[2] 2.4-r4!s[2] 2.5-r2!s[2] 2.5-r3!s[2] 2.5-r4!s[2] **2.5.1!s[2] ~2.6!s[2] 2.6.1!s[2] ~2.7-r2!s[2] ~2.8_p20080602!s[2] 2.8_p20080602-r1!s[2] 2.8_p20080602-r2!s[2] ~2.9_p20081201!s[2] ~2.9_p20081201-r1!s[2] ~2.9_p20081201-r2!s[2] ~2.9_p20081201-r3!s ~2.10.1!s[2] 2.10.1-r1!s 2.10.1-r1!s[1] 2.10.1-r2!s[1] ~2.11-r1!s[1] ~2.11.1!s[1] ~2.11.1!s[3] 2.11.2-r3!s[2] 2.11.3!s ~2.12.1-r3!s 2.12.2!s ~2.12.2!s[4] ~2.13-r2!s
        {:+glibc-compat20 build crosscompile_opts_headers-only debug erandom gd glibc-compat20 glibc-omitfp hardened linuxthreads-tls multilib nls nptl nptlonly nptlonly} profile selinux userlocales vanilla}
     Installed versions:  2.12.2(2.2)!s(23時34分35秒 2011年05月21日)(gd nls -crosscompile_opts_headers-only -debug -glibc-omitfp -hardened -multilib -profile -selinux -vanilla)
     Homepage:            http://www.gnu.org/software/libc/libc.html
     Description:         GNU libc6 (also called glibc2) C library

[1] "chromiumos" layman/chromiumos
[2] "crg" layman/crg
[3] "gentoo-quebec" layman/gentoo-quebec
[4] "loongson" layman/loongson
$ eix gentoo-sources
* sys-kernel/gentoo-sources
     Available versions:
        (2.6.24-r2)     ~2.6.24-r2!b!s[1]
        (2.6.25-r7)     2.6.25-r7!b!s[2]
        (2.6.32-r24)    2.6.32-r24!b!s
        (2.6.32-r29)    2.6.32-r29!b!s
        (2.6.32-r30)    ~2.6.32-r30!b!s
        (2.6.32-r31)    ~2.6.32-r31!b!s
        (2.6.35-r15)    2.6.35-r15!b!s
        (2.6.36-r8)     2.6.36-r8!b!s
        (2.6.37-r3)     ~2.6.37-r3!b!s
        (2.6.37-r4)     2.6.37-r4!b!s
        (2.6.37-r5)     ~2.6.37-r5!b!s
        (2.6.37-r6)     ~2.6.37-r6!b!s
        (2.6.38-r4)     ~2.6.38-r4!b!s
        (2.6.38-r5)     ~2.6.38-r5!b!s
        (2.6.38-r6)     ~2.6.38-r6!b!s
        (2.6.39)        ~2.6.39!b!s
        {build deblob symlink}
     Homepage:            http://dev.gentoo.org/~mpagano/genpatches
     Description:         Full sources including the Gentoo patchset for the 2.6 kernel tree

[1] "loongson" layman/loongson
[2] layman/powerpc

http://forums.gentoo.org/viewtopic-t-780194-start-0.html
http://d.hatena.ne.jp/meech/20100826/1282833801

2011-05-28

yes n の例

yumの削除の確認画面を保存する。
no [Enter] を入力する手間が省ける。
rpm,yumのコマンド自体で表示できるような気がする。

### コマンドを作成する。
$ export LANG=C
$ export LC_ALL=C
$ cd /tmp/
$ mkdir check
$ cd check/
$ rpm -aq | sort > rpm.txt
$ cat rpm.txt | awk '{print "yes n | yum remove "$1}' > cmd.txt

### 手動でコマンドをテストする。
$ head -n3 cmd.txt
...
$ tail -n3 cmd.txt
...

### 実行する。
$ script check.txt
$ sudo sh cmd.txt
$ exit

2011-05-26

Fedora 14 => 15

参考URL。
http://www.multimediaboom.com/how-to-upgrade-from-fedora-14-to-fedora-15/
System Requirement :

You must need more than 600 MB of RAM. Else the system might hang when it tries to reboot with the following message (leaving you with an unusable system):

“Trying to unpack rootfs image as initramfs…”

Fedora 14 => 15にする。
export LANG=C
export LC_ALL=C
preupgrade-cli "Fedora 15 (Lovelock)"
...

再起動後、起動画面が10分ほど待っても下記の行で停止している。
trying to unpack rootfs ...

電源を強制的に切った。
メモリを 512MB => 1024MB に変更した。
ログイン後、今度はグラフィカルなコマンドで実行した。
sudo LANG=C LC_ALL=C preupgrade

しばらくすると再起動していたようで微妙にデザインが異なるログイン画面になっていた。
ログイン後、警告が表示される。
GNOME3を読み込むのに
失敗しました

残念ながらGNOME3が正しく起
動せず、フォールバック・モード
で起動しました。
...

アップグレードには成功している。
$ cat /etc/redhat-release
Fedora release 15 (Lovelock)

実際の環境の場合fedora15のlivecdで起動可能かどうかチェックすると良いかもしれません。
この例の場合、別のディストリビューションのkvmで動作しています。

2011-05-24

qfileのサンプル

qfileにはファイルのリストを指定できます。
$ man qfile
パッケージの残骸や独自に設置したファイルなどを検索するのに使えます。
man qfileのサンプルをいくつか下記に記します。

パッケージに属していないlibtoolのライブラリ?
$ qfile -o $(find /lib* /usr/lib* -name "*.la")
$ find /lib* /usr/lib* -name "*.la" | qfile -o -f -

パッケージに属していないコマンド?
シンボリックリンクはリンク先を見たほうが良いようです。
$ find /bin/ /sbin/ | qfile -o -f -
$ find /bin/ /sbin/ -type f -exec echo -n {}"::" \; -exec head -n1 {} \; | grep '#!/bin/sh'

パッケージに属していない/etc/以下等のファイル?
#!/bin/bash
PATH="/bin:/usr/bin"
SEARCH_PATHS=""
SEARCH_MASK=""
EXCLUDE=""
SEARCH_PATHS="$(portageq envvar CONFIG_PROTECT)"
SEARCH_MASK="$(portageq envvar CONFIG_PROTECT_MASK)"
for path in ${SEARCH_MASK} ; do
    EXCLUDE="${EXCLUDE} -not -path ${path}/*"
done
set -f
DIR_LIST="$(find ${SEARCH_PATHS} ${EXCLUDE} -type d | qfile -o -f - | sort)"
TMP_LIST=""
FLAG=0
for path1 in ${DIR_LIST}; do
    FLAG=0
    for path2 in ${TMP_LIST}; do
        if [[ "$path1" =~ ^"$path2/" ]]; then
            FLAG=1
            break
        fi
    done
    if [[ $FLAG -eq 0 ]]; then
        TMP_LIST="${TMP_LIST} $path1"
    fi
done
DIR_LIST=$TMP_LIST
for path in ${DIR_LIST} ; do
    EXCLUDE="${EXCLUDE} -not -path ${path}/*"
done
find ${SEARCH_PATHS} ${EXCLUDE} -type d | qfile -o -f - | sort | awk '{print "DIR ::"$0}'
find ${SEARCH_PATHS} ${EXCLUDE} -type f | qfile -o -f - | sort | awk '{print "FILE::"$0}'
find ${SEARCH_PATHS} ${EXCLUDE} ! -type d ! -type f ! -type l | qfile -o -f - | sort | awk '{print "UNKN::"$0}'
rpath=""
for path in $(find ${SEARCH_PATHS} ${EXCLUDE} -type l | qfile -o -f - | sort); do
    rpath=$(realpath $path)
    if [ "$rpath" = "" -o "$(qfile $rpath)" = "" ]; then
        echo "LINK::"$path" -> "$rpath
    fi
done

2011-05-20

equery files, equery depends, equery belongs と同じ機能

equery files, equery depends, equery belongs と同じ機能の早いものが無いかと思ったら普通にあった。
すでに他の依存のパッケージとしてインストール済みだった。
portage-utilの更新ごとにchmod +x /etc/portage/postsync.d/q-reinitializeのようなメッセージが出ていたような気がする。

### equery xxx のキャッシュ有り阪
$ sudo chmod +x /etc/portage/postsync.d/q-reinitialize # キャッシュ更新自動化
$ sudo sh /etc/portage/postsync.d/q-reinitialize       # キャッシュ更新手動
$ equery files portage-utils|grep bin
...

### 依存性 equery depends xxx
$ qdepends -a gmp
 * DEPEND
 * RDEPEND
 * PDEPEND
$ qdepends -aQ gmp
 * DEPEND
cross-i686-pc-linux-gnu/gcc-4.4.5
cross-powerpc-unknown-linux-gnu/gcc-4.3.4
dev-lang/php-5.3.6
...
 * RDEPEND
cross-i686-pc-linux-gnu/gcc-4.4.5
cross-powerpc-unknown-linux-gnu/gcc-4.3.4
dev-lang/php-5.3.6
...
 * PDEPEND

### ファイル所有者 equery belongs
$ qfile /etc/ntp.conf
net-misc/ntp (/etc/ntp.conf)

### ファイル一覧 equery files
$ qlist portage-utils|grep bin
...

### ファイル更新チェック
$ qcheck ntp
Checking net-misc/ntp-4.2.6_p3 ...
 MD5-DIGEST: /etc/ntp.conf
 MTIME: /etc/conf.d/ntpd
 MTIME: /etc/conf.d/ntp-client
  * 285 out of 288 files are good
...

### ベースパッケージ /usr/portage/profiles/base/packages
$ grep -nr which /usr/portage/profiles/ | grep sys-apps/which
/usr/portage/profiles/prefix/windows/winnt/packages:33:-*sys-apps/which
/usr/portage/profiles/default/bsd/packages:10:-*sys-apps/which
/usr/portage/profiles/default/bsd/package.mask:15:sys-apps/which
/usr/portage/profiles/base/packages:55:*sys-apps/which

* Messages for package app-portage/portage-utils-0.3.1:

 * /etc/portage/postsync.d/q-reinitialize has been installed for convenience
 * If you wish for it to be automatically run at the end of every --sync:
 *    # chmod +x /etc/portage/postsync.d/q-reinitialize
 * Normally this should only take a few seconds to run but file systems
 * such as ext3 can take a lot longer.  To disable, simply do:
 *    # chmod -x /etc/portage/postsync.d/q-reinitialize

distccの設定

(1) distccクライアントで binutils, gcc, linux-headers, glibc を入っているバージョンに、手動でマスクします。
$ tail -n4 /etc/portage/package.mask
>sys-devel/binutils-2.20.1-r1
>sys-devel/gcc-4.3.4
>sys-kernel/linux-headers-2.6.27-r2
>sys-libs/glibc-2.11.3
$ grep CHOST /etc/make.conf
CHOST="powerpc-unknown-linux-gnu"

(2) distccサーバーで同じバージョンをインストールします。
$ sudo USE="-gtk -multilib -openmp -mudflap -nptl" crossdev -t powerpc-unknown-linux-gnu --binutils 2.20.1-r1 --gcc 4.3.4 --kernel 2.6.27-r2 --libc 2.11.3

(3) 確認します。
distccサーバーの/etc/conf.d/distccdにログファイルを設定します。
DISTCCD_OPTS="${DISTCCD_OPTS} --log-level debug --log-file /var/tmp/distcc.log" など
distccを再起動してログを閲覧します。distccクライアントでemergeを実行します。成功の場合ログが表示されます。
$ tail -f /var/tmp/distcc.log|grep -iP "time:.*ms"
distccd[29406] (dcc_job_summary) client: 192.168.0.150:50257 COMPILE_OK exit:0 sig:0 core:0 ret:0 time:9627ms powerpc-unknown-linux-gnu-gcc builtin/merge.c
...

crossdevの-tはdistccクライアントのCHOSTです。
distccクライアントのCFLAGSには-march=nativeを使えません。
上記は違うCPU用の設定です。



以下はメモです。

### distccホスト。
distccクライアントに合わせて作成します。
$ sudo USE="-gtk -multilib -openmp -mudflap -nptl" crossdev -t powerpc-unknown-linux-gnu --binutils 2.18-r3 --gcc 4.3.4 --kernel 2.6.27-r2 --libc 2.10.1-r1
確認します。
$ emerge -pv cross-powerpc-unknown-linux-gnu/binutils cross-powerpc-unknown-linux-gnu/gcc cross-powerpc-unknown-linux-gnu/linux-headers cross-powerpc-unknown-linux-gnu/glibc
$ tail -n4 /etc/portage/package.mask

### distccクライアント。
確認します。
$ emerge -pv binutils gcc linux-headers glibc

失敗しないようにマスクします。
$ cat /etc/portage/package.mask|tail -n5
>=sys-fs/udev-146
>sys-devel/binutils-2.18-r3
>sys-devel/gcc-4.3.4
>sys-kernel/linux-headers-2.6.27-r2
>sys-libs/glibc-2.10.1-r1

pump用の設定をします。
$ cat /etc/distcc/hosts
192.168.0.100,cpp,lzo 192.168.0.100,cpp,lzo 192.168.0.100,cpp,lzo 192.168.0.100,cpp,lzo 192.168.0.100,cpp,lzo

様子を表示します。
$ sudo DISTCC_DIR=/var/tmp/portage/.distcc distccmon-text 1|grep 192.168.0.100

パッケージをアップデートします。
$ sudo pump emerge --update --deep --newuse --verbose --tree --with-bdeps=y --jobs=10 --load-average=20 --keep-going world 1>/var/tmp/scriptlog/emerge_`date +%Y-%m-%d_%H-%M-%S`.log 2>&1 &

この場合ロードアベレージが20以下の場合、同時に10個までインストールの動作をします。
コンパイルに失敗しても、できるだけ進みます。

pump emergeの出力を見ます。
$ tail -f /var/tmp/scriptlog/emerge_2011-05-17_00-23-39.log

成功している場合distccmon-textでファイル名が表示されます。
$ sudo DISTCC_DIR=/var/tmp/portage/.distcc distccmon-text 1|grep 192.168.0.100
 20970  Preprocess  huffman.c                                 192.168.0.100[2]
 20970  Preprocess  huffman.c                                 192.168.0.100[2]
 20970  Preprocess  huffman.c                                 192.168.0.100[2]
 21492  Preprocess  crctable.c                                192.168.0.100[1]
 21492  Preprocess  crctable.c                                192.168.0.100[1]
 21492  Preprocess  crctable.c                                192.168.0.100[1]
...

distccホストで確認します。
$ sudo tcpdump port 3632
tcpdump: WARNING: eth0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 68 bytes
01:07:34.635882 IP 192.168.0.150.34107 > amdgentoo.distcc: S 1412879801:1412879801(0) win 5840 <mss 1460,[|tcp]>
01:07:34.635929 IP amdgentoo.distcc > 192.168.0.150.34107: S 2709116734:2709116734(0) ack 1412879802 win 5792 <mss 1460,[|tcp]>
01:07:34.636101 IP 192.168.0.150.34107 > amdgentoo.distcc: . ack 1 win 6 <nop,nop,timestamp[|tcp]>
01:07:34.861439 IP 192.168.0.150.34107 > amdgentoo.distcc: P 1:263(262) ack 1 win 6 <nop,nop,timestamp[|tcp]>
...

distccホストでログを取ります。修正後、再起動します。
$ rcsdiff distccd,v /etc/conf.d/distccd
===================================================================
RCS file: distccd,v
retrieving revision 1.4
diff -r1.4 /etc/conf.d/distccd
24,25c24,25
< DISTCCD_OPTS="${DISTCCD_OPTS} --log-level critical"
< #DISTCCD_OPTS="${DISTCCD_OPTS} --log-level debug --log-file /tmp/distcc.log"
---
> #DISTCCD_OPTS="${DISTCCD_OPTS} --log-level critical"
> DISTCCD_OPTS="${DISTCCD_OPTS} --log-level debug --log-file /var/tmp/distcc.log"

ログを表示します。
$ tail -f /var/tmp/distcc.log|grep -iP "time:.*ms"
distccd[29406] (dcc_job_summary) client: 192.168.0.150:50257 COMPILE_OK exit:0 sig:0 core:0 ret:0 time:9627ms powerpc-unknown-linux-gnu-gcc builtin/merge.c
distccd[25088] (dcc_job_summary) client: 192.168.0.150:50259 COMPILE_OK exit:0 sig:0 core:0 ret:0 time:6624ms powerpc-unknown-linux-gnu-gcc builtin/merge-file.c
distccd[19439] (dcc_job_summary) client: 192.168.0.150:50260 COMPILE_OK exit:0 sig:0 core:0 ret:0 time:6900ms powerpc-unknown-linux-gnu-gcc builtin/merge-index.c
...

### distccの再設定
gcc, linux-headers をそのままにした。他を更新。
distccクライアントでdistccを無効にしなくてもbinutils,glibcの更新はエラーにならなかった。

### distccクライアント
package.maskは手動で追加した。
$ tail -n4 /etc/portage/package.mask
>sys-devel/binutils-2.20.1-r1
>sys-devel/gcc-4.3.4
>sys-kernel/linux-headers-2.6.27-r2
>sys-libs/glibc-2.11.3

入ったバージョンの確認。
$ eix -c "^(binutils|gcc|linux-headers|glibc)$"
[I] sys-devel/binutils (2.20.1-r1@2011年05月19日): Tools necessary to build programs
[I] sys-devel/gcc (4.3.4(4.3)@2011年05月18日): The GNU Compiler Collection
[I] sys-kernel/linux-headers (2.6.27-r2@2010年01月14日): Linux system headers
[I] sys-libs/glibc (2.11.3(2.2)@2011年05月20日): GNU libc6 (also called glibc2) C library
Found 4 matches.

### distccサーバー
CHOSTとそれぞれのバージョンを合わせてcrossdevを実行する。
$ sudo USE="-gtk -multilib -openmp -mudflap -nptl" crossdev -t powerpc-unknown-linux-gnu --binutils 2.20.1-r1 --gcc 4.3.4 --kernel 2.6.27-r2 --libc 2.11.3

入ったバージョンの確認。
$ eix -C cross-powerpc-unknown-linux-gnu -cI
[I] cross-powerpc-unknown-linux-gnu/binutils [1] (2.20.1-r1(powerpc-unknown-linux-gnu)@2011年05月20日): Tools necessary to build programs
[I] cross-powerpc-unknown-linux-gnu/gcc [1] (4.3.4(powerpc-unknown-linux-gnu-4.3)@2011年05月16日): The GNU Compiler Collection
[I] cross-powerpc-unknown-linux-gnu/glibc [1] (2.11.3(powerpc-unknown-linux-gnu-2.2)@2011年05月20日): GNU libc6 (also called glibc2) C library
[I] cross-powerpc-unknown-linux-gnu/linux-headers [1] (2.6.27-r2(powerpc-unknown-linux-gnu)@2011年05月16日): Linux system headers
...

自動で追加される。
$ grep cross-powerpc-unknown-linux-gnu /etc/portage/package.mask
>cross-powerpc-unknown-linux-gnu/binutils-2.20.1-r1
>cross-powerpc-unknown-linux-gnu/gcc-4.3.4
>cross-powerpc-unknown-linux-gnu/linux-headers-2.6.27-r2
>cross-powerpc-unknown-linux-gnu/glibc-2.11.3

gentooで古いパッケージを入れる

http://sources.gentoo.org/cgi-bin/viewvc.cgi
gentoo-x86
net-fs/
nfs-utils/
(Show 47 dead files)
で必要なファイルをoverlayにダウンロードする。



以下は詳細です。

### gentooで古いパッケージを入れる。
入れていない。古いebuildファイルの場所を確認した。

### emモードで
$ chroot /mnt/gentoo /bin/bash
FATAL: kernel too old
の場合。
ubootの場合は関係ない。
debianでetch => lenny => 再起動 => 起動しない => これ。
古いのを入れるのは可能なようだが動作が大丈夫かは難しそう。
http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/sys-libs/glibc/?hideattic=0
例えばkernel2.4+glibc2.3の環境を作成するのではなくliveCDの古いバージョンを探して、そのまま使うのが楽そう。

http://www.revulo.com/kuro-box/Debian/lenny.html
http://www.revulo.com/kuro-box/Debian/Kernel2.6.html
uboot => 以前これを入れた。どこかの手順通りに行った。失敗するとダメになるそうだが成功した。
looader.o => hda1でkernel2.4+glibc2.3で別のパーテーションを指定する。本来のカーネルで動かせる。 => 別のパーテーションにメインの環境。メインの環境のglibcのバージョンは関係ない。
emモードの書き換え => これはフラッシュを書き換えて戻せる人用?

### nfs3のまま使いflockを有効にする場合。
$ e-file rpc.lockd
[I] net-fs/nfs-utils
        Available Versions:     1.0.12-r2 1.0.12-r0 1.0.10-r0 1.0.7-r2 1.0.7-r1 1.0.6-r6 1.0.12-r3
        Last Installed Ver:     1.2.3-r1(2011年05月15日 17時22分26秒)
        Homepage:               http://linux-nfs.org/
        Description:            NFS client and server daemons
        Matched Files:          /sbin/rpc.lockd;
...
http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/net-fs/nfs-utils/?hideattic=0
http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/net-fs/nfs-utils/nfs-utils-1.0.12-r5.ebuild?hideattic=0&view=log
特にnfs3に拘る理由はないので使わない。

### 保存する場合overlayに入れるらしい。
多分通常の場所の場合syncすると消えるためです。
http://d.hatena.ne.jp/m-bird/20110419/1303243395
http://prototype020.podzone.org/archives/703

emerge --syncが失敗する

rsyncを再インストールして、/etc/rsyncd.confにuid,gidを追加した。

参考URL。
http://www.itefix.no/i2/node/11817



以下は詳細。

### rsyncがエラーになる。
$ sudo emerge --sync
>>> Starting rsync with rsync://192.168.0.100/gentoo-portage...
>>> Checking server timestamp ...
rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(760) [Receiver=3.0.8]
>>> Retrying...
!!! Exhausted addresses for 192.168.0.100

### rsyncサーバー側の再インストール。
$ sudo emerge --oneshot -avt net-misc/rsync
$ sudo /etc/init.d/rsyncd restart

### rsyncクライアント側。
$ rsync -avz 192.168.0.100:~/.bashrc ./
Enter passphrase for key '/home/username/.ssh/id_rsa':
receiving incremental file list
rsync: ../sysdeps/unix/sysv/linux/getpagesize.c:32: __getpagesize: Assertion `_rtld_global_ro._dl_pagesize != 0' failed.
rsync: connection unexpectedly closed (9 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [Receiver=3.0.8]

### rsyncサーバーの再インストール後。
$ rsync -avz 192.168.0.100:~/.bashrc ./
Enter passphrase for key '/home/username/.ssh/id_rsa':
receiving incremental file list
.bashrc

sent 30 bytes  received 1851 bytes  537.43 bytes/sec
total size is 4908  speedup is 2.61

### rsyncサーバー側のglibcを更新している。
$ sudo genlop sys-libs/glibc
     Sun Apr 24 21:29:33 2011 >>> sys-libs/glibc-2.11.3
     Fri May 20 15:12:51 2011 >>> sys-libs/glibc-2.12.2

### 違うエラーになった。
$ sudo emerge --sync
>>> Starting rsync with rsync://192.168.0.100/gentoo-portage...
>>> Checking server timestamp ...
@ERROR: invalid uid nobody
rsync error: error starting client-server protocol (code 5) at main.c(1516) [Receiver=3.0.8]
>>> Retrying...
!!! Exhausted addresses for 192.168.0.100

試しに別のサーバーで/etc/rsyncd.confの設定を変えて、そこにemerge --syncしたところ動作する。

$ rsync -avz 192.168.0.100::gentoo-portage/app-accessibility/SphinxTrain/ .
@ERROR: invalid uid nobody
rsync error: error starting client-server protocol (code 5) at main.c(1516) [Receiver=3.0.8]

$ rsync -avz 192.168.0.200::gentoo-portage/app-accessibility/SphinxTrain/ .
receiving incremental file list
./
...

http://www.itefix.no/i2/node/11817

### uid, gid 追加。
$ rcsdiff -r1.2 /etc/config-archive/etc/rsyncd.conf,v /etc/rsyncd.conf
===================================================================
RCS file: /etc/config-archive/etc/rsyncd.conf,v
retrieving revision 1.2
diff -r1.2 /etc/rsyncd.conf
16a17,18
>       uid = 65534
>       gid = 65534

### nobodyはある。たぶん1000番ぐらいまでしか調べなくなったとか?
$ grep nobody /etc/passwd
nobody:x:65534:65534:nobody:/:/bin/false

2011-05-18

Scientific Linux release 6.0 のパッケージを減らす

必要なものを消している可能性があります。kvm上では起動します。

### グラフィルカログインOFF
/etc/inittab => 3

### ネットワーク設定。/etc/sysconfig/network-scripts/
ifcfg-Auto_eth0 => ifcfg-eth0

### その他
plymouth => /etc/rc.d/rc.sysinit で必須。

### インストール済みのパッケージ(35)
basesystem, busybox, e2fsprogs, file, grub, kernel, keyutils,
lsof, mailx, man, man-pages, man-pages-overrides, mlocate, nano,
ntp, openssh-clients, openssh-server, passwd, plymouth,
policycoreutils, rcs, rootfiles, rsync, rsyslog,
selinux-policy-targeted, sudo, tar, time, udev, vim-common, wget,
which, yum, yum-plugin-fastestmirror, yum-utils

### インストール済みのパッケージ依存含む(168)
audit-libs, basesystem, bash, binutils, busybox, bzip2,
bzip2-libs, ca-certificates, checkpolicy, chkconfig, coreutils,
coreutils-libs, cpio, cracklib, cracklib-dicts, curl,
cyrus-sasl-lib, db4, db4-utils, dbus-glib, dbus-libs, diffutils,
e2fsprogs, e2fsprogs-libs, elfutils-libelf, ethtool, expat, file,
file-libs, filesystem, findutils, fipscheck, fipscheck-lib,
gamin, gawk, gdbm, glib2, glibc, glibc-common, gmp, gnupg2,
gpgme, grep, groff, grub, grubby, gzip, hwdata, info,
initscripts, iproute, iptables, iputils, kernel, keyutils,
keyutils-libs, krb5-libs, less, libacl, libattr, libblkid,
libcap, libcom_err, libcurl, libdrm, libedit, libffi, libgcc,
libgcrypt, libgpg-error, libidn, libnih, libselinux,
libselinux-utils, libsemanage, libsepol, libss, libssh2,
libstdc++, libusb, libuser, libutempter, libuuid, libxml2,
logrotate, lsof, lua, m4, mailx, man, man-pages,
man-pages-overrides, mingetty, mlocate, module-init-tools, nano,
ncurses, ncurses-base, ncurses-libs, net-tools, nspr, nss,
nss-softokn, nss-softokn-freebl, nss-sysinit, nss-util, ntp,
ntpdate, openldap, openssh, openssh-clients, openssh-server,
openssl, pam, passwd, pcre, pinentry, plymouth,
plymouth-core-libs, policycoreutils, popt, procps, psmisc, pth,
pygpgme, python, python-iniparse, python-libs, python-pycurl,
python-urlgrabber, rcs, readline, redhat-logos, rootfiles, rpm,
rpm-libs, rpm-python, rsync, rsyslog, sed, selinux-policy,
selinux-policy-targeted, setup, shadow-utils, sl-release, sqlite,
sudo, sysvinit-tools, tar, tcp_wrappers-libs, time, tzdata, udev,
upstart, ustr, util-linux-ng, vim-common, vim-minimal, wget,
which, xz, xz-libs, xz-lzma-compat, yum, yum-metadata-parser,
yum-plugin-fastestmirror, yum-utils, zlib

tmpwatch
$ rcsdiff -r1.2 -r1.3 rpm_-aq.txt,v
===================================================================
RCS file: rpm_-aq.txt,v
retrieving revision 1.2
retrieving revision 1.3
diff -r1.2 -r1.3
161a162
> tmpwatch

crontabs
$ rcsdiff -r1.3 -r1.4 rpm_-aq.txt,v
===================================================================
RCS file: rpm_-aq.txt,v
retrieving revision 1.3
retrieving revision 1.4
diff -r1.3 -r1.4
15a16,18
> cronie
> cronie-anacron
> crontabs
16a20
> cyrus-sasl
105a110
> mysql-libs
131a137
> postfix

2011-05-16

nfsのマウントは成功するがflockが失敗する

nfs-utils-1.2はそのままにした。バージョンを下げない。
カーネルの設定をnfs4のサーバーが使えるように変えた。
/etc/exportsの設定をnfs4になるように変えた。

追記: /etc/exportsではなく/etc/fstab。(もしくは手動の場合 mount -t nfs4 ...)
/etc/exportsのfsid=0はmountする際に便利になるnfs4の機能。
http://www.turbolinux.com/products/server/11s/user_guide/nfspseudofs.html

参考URL。
http://www.gentoo.gr.jp/jpmain/tips.xml
http://murasakimania.dip.jp/wordpress/?p=76
http://linuxjf.sourceforge.jp/
http://linuxjf.sourceforge.jp/JFdocs/JFhtml.tar.bz2
http://forums.gentoo.org/viewtopic.php?t=77748
http://www.turbolinux.com/support/document/knowledge/632.html
http://oshiete.goo.ne.jp/qa/4954031.html
http://linux.kororo.jp/cont/server/nfs.php
http://www.asahi-net.or.jp/~aa4t-nngk/nfsv4.html
http://www.turbolinux.com/products/server/11s/user_guide/nfspseudofs.html



下記は詳細です。

原因はnfs3でマウントしているがrpc.lockdが無い。
nfs4ではrpc.lockdは必要なくなったらしくnfs-utils-1.2.3-r1には無い。
nfs-utils-1.0系にはあるようだがパッケージのバージョンにはない。1.1.4-r1が一番古い。
nfsサーバー側でmake oldconfigで設定を更新していたせいでnfs4のサーバーの機能が無効だった。
マウントの設定もnfs4になるようになっていなかった。

対応としてはnfs4にした。
nfsサーバー側のカーネルの設定にnfs4のサーバーを入れた。マウントの設定を変更した。

結果としてnfs経由でemerge xxxでソフトの再インストールに成功した。そのソフトも動作した。
テストはwget,phpとphpの関連パッケージで行った。apacheの再起動後でもphpは使えた。
nfs3のままマウント時に-o nolockの追加で問題ないかもしれない。カーネルのコンパイルでは大丈夫だった。
(/usr/src/linux/でmake vmlinuxなどを行う。出来上がったバイナリで起動できた。)
(成功するのはnfsサーバーがpentium4でnfsクライアントがphenomで同じx86系のため。)



作業の例。
nfsサーバー側がnfs3サーバー対応のカーネルで、nfsクライアント側はnfs3,nfs4クライアント機能対応のカーネルで、それぞれにツールをインストールしnfs3でマウント後にflockできないのでrpc.lockdを起動しようとしたところ、マニュアルは存在するがコマンドはないという状況になり、ツールがnfs4向けと判断したのでnfs4サーバーの機能をnfsサーバー側に追加しflockを含めた動作テストまで行う。

nfsサーバーにnfsのツールをインストールする。
$ sudo emerge --oneshot -avt nfs-utils

nfsサーバー設定。(nfs4になっていない)
$ rcsdiff -r1.1 exports,v /etc/exports
===================================================================
RCS file: exports,v
retrieving revision 1.1
diff -r1.1 /etc/exports
1a2,3
>
> / 192.168.0.100/255.255.255.255(rw,sync,no_root_squash)

nfsサーバーを起動する。
$ sudo /etc/init.d/nfs start
$ sudo rc-update add nfs default

nfsクライアントにnfsのツールをインストールする。
$ sudo emerge --oneshot -avt nfs-utils
$ sudo /etc/init.d/rpc.statd start など

nfsサーバーにchrootする。
$ sudo mount -t nfs 192.168.0.200:/ /mnt/cogentoo-1/
$ cd /mnt/cogentoo-1/
$ sudo chroot . /bin/bash
$ ll /proc/
合計 0
$ source /etc/profile
$ export PS1="(chroot.nfs.cogentoo-1) $PS1"

/procをmountするため終了する。
$ emerge --oneshot -avt wget
!!! It seems that /proc is not mounted. You have been warned.
emergelog(): [Errno 9] Bad file descriptor
emergelog(): [Errno 9] Bad file descriptor

These are the packages that would be merged, in reverse order:
...
^C <= 止めた。
$ exit

/procをmountする。
$ sudo mount -t proc none proc/

再度chrootする。
$ sudo chroot . /bin/bash
$ source /etc/profile
$ export PS1="(chroot.nfs.cogentoo-1) $PS1"

chroot後のnfsクライアント側で実行するとflockできないという警告が出る。
nfsサーバー側でエラーが出ている。
$ emerge --oneshot -avt wget

nfsサーバー側の/vat/log/message
May 15 18:56:52 cogentoo-1 rpc.statd[483]: STAT_FAIL to cogentoo-1 for SM_MON of 192.168.0.100
May 15 18:56:52 cogentoo-1 kernel: lockd: cannot monitor amdgentoo
...

lock関連のデーモンを起動できない。
rpc.lockdが無い。
$ man lockd
$ sudo find / -name rpc.lockd
$

1.0系にあり。
$ e-file rpc.lockd
[I] net-fs/nfs-utils
        Available Versions:     1.0.12-r2 1.0.12-r0 1.0.10-r0 1.0.7-r2 1.0.7-r1 1.0.6-r6 1.0.12-r3
        Last Installed Ver:     1.2.3-r1(2011年05月15日 17時22分26秒)
        Homepage:               http://linux-nfs.org/
        Description:            NFS client and server daemons
        Matched Files:          /sbin/rpc.lockd;
...

1.1から先しか無い。
$ eix ^nfs-utils$
[I] net-fs/nfs-utils
     Available versions:  1.1.4-r1 ~1.1.5 ~1.1.6-r1 ~1.2.0 ~1.2.1 ~1.2.2-r2!t ~1.2.3!t 1.2.3-r1!t {caps elibc_glibc ipv6 kerberos +nfsv3 +nfsv4 nonfsv4 tcpd}
     Installed versions:  1.2.3-r1!t(17時22分22秒 2011年05月15日)(elibc_glibc nfsv3 nfsv4 tcpd -caps -ipv6 -kerberos)
     Homepage:            http://linux-nfs.org/
     Description:         NFS client and server daemons

gentooの場合、設定の変更で古いパッケージの情報も取得できるらしいが、やめておく。

nfsクライアント側のカーネル設定。
$ grep -i nfs /etc/kernels/kernel-config-x86_64-2.6.36-hardened-r9
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
# CONFIG_NFS_V4_1 is not set
CONFIG_ROOT_NFS=y
# CONFIG_NFS_USE_LEGACY_DNS is not set
CONFIG_NFS_USE_KERNEL_DNS=y
# CONFIG_NFSD is not set
CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y

nfsサーバー側のカーネル設定。
$ grep -i nfs /usr/src/linux/.config
CONFIG_NFS_FS=m
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
CONFIG_NFS_V4_1=y
CONFIG_NFSD=m
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3=y
CONFIG_NFSD_V3_ACL=y
# CONFIG_NFSD_V4 is not set
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_NFS_COMMON=y
# CONFIG_NCPFS_NFS_NS is not set

colinuxの方のカーネルを再作成する。

flockのエラーが出る。
$ sudo mount -t nfs 192.168.0.200:/ /mnt/cogentoo-1/
$ nfsstat -m
/mnt/cogentoo-1 from 192.168.0.200:/
 Flags: rw,relatime,vers=3,rsize=32768,wsize=32768,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.0.200,mountvers=3,mountport=37363,mountproto=udp,addr=192.168.0.200

-o nolock追加。
$ sudo mount -t nfs -o nolock 192.168.0.200:/ /mnt/cogentoo-1/
$ nfsstat -m
/mnt/cogentoo-1 from 192.168.0.200:/
 Flags: rw,relatime,vers=3,rsize=8192,wsize=8192,namlen=255,hard,nolock,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.0.200,mountvers=3,mountport=52092,mountproto=udp,addr=192.168.0.200

flockテスト。
$ date >> test.txt
$ php -r '$fp=fopen("test.txt","r+");$res=flock($fp, LOCK_EX); var_dump($res); print fread($fp, 4096);'

テスト。v3でnolockでカーネルコンパイル。ARCH必須。CFLAGSは関係ある?他はない。
CROSS_COMPILEはi686-pc-linux-gccでコンパイルする場合。nfsでアクセスしているので、そのファイルは無い。
export CHOST="i686-pc-linux-gnu"
export CFLAGS="-march=prescott --param l1-cache-size=16 --param l1-cache-line-size=64 -mtune=prescott -fomit-frame-pointer -Os"
export CXXFLAGS="${CFLAGS}"
export ARCH=i386
#export CROSS_COMPILE="i686-pc-linux-"
cp -i /usr/src/colinux/coLinux-0.7.9-src/coLinux-0.7.9/conf/linux-2.6.33.7-config .config
# make menuconfig
# cpuの所をpentimu4に変えた。元のサーバーで実行する。
make vmlinux && make modules && make modules_install

古いのをmake oldconfigしていたのでv4が無かっただけで2.6.33のデフォルトでは設定済みだった。

特にエラーがなく立ち上がったのでflockなくてもカーネルのコンパイルはnfs上でいけるっぽい。
$ uname -a
Linux cogentoo-1 2.6.33.7-co-0.7.9 #1 PREEMPT Sun May 15 23:14:41 JST 2011 i686 Intel(R) Pentium(R) 4 CPU 3.00GHz GenuineIntel GNU/Linux

コンパイル中に秒数が0.7秒ずれている、とか出ていたがそれはntpサーバーのズレが大きいだけなので、大丈夫っぽい。
ntpの大本が10分に1回一気に時計合わせする、ざっくりとしたルーターの機能なのでそれに合わせると結構ずれるからだと思う。

その後クライアント側で -t nfs はOK -t nfs4 はエラー。
$ sudo mount -t nfs4 192.168.0.200:/ /mnt/cogentoo-1/
mount.nfs4: mounting 192.168.0.200:/ failed, reason given by server:
  No such file or directory
### サーバーを修正した。
$ sudo mount -t nfs4 192.168.0.200:/ /mnt/cogentoo-1/
$

サーバー側の修正。危険な設定に変更する。asyncは問題ありかもしれない。
$ rcsdiff exports,v /etc/exports
===================================================================
RCS file: exports,v
retrieving revision 1.2
diff -r1.2 /etc/exports
3c3
< / 192.168.0.100/255.255.255.255(rw,sync,no_root_squash)
---
> / 192.168.0.100/255.255.255.255(rw,async,no_root_squash,fsid=0,no_subtree_check)

クライアントのマウント状態。
$ nfsstat -m
/mnt/cogentoo-1 from 192.168.0.200:/
 Flags: rw,relatime,vers=4,rsize=8192,wsize=8192,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.100,minorversion=0,addr=192.168.0.200

chroot後に実行する。flock成功。
# cd
# pwd
/root
# date > date.txt
(chroot.nfs.cogentoo-1) amdgentoo ~ # php -r '$fp=fopen("date.txt","r+");$res=flock($fp, LOCK_EX); var_dump($res); print fread($fp, 4096);'
bool(true)
2011年  5月 16日 月曜日 00:51:36 JST

成功。/tmpがtmpfs=>マウント前の/tmpになっている。そのままにする。
# ll -A /tmp/
合計 8
drwxrwxrwt 2 root root 4096  1月 29  2010 .ICE-unix/
drwxrwxrwt 2 root root 4096  1月 29  2010 .X11-unix/

これが別のディレクトリの場合/etc/exportsに追加+fsid=0=>nohideなどにするらしい。

サーバー側。
$ sudo tail -f /var/log/messages

クライアント側。
# emerge --oneshot -avt wget

These are the packages that would be merged, in reverse order:

Calculating dependencies... done!
[ebuild   R   ] net-misc/wget-1.12-r3  USE="nls ssl -debug -idn -ipv6 -ntlm -static" 0 kB

Total: 1 package (1 reinstall), Size of downloads: 0 kB

Would you like to merge these packages? [Yes/No] no

Quitting.

サーバー側にnfs関連のエラーが出ない。
nfs4のflock成功。
エラーの場合、下記のようなものが出る。
May 15 17:33:03 cogentoo-1 rpc.statd[483]: STAT_FAIL to cogentoo-1 for SM_MON of 192.168.0.100
May 15 17:33:03 cogentoo-1 kernel: lockd: cannot monitor amdgentoo

コンパイル前。
$ wget www.example.com
...
$ ll
合計 4
-rw-r--r-- 1 usui usui 2945 2011-02-10 02:13:15 index.html
$ ll `which wget`
-rwxr-xr-x 1 root root 259356 2011-03-30 13:42:05 /usr/bin/wget*

クライアント側でコンパイルする。成功。
# emerge --oneshot -avt wget
...
yes
...
>>> Original instance of package unmerged safely.

* Messages for package net-misc/wget-1.12-r3:

* The /etc/wget/wgetrc file has been relocated to /etc/wgetrc
>>> Auto-cleaning packages...

>>> No outdated packages were found on your system.

* Regenerating GNU info directory index...
* Processed 106 info files.

コンパイル後。成功。
$ wget www.example.com
...
$ ll
合計 8
-rw-r--r-- 1 usui usui 2945 2011-02-10 02:13:15 index.html
-rw-r--r-- 1 usui usui 2945 2011-02-10 02:13:15 index.html.1
usui@cogentoo-1 /tmp/wget $ ll `which wget`
-rwxr-xr-x 1 root root 259356 2011-05-16 01:00:52 /usr/bin/wget*

結果として、distccで任せられるサーバーが1台の場合はnfsでまるごとマウントは効果的。
コンパイル時のchecking ... のあたりのdistccを使わない部分も扱えるので有利?
代わりにディスク性能+ネットワーク性能がボトルネックになる?
コンパイル時にcolinuxのmemをある程度上げないと、ものすごく遅いというのを回避できるかもしれない。
gccのコンパイルの場合300以上にしとかないとswapしすぎて遅い、など。
distccはもともと単体でも早いやつを更に早くする、のが得意。
元が遅いとdistccに処理を渡せる部分以外がすごく長い場合、体感できない、かもしれない。
cpuとコンパイルするソフトの種類によっては実際にcpuごとの独自の命令を要求するらしいので失敗するらしい。
インストール中に出来上がったバイナリで、なにかする、など。
それは元のほうでコンパイルするなどの対応。

なにかエラーが出ている。問題ない?
>>>> Emerging (1 of 1) net-misc/wget-1.12-r3
> openpty failed: 'out of pty devices'
>  * wget-1.12.tar.bz2 RMD160 SHA1 SHA256 size ;-) ...                     [ ok ]

クライアント側の利用メモリ結構増えたように思う。キャッシュ?

テスト。
distccで実行。nfsを止めていない。他のサービスも止めていない。
$ time sudo emerge --oneshot -vt wget
...
* Regenerating GNU info directory index...
* Processed 106 info files.

real    5m53.493s
user    1m39.190s
sys     2m44.820s

使っている。
$ sudo DISTCC_DIR=/var/tmp/portage/.distcc distccmon-text 1|grep 192.168.0.100
642  Preprocess  c-ctype.c                                 192.168.0.100[0]
650  Preprocess  xmalloc.c                                 192.168.0.100[1]
645  Preprocess  xalloc-die.c                              192.168.0.100[2]
647  Preprocess  getpass.c                                 192.168.0.100[3]
647  Preprocess  getpass.c                                 192.168.0.100[3]
...
796  Compile     url.c                                     192.168.0.100[1]
802  Preprocess  utils.c                                   192.168.0.100[2]
753  Preprocess  init.c                                    192.168.0.100[3]
804  Preprocess  exits.c                                   192.168.0.100[0]
802  Compile     utils.c                                   192.168.0.100[2]

実行後のメモリ。
$ free
total       used       free     shared    buffers     cached
Mem:         60584      37476      23108          0       9744      10872
-/+ buffers/cache:      16860      43724
Swap:      1048568      31704    1016864

nfsの場合。早くなった。cpuの能力が問題ない場合ディスクがネットワーク経由なので逆転するはず。
# time emerge --oneshot -vt wget
...
* Regenerating GNU info directory index...
* Processed 106 info files.

real    3m0.287s
user    0m29.970s
sys     0m7.570s

distccは動かない。なにかを判定しているとか?
$ sudo DISTCC_DIR=/var/tmp/portage/.distcc distccmon-text 1|grep -v ^$
^C
$

メモリはたぶん/procをマウントしているせいでクライアント側になっている。
# free
total       used       free     shared    buffers     cached
Mem:       8065896    7880360     185536          0    1072260     456600
-/+ buffers/cache:    6351500    1714396
Swap:     15631164          0   15631164

別にディスクの性能がいいわけではないので、場合にもよるだろうが早くなりそう。
distccの場合より問題が発生する事が多そう。
distccが関われない部分でcpuがボトルネックの場合には効果あり。
ホストのcpuが低性能で、distccのサーバーが1台の場合は、distccより確実に早くなる。
設定なしでdistcc自体が動いていないがこれは正常か?この場合、動いても意味はないが。

本当に成功かどうかは emerge -e world などをやってみないとわからない。
なにか問題がでるとおもう。
kvmなどで同じ設定にしたゲストOS上でbinpkg的なことをやってそれを入れたほうが良いかもしれない。

クライアント側。
nfs4の場合で手動の場合、rpcbind, rpc.idmapdだけでいいかもしれない。
init xxxで影響が出るかもしれないので全部登録した方がいい?
$ rc-update show | grep -iP "nfs|rpc"
            rpc.statd |                                   default # rpc.lockd関連?必要なし?nfsmountで必要?
              rpcbind |                                   default # rpc関連全般で必要?
           rpc.pipefs |                                   default # rpc.idmapdで必要?
             nfsmount |                                   default # /etc/fstab関連。
           rpc.idmapd |                                   default # ファイルのユーザー、グループ。

サーバー側。
$ rc-update show | grep -iP "nfs|rpc"
                  nfs |        default

2011-05-14

openbsdのntpサーバーの変更

参考URL。
ローカルのマニュアル(man ntp.conf, w3m /usr/share/doc/ntp-4.2.2p1/index.html, など)
http://software.fujitsu.com/jp/manual/manualfiles/M080035/C120E202/03Z2B/c120e20203z2.pdf

openbsdでデフォルトではないntpdを使用する。
他のOSの場合net-misc/openntpdなどの名前で提供されているものからnet-misc/ntpに変更する。
外部に繋がる場合はデフォルトのほうがいい。
外に聞きに行くntpサーバーにしか聞きに行けない状態で、
何かの都合で盛大に時間がずれる場合で別のntpdを使用する場合の例。

インストール。
$ sudo pkg_add ntp

ntpd_flagsを使うと元のが先に起動するので無理。
$ grep -n ntpd /etc/rc
480:# run rdate before timed/ntpd
493:if [ X"${ntpd_flags}" != X"NO" ]; then
494:    echo -n ' ntpd'; ntpd $ntpd_flags

別名を指定する。
$ cat /etc/rc.conf.local
#ntpd_flags=            # enabled during install
pkgntpd_flags=
rc_scripts=pkgntpd

symlinkを貼る。
$ ll /etc/rc.d/
total 8
-r-xr-xr-x  1 root  bin     151 May 14 10:37:49 2011 ntpd*
lrwxr-xr-x  1 root  wheel     4 May 14 11:04:16 2011 pkgntpd@ -> ntpd
-rw-r--r--  1 root  wheel  1456 May 14 10:06:29 2011 rc.subr

設定ファイル。
$ cat /etc/ntp.conf
tinker panic 0                                          # 1000 => 無制限
tinker stepout 60                                       # 900 => 60
restrict default ignore                                 # 全部拒否
restrict -6 default ignore                              # 全部拒否
restrict 127.0.0.1                                      # 自分OK
restrict -6 ::1                                         # 自分OK
restrict 192.168.0.1 kod nomodify notrap nopeer noquery # ローカルNTPサーバーに問い合わせOK
server 192.168.0.1 iburst minpoll 4 maxpoll 8           # 2^6~2^10 => 2^4~2^8
driftfile /var/db/ntpd.drift                            # 元からあったファイル。

これは「server 外部のNTPサーバー」の場合アクセスが多いので迷惑になる可能性が高い。

update-modulesのメモ

解釈はこうなった。
/etc/modules.d/ は2.4系の設定なので消す。
/etc/modules.conf は2.4系の設定なので消す。
/etc/modprobe.conf は/etc/modprobe.d/と現在の状態をまとめて出力した結果。
/etc/modprobe.d/ は2.6系の設定。
/etc/modprobe.d/ に新しくファイルを作成しても中身を利用している。

/etc/modules.d/, /etc/modules.conf, /etc/modprobe.conf を消して、
/etc/modprobe.d/にファイルを追加した。


$ man update-modules
...
       /etc/modules.d/ - config snippets for old module utilities (<= linux-2.4)
       /etc/modules.conf - sum of all files in /etc/modules.d/
       /etc/modprobe.d/ - config snippets for new module utilities (>= linux-2.6)
       /etc/modprobe.conf - sum of all files in /etc/modprobe.d/

$ find /etc/modprobe.* /etc/modules.* -type f -ls
524372    8 -rw-r--r--   1 root     root         5426  5月  2 04:00 /etc/modprobe.conf
#791990    4 -rw-r--r--   1 root     root         1138  4月 23 11:26 /etc/modprobe.d/bond.conf
#716958    4 -rw-r--r--   1 root     root          122  5月  7  2009 /etc/modprobe.d/i386.conf
#732911    4 -rw-r--r--   1 root     root          950  5月 11 07:09 /etc/modprobe.d/blacklist.conf
#716959    4 -rw-r--r--   1 root     root         1216  5月  7  2009 /etc/modprobe.d/aliases.conf
#732949    4 -rw-r--r--   1 root     root          537  5月 11 07:09 /etc/modprobe.d/pnp-aliases.conf
524960    4 -rw-r--r--   1 root     root         1575  2月 15  2010 /etc/modules.conf
525159    4 -rw-r--r--   1 root     root         1214  1月 19  2009 /etc/modules.d/aliases

パッケージが設置したファイル。
$ find /etc/modprobe.* /etc/modules.* -type f -exec equery belongs {} \;
[ Searching for file(s) /etc/modprobe.conf in *... ]
[ Searching for file(s) /etc/modprobe.d/bond.conf in *... ]
●net-misc/ifenslave-1.1.0-r5 (/etc/modprobe.d/bond.conf)
[ Searching for file(s) /etc/modprobe.d/i386.conf in *... ]
●sys-apps/baselayout-2.0.2 (/etc/modprobe.d/i386.conf)
[ Searching for file(s) /etc/modprobe.d/blacklist.conf in *... ]
●sys-fs/udev-151-r4 (/etc/modprobe.d/blacklist.conf)
[ Searching for file(s) /etc/modprobe.d/aliases.conf in *... ]
●sys-apps/baselayout-2.0.2 (/etc/modprobe.d/aliases.conf)
[ Searching for file(s) /etc/modprobe.d/pnp-aliases.conf in *... ]
●sys-fs/udev-151-r4 (/etc/modprobe.d/pnp-aliases.conf)
[ Searching for file(s) /etc/modules.conf in *... ]
[ Searching for file(s) /etc/modules.d/aliases in *... ]

パッケージに属さないファイル。
524372    8 -rw-r--r--   1 root     root         5426  5月  2 04:00 /etc/modprobe.conf
524960    4 -rw-r--r--   1 root     root         1575  2月 15  2010 /etc/modules.conf
525159    4 -rw-r--r--   1 root     root         1214  1月 19  2009 /etc/modules.d/aliases

モジュールは何も読んでない。
$ lsmod
Module                  Size  Used by

モジュールが読めない。
$ sudo iptables -L -n
...
FATAL: Error inserting ip_tables (/lib/modules/2.6.33.7-co-0.7.9/kernel/net/ipv4/netfilter/ip_tables.ko): Invalid module format
iptables v1.4.10: can't initialize iptables table `filter': iptables who? (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

カーネルバージョン。
$ uname -a
Linux cogentoo-1 2.6.33.7-co-0.7.9 #1 PREEMPT Sat Apr 9 20:30:51 UTC 2011 i686 Intel(R) Pentium(R) 4 CPU 3.00GHz GenuineIntel GNU/Linux

モジュールの日付が違う。
$ ll /lib/modules/2.6.33.7-co-0.7.9/kernel/net/ipv4/netfilter/ip_tables.ko
-rw-r--r-- 1 root root 16758 2011-04-23 08:54:37 /lib/modules/2.6.33.7-co-0.7.9/kernel/net/ipv4/netfilter/ip_tables.ko

作成したカーネルの日付が違う。
$ ll /usr/src/linux/vmlinux
-rwxr-xr-x 1 root root 4304596 2011-04-23 08:27:55 /usr/src/linux/vmlinux*

vmlinuxを更新して再起動。これは更新後に以前のままのvmlinuxで起動していただけ。
$ sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
...
$ lsmod
Module                  Size  Used by
iptable_filter          1034  0
ipt_addrtype            1417  0
xt_dscp                 1155  0
...

バージョンは同じ。何が原因で同じカーネルを再コンパイルしたか記憶にない。
$ uname -a
Linux cogentoo-1 2.6.33.7-co-0.7.9 #1 PREEMPT Sat Apr 23 08:27:48 JST 2011 i686 Intel(R) Pentium(R) 4 CPU 3.00GHz GenuineIntel GNU/Linux

/etc/以下の*.oldを探す。
$ sudo find /etc/ -name "*old"
/etc/blkid.tab.old
/etc/ssl/apache2/server.crt.old
/etc/ssl/apache2/server.key.old

sslのファイルは多分手動で作成したので問題ない。

$ equery belongs /sbin/blkid
[ Searching for file(s) /sbin/blkid in *... ]
sys-apps/util-linux-2.19.1 (/sbin/blkid)

$ ll /etc/blkid.tab*
-rw-r--r-- 1 root root 133 2008-10-10 01:54:27 /etc/blkid.tab
-rw-r--r-- 1 root root 133 2007-02-26 06:29:24 /etc/blkid.tab.old

UUIDを取得するコマンドのキャッシュらしい。
/dev/cobd2に関する記述だが現在繋いでいない。
古いので消す。

バックアップを作成しつつ再作成。
$ sudo update-modules -b -f -v
 * Updating modules.conf ...                                                                                            [ ok ]
 * Updating modules.dep ...                                                                                             [ ok ]
 * Ran: depmod -b '/' -a -F ./lib/modules/2.6.33.7-co-0.7.9/build/System.map 2.6.33.7-co-0.7.9
 * Updating modprobe.conf by hand ...                                                                                   [ ok ]
$ sudo find /etc/ -name "*old"
/etc/ssl/apache2/server.crt.old
/etc/ssl/apache2/server.key.old
/etc/modules.conf.old
/etc/modprobe.conf.old

同じ。
$ md5sum /etc/modules.conf*
90865804ac98ba5fdfdd33b96e322971  /etc/modules.conf
90865804ac98ba5fdfdd33b96e322971  /etc/modules.conf.old

コメントが違う。
$ diff /etc/modprobe.conf.old /etc/modprobe.conf
104a105,107
> # hplip and cups 1.4+ use raw USB devices, so it requires usblp not be loaded
> #blacklist usblp
>

update-modulesにもパッケージにも属さないので消す。
$ equery belongs /etc/modules.d/aliases
[ Searching for file(s) /etc/modules.d/aliases in *... ]
$ equery belongs /etc/modules.d
[ Searching for file(s) /etc/modules.d in *... ]
$ ll /etc/modules.d/aliases /etc/modules.conf
-rw-r--r-- 1 root root 1575 2011-05-13 18:40:50 /etc/modules.conf
-rw-r--r-- 1 root root 1214 2009-01-19 02:51:37 /etc/modules.d/aliases
$ diff /etc/modules.d/aliases /etc/modules.conf
0a1,7
> ### This file is automatically generated by update-modules
> #
> # Please do not edit this file directly. If you want to change or add
> # anything please take a look at the files in ./etc/modules.d and read
> # the manpage for update-modules(8).
> #
> ### update-modules: start processing /etc/modules.d/aliases
42a50,52
>
> ### update-modules: end processing /etc/modules.d/aliases
>
$ 

認識としては下記のようになった。
たぶん過去のbaselayoutなどが設置した。/etc/modules.d/aliases
2.4系 /etc/modules.conf
2.6系 /etc/modprobe.conf
パッケージが設置する2.6用の設定。/etc/modprobe.d/
違う。update-modulesでそれぞれのxxx.d/xxx.confをまとめる。
/etc/modules.d/aliases消したのでもう/etc/modules.confは作成されないかもしれない。

関係ないがモジュール呼び出し部分は自動変換だった。
/etc/modules.autoload.d/は消えるのでバックアップを取ってもいい。
baselayout1=>2
/etc/modules.autoload.d/kernel-2.6 => /etc/conf.d/modules

削除してから実行。
$ sudo update-modules -b -f -v
 * No need to generate modules.conf :)
 * No need to generate modprobe.conf :)

$ lsmod
Module                  Size  Used by
ipv6                  223540  18

net-pf-10 off

$ lsmod
Module                  Size  Used by
off                   223540  18

$ rcsdiff -r1.1 modules,v /etc/conf.d/modules
===================================================================
RCS file: modules,v
retrieving revision 1.1
diff -r1.1 /etc/conf.d/modules
19a20,21
>
> modules="net-pf-10:off"

$ cat /etc/modprobe.conf
alias net-pf-10 off
$ lsmod
Module                  Size  Used by

$ cat /etc/modprobe.conf
#alias net-pf-10 off
$ cat /etc/modprobe.d/_local.conf
alias net-pf-10 off
$ lsmod
Module                  Size  Used by

$ cat /etc/modprobe.conf
#alias net-pf-10 off
$ cat /etc/modprobe.d/_local.conf
#alias net-pf-10 off
$ lsmod
Module                  Size  Used by
ipv6                  223540  18

$ cat /etc/modprobe.conf
cat: /etc/modprobe.conf: そのようなファイルやディレクトリはありません
$ cat /etc/modprobe.d/_local.conf
alias net-pf-10 off
$ lsmod
Module                  Size  Used by

2011-05-10

sys-apps/baselayout-2.0.2のインストール

baselayoutを更新した。
$ eselect news list
...
[14]  read    2011-05-01  Baselayout update
$ eselect news read 14

下記のURLの手順に従う。
http://www.gentoo.org/doc/en/openrc-migration.xml

更新されたファイルを反映させる。
$ dispatch-conf

/etc/conf.d/rcの設定の移動。
変更無しの場合は削除する。
変更している場合は/etc/rc.confに設定値を名前を変えつつ移動してから削除する。
$ sudo rm -i /etc/conf.d/rc

モジュールのロードの設定。自動変換だったのでそのままにする。
$ cat kernel-2.6|grep -v ^#|grep -v ^$
dummy numdummies=1
powernow-k8
$ cat /etc/conf.d/modules|grep -v ^#|grep -v ^$
modules_2_6="${modules_2_6} dummy"
module_dummy_args_2_6="numdummies=1"
modules_2_6="${modules_2_6} powernow-k8"
module_powernow_k8_args_2_6=""

symlinkを確認する。
$ ls -l /etc/runlevels/boot/

lvmが追加された。そのままにする。
$ ls -l /etc/runlevels/boot/lvm
lrwxrwxrwx 1 root root 15 2011-05-09 18:34:23 /etc/runlevels/boot/lvm -> /etc/init.d/lvm*

mdraidを追加する。
$ sudo rc-update add mdraid boot

udevを確認する。
$ ls -l /etc/runlevels/sysinit/

eth0が消えていたので追加する。
$ cd /etc/init.d
$ ln -s net.lo net.eth0

/etc/conf.d/net修正する。
マニュアルは/usr/share/doc/openrc-0.8.2-r1/net.example
書式を修正。(カッコを外すなど)
間違っている点を修正。(rc_need_br0がおかしい。更新でこの部分が無効=>エラーになった。depend_br0が必要なくなったので削除)
sethello 10 => 0に修正。
$ cat /etc/conf.d/net|grep -v ^#|grep -v ^$
bridge_br0="eth0 tap0 tap1 tap2 tap3"
config_eth0="null"
config_br0="192.168.0.100/24"
rc_need_br0="net.eth0 net.tap0 net.tap1 net.tap2 net.tap3"
brctl_br0="setfd 0
sethello 0
stp off"
routes_br0="default via 192.168.0.1"
dns_servers_br0="192.168.0.1"
tuntap_tap0="tap"
config_tap0="null"
tunctl_tap0="-u root"
mac_tap0="52:54:01:12:34:56"
tuntap_tap1="tap"
config_tap1="null"
tunctl_tap1="-u root"
mac_tap1="52:54:01:12:34:57"
tuntap_tap2="tap"
config_tap2="null"
tunctl_tap2="-u root"
mac_tap2="52:54:01:12:34:58"
tuntap_tap3="tap"
config_tap3="null"
tunctl_tap3="-u root"
mac_tap3="52:54:01:12:34:59"
config_dummy0="192.168.0.101 netmask 255.255.255.255"

ファイルが移動している。タイムゾーンはファイル名と記述内容が変わる。
/etc/conf.d/clock => /etc/conf.d/hwclock
TIMEZONE="Japan" => /etc/timezone, Asia/Tokyo

タイムゾーン設定。
$ cat /etc/timezone
Asia/Tokyo

デフォルトのウィンドウマネージャー指定。
$ ll /etc/X11/Sessions/
$ cat /etc/env.d/90xsession
XSESSION="Gnome"

デフォルトのエディタの設定移動。
EDITOR => /etc/rc.conf => /etc/env.d/99editor
$ cat /etc/env.d/99editor
EDITOR="/usr/bin/vim"

ブートログの記録。
$ rcsdiff -r1.5 rc.conf,v /etc/rc.conf
===================================================================
RCS file: rc.conf,v
retrieving revision 1.5
diff -r1.5 /etc/rc.conf
48c48
< #rc_logger="YES"
---
> rc_logger="YES"

仮想化環境ではないので、空の値追加。
$ rcsdiff -r1.6 rc.conf,v /etc/rc.conf
===================================================================
RCS file: rc.conf,v
retrieving revision 1.6
diff -r1.6 /etc/rc.conf
134c134
< #rc_sys=""
---
> rc_sys=""

/etc/conf.d/net.exampleがまだある。
/etc/conf.d/wireless.exampleがまだある。
再起動してもある。そのままにする。
$ ll /etc/conf.d/*example
-rw-r--r-- 1 root root 33669 2011-05-09 18:34:25 /etc/conf.d/net.example
-rw-r--r-- 1 root root 12064 2011-05-09 18:34:25 /etc/conf.d/wireless.example

local.start, local.stopが移動している。
$ ll /etc/conf.d/local.*
$ ll /etc/local.d/

2011-05-09

PHP SCREWのインストール

http://www.pm9.com/newpm9/itbiz/php/phpscrew/
http://slashdot.jp/~bero/journal/508118
http://xcache.lighttpd.net/changeset/548
http://phpspot.org/blog/archives/2006/05/php_40.html

# ダウンロード後、解凍してphpizeを実行する。
$ tar xvzf php_screw-1.5.tar.gz
$ cd ./php_screw-1.5/
$ lv README.jp
$ phpize

# makeが失敗する。
$ ./configure
$ make

# LT_INITのエラーが出る場合、修正する。
# もしくはlibtool-1.5の環境でphpizeを実行した結果をディレクトリごとコピーする。
$ libtool --version|head -n1
libtool (GNU libtool) 2.2.10
$ rm -i aclocal.m4
$ autoreconf -ifv

# makeが失敗する。
$ ./configure
$ make

# php5.3の場合、修正する。
$ cp -i php_screw.c php_screw.c.org
$ emacs php_screw.c
$ diff php_screw.c.org php_screw.c
124c124,128
<       CG(extended_info) = 1;
---
> #ifdef ZEND_COMPILE_EXTENDED_INFO
>         CG(compiler_options) |= ZEND_COMPILE_EXTENDED_INFO;
> #else
>         CG(extended_info) = 1;
> #endif
133c137,141
<       CG(extended_info) = 1;
---
> #ifdef ZEND_COMPILE_EXTENDED_INFO
>         CG(compiler_options) |= ZEND_COMPILE_EXTENDED_INFO;
> #else
>         CG(extended_info) = 1;
> #endif

# 暗号化SEEDキーを修正する。
$ cp -i my_screw.h my_screw.h.org
$ emacs my_screw.h-make.php
$ cat my_screw.h-make.php
short pm9screw_mycryptkey[] = {
<?php
for ($i = 1; $i < pow(2, 16); $i++)
{
    if ($i != 1)
    {
        print ", ";
    }
    print mt_rand(-32768, 32767);
}
print "\n";
?>
};
$ php my_screw.h-make.php > my_screw.h
$ diff my_screw.h.org my_screw.h|lv

# 再度実行する。
$ make clean
$ ./configure
$ make
$ cd ./tools/
$ make

# インストールする。
$ cd ../modules/
$ strip php_screw.so
$ sudo cp -i php_screw.so /usr/lib64/php5.3/lib/extensions/no-debug-non-zts-20090626/php_screw.so
$ sudo chmod 0644 /usr/lib64/php5.3/lib/extensions/no-debug-non-zts-20090626/php_screw.so

# phpの設定ファイルを修正する。
$ sudo su -
$ echo extension=php_screw.so >> /xxx/php.ini
$ exit

# 再起動後、成功の場合、phpinfo()にphp_screwの項目が出現する。
$ sudo /etc/init.d/apache2 restart

# コマンドをインストールする。
$ cd ../tools/
$ make
$ strip screw
$ sudo cp -i screw /xxx/bin/

# テストする。
$ cd /var/www/xxx/
$ emacs sample.php
$ cat sample.php
<?php
print date("Y-m-d H:i:s");
$ screw sample.php
$ rm -i sample.php.screw

# http://example.com/sample.phpにアクセス出来ればOK

バイナリデータの解析に詳しい場合php_screw.soから暗号化SEEDキーを取り出すのは簡単らしいです。
暗号化したxxx.phpの中身を閲覧出来る状況であればphp_screw.soの中身も閲覧できるかもしれないので、問題ないかどうか検討するべきでしょう。
例えば/var/www/html/以下のxxx.phpファイルを通常ファイルに設定してapacheを再起動してしまったという場合、http経由でphpの中身をダウンロードできますが、php_screw.soが見れない場合が多いので力技で解凍することになり、暗号化SEEDキーを長めにしておけば元のファイルを復元するまでに、ある程度の時間を稼げるでしょう。
apacheのプロセスの寿命を寿命無し、プロセス数固定にして、apache起動後にphp_screw.soを消すとどうでしょう?
apache起動サーバーが別にあるとして、php_screw.so送信=>apache起動コマンド送信=>送ったphp_screw.so削除、でどうでしょう?
メモリのデータを解析できる場合、意味が無いのかもしれません。
selinuxやtomoyoなどのソフトを併用するとどうでしょう?
php_screw.soと利用するすべてのxxx.phpをセットであらかじめ作成しておいてapache再起動時には入れ替えるというのはどうでしょう?
その面倒さに見合った効果が得られるでしょうか?
攻撃者がapacheの動いているOSにログイン出来ている時点で、きっとあまり意味が無いでしょうか?
有料の暗号化ソフトもあるので、それも検討するべきでしょう。

xcacheのList PHPではHitsは増えるので毎回復号化している訳ではない?

2011-05-08

google日本語入力の削除

かなり前にインストールしたgoogle日本語入力を使っていなかったが消えなくなっていた。
「プログラムの追加と削除」でアンインストール時にgooglejapaneseinput.msiが無いと表示される。
インストールされているバージョンは0.8.186.0だった。
下記のURLは404 not foundだった。
http://dl.google.com/japanese-ime/0.8.186.0/googlejapaneseinput.msi
C:\Program Files\Google以下を検索するとgooglejapaneseinput.msiが2つあったが、
アンインストール時に、そのファイルを指定してもバージョンが違うと表示される。
再インストールをしようとしてもインストール時のgooglejapaneseinput.msiが必要のようでエラーになる。

http://www.softpedia.com/progDownload/Windows-Installer-CleanUp-Utility-Download-18442.htmlから、
msicuu2.exeをダウンロード後、解凍し、msicuu.msiをクリックし、途中でignoreをクリックする。
C:\Program Files\Windows Installer Clean UpにMsiZapU.exe(windowsXPの場合)をMsiZap.exeにコピーしてリネームする。
起動後にgoogle日本語入力を選択してremoveをクリックする。しばらくすると消える。ファイルなどは消えない。
再度google日本語入力をインストールすると今度はエラーにならなかった。

1.0.556.0になった。
念のためダウンロードした。
http://dl.google.com/japanese-ime/1.0.556.0/googlejapaneseinput32.msi
http://dl.google.com/japanese-ime/1.0.556.0/googlejapaneseinput64.msi

参考URL。
http://www.google.com/support/forum/p/ime/thread?tid=64b34896c057be7f&hl=ja
http://www21.atwiki.jp/1c9a233bf32780504f8c/
http://okwave.jp/qa/q6011392.html
http://www.softpedia.com/progDownload/Windows-Installer-CleanUp-Utility-Download-18442.html

2011-05-07

clamav-milterの設定

clamavのインストール。
$ sudo USE="milter" emerge --oneshot -avt app-antivirus/clamav

/etc/conf.d/clamdの設定。
$ rcsdiff -r1.2 conf.d/clamd,v /etc/conf.d/clamd
===================================================================
RCS file: conf.d/clamd,v
retrieving revision 1.2
diff -r1.2 /etc/conf.d/clamd
11c11
< START_MILTER=no
---
> START_MILTER=yes

/etc/clamav-milter.confの設定。
$ rcsdiff -r1.1 clamav-milter.conf,v /etc/clamav-milter.conf
===================================================================
RCS file: clamav-milter.conf,v
retrieving revision 1.1
diff -r1.1 /etc/clamav-milter.conf
29c29
< #MilterSocketMode 660
---
> MilterSocketMode 660
166c166
< #OnInfected Quarantine
---
> OnInfected Reject
178c178
< #RejectMsg
---
> RejectMsg The clamav-milter virus checker found "%v".
188c188
< #AddHeader Replace
---
> AddHeader Replace
266c266
< #LogInfected Basic
---
> LogInfected Full

/etc/groupの設定。
$ rcsdiff -r1.1 group,v /etc/group
===================================================================
RCS file: group,v
retrieving revision 1.1
diff -r1.1 /etc/group
73c73
< clamav:x:105:
---
> clamav:x:105:postfix

/etc/postfix/main.cfの設定。
$ rcsdiff -r1.6 postfix/main.cf,v /etc/postfix/main.cf
===================================================================
RCS file: postfix/main.cf,v
retrieving revision 1.6
diff -r1.6 /etc/postfix/main.cf
654a655,658
>
> smtpd_milters         = unix:/var/run/clamav/clamav-milter.sock
> non_smtpd_milters     = unix:/var/run/clamav/clamav-milter.sock
> milter_default_action = accept

/etc/clamd.confの設定。
$ rcsdiff -r1.1 clamd.conf,v /etc/clamd.conf
===================================================================
RCS file: clamd.conf,v
retrieving revision 1.1
diff -r1.1 /etc/clamd.conf
88c88
< #LocalSocketMode 660
---
> LocalSocketMode 660

ソフトウェアの再起動。
sudo /etc/init.d/postfix restart
sudo /etc/init.d/clamd restart

ログの閲覧。それぞれ個別の画面で起動する。
sudo tail -f /var/log/mail.log
sudo tail -f /var/log/clamav/clamav-milter.log
sudo tail -f /var/log/clamav/clamd.log

メール送信テスト。
mail username@example.com

届いたメールのメールヘッダで動作確認。
X-Virus-Scanned: clamav-milter 0.97 at amdgentoo
X-Virus-Status: Clean

eicar.comという名前のテストウィルスを添付してメール送信。
エラーメールが送信元に届く。
$ grep -A1 clamav-milter ~/.maildir/new/1304735675.V903If29a4M131908.amdgentoo
: The clamav-milter virus checker found
    "Eicar-Test-Signature".
--
Diagnostic-Code: X-Postfix; The clamav-milter virus checker found
    "Eicar-Test-Signature".
--
X-Virus-Scanned: clamav-milter 0.97 at amdgentoo
X-Virus-Status: Infected (Eicar-Test-Signature)

設定ファイルのマニュアル。
man clamav-milter.conf
man clamd.conf

参考URL。
http://www.postfix-jp.info/trans-2.3/jhtml/MILTER_README.html#plumbing
http://last-resort.seesaa.net/article/105900490.html
http://kamiyn.wordpress.com/2009/08/13/postfix-clamav-0-95-2-milter/
http://xoops.fens.net/modules/wiki/?Linux%2FMemo%2Fclamav
http://on-o.com/page/diary/20110320.html
http://eazyfox.homelinux.org/security/Security24.html
http://www.eicar.org/anti_virus_test_file.htm
http://www.postfix.org/postconf.5.html

google.csiのエラー

行: 2620
文字: 1
エラーコード: 0
エラーメッセージ: 'google.csi' は Null またはオブジェクトではありません。
URL: http://...
「デザイン」 => 「読者」を外す。

2011-05-06

TOMOYO Linuxのインストール

インストールする。
--menuconfig(make menuconfigと同じ)でtomoyoで検索(/)してマッチした値をonにする。
$ sudo emerge --oneshot -avt =sys-kernel/hardened-sources-2.6.36-r9
$ ll /usr/src/linux
lrwxrwxrwx 1 root root 24 2011-05-06 06:26:16 /usr/src/linux -> linux-2.6.36-hardened-r9/
$ sudo genkernel --kernel-config=/etc/kernels/kernel-config-x86_64-2.6.36-gentoo-r8 --menuconfig all
...
$ grep -i tomoyo /etc/kernels/kernel-config-x86_64-2.6.36-hardened-r9
CONFIG_SECURITY_TOMOYO=y
CONFIG_DEFAULT_SECURITY_TOMOYO=y
CONFIG_DEFAULT_SECURITY="tomoyo"

grubを修正して作成したカーネルで再起動する。

インストールの確認。
$ grep tomoyo_supervisor /proc/kallsyms
ffffffff8124d6b2 T tomoyo_supervisor

ツールをインストールする。
2.6.36なのでtomoyo-tools-2.3.0_p20100820にする。
$ sudo ACCEPT_KEYWORDS="~*" emerge --oneshot -avt =sys-apps/ccs-tools-1.8.0_p20110214
$ sudo emerge -Cav sys-apps/ccs-tools
$ sudo ACCEPT_KEYWORDS="~*" emerge --oneshot -avt =sys-apps/tomoyo-tools-2.3.0_p20100820

sys-apps/ccs-tools-1.8.0_p20110214のインストール後のコメントの一部。
ccs-toolsの方が_pYYYYMMDDの部分の日付が新しいので間違っているかもしれない。
* For >=kernel-2.6.36:
 * http://tomoyo.sourceforge.jp/2.3/
 *
 * For >=kernel-2.6.30:
 * http://tomoyo.sourceforge.jp/2.2/
 *
 * For <kernel-2.6.30 + ccs-patch:
 * http://tomoyo.sourceforge.jp/1.8/

sys-kernel/ccs-sourcesというのがあるが、こっちの方がいいのかもしれない。
$ eix -S tomoyo -c
[N] sys-apps/ccs-tools (~1.8.0_p20110214): TOMOYO Linux tools
[D] sys-apps/tomoyo-tools (2.3.0_p20100820@2011年05月06日 -> ~2.3.0_p20100820): TOMOYO Linux tools
[N] sys-kernel/ccs-sources [1] (~2.6.36(2.6.36)): TOMOYO Linux sources for the 2.6 kernel tree
[1] "sunrise" /var/lib/layman/sunrise

Found 3 matches.

バージョンを確認する。
$ grep -nriP -A6 "static.*tomoyo_read_version" /usr/src/linux/security/tomoyo/
/usr/src/linux/security/tomoyo/common.c:1751:static void tomoyo_read_version(struct tomoyo_io_buffer *head)
/usr/src/linux/security/tomoyo/common.c-1752-{
/usr/src/linux/security/tomoyo/common.c-1753-   if (!head->r.eof) {
/usr/src/linux/security/tomoyo/common.c-1754-           tomoyo_io_printf(head, "2.3.0");
/usr/src/linux/security/tomoyo/common.c-1755-           head->r.eof = true;
/usr/src/linux/security/tomoyo/common.c-1756-   }
/usr/src/linux/security/tomoyo/common.c-1757-}

バージョン2.3.0をインストールしました。
フル機能を使用する場合は1.8系らしいので、その場合はインストールに失敗しています。
ここから先はhttp://tomoyo.sourceforge.jp/2.3/をご参照ください。

機能があるかどうか。
$ grep tomoyo_supervisor /proc/kallsyms
ffffffff8124d6b2 T tomoyo_supervisor

grubの設定の有無。yなので無し。
$ grep CONFIG_DEFAULT_SECURITY_TOMOYO /etc/kernels/kernel-config-x86_64-2.6.36-hardened-r9
CONFIG_DEFAULT_SECURITY_TOMOYO=y

初期化する。
$ sudo emerge --config =sys-apps/tomoyo-tools-2.3.0_p20100820


Configuring pkg...

Creating policy directory... OK
Creating exception policy... OK
Creating domain policy... OK
Creating manager policy... OK
Creating default profile... OK
Creating memory quota policy... OK

$ sudo ls -al /etc/tomoyo/
合計 120
drwx------   2 root root  4096  5月  6 08:29 .
drwxr-xr-x 100 root root 12288  5月  6 08:29 ..
-rw-r--r--   1 root root    23  5月  6 08:29 domain_policy.conf
-rw-r--r--   1 root root 89355  5月  6 08:29 exception_policy.conf
-rw-r--r--   1 root root   160  5月  6 08:29 manager.conf
-rw-r--r--   1 root root    83  5月  6 08:29 meminfo.conf
-rw-r--r--   1 root root   403  5月  6 08:29 profile.conf
$ grep -A3 pkg_config /usr/portage/sys-apps/tomoyo-tools/tomoyo-tools-2.3.0_p20100820.ebuild
pkg_config() {
        /usr/$(get_libdir)/tomoyo/init_policy
}

動作チェック。
$ sudo tomoyo-editpolicy /etc/tomoyo/
q

設定ファイルを読まない。
$ sudo tomoyo-editpolicy
<<< Domain Transition Editor >>>      12 domains    '?' for help

<kernel>
    0:  0     <kernel>
    1:  0  *      /sbin/modprobe
    2:  0             /bin/cat
    3:  0             /bin/echo
    4:  0             /bin/grep
    5:  0             /bin/rm
    6:  0             /bin/touch
    7:  0             /bin/uname
    8:  0             /sbin/insmod
    9:  0             /usr/bin/basename
   10:  0             /usr/bin/cut
   11:  0             /usr/bin/find

初期化してから一回再起動しないとダメっぽい。
再起動後、表示が増えた。
$ sudo tomoyo-editpolicy
...

マニュアルの内容を試す。
$ sudo /etc/init.d/apache2 restart
$ sudo tomoyo-editpolicy
...

ログを分ける。
$ diff syslog-ng.conf.2011-05-06 syslog-ng.conf
26a27
> destination tomoyo { file("/var/log/tomoyo.log"); };
92a94
> filter f_tomoyo { match("^(ERROR|WARNING): Access (.*) denied for " value("MESSAGE")); };
93a96
> log { source(kernsrc); filter(f_tomoyo); destination(tomoyo); };

ccs-toolsだと別の方法で取れるようだが取れない。カーネルが対応していない。
たぶんccs-toolsはsys-kernel/ccs-sourcesを入れないと使えない。
$ sudo ACCEPT_KEYWORDS="~*" emerge --oneshot -avt =sys-apps/ccs-tools-1.8.0_p20110214
$ which ccs-auditd
/usr/sbin/ccs-auditd
$ sudo emerge --config =sys-apps/ccs-tools-1.8.0_p20110214


Configuring pkg...

/var/tmp/portage/sys-apps/ccs-tools-1.8.0_p20110214/temp/environment: line 2047: /usr/lib64/ccs/init_policy.sh: No such file or directory

$ grep -A3 pkg_config /usr/portage/sys-apps/ccs-tools/ccs-tools-1.8.0_p20110214.ebuild
pkg_config() {
        /usr/$(get_libdir)/ccs/init_policy.sh
}
$ sudo /usr/lib64/ccs/init_policy
$ sudo ls -al /etc/ccs/
...
$ sudo ccs-editpolicy
You can't use this editor for this kernel.
$ sudo ACCEPT_KEYWORDS="~*" emerge --oneshot -avt =sys-apps/tomoyo-tools-2.3.0_p20100820

学習モードで.htaccessを許可してから強制モードにすると.htaccessではなくindex.htmlのエラーになった。
動作確認はできた。
$ sudo tail -f /var/log/tomoyo.log
May  6 12:46:11 amdgentoo kernel: ERROR: Access read /var/www/localhost/htdocs/.htaccess denied for /usr/sbin/apache2
May  6 12:46:27 amdgentoo kernel: ERROR: Access read /var/www/localhost/htdocs/.htaccess denied for /usr/sbin/apache2
May  6 12:46:32 amdgentoo kernel: ERROR: Access read /var/www/localhost/htdocs/.htaccess denied for /usr/sbin/apache2
May  6 12:46:33 amdgentoo kernel: ERROR: Access read /var/www/localhost/htdocs/.htaccess denied for /usr/sbin/apache2
May  6 12:47:02 amdgentoo kernel: ERROR: Access read /var/www/localhost/htdocs/.htaccess denied for /usr/sbin/apache2
May  6 12:47:03 amdgentoo kernel: ERROR: Access read /var/www/localhost/htdocs/.htaccess denied for /usr/sbin/apache2
May  6 12:47:11 amdgentoo kernel: ERROR: Access read /var/www/localhost/htdocs/.htaccess denied for /usr/sbin/apache2
May  6 12:48:26 amdgentoo kernel: ERROR: Access read /var/www/localhost/htdocs/index.html denied for /usr/sbin/apache2
May  6 13:32:55 amdgentoo kernel: ERROR: Access read /var/www/localhost/htdocs/index.html denied for /usr/sbin/apache2
May  6 13:32:59 amdgentoo kernel: ERROR: Access read /var/www/localhost/htdocs/index.html denied for /usr/sbin/apache2

インストールしたのはTOMOYO Linux 2系だった。
http://tomoyo.sourceforge.jp/documentation.html.ja

参考。
http://tomoyo.sourceforge.jp/1.8/
http://tomoyo.sourceforge.jp/2.3/
http://sourceforge.jp/projects/tomoyo/lists/archive/dev/2009-July/thread.html#1180

2011-05-05

mdadmのメモ

たぶんソフトウェアの更新で/etc/mdadm.confを全部上書きして全部コメントの内容になっていてた。
$ grep -v ^# /etc/mdadm.conf|wc -l
0
手動で設定した内容と名前が同じだったので問題が出ていなかった。
そのままにする。
$ ll -d /dev/md* /dev/md/*
drwxr-xr-x 2 root root  120 2011-05-04 22:56:47 /dev/md/
brw-rw---- 1 root disk 9, 1 2011-05-04 22:58:18 /dev/md1
brw-rw---- 1 root disk 9, 2 2011-05-04 22:56:48 /dev/md2
brw-rw---- 1 root disk 9, 3 2011-05-04 22:56:48 /dev/md3
brw-rw---- 1 root disk 9, 4 2011-05-04 22:58:18 /dev/md4
lrwxrwxrwx 1 root root    6 2011-05-04 22:58:18 /dev/md/1_0 -> ../md1
lrwxrwxrwx 1 root root    6 2011-05-04 22:56:48 /dev/md/2_0 -> ../md2
lrwxrwxrwx 1 root root    6 2011-05-04 22:56:48 /dev/md/3_0 -> ../md3
lrwxrwxrwx 1 root root    6 2011-05-04 22:58:18 /dev/md/4_0 -> ../md4

$ co -r1.6 /etc/config-archive/etc/mdadm.conf,v
/etc/config-archive/etc/mdadm.conf,v  -->  mdadm.conf
revision 1.6
done
$ cat mdadm.conf
ARRAY /dev/md4 metadata=0.90 UUID=a42325f2:c138a657:be2897ad:7c0a08fb
ARRAY /dev/md3 metadata=0.90 UUID=a6c44e73:7a87e137:6e595670:16426721
ARRAY /dev/md2 metadata=0.90 UUID=639eedc5:3791a9bd:c38cecca:ed7cddb1
ARRAY /dev/md1 metadata=0.90 UUID=7b2b6879:101de27b:695d885e:dd914886

ダメな場合、構成が変わっているかもしれない。
以前HDDの交換でmd123~md127という風に数字が変わった場合もある。
mdadm --detail --scan > /etc/mdadm.conf.new

http://www.gentoo.org/doc/ja/gentoo-x86-tipsntricks.xml

OS起動画面で設定がないという警告が出ている。
修正した方が良い。

apacheの自己署名証明書の作成

http://www.openssl.org/docs/HOWTO/keys.txt
http://www.openssl.org/docs/HOWTO/certificates.txt
http://www.maruko2.com/mw/Apache/SSL%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%A8mod_ssl%E3%81%AE%E8%A8%AD%E5%AE%9A
http://unixlife.jp/unixlife/linux/s-openssl.jsp

作成します。
作業場所は/tmp/sslではなく/root/tmp/sslなどの作業するユーザーにしか閲覧できない場所が良いです。
$ mkdir /tmp/ssl
$ cd /tmp/ssl/
$ openssl genrsa -out privkey.pem 5678
$ openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095
$ openssl x509 -in cacert.pem -text|lv
$ sudo chmod 0400 cacert.pem privkey.pem

コピーします。
$ grep /etc/ssl /etc/apache2/vhosts.d/00_default_ssl_vhost.conf|grep -vP "^\s*#"
SSLCertificateFile /etc/ssl/apache2/server.crt
SSLCertificateKeyFile /etc/ssl/apache2/server.key
$ cd /etc/ssl/apache2/
$ sudo cp -i /tmp/ssl/* .
$ sudo mv -i server.crt server.crt.old
$ sudo mv -i server.key server.key.old
$ sudo ln -s privkey.pem server.key
$ sudo ln -s cacert.pem server.crt
$ sudo chmod 0400 cacert.pem privkey.pem
$ rm -ri /tmp/ssl/

apacheを再起動します。
$ sudo /etc/init.d/apache2 restart

有料の証明書の場合、
openssl req -new -key privkey.pem -out cert.csr
金とcert.csrを渡してcacert.pemをもらうような流れになります。

2011-05-03

kvmにopenbsdをインストール

ホストOSの作業。

20GBの実体のある空ファイルを作成する。
$ dd if=/dev/zero of=openbsd-4.9.img bs=1024M count=20

ミラーサイトからインストールCDをダウンロードする。
$ wget http://ftp.jaist.ac.jp/pub/OpenBSD/4.9/amd64/install49.iso

virt-managerでinstall49.isoとopenbsd-4.9.imgで新規作成する。
名前: openbsd49など
→進む
  (●)ISOイメージを使用
  [/xxx/install49.iso]
  OSの種類   [UNIX}
  バージョン [OpenBSD 4.x]
→進む
→進む
  (●)管理しているストレージか、他の既存のストレージを選択する
  [/xxx/openbsd-4.9.img]
→進む
  詳細なオプション
  共有デバイス名を指定
  ブリッジ名: br0
→完了

br0はgentooの場合/etc/conf.d/netに設定する。
tapXは手動でkvmを起動する場合に必要なだけで、br0があればvirt-managerがvnet1などを作る。
$ cat /etc/conf.d/net|grep -v ^#|grep -v ^$
bridge_br0="eth0 tap0 tap1 tap2 tap3"
config_eth0=( "null" )
config_br0=( "192.168.0.100/24" )
routes_br0=( "default via 192.168.0.1" )
dns_servers_br0="192.168.0.1"
brctl_br0=( "setfd 0" "sethello 10" "stp off" )
RC_NEED_br0=( "net.tap0" "net.tap1" "net.tap2" "net.eth3" )
depend_br0 ()
{
  need net.eth0 net.tap0 net.tap1 net.tap2  net.tap3
}
config_tap0=( "null" )
tuntap_tap0="tap"
tunctl_tap0="-u root"
mac_tap0="52:54:01:12:34:56"
config_tap1=( "null" )
tuntap_tap1="tap"
tunctl_tap1="-u root"
mac_tap1="52:54:01:12:34:57"
config_tap2=( "null" )
tuntap_tap2="tap"
tunctl_tap2="-u root"
mac_tap2="52:54:01:12:34:58"
config_tap3=( "null" )
tuntap_tap3="tap"
tunctl_tap3="-u root"
mac_tap3="52:54:01:12:34:59"
config_eth0=( "null" )
config_dummy0=( "192.168.0.101 netmask 255.255.255.255" )

CDから起動するとbsd.rdが起動して(I)nstallなどを選択する画面になる。
下記は処理の流れ。大体合ってる。[xxx]はEnterを押すと入るデフォルト値。
インストール: i
キーボード  : jp
ホスト名    : openbsd49など
LANカード   : [pcn0]
IPアドレス  : 192.168.0.xxx
ネットマスク: [255.255.255.0]
IPv6        : [none]
終了確認    : [done]
ゲートウェイ: 192.168.0.1 (←がルーターの場合)
ドメイン    : localdomainなど
ネームサーバ: 192.168.0.1 (ルーターの機能でONにしている場合)
手動で設定  : [no]
rootパス    : xxxx
確認        : xxxx
sshd起動    : [yes]
ntpd起動    : yes
ntpサーバー : 192.168.0.1 (ルーターの機能でONにしている場合)
グラフィカルログイン: no
コンソールcom0: [no]
一般ユーザー: username
フルネーム  : [username]
パスワード  : xxxx
確認        : xxxx
sshdでrootログイン無効: [yes]
タイムゾーン: [Asia/Tokyo]
ハードディスク: [wd0]
マスターブートレコード: [whole]

エディットを選択する。
パーテーション: e
h          : ヘルプ
z          : 削除
X          : 機能追加
a          : パーテーション追加
[a]        : パーテーション番号
[64]       : パーテーション始まり
1048576    : パーテーションサイズ(512MB)
[4.2BSD]   : ファイルシステム種類
/          : マウントするディレクトリ名
[2048]     : フラグメントサイズ
[16384]    : ブロックサイズ
a
[b]
[1048640]
1048576    : パーテーションサイズ(512MB)
[swap]     : スワップ
a
[d]
[2097216]
2097152    : パーテーションサイズ(1GB)
[4.2BSD]
/tmp
4096
[32768]
a
[e]
[4194368]
16777216   : パーテーションサイズ(8GB)
[4.2BSD]
/var
4096
[32768]
a
[f]
[20971584]
[20958066] : パーテーションサイズ(残り全部) 
[4.2BSD]
/usr
4096
[32768]
p k        : KB単位で表示
p m        : MB単位で表示
p g        : GB単位で表示
p          : free: 50 とあるがそのままにしておく
q          : セーブ

# 起動後、確認すると下記のようになる。
# "/"をfsize=4096にすると起動しなかった。
# $ sudo disklabel wd0 | tail -n7
# #                size           offset  fstype [fsize bsize  cpg]
#   a:          1048576               64  4.2BSD   2048 16384    1 # /
#   b:          1048576          1048640    swap
#   c:         41943040                0  unused
#   d:          2097152          2097216  4.2BSD   4096 32768    1 # /tmp
#   e:         16777216          4194368  4.2BSD   4096 32768    1 # /var
#   f:         20958016         20971584  4.2BSD   4096 32768    1 # /usr

ラベル      : [y]
フォーマットが終わるまで待つ。
インストールメディア: [cd]
CDドライブ  : [cd0]
OSの種類    : [4.9/amd64]

選択
-all
bsd bsd.rd bsd.mp base49.tgz etc49.tgz comp49.tgz man49.tgz
man49.tgzまで全部選択した。
終了        : [done]
コピーが終わるまで待つ。

終わり      : [done]
reboot      : 再起動

ブート画面
boot> bsd -c
UKC> disable mpbios
53 mpbios0 disabled
UKC> quit
起動した場合
login:
まで表示される。

sshでログインできる。
$ ssh username@192.168.0.xxx

sudoの設定。普通は「NOPASSWD:」無しの方が良い。
$ su -
$ visudo
# %wheel  ALL=(ALL) NOPASSWD: SETENV: ALL
↓
%wheel  ALL=(ALL) NOPASSWD: SETENV: ALL
$ exit

viのコマンド。
x    1文字削除
dd   1行削除
yy   1行コピー
p    1行ペースト
:i   入力        Escで戻る
:a   後ろに入力  Escで戻る
:wq  セーブして終了
:q!  セーブしないで終了

viのマニュアル。
$ man vi

コピーして修正したら確認してもいい。
$ su -
$ cp -pi /etc/sudoers /etc/sudoers.old
$ visudo
$ diff /etc/sudoers /etc/sudoers.old

カーネルの設定。
$ sudo cp -pi /bsd /bsd.org
$ sudo config -ef /bsd
ukc> disable mpbios
ukc> quit
$ md5 /bsd /bsd.org
MD5 (/bsd) = e2f3c034ed6a86cdfdac06e58da9f963
MD5 (/bsd.org) = a2ad93f7ac14a5f54bce38b4e731a16e
再起動して設定無しで起動できればOK.
ダメな場合、元のカーネルで起動する。
boot> bsd.org -c

/homeを移動する。rootでログインする。
mv -i /home /var
ln -s /var/home /home

ログインシェルをbashなどにする。
$ export PKG_PATH=http://ftp.jaist.ac.jp/pub/OpenBSD/4.9/packages/amd64/
$ sudo pkg_add wget
$ sudo pkg_add bash
$ chsh -s /usr/local/bin/bash
PKG_PATHを.bashrcなどに書く。

設定ファイルの例。
$ cat ~/.bash_profile
[[ -f ~/.bashrc ]] && . ~/.bashrc
$ cat ~/.bashrc | grep -v ^$ | perl -ne 'print if(!m/^\s*#/)'
if [[ -n "$PS1" ]]; then
        PS1="\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] "
        alias ls='ls -CF'
        alias ll='ls -lT'
        alias rm='rm -i'
        alias cp='cp -i'
        alias mv='mv -i'
        function share_history
        {
                history -a
                history -c
                history -r
        }
        PROMPT_COMMAND='share_history'
        shopt -u histappend
        HISTFILESIZE=2097152
        HISTSIZE=10000
        HISTCONTROL=ignoreboth
        HISTIGNORE='?:??:???'
        export PKG_PATH=http://ftp.jaist.ac.jp/pub/OpenBSD/4.9/packages/`machine -a`/
fi
$ cat ~/.inputrc
set completion-ignore-case on
"\C-n":history-search-forward
"\C-p":history-search-backward

メールが1件あるので読む。
$ mail
$ man afterboot
公式サイトのマニュアルなどを見る。



参考。
http://apis.jpn.ph/fswiki/wiki.cgi?page=OpenBSD%2FRebuild#p11
http://karl0204.at.webry.info/200907/article_3.html
http://www.openbsd.org/anoncvs.html
http://www.openbsd.org/faq/ports/ports.html#PortsFetch
http://d.hatena.ne.jp/oogatta/20100509/1273372980
http://sinensis.plala.jp/mm/dcc0c3ad2de5ff3633640eda7617f4927237b128/?order=-cdate#c8f7a9f38878ca2c622b5660e6ca8f746042d562
http://www.linux-kvm.org/page/Guest_Support_Status#UNIX_Family:_BSD
http://infosys.gsid.nagoya-u.ac.jp/~ohna/perl_lesson/intro2perl/text.html

2011-05-01

kvmのキーボードのアンダーバーの入力

kvm上のcentos5.6のコンソール上でアンダーバーを入力するとエラーが表示される。
$ sudo tail -f /var/log/messages
May  1 03:42:08 centos5 kernel: atkbd.c: Unknown key pressed (translated set 2, code 0x0 on isa0060/serio0).
May  1 03:42:08 centos5 kernel: atkbd.c: Use 'setkeycodes 00 ' to make it known.
May  1 03:42:08 centos5 kernel: atkbd.c: Unknown key released (translated set 2, code 0x0 on isa0060/serio0).
May  1 03:42:08 centos5 kernel: atkbd.c: Use 'setkeycodes 00 ' to make it known.

キーボードのオプションの追加。
http://wiki.libvirt.org/page/QEMUSwitchToLibvirt#-k

修正する。
$ sudo grep -n graphics /etc/libvirt/qemu/centos5.xml
51:    <graphics type='vnc' port='-1' autoport='yes' keymap='ja'/>

確認する。
$ ps aux|grep /usr/bin/qemu-system-x86_64|grep centos5|grep "\-k ja"
root      5194  4.9  2.0 1246120 163192 ?      Sl   03:15   0:53 /usr/bin/qemu-system-x86_64 --enable-kvm -S -M pc-0.13 -enable-kvm -m 1024 -smp 2,sockets=2,cores=1,threads=1 -name centos5 -uuid 91cadcf0-8ff0-dcf9-d18a-14637b5c1f21 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/centos5.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -boot order=c,menu=off -drive file=/mnt/share/kvm/centos5/centos5.img,if=none,id=drive-virtio-disk0,boot=on,format=raw -device virtio-blk-pci,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0 -drive if=none,media=cdrom,id=drive-ide0-1-0,readonly=on,format=raw -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -netdev tap,fd=15,id=hostnet0 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:34:f7:36,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -usb -vnc 127.0.0.1:3 -k ja -vga cirrus -device AC97,id=sound0,bus=pci.0,addr=0x4 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6

ゲストOS自体の設定も確認する。
$ grep -n 106 /etc/sysconfig/keyboard
2:KEYTABLE="jp106"

他のkvm上のlinuxなどもエラーはコンソール上に表示されないが入力できないので修正する。

修正のコマンドの例。
$ sudo virsh edit centos5
その後ゲストOSをshutdownしてから再起動する。