-->

2009-12-30

picoPSU-150-xt

この記事は、ACアダプタをパソコンで利用する場合の参考です。

● picoPSU-150-xt
12Vが120と比べて1A高く定格の最大が140w=>150wになっているらしいです。
しかしピークが同じなのであまり違いはないです。
あとSATA,PATAのケーブルをもうひとつ差し込む穴が本体基盤にありますが、追加のケーブルは海外のサイトにあるが、日本では売っていないようです。
海外のサイトではアダプタ150wの4つ穴プラグ版と本体側の4つ穴ジャック部品をプラスして83ドルで、送料が29ドルでした。
そのサイトにはSATAの追加ケーブルもありました。
接続部が熱くなるので、100w以上は4つ穴プラグか、規格ものの4番が良いらしいです。

● meind power inverter 100w (メーカーホームページ不明)
ヤフオクでカー用品として 12~24 の可変スイッチ付きのアダプターが売っていました。
送料込みで2940円でした。
ホームページの写真の説明が 15V~24V で、ホームページの文字の説明が 12V からで、届いた箱の写真が 15V からで、中身は 12V から利用可能でした。DCプラグが変更可能でした。
12Vが使えるが5.5Aまでなので66wまで利用可能でした。
アタッチメントのプラグは全部センタープラスでした。
ACアダプタ本体は金属で、ACコンセントの差し込み部分がプラスチックでした。
ACコンセントをつける側(本体側のメガネ型の穴)が入りきりません。
あまり押すとプラスチックのメガネ型の穴の上のプラスチック部分が内側にめり込みます。

●テスト
Phenom 9350e                    x 1
Pulsar DCDDR2-4GB-800 (2GB x 2) x 2
HD103SI                         x 2
GA-MA78GM-DS2HP                 x 1
CMPSU-450HXJP                   x 1
CFY-80S                         x 1
S-FLEX SFF21D                   x 1
TMG A1 CL-P0371                 x 1

+---------+----------------+------+--------------+
|         |                | BIOS | 起動時の最大 |
+---------+----------------+------+--------------+
|電源     | メモリx1       | 46   | 54           |
|アダプタ | メモリx1       | 41   | 52           |
|電源     | メモリx4       | 53   | -            |
|電源     | メモリx4,HDDx2 | 63   | -            |
+---------+----------------+------+--------------+

確認したところ、5~10w減りましたが、12V時に最大66wまでなので利用を見送りました。

2009-12-20

bgコマンド

bg, fg コマンドの利用例です。

コマンド => Ctrl+z => bg とすると「コマンド &」と同じ効果があります。
標準出力はそのままです。fgで戻ります。この場合のCtrl+zは一時停止です。
$ php -r 'for($i=0;$i<100;$i++){print date("Y-m-d H:i:s\n");sleep(1);}'
2009-12-20 02:30:39
2009-12-20 02:30:40
^Z
[1]+                    php -r 'for($i=0;$i<100;$i++){print date("Y-m-d H:i:s\n");sleep(1);}'
$ bg
[1]+ php -r 'for($i=0;$i<100;$i++){print date("Y-m-d H:i:s\n");sleep(1);}' &
2009-12-20 02:30:42
$ 2009-12-20 02:30:43
2009-12-20 02:30:44
2009-12-20 02:30:45
fg2009-12-20 02:30:46

php -r 'for($i=0;$i<100;$i++){print date("Y-m-d H:i:s\n");sleep(1);}'
2009-12-20 02:30:47
2009-12-20 02:30:48
^C

manのエラーメッセージの日本語をutf8に変更する。

この記事は LANG, LC_ALL が utf8 の環境で man が nls を use に持つ場合 man, man -h が eucjp で表示されるので文字化けする場合の設定例です。

$ cat /usr/local/bin/man
#!/bin/sh
# http://www.netfort.gr.jp/~tomokuni/lms/shell/text/shell3.txt
# 1.2  標準エラー出力のみをパイプ => (例 3) => を適用

BUF="`/usr/bin/man $@ 3>&1 1>&2 2>&3 3>&-`"
RET="$?"
if [ -n "$BUF" ]; then
    echo "$BUF" | nkf 1>&2
    if [ "$RET" -eq 0 ]; then
 echo
    fi
fi
exit "$RET"

以前修正したところ、Xの環境の場合にエラーが出るので man に -nls をつけていたのだが、再度 man に nls をつけて試したところ、エラーが出なくなっていました。
nkf が更新されたためだと思われます。
$ eix ^nkf$
[I] app-i18n/nkf
     Available versions:  2.0.7 ~2.0.7-r1 {linguas_ja perl python}
     Installed versions:  2.0.7(10時47分42秒 2009年11月29日)(linguas_ja perl python)
     Homepage:            http://sourceforge.jp/projects/nkf/
     Description:         Network Kanji code conversion Filter with UTF-8/16 support

また distcc を使う際 native を使うと emerge は off にしますが、それを回避するためのコマンドの例です。
http://d.hatena.ne.jp/tmatsuu/20090110/1231557035
$ cat /usr/local/bin/gcc-opt
#!/bin/sh

CC="gcc"
OPT="-march=native -O2 -pipe -fomit-frame-pointer"

TMP=$@
if [ "$TMP" != "" ]; then
    OPT=$TMP
fi

NATIVE=$(echo | ${CC} -E -v ${OPT} - 2>&1 | grep cc1)
NOARCH=$(echo | ${CC} -E -v - 2>&1 | grep cc1)

for native in ${NATIVE} ; do
    FOUND=0
    for noarch in ${NOARCH} ; do
        if [ "${native}" = "${noarch}" -a "${native}" != "${OPT}" ] ; then
            FOUND=1
            break
        fi
    done
    if [ ${FOUND} -eq 0 ] ; then
        echo -n "${native} "
    fi
done
echo

英語のmanのコマンドを追加します。
alias enman='LANG=C LC_ALL=C man'


追記: /usr/local/bin/man が必要な環境は下記になります。

lzmaは無くてもいいです。nlsがあると man, man -h がeuc-jpで表示されます。
$ emerge -pv man
...
[ebuild   R   ] sys-apps/man-1.6f-r3  USE="lzma nls" 0 kB
...

euc-jpとutf8の内容を一旦euc-jpにしてgroffに渡して処理してもらい、その結果をutf8にしています。
$ diff -u /etc/man.conf.old /etc/man.conf
...
-JNROFF         /usr/bin/groff -Tnippon -mandocj
+JNROFF         nkf -e | LANG=ja_JP.EUC-JP LC_ALL=ja_JP.EUC-JP /usr/bin/groff -Tnippon -mandocj | nkf -w
...

文字コードの設定です。
$ echo $LANG $LC_ALL
ja_JP.UTF-8 ja_JP.UTF-8

エラー出力だけnkfを通したい場合に/usr/local/bin/manを利用します。
$ /usr/bin/man 2>&1 | php -r 'mb_language("ja");print mb_detect_encoding(file_get_contents("php://stdin"), "auto")."\n";'
EUC-JP
$ /usr/bin/man -h 2>&1 | php -r 'mb_language("ja");print mb_detect_encoding(file_get_contents("php://stdin"), "auto")."\n";'
EUC-JP
$ /usr/bin/man 2>&1 | nkf -w
どのマニュアルを表示しますか?
$ man
どのマニュアルを表示しますか?
$ which man
/usr/local/bin/man

