2008年9月 4日

Linux kernel update

Vine のKernel が上がったのでいれることにしました。
i386.rpm でつっこむのですが、ソースも突っ込んでおきます。

いくつかチューニングするところがあるため、そのようにしています。

新規でインストールされるものは、grub.conf (menu.list)変更なしで行われます。

vminuz
initrd.img
System.map

にシンボリックリンクを張ることによって、変更は最低限に行えます。
まあ、作り忘れると立ち上がらなくなったりして。

そういうときは、Knoppix
焼いてもっておくといろいろ使えるので便利です。障害対策にも使えますし。

/usr/src/linux で
make menuconfig もしくは Xmenuconfig などを使い設定を行い。
make bzImage && makemodules
make modules_install

/usr/src/linux から
System.map を /boot へコピーそのあと名前を変更。(System.map-2.x.x)
/usr/src/linux/arch/i386/boot/bzImage を/bootへコピーそのあと名前を変更。(vmlinuz-2.x.x)

czが最後についているのは僕がチューニングしてるため付けている目印です。

最後に忘れがちなinitrd の作成

mkinitrd initrd-2.6.16-76.39vl4.3.img 2.6.16-76.39vl4.3

/lib/modules 配下のバージョンと同じものでモジュールのイメージをつくってるぽい。

/boot では実際シンボリックだけ。

System.map-2.6.16-76.39vl4
System.map-2.6.16-76.39vl4-cz
System.map.old@ -> System.map-2.6.16-76.39vl4
System.map@    -> System.map-2.6.16-76.39vl4-cz
config-2.6.16-76.39vl4
grub/
initrd-2.6.16-76.39vl4-cz.img
initrd-2.6.16-76.39vl4.img
initrd.img.old@ -> initrd-2.6.16-76.39vl4.img
initrd.img@    -> initrd-2.6.16-76.39vl4-cz.img
kernel.h
lost+found/
vmlinuz-2.6.16-76.39vl4
vmlinuz-2.6.16-76.39vl4-cz
vmlinuz.old@ -> vmlinuz-2.6.16-76.39vl4
vmlinuz@ -> vmlinuz-2.6.16-76.39vl4-cz

投稿者 hideki : 04:52 | コメント (0) | トラックバック

2008年2月 7日

distcc と ccache で分散コンパイル

PCが数台あるから分散コンパイルしたら速いかなとか思ってとりあえずテスト。

[distcc のインストール]
http://distcc.samba.org/
から
http://distcc.samba.org/ftp/distcc/distcc-2.18.3.tar.bz2
をダウンロード
tar xvf distcc/distcc-2.18.3.tar.bz2
cd distcc-2.18.3
./configure
make
make install

[ccache のインストール]
http://ccache.samba.org/
から
http://samba.org/ftp/ccache/ccache-2.4.tar.gz
をダウンロード
tar xvf ccache-2.4.tar.gz
cd ccache-2.4
./configure
make
make install

[~/.bashrc]
以下を追加
export DISTCC_HOSTS='localhost 192.168.0.3' <参加させり鯖の追加。先頭が優先されるらしい。
export CCACHE_DIR=/tmp/cache
export CCACHE_LOGFILE=/tmp/cache/ccache.log
export PATH=/usr/lib/ccache/bin:$PATH
export CCACHE_PREFIX="distcc"

シンボリックリンクを作成
[/usr/lib/distcc/bin]
[root@oscar2 tmp]# cd /usr/lib/distcc/bin
[root@oscar2 bin]# ln -s /usr/local/bin/distcc c++
[root@oscar2 bin]# ln -s /usr/local/bin/distcc cc
[root@oscar2 bin]# ln -s /usr/local/bin/distcc g++
[root@oscar2 bin]# ln -s /usr/local/bin/distcc gcc