つまり man関連の日本語manが必要ない場合は -nls でインストールすれば必要ないです。man, man -h のエラー出力は英語になります。
もしくは man, man -h のエラー出力が文字化けしても問題なければ必要ないです。
もしくは euc-jp の環境であれば必要ないです。JNROFFの設定は戻します。戻さずに最後の-wを-eにしてもいいかもしれません。

sys-apps/groff-1.20.1-r1 が euc-jp を処理できないかもしれません。マスクしています。
$ eix groff
[I] sys-apps/groff
     Available versions:  1.19.2-r3 ~1.20.1 [m]1.20.1-r1 ~1.20.1-r2 {X cjk examples linguas_ja}
     Installed versions:  1.19.2-r3(11時35分58秒 2009年11月29日)(X cjk)
     Homepage:            http://www.gnu.org/software/groff/groff.html
     Description:         Text formatter used for man pages
$ grep groff /etc/portage/package.mask
=sys-apps/groff-1.20.1-r1

2009-12-19

rsync --exclude-from

この記事は rsync --exclude-from=ファイル名 のファイルの設定例です。

一部分だけダウンロードする場合はディレクトリをダウンロードする記述が無いと、その下のファイルを持ってこないです。
- /Documents and Settings/[^/][^/]*/Local Settings/Application Data/Mozilla/Firefox/Profiles/[^/][^/]*/Cache/
- /Documents and Settings/[^/][^/]*/Local Settings/Temporary Internet Files/
- /Program Files/ICW/rsyncd.log
- /pagefile.sys
- /hiberfil.sys
- /RECYCLER/
- /System Volume Information/
+ /WINDOWS/
+ /WINDOWS/pear.ini
+ /WINDOWS/pearsys.ini
+ /WINDOWS/php.ini
+ /WINDOWS/system32/
+ /WINDOWS/system32/drivers/
+ /WINDOWS/system32/drivers/etc/
+ /WINDOWS/system32/drivers/etc/hosts
- /WINDOWS/**

一部のディレクトリのみをダウンロードする場合。
+ /backup/
+ /backup/**
- /**

一部のディレクトリ、ファイルをダウンロードしない場合。
- /System Volume Information/
- /RECYCLER/
- /pagefile.sys

2009-12-17

lm_sensorsのpwmconfig

この記事はlm_sensorsの設定例です。

この例の期待する動作は、30℃以下で最低回転になり、50℃で最高回転になることです。
fanの構成
MB                  GA-MA78GM-DS2HP
CPUfan    吸気 pwm  TMG A1 CL-P0371
前面fan   吸気 pwm  S-FLEX SFF21D
背面fan   排気 一定 CFY-80S
電源fan   排気 自動 CMPSU-520HXJP

設定します。
$ sudo pwmconfig

修正してテストしてOKであれば起動の設定とします。
$ sudo emacs /etc/fancontrol
$ sudo cat /etc/fancontrol
INTERVAL=10
FCTEMPS=hwmon0/device/pwm1=hwmon0/device/temp2_input hwmon0/device/pwm2=hwmon0/device/temp1_input
FCFANS=hwmon0/device/pwm1=hwmon0/device/fan1_input hwmon0/device/pwm2=hwmon0/device/fan2_input
MINTEMP=hwmon0/device/pwm1=30 hwmon0/device/pwm2=30
MAXTEMP=hwmon0/device/pwm1=50 hwmon0/device/pwm2=50
MINSTART=hwmon0/device/pwm1=90 hwmon0/device/pwm2=180
MINSTOP=hwmon0/device/pwm1=60 hwmon0/device/pwm2=120
MINPWM=hwmon0/device/pwm1=60 hwmon0/device/pwm2=120
MAXPWM=hwmon0/device/pwm1=255 hwmon0/device/pwm2=255
$ sudo /etc/init.d/fancontrol restart
$ sudo rc-update add fancontrol default

hwmon0/device/pwm1, hwmon0/device/pwm3 が両方ともCPUを制御しており pwm3 の方は340RPM 以下にはなりませんでした。
hwmon0/device/pwm2 は前面fanを制御しています。(SystemFan)
S-FLEX SFF21D は0から回すには160ほどにしないと回りませんでした。(回ると560RPM前後)
CFY-80SにはPWMは無いです。

BIOSの設定のHealthの部分を変更します。
CPU温度警告   60℃ (50℃でfanがMAXになるため)
CPUFan警告    Off  (再起動時にピーとなり続けるため)
SYSTEMFan警告 Off  (止まりそうな回転数のため。BIOSの自動では無理)
NBfan警告     On   (PWMが無いので止まるとおかしいため)
CPUファン制御 On   (fancontrolが起動しない場合にも制御して欲しいため)
CPUファン制御 auto (pwmか電圧が選べるが自動の場合pwmになるため)
SYSTEMFan制御 Off  (Onにすると回らないため)

BIOSはF4でBIOSとsensorsは下記のようになります。
http://www.gigabyte.com.tw/Support/Motherboard/Manual_DownloadFile.aspx?FileType=Manual&FileID=18960
CPUFan    fan1 temp2 CPU4ピン
SYSTEMFan fan2 temp1 前面
NBFan     fan4 temp3 背面

部屋が寒いので、まったく問題ないので成功しました。
$ sensors|grep -P "^(fan|temp)"
fan1:      379 RPM  (min =    0 RPM)
fan2:      384 RPM  (min =    0 RPM)
fan3:        0 RPM  (min =    0 RPM)
fan4:     1234 RPM  (min =   10 RPM)
temp1:       +22°C  (low  =  +127°C, high =  +127°C)   sensor = invalid
temp2:       +17°C  (low  =  +127°C, high =   +60°C)   sensor = diode
temp3:       +25°C  (low  =  +127°C, high =  +127°C)   sensor = invalid
$ grep "^model name" /proc/cpuinfo |sort|uniq -c
      4 model name      : AMD Phenom(tm) 9350e Quad-Core Processor

結果としては隣に古いパソコンがあるので音の変化はありませんでした。

2009-12-16

/etc/logrotate.d/syslog-ngの修正

この記事はsyslog-ngの設定例です。

設定に書かれているファイルのリストを取得します。
grep /var/log/ /etc/syslog-ng/syslog-ng.conf|grep -v ^#|awk -F'"' '{print $2}'|sed 's/\$[A-Za-z_][0-9A-Za-z_]*/\*/g'|sed 's/\*\**/\*/g'|awk 'BEGIN{A=""}{A=A" "$0}END{print "result:"A}'

設定を編集します。
$ diff syslog-ng.2009-12-16 syslog-ng
7c7
< /var/log/messages {
---
> /var/log/HOSTS/*/*.log /var/log/auth.log /var/log/syslog /var/log/cron.log /var/log/daemon.log /var/log/kern.log /var/log/lpr.log /var/log/user.log /var/log/uucp.log /var/log/mail.log /var/log/avc.log /var/log/audit.log /var/log/pax.log /var/log/grsec.log /var/log/mail.info /var/log/mail.warn /var/log/mail.err /var/log/news/news.crit /var/log/news/news.err /var/log/news/news.notice /var/log/debug /var/log/messages {

設定をテストします。
sudo logrotate -dv syslog-ng

ベースとなるファイルの一覧です。
$ equery files syslog-ng |grep -P /usr/share/.*/syslog-ng.conf.*
/usr/share/doc/syslog-ng-3.0.4/syslog-ng.conf.HP-UX.bz2
/usr/share/doc/syslog-ng-3.0.4/syslog-ng.conf.RedHat.bz2
/usr/share/doc/syslog-ng-3.0.4/syslog-ng.conf.SunOS.bz2
/usr/share/doc/syslog-ng-3.0.4/syslog-ng.conf.debian.bz2
/usr/share/doc/syslog-ng-3.0.4/syslog-ng.conf.doc.bz2
/usr/share/doc/syslog-ng-3.0.4/syslog-ng.conf.gentoo.3.0.bz2
/usr/share/doc/syslog-ng-3.0.4/syslog-ng.conf.gentoo.bz2
/usr/share/doc/syslog-ng-3.0.4/syslog-ng.conf.gentoo.fbsd.3.0.bz2
/usr/share/doc/syslog-ng-3.0.4/syslog-ng.conf.gentoo.fbsd.bz2
/usr/share/doc/syslog-ng-3.0.4/syslog-ng.conf.gentoo.hardened.3.0.bz2
/usr/share/doc/syslog-ng-3.0.4/syslog-ng.conf.gentoo.hardened.bz2
/usr/share/doc/syslog-ng-3.0.4/syslog-ng.conf.sample.bz2
/usr/share/doc/syslog-ng-3.0.4/syslog-ng.conf.solaris.bz2
/usr/share/man/man5/syslog-ng.conf.5.bz2

アップデート時にエラーが出るので@version: 3.0などを修正します。
$ cat /etc/syslog-ng/syslog-ng.conf
@version: 3.0
# Copyright 2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /etc/config-archive/etc/syslog-ng/syslog-ng.conf,v 1.1 2009/11/02 13:09:56 root Exp $

#
# Syslog-ng configuration file, compatible with default hardened installations.
#

options {
        chain_hostnames(off);
        flush_lines(0);
        stats_freq(43200);
};

#options {
#       chain_hostnames(off);
#       sync(0);
#       stats(43200);
#       long_hostnames(off);
#       use_dns(no);
#       create_dirs(yes);
#};

source src {
        unix-stream("/dev/log");
        internal();
#       udp(ip(0.0.0.0) port(514));
};
source kernsrc { file("/proc/kmsg"); };

source net { udp(); };
log { source(net); destination(net_logs); };
destination net_logs { file("/var/log/HOSTS/$HOST/$YEAR$MONTH$DAY.log" create_dirs(yes)); };

destination authlog { file("/var/log/auth.log"); };
destination s_sys { file("/var/log/syslog"); };
destination cron { file("/var/log/cron.log"); };
destination daemon { file("/var/log/daemon.log"); };
destination kern { file("/var/log/kern.log"); file("/dev/tty12"); };
destination lpr { file("/var/log/lpr.log"); };
destination user { file("/var/log/user.log"); };
destination uucp { file("/var/log/uucp.log"); };
#destination ppp { file("/var/log/ppp.log"); };
destination mail { file("/var/log/mail.log"); };

destination avc { file("/var/log/avc.log"); };
destination audit { file("/var/log/audit.log"); };
destination pax { file("/var/log/pax.log"); };
destination grsec { file("/var/log/grsec.log"); };

destination mailinfo { file("/var/log/mail.info"); };
destination mailwarn { file("/var/log/mail.warn"); };
destination mailerr { file("/var/log/mail.err"); };

destination newscrit { file("/var/log/news/news.crit"); };
destination newserr { file("/var/log/news/news.err"); };
destination newsnotice { file("/var/log/news/news.notice"); };

destination debug { file("/var/log/debug"); };
destination messages { file("/var/log/messages"); };
destination console { usertty("root"); };
destination console_all { file("/dev/tty12"); };
#destination loghost { udp("loghost" port(999)); };

destination xconsole { pipe("/dev/xconsole"); };

filter f_auth { facility(auth); };
filter f_authpriv { facility(auth, authpriv); };
filter f_syslog { not facility(authpriv, mail); };
filter f_cron { facility(cron); };
filter f_daemon { facility(daemon); };
filter f_kern { facility(kern); };
filter f_lpr { facility(lpr); };
filter f_mail { facility(mail); };
filter f_user { facility(user); };
filter f_uucp { facility(uucp); };
#filter f_ppp { facility(ppp); };
filter f_news { facility(news); };
filter f_debug { not facility(auth, authpriv, news, mail); };
filter f_messages { level(info..warn)
        and not facility(auth, authpriv, mail, news); };
filter f_emergency { level(emerg); };

filter f_info { level(info); };

filter f_notice { level(notice); };
filter f_warn { level(warn); };
filter f_crit { level(crit); };
filter f_err { level(err); };

filter f_avc { match(".*avc: .*" value("MESSAGE")); };
filter f_audit { match("^audit.*" value("MESSAGE")) and not match(".*avc: .*" value("MESSAGE")); };
filter f_pax { match("^PAX:.*" value("MESSAGE")); };
filter f_grsec { match("^grsec:.*" value("MESSAGE")); };

log { source(src); filter(f_authpriv); destination(authlog); };
log { source(src); filter(f_syslog); destination(s_sys); };
log { source(src); filter(f_cron); destination(cron); };
log { source(src); filter(f_daemon); destination(daemon); };
log { source(kernsrc); filter(f_kern); destination(kern); };
log { source(src); filter(f_lpr); destination(lpr); };
log { source(src); filter(f_mail); destination(mail); };
log { source(src); filter(f_user); destination(user); };
log { source(src); filter(f_uucp); destination(uucp); };
log { source(kernsrc); filter(f_pax); destination(pax); };
log { source(kernsrc); filter(f_grsec); destination(grsec); };
log { source(kernsrc); filter(f_audit); destination(audit); };
log { source(kernsrc); filter(f_avc); destination(avc); };
log { source(src); filter(f_mail); filter(f_info); destination(mailinfo); };
log { source(src); filter(f_mail); filter(f_warn); destination(mailwarn); };
log { source(src); filter(f_mail); filter(f_err); destination(mailerr); };
log { source(src); filter(f_news); filter(f_crit); destination(newscrit); };
log { source(src); filter(f_news); filter(f_err); destination(newserr); };
log { source(src); filter(f_news); filter(f_notice); destination(newsnotice); };
log { source(src); filter(f_debug); destination(debug); };
log { source(src); filter(f_messages); destination(messages); };
log { source(src); filter(f_emergency); destination(console); };
#log { source(src); filter(f_ppp); destination(ppp); };
log { source(src); destination(console_all); };

2009-12-11

ハードディスクの温度をconkyで表示

この記事はハードディスクの温度をconkyで表示する際の設定例です。

インストールします。
emerge -av net-analyzer/netcat
/etc/init.d/hddtemp start
rc-update add hddtemp default

下記のコマンドがwarningを出す場合、設定に追加が必要になります。
$ hddtemp /dev/sda

設定内容はハードディスクの種類ごとに異なります。
$ diff /usr/share/hddtemp/hddtemp.db.2009-12-11 /usr/share/hddtemp/hddtemp.db
548a549
> "SAMSUNG HD103SI"                                                     194 C ""

.conkyに追加します。
この例の場合ハードディスクが2個です。
${execpi 30 nc localhost 7634 | awk -F'|' '{print "/dev/sda "$4".0℃\n/dev/sdb "$9".0℃"}'}

sensors の fan4 が 1200~1260 or 675000 rpm になるので修正します。
Rear  ${execpi 10 perl -e '$f="fan4";$t="/tmp/.conky.${f}";$f1=`cat /sys/class/hwmon/hwmon0/device/${f}_input`;chomp($f1);if(!-f$t){`echo -n "0" > ${t};chmod 0666 ${t} 2>/de/null`};$f2=`cat ${t}`;if($f1>9999){$f1=$f2}else{`echo -n "$f1" >${t}`}print $f1'}rpm

http://ja.wikipedia.org/wiki/Self-Monitoring%2C_Analysis_and_Reporting_Technology
おまえらのconkyの設定書いていけや:
"45 :login:Penguin:2009/03/09(月) 17:07:37 ID:+TvLN7d8
>>44
${execpi 60 nc localhost 7634 | cut -d'|' -f4}°C]
でおk"