[root@zephel2 bin]# ls -al
lrwxrwxrwx 1 root root 21 2月 7日 12:28 c++ -> /usr/local/bin/distcc*
lrwxrwxrwx 1 root root 21 2月 7日 12:28 cc -> /usr/local/bin/distcc*
lrwxrwxrwx 1 root root 21 2月 7日 12:28 g++ -> /usr/local/bin/distcc*
lrwxrwxrwx 1 root root 21 2月 7日 12:28 gcc -> /usr/local/bin/distcc*

[/usr/lib/ccache/bin]
[root@oscar2 bin]# pwd
/usr/lib/ccache/bin
[root@oscar2 bin]# ln -s /usr/local/bin/ccache c++
[root@oscar2 bin]# ln -s /usr/local/bin/ccache cc
[root@oscar2 bin]# ln -s /usr/local/bin/ccache g++
[root@oscar2 bin]# ln -s /usr/local/bin/ccache gcc

[root@oscar2 bin]# ls -al
lrwxrwxrwx 1 root root 21 2月 7日 21:21 c++ -> /usr/local/bin/ccache*
lrwxrwxrwx 1 root root 21 2月 7日 21:21 cc -> /usr/local/bin/ccache*
lrwxrwxrwx 1 root root 21 2月 7日 21:21 g++ -> /usr/local/bin/ccache*
lrwxrwxrwx 1 root root 21 2月 7日 21:21 gcc -> /usr/local/bin/ccache*

[/etc/init.d/distccd]
distccd を作成。
#!/bin/sh
#
# chkconfig: - 60 20
# description: The distcc deamon
# http://distcc.samba.org
#
# processname: distccd

# This is a Red Hat init.d file to start distccd. To install it, copy
# it into /etc/init.d/distccd, and add appropriate links into the
# rc?.d directories.

# It may need to be tweaked for other distributions or versions.

# You may wish to accept parameters from the user to set access
# control options.

# Get config.
#. /etc/sysconfig/network

# Get functions
#. /etc/init.d/functions

# Check that networking is up.
#if [ ${NETWORKING} = "no" ] ; then
# exit 0
#fi

RETVAL=0
SERVICE=distccd

start() {
echo -n $"Starting $SERVICE: "
#daemon /usr/local/bin/$SERVICE --daemon
/usr/local/bin/$SERVICE --daemon --allow 192.168.0.0/24
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$SERVICE
return $RETVAL
}

stop() {
echo -n $"Stopping $SERVICE: "
#killproc $SERVICE
killall $SERVICE
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$SERVICE
return $RETVAL
}

restart() {
stop
start
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
#status)
# status $SERVICE
# ;;
restart)
restart
;;
condrestart)
[ -f /var/lock/subsys/$SERVICE ] && restart || :
;;
*)
#echo $"Usage: $0 {start|stop|status|restart}"
echo $"Usage: $0 {start|stop|restart}"
exit 1
;;
esac

exit $?

でコンパイル時に
make -j9 (j n=CPUx2+1です)たとえばDaulCore の場合は2x2+1 = 5になります。

実際に振り分けられてるかの確認は
distccmon-text 1 (最後の1は1秒間隔という意味です)

投稿者 hideki : 21:33 | コメント (0) | トラックバック

2008年1月17日

鯖移行作業一応おわり。

Pentium4の鯖からCore2Duoの鯖に切り替えました。
実際に入れ替えしてるといろいろ問題がありました....

旧鯖と新鯖を並行で動かして、問題ないかを確認していました。
LANカードを1枚しか入れてなかったのですが、今回切り替え時に旧鯖でやっていたように
bond0(冗長化)の設定をしました。

/etc/sysconfig/network-script/
[ifcfg-bond0]
DEVICE=bond0
BOOTPROT=none
ONBOOT=yes
IPADDR=192.168.2.10
NETMASK=255.255.255.0
USERCTL=no
TYPE=Bonding
GATEWAY=192.168.2.1

[ifcfg-eth1]
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no

[ifcfg-eth2]
DEVICE=eth2
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no

/etc/modprobe.conf
alias bond0 bonding
options bond0 miimon=100 mode=1

[動作確認]
eth1側のケーブルを抜くと
Currently Active Slave: eth1がeth2に切り替わります。