2009-12-10

meadowで日本語入力ができなくなる場合の修正例

http://www.voc.mydns.jp/hiki/?Meadow+Memo
この記事は上記のサイトの引用です。

[コンパネ]-[地域と言語のオプション]-[言語]-[詳細]-[キー設定]
とたどって、入力言語のホットキーで、
「入力言語を切り替える」
で、
[入力言語の切り替え]と[キーボードレイアウトの切り替え]

xfceのx11-terms/terminalが英語表示になる場合の修正の例

マスクを外してアップデートしたら他は日本語表示のままターミナルが英語表示になりました。
>=x11-terms/terminal-0.4.0

下記のリンク先の作り方の Terminal.mo をコピーしたら治りました。
$ eix ^terminal$ -c -I
[I] x11-terms/terminal (0.4.2@2009年12月10日): Terminal for Xfce desktop environment, based on vte library.

$ equery belongs /usr/share/locale/ja/LC_MESSAGES/Terminal.mo 
[ Searching for file(s) /usr/share/locale/ja/LC_MESSAGES/Terminal.mo in *... ]
x11-terms/terminal-0.4.2 (/usr/share/locale/ja/LC_MESSAGES/Terminal.mo)

http://pc11.2ch.net/test/read.cgi/linux/1174204218/l50
629 :login:Penguin:2009/11/24(火) 03:08:55 ID:hX90zSZB
ubuntuネタばかりで申し訳ないが
xfce4が素晴らしいのでGNOMEイラネと思ってSynapticでガンガン消してたら
xfce4-terminalのメニューが英語になってしまった。
xfce4の他のアプリは問題なく日本語メニューなんだけど・・・。
lxterminalならメニューが日本語になるけど、文字色のカスタマイズができないので困る。
何が足りないのかなあ

630 :login:Penguin:2009/11/24(火) 12:03:15 ID:qFhbswJ0
>>629
Terminalが0.4.2なら、アップストリームの問題。
http://git.xfce.org/apps/terminal/plain/po/ja.po
をダウンロードして、
$ msgfmt ja.po -o Terminal.mo
して、Terminal.mo を /usr/share/locale/ja/LC_MESSAGES/ 配下のものと置き換えてみて。
msgfmt コマンドがなかったら、gettext をインスコして。

2009-12-09

cygwinで別のパソコンへ文字をコピーする場合の例

この記事はcygwinで別のパソコンの画面を出す場合のクリップボードの設定例です。

vncで日本語がコピー出来ないのでcygwinを使ったらできました。
クリップボードが動かないので -ac を追加したら動きました。
http://osdir.com/ml/cygwin.xfree/2003-01/msg00362.html
$ diff -u startxwin.bat.2009-12-08 startxwin.bat
--- startxwin.bat.2009-12-08 2009-12-08 17:00:18.515375000 +0900
+++ startxwin.bat 2009-12-09 14:57:13.592125000 +0900
@@ -17,7 +17,7 @@
REM batch file from the C drive.
REM 

-SET CYGWIN_ROOT=\cygwin
+SET CYGWIN_ROOT=E:
SET RUN=%CYGWIN_ROOT%\bin\run -p /usr/bin

SET PATH=.;%CYGWIN_ROOT%\bin;%PATH%
@@ -75,12 +75,12 @@
REM command-line parameter for XWin.  Doing so would start two clipboard
REM managers, which is never supposed to happen.

-%RUN% XWin -multiwindow -clipboard -silent-dup-error
-
+REM %RUN% XWin -multiwindow -clipboard -silent-dup-error
+%RUN% XWin -ac -clipboard -query 192.168.0.100 -from 192.168.0.90

REM Startup an xterm, using bash as the shell.

-%RUN% xterm -e /usr/bin/bash -l
+REM %RUN% xterm -e /usr/bin/bash -l


REM

cwrsync の設定例

colinux の cofs では日本語のみのファイルが扱えないので cwrsync が良いです。
rsyncd.conf
[winC]
path = /cygdrive/c/
read only = true
transfer logging = yes

rsync -a -v rsync://192.168.0.90/winC /mnt/share/winC/`date +%Y-%m-%d`

2回目以降は --link-dest を最新の日付のディレクトリに指定すれば、ほとんどハードリンクになるので、こまめに取れます。
http://www.itefix.no/i2/download の cwrsync (3.4 MB), cwrsync server (3.3 MB) のリンクで windows のサービスが入ります。
(コントロールパネル => 管理ツール => サービス)

この例の場合 winC_2009-12-08 を消すとwinC_2009-12-09が21Gになります。
$ sudo du -sh /mnt/share/backup_tukumo/winC_2009-12-0*
21G     /mnt/share/backup_tukumo/winC_2009-12-08
631M    /mnt/share/backup_tukumo/winC_2009-12-09

更新ファイルが1521個あることがわかります。
$ sudo find /mnt/share/backup_tukumo/winC_2009-12-09/ -links 1 -type f|wc -l
1521

C:\windowsやfirefoxのキャッシュなど対象外を指定した方が良いです。
http://okwave.jp/qa1821032.html
usui@amdgentoo /tmp/rsynctest $ rsync -a -v --list-only rsync://192.168.0.90/winC/Temp/A /tmp/rsynctest/
    receiving incremental file list
    drwx------           0 2009/12/09 15:35:50 A
    drwx------           0 2009/12/09 15:35:36 A/B
    drwx------           0 2009/12/09 15:40:58 A/C
    drwx------           0 2009/12/09 15:41:02 A/C/A
    drwx------           0 2009/12/09 15:41:01 A/C/A/B
    drwx------           0 2009/12/09 15:35:54 A/C/B

    sent 32 bytes  received 161 bytes  128.67 bytes/sec
    total size is 0  speedup is 0.00
    usui@amdgentoo /tmp/rsynctest $ rsync --exclude="/A/B/" -a -v --list-only rsync://192.168.0.90/winC/Temp/A /tmp/rsynctest/
    receiving incremental file list
    drwx------           0 2009/12/09 15:35:50 A
    drwx------           0 2009/12/09 15:40:58 A/C
    drwx------           0 2009/12/09 15:41:02 A/C/A
    drwx------           0 2009/12/09 15:41:01 A/C/A/B
    drwx------           0 2009/12/09 15:35:54 A/C/B

    sent 42 bytes  received 146 bytes  125.33 bytes/sec
    total size is 0  speedup is 0.00

また --list-only でテストした後、実行時には --exclude-from で指定すると良いです。

GA-MA78GM-DS2HPのメモリ不具合

この記事はマザーボードにメモリを4枚指した場合の不具合の例です。
GA-MA78GM-DS2HP
UMAX Pulsar DCDDR2-4GB-800 x2 (2GBx4枚)

上記の組み合わせで不具合が発生しました。
現象はピープー音が連続でなりBIOS画面まで行かなくなりました。
メモリの変更ではなくメモリスロットを変更し挿し直すことで復旧できました。

メモリ1枚だけで起動するテストを行いました。
スロット1で2枚起動し2枚同じ症状(ピープー音)が再現できました。
スロット2とスロット3にスロット1でエラーになったメモリを挿したところ認識しました。

組み立て時と、挿し直し後の両方でmemtestが1周以上通ることを確認しています。
CMOSクリアも実行しましたが、それでは回復しませんでした。

CPUやメモリの電圧は、そのままでBIOSの設定やソフトウェアは利用していません。
gentoolinux(2.6.31-r6)を利用しています。
CPUはPhenom9350eです。
念のためBIOSをF1からF4にアップデートしました。

http://www.redout.net/data/bios.html
http://signalshonan.ddo.jp/modules/pico4/index.php?content_id=6
http://www.s124.net/errorcode/beepcode_award.html
http://www.gigabyte.co.jp/Support/Motherboard/BIOS_Model.aspx?ProductID=2948
http://club.gigabyte.co.jp/set/biosup.htm

2009-12-07

apache+mod_phpの同時接続数

この記事はapache+mod_phpの同時接続数の設定例です。

phpの同時処理で処理速度が落ちる場合、同時接続数をパフォーマンスが落ちない量に控えます。
http://httpd.apache.org/docs/2.3/ja/mod/mpm_common.html#listenbacklog
ListenBacklog 4096

/etc/sysctl.conf を変更します。
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 8192

例えば MaxClients 10~xxx, ListenBacklog 10~4096, を変更しながら設定し
abコマンドなどでテストして、指定した値以内であれば遅くならずに動くのか調べます。
同一サーバー内でapacheの手前に静的コンテンツ用webサーバー兼ローカル内のリバースプロキシサーバーを置く方が良いかもしれません。

phpのlevenshtein関数のマルチバイト化

この記事はphpのlevenshtein関数のマルチバイト化の例です。
(phpのlevenshtein関数は2バイトの文字を1バイトの文字2つとして扱います)

例えば、UTF8の「あいうお」と「あいうお」の距離を3から1に変更する関数です。
渡す文字コードと内部の設定が違うと使えません。
なお、かなり遅く5~50倍かかります。
さらに、長い文字を扱うために、例えば、define("__MB_LEVENSHTEIN__LEVENSHTEIN_MAX_LENGTH", 65535);などを設定してから長い文字で実行すると、さらに遅くなります。

https://docs.google.com/open?id=0BwK7sPpG0c5ZNWNjMzE5OWQtNWZmZC00ZTdlLTgzOTgtMWIwNTNlYmU4NDBi

テスト方法はダウンロードしたファイルと同じディレクトリでコマンドを実行します。
$ php test.mb_levenshtein.php

2011-11-30: JISの場合の不具合を修正。

mkfifo (fifoの利用例)

この記事はfifoの利用例です。

ターミナル1
mkfifo -m0666 /tmp/syslog.fifo
while [ -e /tmp/syslog.fifo ]; do date > /tmp/syslog.fifo; echo write; sleep 1; done

ターミナル2
tail -f /tmp/syslog.fifo

syslog-ng の DBインサート などで利用します。

http://www.atmarkit.co.jp/flinux/rensai/newlog03/newlog03c.html
http://www.linux.or.jp/JM/html/LDP_man-pages/man7/pipe.7.html

ipvsadm の設定例 の補足 part2

この記事はipvsadm の設定例の補足です。

ダイレクトルーティングの場合、dummy0でもarpを返すのでリアルサーバー側で設定が必要です。
dummy0だけではなく他のデバイスでも設定します。
http://www.nminoru.jp/~nminoru/diary/2008/02.html
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

windows(クライアント)のパソコンからarpを実行します。
C:>arp -a

Interface: 192.168.0.90 --- 0x2
  Internet Address      Physical Address      Type
  192.168.0.1           xx-xx-xx-xx-xx-01     dynamic | ROUTER
  192.168.0.100         xx-xx-xx-xx-xx-02     dynamic | WEB1
  192.168.0.101         xx-xx-xx-xx-xx-04     dynamic | VIP
  192.168.0.150         xx-xx-xx-xx-xx-03     dynamic | WEB2
  192.168.0.200         xx-xx-xx-xx-xx-04     dynamic | LB

バーチャルIPのMACアドレスがLBと同じになります。
arp_xxx を設定しないと WEB1 や WEB2 のMACアドレスになる場合があります。
この例は、同一ネットワーク内でのテストでの説明です。

2009-12-06

ipvsadm の設定例 の補足

この記事はipvsadm の設定例の補足です。

http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html
ダミーモジュールをリアルサーバーに使うのが正しいと提示されています。

カーネル設定追加
dummydriver は centos や debian だと通常のカーネルで、すでにあるので不要です。
Device Drivers --->
[*] Network device support --->
 Dummy net driver support

dummy0を追加
$ sudo modprobe dummy numdummies=1

起動スクリプトを追加
$ ll /etc/init.d/net.dummy0
lrwxrwxrwx 1 root root 6 2009-12-06 07:17:33 /etc/init.d/net.dummy0 -> net.lo*lo*

起動設定を追加
$ grep dummy /etc/conf.d/net
config_dummy0=( "192.168.0.101 netmask 255.255.255.255")

確認する。
arp -a
arp -n

MACアドレスを確認します。
クライアントにロードバランサのバーチャルIPのMACアドレスがあり、他はバーチャルIPのMACアドレスが無い状態で期待した動作になります。

違うcpuでdistcc を使う の補足 part2

2010-7-11 追記 この記事は間違っています。

この記事は違うcpuでdistcc を使うの補足です。

pump emerge xxx は libtool 関連で使わない方がいいかもしれません。
php の worker モジュールで exit signal Segmentation fault と出たので pump を使わずに再インストールしたところ、再現しませんでした。
$ equery depends libtool

2009-12-05

ipvsadm の設定例

ipvsadm の設定例です。
ロードバランサを LB と省略しています。

windows からアクセスして、同じ windows の colinux を realServer として、別のパソコンを LB にして設定したところ、動作しませんでした。
クライアントとは別のパソコンを realServer にすると繋がりました。
windows のローカル接続と tap の設定関連やパケットの流れが理解不足です。
tapはバーチャルなハブ(ネットワークブリッジ)として windows のIPアドレスと同居しています。

# NG (win, LB の2台)
win---WEB(win,colinux)
|     |
LB    |
|     |
+-->--+

# OK (win, LB, dynabook の3台)
win---+
|     |
LB    WEB(dynabook)
|     |
+-->--+

この例の場合の設定は、ダイレクトルーティングなどと言われる種類です。
LB
sudo ipvsadm -C
sudo ifconfig eth0:0 down
sudo ipvsadm -A -t 192.168.0.101:80 -s wlc
sudo ipvsadm -a -t 192.168.0.101:80 -r 192.168.0.100 -g -w 9
sudo ipvsadm -a -t 192.168.0.101:80 -r 192.168.0.150 -g -w 1
sudo ifconfig eth0:0 192.168.0.101 netmask 255.255.255.0
sudo ipvsadm -Ln
sudo ifconfig
sudo ifconfig eth0:0 -arp

WEB
sudo ip addr add 192.168.0.101 label lo:0 dev lo:0
sudo ifconfig lo:0 -arp

LB, WEB (/etc/sysctl.conf)
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.lo.arp_announce = 0
net.ipv4.conf.eth0.arp_ignore = 0
net.ipv4.conf.eth0.arp_announce = 0
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.all.arp_announce = 0

2009-12-04

違うcpuでdistcc を使う の補足

2010-7-11 追記 この記事は間違っています。

この記事は違うcpuでdistcc を使うの補足です。

linux-headers 以外の package.mask 変更しました。
distcc client
>=sys-devel/binutils-2.19
>=sys-kernel/linux-headers-2.6.28
>=sys-devel/gcc-4.4
>=sys-libs/glibc-2.10
>=sys-devel/distcc-3.2