[root@test /]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.0.1 (January 9, 2006)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: eth1のMACアドレス

Slave Interface: eth2
MII Status: up
Link Failure Count: 0
Permanent HW addr: eth2のMACアドレス

で終了なんですが、
modprobe.conf に alias eth0 [LANカードのドライバ]と記載しますが、
eth0 などの順番を変更するとまともに動かない現象がでていました。
kudzu の自動認識で順番を変えてしまうことがあるので、切っていたのですが、
ログを見ると、alias の指定と違うLANカードがマッチングされていました。
IRQの呪縛がいまだにあるので、認識順序などはしょうがないのかもしれないですね。

参考資料
http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.4/networking/bonding.txt.html

あと、e100のドライバを入れなおしました。
http://support.intel.co.jp/jp/support/network/adapter/pro100/linux_readme.htm

投稿者 hideki : 02:28 | コメント (0) | トラックバック

2006年7月31日

XFS(ファイルシステム)のインストール┐(´д`)┌

XFSをインストールを先週からやってたんだがうまくいかなかったが原因がわかったのでメモ。
CentOS4.3 と VineLinux3.2 で使えた。
CentOS4.3 Server バージョンをインストールしてみたのだが、コンパイル環境が入っていないんですね。
まあCD1枚だしそんなものです。rpmbuild を入れてもコンパイル環境が無ければ src.rpm は役に立たないね。

コンパイル&インストール順序

下記の順番にコンパイル&インストールをするとうまくいくようだ。

ftp://ftp.riken.jp/Linux/xfs/previous/cmd_rpms/SRPMS から以下のパッケージをダウンロード
attr-2.4.28-0.src.rpm
acl-2.2.34-1.src.rpm
xfsprogs-2.7.11-1.src.rpm
dmapi-2.2.3-1.src.rpm
xfsdump-2.2.33-1.src.rpm

順番にインストールします。
#rpm -ivh attr-2.4.28-0.src.rpm

/SPECS
#rpmbuild --bb attr.spec

/RPMS/i386
attr-2.4.28-0.i386.rpm libattr-2.4.28-0.i386.rpm libattr-devel-2.4.28-0.i386.rpm
#rpm -ivh attr-2.4.28-0.i386.rpm libattr-2.4.28-0.i386.rpm libattr-devel-2.4.28-0.i386.rpm

#rpm -ivh acl-2.2.34-1.src.rpm

/SPECS
#rpmbuild --bb acl.spec

/RPMS/i386
acl-2.2.34-1.i386.rpm libacl-2.2.34-1.i386.rpm libacl-devel-2.2.34-1.i386.rpm
#rpm -ivh acl-2.2.34-1.i386.rpm libacl-2.2.34-1.i386.rpm libacl-devel-2.2.34-1.i386.rpm

#rpm -ivh xfsprogs-2.7.11-1.src.rpm

/SPECS
#rpmbuild --bb xfsprogs.spec

/RPMS/i386
xfsprogs-2.7.11-1.i386.rpm xfsprogs-devel-2.7.11-1.i386.rpm
#rpm -ivh xfsprogs-2.7.11-1.i386.rpm xfsprogs-devel-2.7.11-1.i386.rpm

#rpm -ivh dmapi-2.2.3-1.src.rpm

/SPECS
#rpmbuild --bb dmapi.spec

/RPMS/i386
dmapi-2.2.3-1.i386.rpm dmapi-devel-2.2.3-1.i386.rpm
#rpm -ivh dmapi-2.2.3-1.i386.rpm dmapi-devel-2.2.3-1.i386.rpm

#rpm -ivh xfsdump-2.2.33-1.src.rpm

/SPECS
#rpmbuild --bb xfsdump.spec

/RPMS/i386
xfsdump-2.2.33-1.i386.rpm
#rpm -ivh xfsdump-2.2.33-1.i386.rpm

入っていないと困りそうな rpm
e2fsprogs-devel ncurses-devel

構築とかは次回に...

投稿者 hideki : 00:12 | コメント (0) | トラックバック