distcc host
>=cross-i686-pc-linux-gnu/binutils-2.19
>=cross-i686-pc-linux-gnu/gcc-4.4
>=cross-i686-pc-linux-gnu/linux-headers-2.6.28
>=cross-i686-pc-linux-gnu/glibc-2.10
>=sys-devel/distcc-3.2

pumpを有効にしました。
DISTCC_HOSTS に同じ設定を連続して書くことに意味は無いです。
MAKEOPTS="-j5"
FEATURES="distcc"
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"

作業状況を閲覧するコマンドは distccmon-xxx です。
$ sudo DISTCC_DIR=/var/tmp/portage/.distcc distccmon-text 1|grep -v ^$

インストール後のメッセージです。
* Messages for package sys-devel/distcc-3.1-r4:

 *
 * Tips on using distcc with Gentoo can be found at
 * http://www.gentoo.org/doc/en/distcc.xml
 *
 * How to use pump mode with Gentoo:
 * # distcc-config --set-hosts "foo,cpp,lzo bar,cpp,lzo baz,cpp,lzo"
 * # pump emerge -u world
 *
 * To use the distccmon programs with Gentoo you should use this command:
 * # DISTCC_DIR="/var/tmp/portage/.distcc" distccmon-text 5
 *
 * ***SECURITY NOTICE***
 * If you are upgrading distcc please make sure to run etc-update to
 * update your /etc/conf.d/distccd and /etc/init.d/distccd files with
 * added security precautions (the --listen and --allow directives)
 *

遅いPCが重い作業をしている時に、CPUを借りると遅くなります。
(例)
kurobox-hg を distcc のホストにしてCPUを借りる。
kurobox-hg で emerge world などを行う。
kurobox-hg に渡した分のコンパイルが長時間帰って来ない。

CPUを借りる側の、CPU以外に余裕がないと、効果は薄いです。
(例)
./configure などは distcc に関係が無い。
処理時間の大部分がコンパイル以外にある。
vmstat の io の bi, bo の部分の数字が高い。

lm_sensors を PAT4410PME(dynabook) に入れる

lm_sensors を PAT4410PME(dynabook) に入れる場合の参考です。

kernel のバージョン
$ sys-kernel/gentoo-sources-2.6.31-r6

kernel作成の make menuconfig の部分です。
この例の場合 genkernel --menuconfig all で実行しています。
/ を押すと検索できます。

起動時に udev で CONFIG_SYSFS_DEPRECATED に関するエラーが出ましたので設定します。
General setup --->
[ ] remove sysfs features which may confuse old userspace tools

省略した ... の部分も、全部有効にしています。
作成後 lsmod で確認して次の機会に減らす、などの対処を後日行います。
Device Drivers --->
{M} I2C support --->
I2C device interface
I2C Hardware Bus support --->
...
ALI 1535
ALI 1563
ALI 15x3
...
{M} Hardware Monitoring support --->
...
National Semiconductor LM90 and compatibles
...

lm_sensors の emergeに失敗したので、修正しました。
$ cd /usr/src/linux/include/
$ sudo rm -i asm
$ sudo ln -s asm-generic asm

lm_sensors の設定は全て [Enter] を押しただけで、この例の場合は成功しました。
$ sudo sensors-detect
$ sudo /etc/init.d/lm_sensors restart
$ sudo rc-update add lm_sensors default
$ sensors
adm1032-i2c-0-4c
Adapter: SMBus ALI1535 adapter at ef00
M/B Temp: +36°C (low = -65°C, high = +127°C)
CPU Temp: +42.8°C (low = +42.0°C, high = +48.0°C) ALARM
M/B Crit: +127°C (hyst = +122°C)
CPU Crit: +100°C (hyst = +95°C)

この例の場合、再起動すると時計が戻るのでfsckが毎回動きますが
電池切れのようで、下記の対応では修正できません。
$ cat /etc/conf.d/local.start
/etc/init.d/ntpd stop
ntpdate 192.168.0.1
hwclock --systohc
/etc/init.d/ntpd start

2009-12-02

違うcpuでdistccを使う

2010-7-11 追記 この記事は間違っています。

この記事は違うcpuでdistccを使う際の参考です。

この例の場合の条件
ネットワーク => 192.168.0.0/24(192.168.0.0/255.255.255.0)
CPUが新しい  => phenom(192.168.0.100)
CPUが古い    => pen3(192.168.0.200)

192.168.0.200 で現在のバージョンを確認します。
$ emerge -pv binutils gcc linux-headers glibc

192.168.0.100 で現在のバージョンを確認します。
emerge -pv cross-i686-pc-linux-gnu/binutils cross-i686-pc-linux-gnu/gcc cross-i686-pc-linux-gnu/linux-headers cross-i686-pc-linux-gnu/glibc

192.168.0.100 でマッチするバージョンをインストールします。
USEをそろえます。multilib はCPUを貸す側には追加されます。
crossdev でインストールします。
USE="-gtk -multilib -openmp mudflap" crossdev -t i686-pc-linux-gnu --binutils 2.18-r3 --gcc 4.3.4 --kernel 2.6.27-r2 --libc 2.9_p20081201-r2

192.168.0.100 で /etc/conf.d/distccd に設定します。
一つのサーバーでIPアドレスが複数ある場合は設定します。
DISTCCD_OPTS="${DISTCCD_OPTS} --listen 192.168.0.100"

192.168.0.200 で/etc/conf.d/distccdに設定します。
一つのサーバーでIPアドレスが複数ある場合は設定します。
DISTCCD_OPTS="${DISTCCD_OPTS} --listen 192.168.0.200"

192.168.0.200 で設定します。
$ distcc-config --set-hosts "192.168.0.100"

192.168.0.200 で /etc/portage/package.mask に設定します。
>sys-devel/binutils-2.18-r3
>sys-kernel/linux-headers-2.6.27-r2
>sys-devel/gcc-4.3.4
>sys-libs/glibc-2.9_p20081201-r2

192.168.0.200 で /etc/make.conf に設定します。
ccache を手前にすると ccache が先になります。
FEATURES="ccache distcc"        # ccache, distcc を使う
DISTCC_HOSTS="192.168.0.100"    # distcc のCPUに余裕のあるIPアドレスの指定
CCACHE_SIZE="2G"                # ccache のキャッシュファイルの最大容量
CCACHE_DIR="/var/tmp/ccache"    # ccache の保存ディレクトリ
MAKEOPTS="-j3"                  # emerge の gcc に渡す同時実行数(pump とは異なる)

192.168.0.100 で /etc/portage/package.mask に設定します。
>cross-i686-pc-linux-gnu/binutils-2.18-r3
>cross-i686-pc-linux-gnu/gcc-4.3.4
>cross-i686-pc-linux-gnu/linux-headers-2.6.27-r2
>cross-i686-pc-linux-gnu/glibc-2.9_p20081201-r2

両方のサーバーでdistccを起動します。
$ rc-update add distccd default
$ /etc/init.d/distccd restart

192.168.0.200 で /etc/make.conf の -march=native を分解します。
-march=native をコンパイルオプションに含む場合 distcc は無効になります。
CFLAGS="-march=pentium3 --param l1-cache-size=16 --param l1-cache-line-size=32 -mtune=generic -fomit-frame-pointer -O2"
CXXFLAGS="${CFLAGS}"

192.168.0.200 で emerge パッケージ名 などのコマンドを実行します。
$ emerge -eav system

192.168.0.100 でパケットを見ます。
$ tcpdump tcp port 3632 -n

以前 glibc のバージョンが違う場合で、かつ ppc が CPU を借りる側の場合に glibc が sunrpc に関するエラーでコンパイルできなかったので、バージョンを合わせるのはお勧めです。

gcc,glibcなどのパッケージの3つ目の番号が違う場合は、動きます。
xxx-3.4.5 => xxx-3.4.6

コンパイル以外の部分は早くなりません。
./configure
...
checking xxx

参考
http://d.hatena.ne.jp/tmatsuu/20090110/1231557035
http://www.gentoo.org/doc/ja/distcc.xml
http://www-auklet.gentoo.org/doc/ja/handbook/handbook-sparc.xml?part=2&chap=3

2009-11-28

iptables の設定のサンプル

これはサンプルです。例えば ping の回数制限などが足りていません。
ぜひ man iptables などの正規のマニュアルをご参照ください。
例えばこの例は-dと-sを間違っています。
# 基本のルール
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

# ルールの入れ物
iptables -N MyFwInputMain
iptables -N MyFwInputStateNew
iptables -N MyFwInputSSHPrepare
iptables -N MyFwInputSSHExec

# 基本のINPUTルールにルールを追加
iptables -A INPUT -j MyFwInputMain

# 127.0.0.0/8 許可
iptables -A MyFwInputMain -i lo -j ACCEPT

# pingなどのICMPパケットを許可(iptables -p icmp -h)
iptables -A MyFwInputMain -p icmp --icmp-type any -j ACCEPT

# 接続中と、接続中が無いと接続できない新規の接続を許可
iptables -A MyFwInputMain -m state --state ESTABLISHED,RELATED -j ACCEPT

# 新規接続を別ルールへ移動
iptables -A MyFwInputMain -m state --state NEW -j MyFwInputStateNew

# 新規接続の一部をtcp,port指定で許可
iptables -A MyFwInputStateNew -m tcp -p tcp -m multiport --dports 80,443,873,2401,3690 -j ACCEPT
iptables -A MyFwInputStateNew -m tcp -p tcp --dport 8080:8099 -j ACCEPT

# 新規のssh接続を、別ルールへ移動
iptables -A MyFwInputStateNew -m tcp -p tcp --dport 22 -j MyFwInputSSHPrepare

# 新規のssh接続を、IPアドレス限定で、別ルールへ移動
#iptables -A MyFwInputSSHPrepare -d 10.0.0.0/8 -j MyFwInputSSHExec
#iptables -A MyFwInputSSHPrepare -d 172.16.0.0/12 -j MyFwInputSSHExec
#iptables -A MyFwInputSSHPrepare -d 192.168.0.0/16 -j MyFwInputSSHExec
iptables -A MyFwInputSSHPrepare -s 10.0.0.0/8 -j MyFwInputSSHExec
iptables -A MyFwInputSSHPrepare -s 172.16.0.0/12 -j MyFwInputSSHExec
iptables -A MyFwInputSSHPrepare -s 192.168.0.0/16 -j MyFwInputSSHExec

# 新規のssh接続を、IPアドレス限定で、1分に6回許可
iptables -A MyFwInputSSHExec -m limit --limit 1/minute --limit-burst 6 -j ACCEPT

# 指定したルール以外は拒否の返答をする。
iptables -A MyFwInputMain -j REJECT --reject-with icmp-host-prohibited

genkernel の ロードする kernel モジュールを最低限にする。

gentoo で genkernel を利用している場合で、起動時にロードされる kernel モジュールを減らしたい場合の参考です。実行後 lsmod の内容が減りますが その利点は、使用するメモリが減ることです。

実行すると ssh 接続が切れますので、ネットワークモジュールを消さないか、ローカル上のターミナルで rmmod を実行することを、お勧めします。
$ lsmod |awk '{print "sudo rmmod "$1}' > rmmod.txt

ダイレクトにアンロードする場合
$ lsmod |`awk '{print "sudo rmmod "$1}'`

コマンドを実行すると使っているモジュール以外はアンロードされます。
2回以上実行して lsmod の内容に変化が無くなるまで行います。
この例の場合 r8169(miiは自動で呼ばれる) 以外はアンロードできないので、最低限のモジュールになったと判断しています。
この場合の r8169 はマザーボードや pci などの LAN カードによって名前が変わります。
この場合の LAN カードは Realtek 8111C (マザーボードに付属)です。
$ lsmod
Module                  Size  Used by
r8169                  35212  0
mii                     5944  1 r8169
ipv6                  268672  14
raid1                  21816  4
usbcore               157520  1
ahci                   38152  8
libata                188396  1 ahci

genkernel の /boot/ にある initramfs(この例の場合initramfs-genkernel-x86_64-2.6.30-gentoo-r5)のオプションを減らします。
ext2, ext3 はこの例の場合モジュールではないのですが、使っているので残しました。
$ cat /usr/share/genkernel/arch/x86_64/modules_load
# Module groups for genkernel initramfs auto-loading

# RAID
MODULES_ATARAID=""
MODULES_DMRAID=""
MODULES_EVMS="raid1"
MODULES_LVM=""
MODULES_MDADM="raid1"

# Hardware (IDE/SCSI/SATA)
MODULES_PATA="libata"
MODULES_SATA="ahci libata"
MODULES_SCSI=""
MODULES_WAITSCAN=""

# Hardware (Network)
MODULES_NET="r8169 mii ipv6"

# Hardware (Pluggable)
MODULES_FIREWIRE=""
MODULES_PCMCIA=""
MODULES_USB="usbcore"

# Filesystems
MODULES_FS="ext2 ext3"

再作成します。
$ sudo genkernel initramfs

再起動して、無事起動に成功した場合は lsmod の結果が期待した内容より少し多い状態になっています。
この例の場合、設定したものより多い理由は
lm-sensors の場合は it87, i2c-core など
ソフトウェアごとに必要なモジュールが、そのソフトウェアの起動時に呼ばれているためです。
$ grep ^MOD /etc/conf.d/lm_sensors
MODULE_0=it87

$ grep MODULE_ /etc/init.d/lm_sensors
                if [ -z "${MODULE_0}" ]; then
                        eerror "MODULE_0 is not set in /etc/conf.d/lm_sensors, try running sensors-detect"
                        module=`eval echo '$'MODULE_${i}`
                        module_args=`eval echo '$'MODULE_${i}_ARGS`
                # find the highest possible MODULE_ number
                        module=`eval echo '$'MODULE_${i}`
                        module=`eval echo '$'MODULE_${i}`

また floopy などは /sys/bus/pci/devices/ からハードウェアを検索して、モジュールを自動で追加するので問題ないです。
例えば floppy を使わない場合は bios で停止してください。
$ lsmod
Module                  Size  Used by
it87                   25056  0
hwmon_vid               2952  1 it87
hwmon                   3096  1 it87
i2c_core               27744  0
ohci1394               30340  0
ieee1394               95520  1 ohci1394
ehci_hcd               35716  0
processor              39720  0
ohci_hcd               23444  0
floppy                 58968  0
rtc                     8464  0
thermal                17368  0
sg                     31536  0
thermal_sys            16208  2 processor,thermal
button                  6920  0
ipv6                  273696  20
nf_conntrack           75760  0
r8169                  35324  0
mii                     5944  1 r8169
raid1                  21816  4
usbcore               157568  3 ehci_hcd,ohci_hcd
ahci                   38232  8
libata                188412  1 ahci

また実行するに当たって grub などのブートローダーで、古いカーネルが呼べる状態であるか
1CD Linux などでレスキュー可能であるなどの、回復が可能な環境でなければ、実行しないことを、お勧めします。

2009-11-26

ルーターのログをリモートで受信した結果を絞り込むコマンドのサンプル

superOPTAir の USER.* のログを別サーバーへ送るように設定し、確認をしました。

# src ip
sudo tail -n100 /var/log/user.log |grep 192.168.0.1|grep "Discard packet."|awk '{print $9}'|grep TCP|awk -F'(' '{print $2}'|awk -F':' '{print $1}'|sort|uniq -c|sort -n

# dest port 
sudo tail -n100 /var/log/user.log |grep 192.168.0.1|grep "Discard packet."|grep TCP|awk '{print $11}'|awk -F':' '{print $2}'|awk -F')' '{print $1}'|sort|uniq -c|sort -n

2009-11-25

windowsとlinuxのrsync

windows 側で colinux をインストールし cofs で c:\ を mount して
linux 側から rsync をしたところ、成功しました。

--link-dest オプションを使う目的で設定しましたが
この方法では日本語ディレクトリで問題が発生します。

cwrsync を使って解決しました。

2009-11-22

phpでswf,flvの動作に関する調査

http://www.ioncannon.net/ruby/108/flash-video-steam-ming-php-ruby/
上記のページのphpソースを動作させてみました。
日本語を表示させるのはOKでした。
ttftofft コマンドが動かないので ttf2fft のコマンドを minghsp 付属のもので利用しました。
flvを固定パスで指定して再生ボタンを押して動きました。
ming 3.0 で動作します。4以上だと 4.0.2 の場合 php では動作せず 4.2 では動作します。
また swf をxmlファイルに変換する swfmill を試したところ、動きました。
ソースで入れる際に修正しました。
swfmill-0.2.12/src/swft/swft_css.cpp
> #include  <string.h>
swfmill-0.2.12/src/swft/swft_import_mp3.cpp
> #include  <string.h>
swf=>xml=>swf といった具合に再変換したところ、違うファイルになることを確認しました。
swf=>xml=>swf=>xml といった具合に再変換したところ、2のxmlファイルは同じであったことを確認しました。

nginxの接続数

nginxで接続数を1024以上にすると、警告が出ます。
[warn]: 8192 worker_connections are more than open file resource limit: 1024
/etc/security/limits.conf
を変更しましたが limits.conf を変更するのは間違いです。
# 変化無し。(nginxユーザー)
> nginx soft nofile 65536
> nginx hard nofile 65536
# 警告がでない。(全ユーザー)
> * soft nofile 65536
> * hard nofile 65536
# 警告がでない。(root(管理者))
> root soft nofile 65536
> root hard nofile 65536
limits.conf ではなく nginx.conf を修正します。
worker_rlimit_nofile 8192;
http://forum.nginx.org/read.php?2,6300,6307
http://wiki.nginx.org/NginxMainModuleJa#worker_rlimit_nofile

ファイルの一覧をパイプ付きのコマンドに渡す

$ find * -type d | while read -r d;do echo $d include `ls "$d" | wc -l` files; done
http://ameblo.jp/pclindesk/entry-10131168430.html

この記事が参照サイトの情報のみなので、追記します。

(例1) dev-php5 のパッケージのファイルを /tmp/ にコピーするコマンドを出力する。
find /usr/portage/dev-php5/*/Manifest -exec grep ^DIST {} \; | awk '{print $2}' |sort|uniq|while read -r f;do test -e /usr/portage/distfiles/$f; if [ $? -eq 0 ];then echo cp -f /usr/portage/distfiles/$f /tmp/;fi; done

Manifest というファイルの DIST で始まる行にファイルに関する情報が有り、その行を複数ファイルにまたがって取得します。
find /usr/portage/dev-php5/*/Manifest -exec grep ^DIST {} \;

行ごとにスペースで分けて2カラム目を取得します。取得している値はファイル名です。
| awk '{print $2}'

この部分で重複するファイル名を1つにします。
|sort|uniq

ファイルをコピーするコマンドを出力します。
|while read -r f;do test -e /usr/portage/distfiles/$f; if [ $? -eq 0 ];then echo cp -f /usr/portage/distfiles/$f /tmp/;fi; done

インデントしてコメントを追加しました。
|                                       # パイプです。
while read -r f; do                     # ここから done までで1行ごとにパイプから来た値を読みます。
    test -e /usr/portage/distfiles/$f;  # file が存在すれば真 を返します。
    if [ $? -eq 0 ]; then               # $? が test の戻り値で 0 だと正常です。
        echo cp -f \                    # ここは command > output.txt などとしてコマンドの
            /usr/portage/distfiles/$f \ #   確認をするために echo としています。
            /tmp/;                      # バックスラッシュ(半角の¥)はコマンドの長い時の折り返しの
    fi;                                 #   意味に、この場合はなります。
done                                    # 読み込む行があれば while の最初から処理を続行します。

この例だと説明になっていませんが
while ... done の間にパイプ(|)を含むコマンドの記述が可能です。
また、あらかじめ emerge --fetchonly などでダウンロードしていないとcpコマンドがエラーになります。

また find の -exec は2つ以上かけるので場合によっては、それで十分です。
$ find /tmp/ -exec test -f {} \; -exec md5sum {} \; # これは意味の無い使い方です。 
$ find /tmp/ -type f -exec md5sum {} \;             # これは上記のコマンドと同じです。

2009-11-21

phpのxdiff

2010-04-02 現在 dev-php5/pecl-xdiff のパッケージがありますので、そちらをお勧めします。
$ sudo ACCEPT_KEYWORDS="~amd64" emerge -av dev-php5/pecl-xdiff
$ eix dev-php5/pecl-xdiff
[D] dev-php5/pecl-xdiff
     Available versions:  ~1.4.1
     Installed versions:  1.4.1(00時20分03秒 2010年04月01日)
     Homepage:            http://pecl.php.net/xdiff
     Description:         PHP extension for generating diff files

phpのxdiffが使いたいため
sudo pecl install xdiff-1.5.1
を行ったところ失敗したため
/etc/portage/package.mask

>=sys-devel/libtool-2
を、追記してシステムを更新したところ
バージョンが1.5.26になりました。
また、更新時に依存パッケージが一部再インストールされました。
再度peclを実行したところインストールできたのですが
libtoolのバージョンを下げることはお勧めしません。

手動でファイルを追加しています。
$ find /etc/php/ -name xdiff.ini
/etc/php/cli-php5/ext/xdiff.ini
/etc/php/cli-php5/ext-active/xdiff.ini
/etc/php/apache2-php5/ext/xdiff.ini
/etc/php/apache2-php5/ext-active/xdiff.ini
$ cat /etc/php/apache2-php5/ext/xdiff.ini
extension=xdiff.so

colinuxのgentooとudev-146

colinuxをgentooで使っているときに
更新すると再起動で起動できなくなりました。
/etc/portage/package.mask

>=sys-fs/udev-146-r1
を入れてemergeをやり直すと直ります。
sys-fs/udev-141になります。

起動できなくなった場合の救出は
元のイメージ以外で起動するように設定し、別のcolinuxイメージで起動し
mountしてchrootで入ります。
後は通常のpackage.maskの修正やemergeは同じ作業です。
chrootのコマンドの例です。
http://www.gentoo.org/doc/ja/handbook/handbook-x86.xml?part=1&chap=6#doc_chap1

また、udev更新時に2.6.25云々とメッセージが出ていますが、それを見逃したことが原因です。

test

test

Cookieをセット
top