-->

2011-06-30

クロスコンパイル

http://www.gentoo.org/proj/en/base/embedded/cross-development.xml

参考URLの内容でコンパイルできた。大体下記のような作業を行った。
crossdevをインストールする。distcc用の作業を1回以上行っていると必要なファイルが作成されているかもしれない。
/usr/powerpc-unknown-linux-gnu/etc/make.profileにリンクを貼る。
/usr/powerpc-unknown-linux-gnu/etc/portage/make.conf の CFLAGS に "-mcpu=603e -Os" を追加。
xmergeのスクリプトファイルをコピーして実行する。

sl, lv などを -B などでコンパイルして -K などでインストールする。
バージョンを指定しないとテスト版を作成している場合あり。(make.conf の ACCEPT_KEYWORDS="ppc ~ppc")
### 作成サーバー。
$ sudo sh ~/bin/xemerge --oneshot -avt -B net-misc/telnet-bsd
### インストールサーバー。
$ sudo emerge --oneshot -avt -K net-misc/telnet-bsd

/usr/portage/packagesはnfsなどでファイルを読める状態にする。もしくはファイルをコピーする。
$ mount|grep /usr/portage/packages
192.168.0.100:/usr/powerpc-unknown-linux-gnu/packages on /usr/portage/packages type nfs4 (rw,addr=192.168.0.100,clientaddr=192.168.0.150)

一部無理だった。
eix (cross comple error)
munin (/usr/lib => /usr/lib64)

作れないのがあるようなので、依存パッケージやバージョンも含めて手動で作成であれば使えそう。
作成できないだけなら良いが、間違った状態で作成に成功する場合があるので試しに使うだけにする。
なにか設定がさらに必要かもしれない。

nmapの例

ローカルネットワーク上の別のパソコンから実行する。
自身から実行する。
tcp, udpで、それぞれ実行する。

tcp, udpのどちらかだけ開ける、などが確認できる。
rpc.statd の --outgoing-port 32766 は開けなくても良さそう。(OUTPUTチェインが素通しの場合)
nfs関連でtcpが1つ、udpが2つ、ポートを固定出来ていない。
動いてはいるが何かのタイミングで極端に遅くなったり、見た目動いていても実はおかしい、などになるかもしれない。
tcpの方はプロセス名が不明なのでlockdのようにkernelの設定になるのかもしれない。

追記: もしくは rpcinfo -p に挙げられているプロトコル、ポートが空いていれば大丈夫かもしれません。

この例の場合、調べるポート数が多いのでグローバルなIPアドレスで実行すると問題が発生するかもしれません。

tcpのポートを外側からチェック。
$ nmap -Pn -A -T5 -sT -p1- 192.168.0.200 > nmap-tcp-192.168.0.200.txt 2>&1 &
$ cat nmap-tcp-192.168.0.200.txt

Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-28 11:39 JST
Nmap scan report for cogentoo-1.localnet (192.168.0.200)
Host is up (0.0067s latency).
Not shown: 65518 filtered ports
PORT      STATE  SERVICE     VERSION
22/tcp    open   ssh         OpenSSH 5.8p1-hpn13v10 (protocol 2.0)
53/tcp    closed domain
111/tcp   open   rpcbind
123/tcp   closed ntp
137/tcp   closed netbios-ns
138/tcp   closed netbios-dgm
139/tcp   open   netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
445/tcp   open   netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
873/tcp   closed rsync
2049/tcp  open   rpcbind
2401/tcp  closed cvspserver
3690/tcp  closed svn
4949/tcp  open   munin       Munin
32765/tcp open   rpcbind
32766/tcp closed unknown
32767/tcp open   rpcbind
32768/tcp open   rpcbind

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 106.18 seconds

udpのポートを外側からチェック。
$ sudo nmap --host-timeout 1165535s -A -T5 -sU -p1- 192.168.0.200 > nmap-udp-192.168.0.200.txt 2>&1 &
$ cat nmap-udp-192.168.0.200.txt

Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-28 11:38 JST
Warning: 192.168.0.200 giving up on port because retransmission cap hit (2).
Umm -- RPC returned success for bogus version -- thats OK I guess
Umm -- RPC returned success for bogus version -- thats OK I guess
Nmap scan report for cogentoo-1.localnet (192.168.0.200)
Host is up (0.00098s latency).
Not shown: 65306 filtered ports, 214 open|filtered ports
PORT      STATE  SERVICE      VERSION
53/udp    closed domain
111/udp   open   rpcbind
123/udp   open   ntp          NTP v4
137/udp   open   netbios-ns   Microsoft Windows XP netbios-ssn
139/udp   closed netbios-ssn
445/udp   closed microsoft-ds
873/udp   closed rsync
2049/udp  open   rpcbind      0 (rpc #100000)
2401/udp  closed cvspserver
3690/udp  closed unknown
4949/udp  closed unknown
32765/udp open   rpcbind
32766/udp closed unknown
32767/udp open   rpcbind
32768/udp open   rpcbind      0 (rpc #100000)
MAC Address: 00:FF:8A:7E:AF:01 (Unknown)
Too many fingerprints match this host to give specific OS details
Network Distance: 1 hop
Service Info: OS: Windows

TRACEROUTE
HOP RTT     ADDRESS
1   0.98 ms cogentoo-1.localnet (192.168.0.200)

OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 72493.69 seconds

tcpのポートを内側からチェック。
$ nmap -A -T5 -sT -p1- 127.0.0.1 > nmap-tcp-127.0.0.1.txt 2>&1 &
$ cat nmap-tcp-127.0.0.1.txt

Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-28 11:39 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.024s latency).
Not shown: 65520 closed ports
PORT      STATE SERVICE     VERSION
22/tcp    open  ssh         OpenSSH 5.8p1-hpn13v10 (protocol 2.0)
25/tcp    open  smtp        Postfix smtpd
80/tcp    open  http        nginx
111/tcp   open  rpcbind     2-4 (rpc #100000)
139/tcp   open  netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
443/tcp   open  ssl/http    Apache httpd
445/tcp   open  netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
901/tcp   open  http        Samba SWAT administration server
2049/tcp  open  nfs         2-4 (rpc #100003)
4949/tcp  open  munin       Munin
8081/tcp  open  http        Apache httpd
32765/tcp open  status      1 (rpc #100024)
32767/tcp open  mountd      1-3 (rpc #100005)
32768/tcp open  nlockmgr    1-4 (rpc #100021)
55000/tcp open  rpc.unknown
Service Info: Host:  cogentoo-1.localnet

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 19.70 seconds

udpのポートを内側からチェック。
$ sudo nmap -A -T5 -sU -p1- 127.0.0.1 > nmap-udp-127.0.0.1.txt 2>&1 &
$ cat nmap-udp-127.0.0.1.txt

Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-28 11:39 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00033s latency).
Not shown: 65525 closed ports
PORT      STATE         SERVICE     VERSION
111/udp   open          rpcbind     2-4 (rpc #100000)
123/udp   open          ntp         NTP v4
137/udp   open          netbios-ns  Microsoft Windows XP netbios-ssn
138/udp   open|filtered netbios-dgm
608/udp   open|filtered sift-uft
957/udp   open          rpcbind     2-4 (rpc #100000)
2049/udp  open          nfs         2-4 (rpc #100003)
32765/udp open          status      1 (rpc #100024)
32767/udp open          mountd      1-3 (rpc #100005)
32768/udp open          nlockmgr    1-4 (rpc #100021)
Too many fingerprints match this host to give specific OS details
Network Distance: 0 hops
Service Info: Host: COGENTOO-1; OS: Windows

OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 89.97 seconds

再起動すると固定出来ていないポートがあることがわかる。
$ diff /tmp/a.txt nmap-udp-127.0.0.1.txt
2c2
< Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-28 11:39 JST
---
> Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-30 13:07 JST
4c4
< Host is up (0.00033s latency).
---
> Host is up (0.00s latency).
11,12c11,12
< 608/udp   open|filtered sift-uft
< 957/udp   open          rpcbind     2-4 (rpc #100000)
---
> 956/udp   open          rpcbind     2-4 (rpc #100000)
> 1011/udp  open|filtered unknown
22c22
< Nmap done: 1 IP address (1 host up) scanned in 89.97 seconds
---
> Nmap done: 1 IP address (1 host up) scanned in 90.99 seconds

$ diff /tmp/b.txt nmap-tcp-127.0.0.1.txt
2c2
< Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-28 11:39 JST
---
> Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-30 13:07 JST
4c4
< Host is up (0.024s latency).
---
> Host is up (0.026s latency).
10c10
< 111/tcp   open  rpcbind     2-4 (rpc #100000)
---
> 111/tcp   open  rpcbind
21c21
< 55000/tcp open  rpc.unknown
---
> 47454/tcp open  rpc.unknown
25c25
< Nmap done: 1 IP address (1 host up) scanned in 19.70 seconds
---
> Nmap done: 1 IP address (1 host up) scanned in 21.74 seconds

$ sudo lsof -i:956,1011,47454
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1661   root    7u  IPv4   3659      0t0  UDP *:956
rpc.statd 1683 nobody    5u  IPv4   3831      0t0  UDP *:1011

$ sudo netstat -anp | grep -P "956|1011|47454"
tcp        0      0 0.0.0.0:47454           0.0.0.0:*               LISTEN      -
udp        0      0 0.0.0.0:956             0.0.0.0:*                           1661/rpcbind
udp        0      0 0.0.0.0:1011            0.0.0.0:*                           1683/rpc.statd

postfixのtransport_maps

参考URL。
http://zsrv.s43.xrea.com/content/view/33/30/
http://d.hatena.ne.jp/matzmura/20080316/1205672821
http://www.eva-01.jp/wiki/pukiwiki.php?Sendmail%2FSTARTTLS
http://www.postfix.org/transport.5.html
http://www.postfix-jp.info/trans-2.3/jhtml/transport.5.html

この例の場合プロバイダのメールサーバーからgmailに送れるので意味はないです。
また認証に使ったユーザー以外のgmailへ送れるかどうか試していないです。

certificate verification failed for smtp.gmail.com ...
$ qfile /etc/ssl/certs/
app-misc/ca-certificates (/etc/ssl/certs)
dev-libs/openssl (/etc/ssl/certs)

plain固定ではなくlogin無効で他は有効にした。
$ rcsdiff /etc/config-archive/etc/postfix/main.cf,v /etc/postfix/main.cf
===================================================================
RCS file: /etc/config-archive/etc/postfix/main.cf,v
retrieving revision 1.12
diff -r1.12 /etc/postfix/main.cf
663c663
< smtp_sasl_mechanism_filter = plain
---
> smtp_sasl_mechanism_filter = !login, static:all
665a666,669
>
> smtp_tls_CApath = /etc/ssl/certs
> smtp_use_tls = yes
> transport_maps = hash:/etc/postfix/transport

デフォルト値。
$ postconf -d|grep -iP "^(transport_maps|smtp_use_tls|smtp_tls_CApath)\s*="
smtp_tls_CApath =
smtp_use_tls = no
transport_maps =

パスワード追加。
$ /usr/bin/sudo /usr/bin/rcsdiff /etc/config-archive/etc/postfix/saslpass,v /etc/postfix/saslpass
===================================================================
RCS file: /etc/config-archive/etc/postfix/saslpass,v
retrieving revision 1.2
diff -r1.2 /etc/postfix/saslpass
3a4
> [smtp.gmail.com]:submission  ユーザー名:パスワード

ドメインが gmail.com の場合 smtp.gmail.com を利用する。
$ sudo cat transport
gmail.com smtp:[smtp.gmail.com]:submission

smtp_sasl_mechanism_filter = !login, !plain, static:all にしたらXOAUTHというのを使うのか?と思ったが、送れなかった。
$ openssl s_client -connect smtp.gmail.com:587 -starttls smtp
...
250-AUTH LOGIN PLAIN XOAUTH
...

クライアント側に対応がない。
# smtp_sasl_mechanism_filter = !login, !plain, static:all
warning: SASL authentication failure: No worthy mechs found

サーバー側に対応がない。
# smtp_sasl_mechanism_filter = gssapi
(SASL authentication failed: server xxx[xxx] offered no compatible authentication mechanisms for this type of connection security)

2011-06-29

サブミッションポート

これはsmtpサーバーではなくsmtpクライアントの設定です。
587番ポートをLISTENしません。

修正: ローカルネットワーク上の他のサーバーから25番ポートでメールを受け取って、
それをプロバイダのメールサーバーの587番ポートにリレーするような感じです。
自身は587番ポートをLISTENしません。
$ sudo netstat -anp|grep -P ":(25|587)\s"
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      6807/master

追記: amdgentooのpostfixとwindowsXPのThunderbird(メールソフト)は、
それぞれプロバイダのメールサーバーの接続情報を持っている。
他のサーバーのpostfixはamdgentooにメールを渡す。
図。
┌──────────┐  ┌──┬─────┐  ┌────┐  ┌───┬─────────────┐
│他のサーバー        ├┬┤25番│amdgentoo ├┬┤ルーター├─┤587番 │プロバイダのメールサーバー│
│relayhost=amdgentoo ││└──┴─────┘│└────┘  └───┴─────────────┘
└──────────┘│                    │
 ...                    │                    │
┌──────────┐│                    │
│他のサーバー        ├┘                    │
│relayhost=amdgentoo │                      │
└──────────┘                      │
                                              │
┌─────┐                                │
│windowsXP ├────────────────┘
└─────┘

追記: 他のサーバーはamdgentooに渡す設定のみ。
$ rcsdiff -r1.6 /etc/config-archive/etc/postfix/main.cf,v /etc/postfix/main.cf
===================================================================
RCS file: /etc/config-archive/etc/postfix/main.cf,v
retrieving revision 1.6
diff -r1.6 /etc/postfix/main.cf
76a77
> myhostname = cogentoo-1.localnet
83a85
> mydomain = localnet
315c317
< relayhost = xxx.xxx.xxx
---
> relayhost = amdgentoo.localnet

プロバイダの説明を探してメールサーバーの設定を修正します。
サブミッションポート, OP25B, ポート587 など。

現在のmain.cf。
/usr/portage/packages/mail-mta/postfix-2.7.4.tbz2のファイルとの差分。(emerge ... -b postfix)
relayhostとsmtp_sasl_auth_enable以下の記述がサブミッションポート用の変更点。
$ diff ./etc/postfix/main.cf /etc/postfix/main.cf
76a77
> myhostname = amdgentoo.localnet
83a85
> mydomain = localnet
262a265
> mynetworks = xxx.xxx.xxx.xxx/8 xxx.xxx.xxx.xxx/24
313a317
> relayhost = プロバイダのメールサーバー:587
652a657,665
>
> smtpd_milters         = unix:/var/run/clamav/clamav-milter.sock
> non_smtpd_milters     = unix:/var/run/clamav/clamav-milter.sock
> milter_default_action = accept
>
> smtp_sasl_auth_enable = yes
> smtp_sasl_mechanism_filter = plain
> smtp_sasl_password_maps = hash:/etc/postfix/saslpass
> smtp_sasl_security_options = noanonymous

デフォルト値。
$ postconf -d|grep -iP "^(smtp_sasl_auth_enable|smtp_sasl_password_maps|smtp_sasl_mechanism_filter|smtp_sasl_security_options)\s*="
smtp_sasl_auth_enable = no
smtp_sasl_mechanism_filter =
smtp_sasl_password_maps =
smtp_sasl_security_options = noplaintext, noanonymous

saslpass修正。
$ sudo vi saslpass
$ /usr/bin/sudo /usr/bin/rcsdiff /etc/config-archive/etc/postfix/saslpass,v /etc/postfix/saslpass
===================================================================
RCS file: /etc/config-archive/etc/postfix/saslpass,v
retrieving revision 1.1
diff -r1.1 /etc/postfix/saslpass
3a4
> プロバイダのメールサーバー ユーザー名:パスワード
$ sudo postmap saslpass

認証方式の確認。
$ telnet プロバイダのメールサーバー 587
Trying xxx.xxx.xxx.xxx...
Connected to プロバイダのメールサーバー.
Escape character is '^]'.
220 xxxxxxxx.example.com ESMTP
EHLO xxx.xxx.xxx.xxx           # EHLO IPアドレス などを入力する。
250-xxxxxxxx.example.com
250-PIPELINING
250-SIZE 20971520
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit                           # 終了。quitを入力する。
221 2.0.0 Bye
Connection closed by foreign host.

この例の場合で smtp_sasl_mechanism_filter 無しの場合、
smtp_sasl_mechanism_filter = login, plain
と同じ。無しで下記を使う。
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
例えば 250-AUTH LOGIN PLAIN XXX とある場合、
smtp_sasl_mechanism_filter = XXX にしても良いです。
もしくは smtp_sasl_security_options に noplaintext を追加します。

他のlinuxは relayhost = amdgentoo.localnet を経由し、windowsは直接同じような指定をしています。

MX検索を無効にする場合。+ポートを文字にする場合。
$ rcsdiff -r1.11 /etc/config-archive/etc/postfix/main.cf,v /etc/postfix/main.cf
===================================================================
RCS file: /etc/config-archive/etc/postfix/main.cf,v
retrieving revision 1.11
diff -r1.11 /etc/postfix/main.cf
317c317
< relayhost = プロバイダのメールサーバー:587
---
> relayhost = [プロバイダのメールサーバー]:submission
$ grep 587 /etc/services
submission      587/tcp                         # mail message submission
submission      587/udp

他。
送信者単位での認証(smtp_sender_dependent_authentication = yes)、
プロバイダごとのsmtpサーバーを直接指定など(/etc/postfix/transport)

参考URL。
http://www.postfix-jp.info/trans-2.2/jhtml/postconf.5.html
http://www.postfix.org/postconf.5.html#smtp_sasl_mechanism_filter
http://kazuizm.com/2006/12/28-072720.php
http://statphys.scphys.kyoto-u.ac.jp/~akihiko/linux/docomo.html
http://www.ecoop.net/memo/2007-03-31-1.html
http://www.aconus.com/~oyaji/mail2/op25b.htm
http://www.geocities.jp/yukke_no_kobeya/kurobako/fe8_130.html
http://www.postfix-jp.info/trans-2.3/jhtml/SASL_README.html#client_sasl
http://www.melnikov.ca/mel/devel/SASL_info.html
http://gmt-24.net/archives/181
http://www.itscom.net/support/security/op25b/submission.html
http://www.itscom.net/support/setup/internet/mailer/sub_smtp_thunderbird2_its.html
http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#smtp_sender_dependent_authentication
http://www.postfix-jp.info/trans-2.3/jhtml/transport.5.html

2011-06-26

nfs4のポート固定

$ rcsdiff -r1.1 /etc/config-archive/etc/conf.d/nfs,v /etc/conf.d/nfs
===================================================================
RCS file: /etc/config-archive/etc/conf.d/nfs,v
retrieving revision 1.1
diff -r1.1 /etc/conf.d/nfs
15c15
< OPTS_RPC_MOUNTD=""
---
> OPTS_RPC_MOUNTD="-p 32767"
19c19
< OPTS_RPC_STATD=""
---
> OPTS_RPC_STATD="-p 32765 -o 32766"

$ grep lockd /etc/modprobe.d/_local.conf
options lockd nlm_udpport=32768 nlm_tcpport=32768

$ rpcinfo -p
   プログラム バージョン プロトコル ポート
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  32765  status
    100024    1   tcp  32765  status
    100005    1   udp  32767  mountd
    100005    1   tcp  32767  mountd
    100005    2   udp  32767  mountd
    100005    2   tcp  32767  mountd
    100005    3   udp  32767  mountd
    100005    3   tcp  32767  mountd
    100021    1   udp  32768  nlockmgr
    100021    3   udp  32768  nlockmgr
    100021    4   udp  32768  nlockmgr
    100021    1   tcp  32768  nlockmgr
    100021    3   tcp  32768  nlockmgr
    100021    4   tcp  32768  nlockmgr
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl

$ netstat -an|grep -P ":(111|2049|32765|32766|32767|32768)\s"|sort -t':' -k2n
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN
udp        0      0 0.0.0.0:111             0.0.0.0:*
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN
udp        0      0 0.0.0.0:2049            0.0.0.0:*
tcp        0      0 0.0.0.0:32765           0.0.0.0:*               LISTEN
udp        0      0 0.0.0.0:32765           0.0.0.0:*
tcp        0      0 0.0.0.0:32767           0.0.0.0:*               LISTEN
udp        0      0 0.0.0.0:32767           0.0.0.0:*
tcp        0      0 0.0.0.0:32768           0.0.0.0:*               LISTEN
udp        0      0 0.0.0.0:32768           0.0.0.0:*

iptables の設定のサンプル part2

概要。
FORWARD => 全部DROP
OUTPUT  => 全部ACCEPT
INPUT
 +-main
    +-ACCEPT(--in-interface lo)
    |
    +-icmpPrepare
    |  +-icmpThrowTrust
    |  +-icmpExec
    |
    +-ACCEPT(state RELATED,ESTABLISHED)
    |
    +-stateNew
       +-classDPrepare
       |  +-classDExec
       |
       +-classEPrepare
       |  +-classEExec
       |
       +-httpPrepare
       |  +-httpThrowDie
       |  +-httpExec
       |
       +-localNetPrepare
       |  +-localNetExec
       |
       +-sshPrepare
          +-sshThrowTrust
          +-sshExec

ユーザー定義チェインの最後に1秒あたり10件を最大値としてログを取って終了する。
通らない部分にも書いてある。
$ grep -n log-prefix rules-save.sh | perl -pe 's/iptables -A (.+?) .*--log-prefix "iptables: (.+?): ".*$/("$1" eq "$2") . " : $1"/e'
...
$ grep -nP "\-j (REJECT|DROP)" rules-save.sh
...

loインターフェースから来たパケットを許可する。
RELATED,ESTABLISHEDのパケットを許可する。
ルーターからのclassD,classEのアクセスを許可する。
192.168.0.100以外のwebサーバーへのアクセスを許可する。
(一時的な設定として利用する。ある程度の期間で解除する)
icmpを192.168.0.0/24,それ以外の、それぞれで回数制限を入れて許可する。
192.168.0.0/24の範囲でsamba,nfs,dns,ntp,rsync,cvs,svn,muninなどを許可する。
sshを192.168.0.0/24,192.0.43.10/32(example.com)の、それぞれで回数制限を入れて許可する。

消す。1回消すごとに番号を確認する。
$ sudo iptables -L -n -v --line-numbers
$ sudo iptables -D httpPrepare 1
変更。
$ sudo iptables -R httpPrepare 1 ...
1番上に追加。
$ sudo iptables -I httpPrepare ...
1番下に追加。
$ sudo iptables -A httpPrepare ...

設定ファイルから読み込み。
$ sudo /etc/init.d/iptables reload
設定ファイルに保存。
$ sudo /etc/init.d/iptables save

設定ファイル。
$ sudo cat /var/lib/iptables/rules-save
...

設定コマンドの例。
$ cat bin/rules-save.sh
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT

iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -F classDExec
iptables -F classDPrepare
iptables -F classEExec
iptables -F classEPrepare
iptables -F httpExec
iptables -F httpPrepare
iptables -F httpThrowDie
iptables -F icmpExec
iptables -F icmpPrepare
iptables -F icmpThrowTrust
iptables -F localNetExec
iptables -F localNetPrepare
iptables -F main
iptables -F sshExec
iptables -F sshPrepare
iptables -F sshThrowTrust
iptables -F stateNew

iptables -X classDExec
iptables -X classDPrepare
iptables -X classEExec
iptables -X classEPrepare
iptables -X httpExec
iptables -X httpPrepare
iptables -X httpThrowDie
iptables -X icmpExec
iptables -X icmpPrepare
iptables -X icmpThrowTrust
iptables -X localNetExec
iptables -X localNetPrepare
iptables -X main
iptables -X sshExec
iptables -X sshPrepare
iptables -X sshThrowTrust
iptables -X stateNew

iptables -N classDExec
iptables -N classDPrepare
iptables -N classEExec
iptables -N classEPrepare
iptables -N httpExec
iptables -N httpPrepare
iptables -N httpThrowDie
iptables -N icmpExec
iptables -N icmpPrepare
iptables -N icmpThrowTrust
iptables -N localNetExec
iptables -N localNetPrepare
iptables -N main
iptables -N sshExec
iptables -N sshPrepare
iptables -N sshThrowTrust
iptables -N stateNew

iptables -A INPUT -j main
iptables -A classDExec -m limit --limit 2/min --limit-burst 6 -j ACCEPT
iptables -A classDExec -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: classDExec: "
iptables -A classDExec -j DROP
iptables -A classDPrepare -s 192.168.0.1/32 -j classDExec
iptables -A classDPrepare -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: classDPrepare: "
iptables -A classDPrepare -j DROP
iptables -A classEExec -m limit --limit 2/min --limit-burst 6 -j ACCEPT
iptables -A classEExec -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: classEExec: "
iptables -A classEExec -j DROP
iptables -A classEPrepare -s 192.168.0.1/32 -j classEExec
iptables -A classEPrepare -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: classEPrepare: "
iptables -A classEPrepare -j DROP
iptables -A httpExec -j ACCEPT
iptables -A httpExec -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: httpExec: "
iptables -A httpExec -j DROP
iptables -A httpPrepare -s 192.168.0.100/32 -j httpThrowDie
iptables -A httpPrepare -j httpExec
iptables -A httpPrepare -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: httpPrepare: "
iptables -A httpPrepare -j DROP
iptables -A httpThrowDie -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: httpThrowDie: "
iptables -A httpThrowDie -j DROP
iptables -A icmpExec -m limit --limit 10/sec --limit-burst 300 -j ACCEPT
iptables -A icmpExec -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: icmpExec: "
iptables -A icmpExec -j DROP
iptables -A icmpPrepare -s 192.168.0.0/24 -j icmpThrowTrust
iptables -A icmpPrepare -j icmpExec
iptables -A icmpPrepare -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: icmpPrepare: "
iptables -A icmpPrepare -j DROP
iptables -A icmpThrowTrust -m limit --limit 20/sec --limit-burst 600 -j ACCEPT
iptables -A icmpThrowTrust -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: icmpThrowTrust: "
iptables -A icmpThrowTrust -j DROP
iptables -A localNetExec -j ACCEPT
iptables -A localNetExec -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: localNetExec: "
iptables -A localNetExec -j DROP
iptables -A localNetPrepare -s 192.168.0.0/24 -j localNetExec
iptables -A localNetPrepare -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: localNetPrepare: "
iptables -A localNetPrepare -j DROP
iptables -A main -i lo -j ACCEPT
iptables -A main -p icmp -m icmp --icmp-type any -j icmpPrepare
iptables -A main -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A main -m state --state NEW -j stateNew
iptables -A main -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: main: "
iptables -A main -j REJECT --reject-with icmp-host-prohibited
iptables -A sshExec -m limit --limit 1/min --limit-burst 6 -j ACCEPT
iptables -A sshExec -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: sshExec: "
iptables -A sshExec -j DROP
iptables -A sshPrepare -s 192.168.0.0/24 -j sshThrowTrust
iptables -A sshPrepare -s 192.0.43.10/32 -j sshExec
iptables -A sshPrepare -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: sshPrepare: "
iptables -A sshPrepare -j DROP
iptables -A sshThrowTrust -m limit --limit 2/min --limit-burst 12 -j ACCEPT
iptables -A sshThrowTrust -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: sshThrowTrust: "
iptables -A sshThrowTrust -j DROP
iptables -A stateNew -d 224.0.0.0/4 -j classDPrepare
iptables -A stateNew -d 240.0.0.0/4 -j classEPrepare
iptables -A stateNew -p tcp -m tcp -m multiport --dports 80,443,8080 -j httpPrepare
iptables -A stateNew -p udp -m udp -m multiport --dports 111,2049,32765,32766,32767,32768 -j localNetPrepare
iptables -A stateNew -p tcp -m tcp -m multiport --dports 111,2049,32765,32766,32767,32768 -j localNetPrepare
iptables -A stateNew -p udp -m udp -m multiport --dports 137,138,139,445 -j localNetPrepare
iptables -A stateNew -p tcp -m tcp -m multiport --dports 137,138,139,445 -j localNetPrepare
iptables -A stateNew -p udp -m udp -m multiport --dports 53,123,873,2401,3690,4949 -j localNetPrepare
iptables -A stateNew -p tcp -m tcp -m multiport --dports 53,123,873,2401,3690,4949 -j localNetPrepare
iptables -A stateNew -p tcp -m tcp --dport 22 -j sshPrepare
iptables -A stateNew -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: stateNew: "
iptables -A stateNew -j REJECT --reject-with icmp-host-prohibited

syslog-ngの場合のログ分割。
$ rcsdiff /etc/config-archive/etc/syslog-ng/syslog-ng.conf,v /etc/syslog-ng/syslog-ng.conf
===================================================================
RCS file: /etc/config-archive/etc/syslog-ng/syslog-ng.conf,v
retrieving revision 1.11
diff -r1.11 /etc/syslog-ng/syslog-ng.conf
31a32
> destination iptables { file("/var/log/iptables.log"); };
64c65,66
< filter f_kern { facility(kern); };
---
> filter f_kern { facility(kern); and not message("^iptables: "); };
> filter f_iptables { facility(kern) and message("^iptables: "); };
92a95
> log { source(kernsrc); filter(f_iptables); destination(iptables); };

ログローテーション。
$ rcsdiff /etc/config-archive/etc/logrotate.d/syslog-ng,v /etc/logrotate.d/syslog-ng
===================================================================
RCS file: /etc/config-archive/etc/logrotate.d/syslog-ng,v
retrieving revision 1.5
diff -r1.5 /etc/logrotate.d/syslog-ng
9c9
< /var/log/debug /var/log/syslog /var/log/kern.log {
---
> /var/log/debug /var/log/syslog /var/log/kern.log /var/log/iptables.log {



例。マルチキャストの許可の一部分。
(1) iptables -A classDExec -m limit --limit 2/min --limit-burst 6 -j ACCEPT
(2) iptables -A classDExec -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: classDExec: "
(3) iptables -A classDExec -j DROP

説明。
(1) iptables -A classDExec -m limit --limit 2/min --limit-burst 6 -j ACCEPT
は一斉にアクセスがあった場合、瞬間的に6回許可できます。
その後は30秒後に許可できます。
アクセスが無い期間が3分続いた場合、再度6回連続で許可できます。
(2) iptables -A classDExec -m limit --limit 1/sec --limit-burst 10 -j LOG --log-prefix "iptables: classDExec: "
拒否されたアクセスを保存します。連続で10回保存できます。
その後は1秒後に保存できます。
アクセスが無い期間が10秒続いた場合、再度10回連続で保存できます。
(3) iptables -A classDExec -j DROP
破棄します。破棄したことを相手に連絡しません。

DROPまでの処理の流れ。
(1)は、ルーターが30秒以内に7回マルチキャストを送ってきた場合(回数が回復しないうちに最大数+1送る)に、ACCEPTチェインではなく(2)に移動します。
(2)は、ログの記録数制限なので必ず(3)に移動します。(-j XXX が無い)
(3)は、そこで終了します。

破棄の種類。
-j DROP は負荷が高いので破棄する場合のみが望ましいです。
-j REJECT --reject-with icmp-host-prohibited はそのようなサービス、プロセスなどが無いと伝える場合。

ルールが1回適用されるとダメージが1であるとして、
--limit 2/min --limit-burst 6
最大HP   : 6
HP回復量 : 30秒に+1

--limit 1/sec --limit-burst 10
最大HP   : 10
HP回復量 : 1秒に+1
のような感じです。

瞬間的に大量のアクセスがあるが許可したく、しかし、あまり連続で来られると拒否したい場合は、
--limit-burstを多め、--limitを多めにします。

例えば --limit 1/hour --limit-burst 1000 の場合、一気にアクセスが来ても1000アクセス許可しますが、
1000を超えると、その後は1時間に1回しか許可しません。
HPが1000に戻るまで1000時間かかります。

2011-06-24

ntpq -pn の jitter が増える => 同期が外れる => jitter が増える ...

http://femt.ddo.jp/modules/xpwiki/?NTP%E3%82%B5%E3%83%BC%E3%83%90%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B

$ sudo ACCEPT_KEYWORDS="~*" emerge --oneshot -avt net-misc/adjtimex

CLOCK="local" だけで良い?
$ co /etc/config-archive/etc/conf.d/clock,v
$ sudo cp -i clock /etc/conf.d/

$ sudo adjtimexconfig
Comparing clocks (this will take 70 sec)...done.
Adjusting system time by 212.217 sec/day to agree with CMOS clock...done.

$ sudo /etc/init.d/adjtimex start
$ sudo rc-update add adjtimex default

$ sudo find /etc/ -mmin -10 -type f
/etc/init.d/adjtimex
/etc/conf.d/adjtimex
/etc/conf.d/clock
/etc/csh.env
/etc/profile.env

$ cat /etc/conf.d/adjtimex | grep -v ^# | grep -v ^$
TICK=10024
FREQ=3683912

$ grep -nP "DAEMON|OPTS|CONFD" /etc/init.d/adjtimex
6:DAEMON=adjtimex
7:OPTS="--tick ${TICK} --frequency ${FREQ}"
8:CONFD="/etc/conf.d/${DAEMON}"
16:    if [ ! -f "${CONFD}" ]; then
26:     ebegin "Regulating system clock with ${DAEMON}..."
27:     /usr/sbin/${DAEMON} ${OPTS}

サーバーは pool.ntp.org が4つ。初期値のまま。
非公開であれば st=1 のサーバーは回避したほうが良いです。
$ rcsdiff -u /etc/config-archive/etc/ntp.conf,v /etc/ntp.conf
===================================================================
RCS file: /etc/config-archive/etc/ntp.conf,v
retrieving revision 1.10
diff -u -r1.10 /etc/ntp.conf
--- /etc/ntp.conf       2011/06/24 00:01:17     1.10
+++ /etc/ntp.conf       2011/06/24 00:42:09
@@ -40,8 +40,10 @@

 # To deny other machines from changing the
 # configuration but allow localhost:
-restrict default nomodify nopeer
+restrict default nomodify nopeer noquery notrap
+restrict -6 default ignore
 restrict 127.0.0.1
+restrict -6 ::1


 # To allow machines within your network to synchronize
@@ -49,4 +51,4 @@
 # not allowed to configure the server or used as peers
 # to synchronize against, uncomment this line.
 #
-#restrict 192.168.0.0 mask 255.255.255.0 nomodify nopeer notrap
+restrict 192.168.0.0 mask 255.255.255.0 nomodify nopeer notrap

$ netstat -an|grep -P ":123\s"
udp        0      0 192.168.0.100:123       0.0.0.0:*
udp        0      0 127.0.0.1:123           0.0.0.0:*
udp        0      0 0.0.0.0:123             0.0.0.0:*

http://l-w-i.net/t/fedora/ntp_100.txt

以前はjitterが時間が経つと増えていた。
jitterが700~、offsetが1500~程度で*,+などの同期が外れてdelay,offset,jitterが0に戻っていた。
*,+が付いていても別サーバーから ntpdate -d で Leap not in sync というエラーで同期できなかった。
$ ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+219.117.196.43  133.243.238.163  2 u   41   64  377   20.161    3.454  10.822
*61.206.115.3    133.100.9.2      2 u   46   64  377    5.578    5.977  11.265
+219.75.253.70   218.45.21.199    3 u   43   64  377   11.406    3.607  10.963
+183.177.167.6   133.100.9.2      2 u   45   64  377   10.268    6.898   7.830

tomoyolinuxのnamedの設定追加

2.3系、1.8系は基本的なことをやる場合、違いはそんなに無いらしいです。
1.8系の場合でkuroboxHGでも動くことを確認しました。apacheのみ。
2.3系(2.6.38-hardened-r6, tomoyo-tools-2.3.0_p20100820)の場合の例です。

exception_policy.confに
initialize_domain /etc/init.d/named
を追加します。(初期化時にnamedが無い場合に必要)
tomoyo-editpolicy => ?でヘルプ。?で戻る。
tomoyo-editpolicy => w => e => a => initialize_domain xxx

学習後、domain_policy.confに
allow_read /var/bind/pri/\*.zone
allow_read /var/bind/sec/\*.zone
を追加します。
学習モード => 再起動 => 強制モード
tomoyo-editpolicy => @ => f => named => s => 1 => named再起動 => s => 3
それから修正。
tomoyo-editpolicy => namedの行で[Enter] => 設定一覧になる。
  => a => allow_read xxx => 要らない行に移動 => d => Yes など。

セーブ
tomoyo-savepolicy

ロード
/usr/sbin/tomoyo-loadpolicy -df < /etc/tomoyo/domain_policy.conf など。
/usr/sbin/tomoyo-loadpolicy -ef < /etc/tomoyo/exception_policy.conf など。

profile.conf, manager.conf は変更しないものとします。
tomoyo-editpolicy => w => p
tomoyo-editpolicy => w => m

いきなり強制モードだと後でallow_truncate xxxなどを手動で追加しないと再起動などで起動できないこともあります。
自動で追加したい場合はs => 1番で、エラーログだけ出してアクセス可能にする場合はs => 2番です。

1番の場合セーブは手動なのでセーブしないでOSを再起動すれば追加分は消えます。
/etc/tomoyo/以下に過去の設定が残るので、とりあえずセーブして差分を見れば良さそうです。

2番は設定終わったけど1週間ほど試運転するよ、と言う場合に使ったら良さそうです。

ソフトウェアを信用しない場合は、いきなり3番でいいです。
(勝手にメールを送る、たまにシステムファイルを消す、などの怪しいソフトを使う場合など)

マニュアル。
http://tomoyo.sourceforge.jp/2.3/








以下はメモです。

## exception_policy.conf
### /proc/self/ の参照OK。
+allow_read /proc/self/\*
+allow_read /proc/self/\{\*\}/\*

### /lib32/, /lib64/, の xxx.so の参照OK。
+allow_read /lib\$/\*.so
+allow_read /lib\$/\*.so.\+\*
+allow_read /lib\$/\{\*\}/\*.so
+allow_read /lib\$/\{\*\}/\*.so.\+\*

### /usr/lib32/, /usr/lib64/, の xxx.so の参照OK。
+allow_read /usr/lib\$/\*.so
+allow_read /usr/lib\$/\*.so.\+\*
+allow_read /usr/lib\$/\{\*\}/\*.so
+allow_read /usr/lib\$/\{\*\}/\*.so.\+\*

### 初期化時にnamedが無かった。
+initialize_domain /etc/init.d/named

## domain_policy.conf
### named 学習後に設定ファイルをまとめた。secの方も追加。
+allow_read /var/bind/pri/\*.zone
+allow_read /var/bind/sec/\*.zone

### ntpd。学習 => 再起動 => 強制
/var/log/tomoyo.logにエラーはないが同期できないのでntp自体の設定がおかしい。


/lib32/, /lib64/, /usr/lib32/, /usr/lib64/, 以下のxxx.soの読み込み許可を大雑把にした。
xxx.soはxxx.so.数字.数字.数字.数字が実体の場合あり。最大4つだった。
/usr/lib\*/\*.so\* だと設定が2=>1になるし、/usr/lib/の場合も入る。

xxx.soで終わる、xxx.so.数字1文字と/ではない文字0回以上、の2つにする。
/usr/libexec/が気になるので lib数字1回以上 にする。

$ ll -d /lib* /usr/lib*
lrwxrwxrwx   1 root root     5 2011-05-20 20:33:07 /lib -> lib64/
drwxr-xr-x   3 root root  4096 2011-06-23 11:58:09 /lib32/
drwxr-xr-x  15 root root  4096 2011-06-23 11:58:09 /lib64/
lrwxrwxrwx   1 root root     5 2009-08-11 14:57:24 /usr/lib -> lib64/
drwxr-xr-x  38 root root 40960 2011-06-16 02:48:59 /usr/lib32/
drwxr-xr-x 148 root root 90112 2011-06-23 12:10:33 /usr/lib64/
drwxr-xr-x  19 root root 12288 2011-06-23 12:10:33 /usr/libexec/

$ find /lib* /usr/lib* -name "*.so*" | wc -l
6772
$ find /lib* /usr/lib* -name "*.so.[0-9]*" | wc -l
2263
$ find /lib* /usr/lib* | grep -P ".*\.so(\.\d+){1,}" | wc -l
2263
$ find /lib* /usr/lib* -name "*.so" | wc -l
4479
$ expr 2263 \+ 4479
6742
$ find /lib* /usr/lib* -name "*.so[^.]*" | wc -l
30
$ expr 6742 \+ 30
6772

\*.so\* だと少し期待しないマッチがある。別にいいか?
$ find /lib* /usr/lib* -name "*.so[^.]*" -exec dirname {} \; | sort | uniq -c
      1 /lib64/modules/2.6.36-hardened-r9
      1 /lib64/modules/2.6.38-hardened-r6
      1 /lib64/systemd/system
      1 /lib64/systemd/system/dbus.target.wants
      1 /lib64/systemd/system/sockets.target.wants
     25 /usr/lib64/libreoffice/basis3.3/presets/config
$ find /lib* /usr/lib* -name "*.so[^.]*" | awk -F'.' '{print $NF}' | sort | uniq -c
      1 sob
     10 soc
      3 socket
      3 sod
      3 soe
      2 softdep
      5 sog
      3 soh

### 対話シリアル
cu, taylor-uucp, minicomは?

### cd/dvdチェック
qpxtool

### xwindow入れ子起動。
Xnest, xorg-server

### アーカイブツール
atool

2011-06-22

net-dns/bind-9.7.3_p1の設定

### 期待する動作。
ルーターにDNSサーバーのIPアドレスが設定されているので、そこに聞きに行くという動作を変更しない。
その前に内部のPCの名前を解決してほしい。
内部向けのDNSサーバーが止まっている場合はルーターに聞きに行く。

### dnsの設定を修正します。
$ grep dns /etc/conf.d/net
dns_search_br0="localnet"
dns_servers_br0="192.168.0.100 192.168.0.1"
$ cat /etc/resolv.conf
# Generated by net-scripts for interface br0
search localnet
nameserver 192.168.0.100
nameserver 192.168.0.1
インターネットプロトコル(TCP/IP)のプロパティ
...
優先DNSサーバー(P):  192 . 168 . 0 . 100
代替DNSサーバー(A):  192 . 168 . 0 . 1

### named.confの設定をします。
$ /usr/bin/sudo /usr/bin/rcsdiff -u /etc/config-archive/etc/bind/named.conf,v /etc/bind/named.conf
===================================================================
RCS file: /etc/config-archive/etc/bind/named.conf,v
retrieving revision 1.1
diff -u -r1.1 /etc/bind/named.conf
--- /etc/bind/named.conf        2011/06/21 09:31:08     1.1
+++ /etc/bind/named.conf        2011/06/21 20:09:49
@@ -24,6 +24,7 @@
 acl "trusted" {
        127.0.0.0/8;
        ::1/128;
+       192.168.0.0/24;
 };

 options {
@@ -34,7 +35,7 @@
        //bindkeys-file "/etc/bind/bind.keys";

        listen-on-v6 { ::1; };
-       listen-on { 127.0.0.1; };
+       listen-on { 192.168.0.100; };

        allow-query {
                /*
@@ -74,18 +75,17 @@
        * Uncomment the following lines to turn on DNS forwarding, and change
        *  and/or update the forwarding ip address(es):
        */
-/*
-       forward first;
+       forward only;
        forwarders {
        //      123.123.123.123;        // Your ISP NS
        //      124.124.124.124;        // Your ISP NS
        //      4.2.2.1;                // Level3 Public DNS
        //      4.2.2.2;                // Level3 Public DNS
-               8.8.8.8;                // Google Open DNS
-               8.8.4.4;                // Google Open DNS
+       //      8.8.8.8;                // Google Open DNS
+       //      8.8.4.4;                // Google Open DNS
+        192.168.0.1;
        };

-*/

        //dnssec-enable yes;
        //dnssec-validation yes;
@@ -94,7 +94,6 @@
        //query-source address * port 53;
 };

-/*
 logging {
        channel default_log {
                file "/var/log/named/named.log" versions 5 size 50M;
@@ -106,17 +105,18 @@
        category default { default_log; };
        category general { default_log; };
 };
-*/

 include "/etc/bind/rndc.key";
 controls {
        inet 127.0.0.1 port 953 allow { 127.0.0.1/32; ::1/128; } keys { "rndc-key"; };
 };

+/*
 zone "." in {
        type hint;
        file "/var/bind/root.cache";
 };
+*/

 zone "localhost" IN {
        type master;
@@ -163,3 +163,15 @@
 //     allow-notify { <MASTER>; };
 //     notify no;
 //};
+
+zone "localnet" IN {
+       type master;
+       file "pri/localnet.zone";
+       notify no;
+};
+
+zone "0.168.192.in-addr.arpa" IN {
+       type master;
+       file "pri/0.168.192.zone";
+       notify no;
+};

信頼できるネットワークに192.168.0.0/24を追加します。(allow-queryなど許可)

listenするアドレスを変更します。
$ netstat -an|grep -P ":53\s"
tcp        0      0 192.168.0.100:53        0.0.0.0:*               LISTEN
udp        0      0 192.168.0.100:53        0.0.0.0:*

マッチしない問い合わせを192.168.0.1に渡します。
ログを取ります。
ルートサーバーへの問い合わせの設定を消します。
localnet(192.168.0.0/24)の正引き、逆引きの設定をします。

### localnetの正引きの設定をします。
$ cat /etc/bind/pri/localnet.zone
$ORIGIN localnet.
$TTL 1M
@                       1D IN SOA       amdgentoo.localnet. root.amdgentoo.localnet. (
                                        2011062101      ; serial
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum

@              IN NS    amdgentoo
@              IN MX 10 amdgentoo
@              IN A     192.168.0.100

router         IN A     192.168.0.1
winxp          IN A     192.168.0.90
amdgentoo      IN A     192.168.0.100
dynabook       IN A     192.168.0.110
kuroboxhg      IN A     192.168.0.150
cogentoo-1     IN A     192.168.0.200
centos5        IN A     192.168.0.210
vm002-debian   IN A     192.168.0.211
fedora         IN A     192.168.0.212
ubuntu         IN A     192.168.0.213
freebsd        IN A     192.168.0.214
openbsd49      IN A     192.168.0.216
scientific     IN A     192.168.0.217

省略せずに書いた場合、下記などの様になります。
router.localnet.         1M IN A     192.168.0.1

「MX 10」の部分の10は優先順位です。複数書く場合で予備の場合「MX 20」などで設定します。
$ORIGINは書かなくても、この場合は同じです。
変更した場合serialを変更しないと引けない場合があります。

別名を登録する場合、下記のようになります。
debian-squeeze IN CNAME vm002-debian
fedora15       IN CNAME fedora
freebsd82      IN CNAME freebsd
Aレコードで指定されたドメイン名のみに利用可能、などの自分ルールを決めたほうが良いです。

### localnetの逆引きの設定をします。
$ cat /etc/bind/pri/0.168.192.zone
$ORIGIN 0.168.192.in-addr.arpa.
$TTL 1M
@                       1D IN SOA       amdgentoo.localnet. root.amdgentoo.localnet. (
                                        2011062105      ; serial
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum

@              IN NS    amdgentoo.localnet.

1              IN PTR   router.localnet.
90             IN PTR   winxp.localnet.
100            IN PTR   amdgentoo.localnet.
110            IN PTR   dynabook.localnet.
150            IN PTR   kuroboxhg.localnet.
200            IN PTR   cogentoo-1.localnet.
210            IN PTR   centos5.localnet.
211            IN PTR   vm002-debian.localnet.
212            IN PTR   fedora.localnet.
213            IN PTR   ubuntu.localnet.
214            IN PTR   freebsd.localnet.
216            IN PTR   openbsd49.localnet.
217            IN PTR   scientific.localnet.

省略せずに書いた場合、下記などの様になります。
250.0.168.192.in-addr.arpa. 1M IN PTR abc.localnet.

### テストします。
dig @192.168.0.100 amdgentoo.localnet
dig @192.168.0.1 amdgentoo.localnet
dig amdgentoo.localnet
ping -c1 amdgentoo.localnet
ping -c1 amdgentoo
dig -x 192.168.0.100
dig -x 192.168.0.250

「$TTL 1M」はテスト用や内部向けのDNS用の短い時間の設定です。
@で始まる行の@はlocalnet.などの省略です。
直前の行の@などの1カラム目が同じ場合、@などが省略されている場合があります。

たぶんドメイン名などの最後の"."はそこで名前が終わりと言う意味で省略名との区別に必要です。
SOAレコードのメールアドレス(root.amdgentoo.localnet.など)がroot@amdgentoo.localnetと書かない理由を知りません。
滅多に落とさないサーバーが内部向けのDNSサーバーの場合で、自前でDNSキャッシュしたい場合named.confのforwardersの部分が必要ありません。

error: managed-keys-zone ./IN: loading from master file managed-keys.bind failed: file not found

$ sudo touch /var/bind/managed-keys.bind

メールアドレスの設定の追加。
@              IN MX 10 amdgentoo => root@localnet           => amdgentoo.localnetのrootに届く。
amdgentoo      IN MX 10 amdgentoo => root@amdgentoo.localnet => amdgentoo.localnetのrootに届く。
# 省略は$ORIGINなどの設定によって違う。省略しない場合。
localnet.           IN MX 10 amdgentoo.localnet.
amdgentoo.localnet. IN MX 10 amdgentoo.localnet.

### 参考URL。
http://www.kozupon.com/bind/forward_err.html
http://www.jitaku-server.net/bind_intro.html
http://dns2007.seesaa.net/article/32695498.html
http://forum.parallels.com/showthread.php?t=108519
http://epa.scitec.kobe-u.ac.jp/~itpass/hiki/hiki.cgi?%5BMemo2010%5D%5BITPASS%5D+tako+%B9%BD%C3%DB%BA%EE%B6%C8%A5%ED%A5%B0+5+%28DNS%29
http://ie00010.blogspot.com/2011/02/bind-973dnssec.html
http://www.atmarkit.co.jp/flinux/rensai/bind902/bind902b.html
http://www.atmarkit.co.jp/fnetwork/dnstips/031.html
http://honana.com/bind/setting.html
http://www.atmarkit.co.jp/fwin2k/win2ktips/592nslookupsoa/nslookupsoa.html
http://www.atmarkit.co.jp/fnetwork/dnstips/014.html
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=23435&forum=11
http://e-words.jp/w/E6ADA3E5BC95E3818D.html
http://www.isc.org/software/bind/documentation/arm95
http://www.aconus.com/~oyaji/suse/bind_ddns_suse.htm

2011-06-21

パソコンの掃除

配線をメモする、もしくは写メで取る、(文字や番号や色や向きなど。外しても戻せるように)
マザーボードのマニュアルを用意する、無い場合PDFをダウンロードする(1台のみの場合印刷する)、
買ってから2年以上であれば、マザーボードのボタン電池の種類を確認し、100円ショップで購入する、
CPU用のグリスを用意する、(気にするのであればグリス用の洗浄液を用意する)、
掃除機(毛のついたノズルか、柔らかい紙を丸めてテープで止めて延長する)、綿棒、エアダスター、
ピンセット(細かいピンを外す、付ける)、静電気を帯電しやすい場合は、防止用のグッズ、
などの事前の準備を行います。

掃除 => 仮組み => 起動確認 => 蓋をして設置する => 起動しない。
BIOSを初期化する => 起動する。
再度確認、設置後に起動しない => 再度BIOSを初期化する => 起動する。

BIOSの初期化により CMOS CheckSum Error のような文字が表示され、
手動でキーの入力を求められる場合がありますが、1回だけしか出ない場合は、
BIOSの初期化によりハードウェア構成も初期化されたために表示されるらしいので問題ないです。

PCの電源をOFF(裏のスイッチを "-" => "o" に変更) => 暫く待つ => ON => PCを起動 => 起動しない。

マザーボードの電池を交換する。
電池の見えていた面に共通する文字を探したところ
CR2032
と言う種類だったようだ。同じものがあったので、それに付け替えた。
メジャーな電池のようで100円ショップやコンビニにあるそうです。
電池の種類はマザーボードによって違うかもしれません。

マザーボードに接している部分は素手で触らないで交換したほうが良いです。
触った部分が金属に指紋型のサビが浮いているような状態になる場合があります。
減りが早くなったり、汁が出るかもしれません。

BIOSの初期化。マザーボードを確認する。
マザーボードのマニュアルか、メーカーサイトでPDFなどをダウンロードする。

例。通常。見た感じ意味がなさそうな3本のピンを探す。
  1 2 3
┌──────┐
│┌───┐  │
││○  ○│・│
│└───┘  │
└──────┘

例。ショート。付け替えて5秒待つ。戻す。
 1 2 3
┌──────┐
│  ┌───┐│
│・│○  ○││
│  └───┘│
└──────┘

http://www.unitycorp.co.jp/support/faq2/answer/cmos_clear.html

大量の埃の除去(ハンドクリーナーに満タンx1.5)、グリスを塗り直す、
CPUクーラーが4箇所中3箇所しか固定出来ていなかった(もしくは1箇所外れた)、
と言う内容により、CPUの温度が70~90度台 => 50~60度台まで落ちました。

CPUの止め具がプッシュピンの場合どちらに回すとどうなる、などをよく見ます。
4つの止め具のそれぞれの真ん中の棒を十分に持ち上げずに、
マザーボードにつけようとすると止め具のピンが折れます。

グリスの洗浄液は、ティッシュとウエットティッシュでよく拭いた後に使うと、
効果を確認できますが、温度低下にどれぐらい貢献するかは不明です。
グリス自体は、この例の場合中心に米粒2つ分つけています。

speedfanのタスクトレイの表示温度の変更。
設定 => 温度 => 
temp1 => 「タスクトレイに表示」を外す => 
temp2 => 「タスクトレイに表示」をチェックする => はい
その他
設定 => オプション => 言語 => Japanese
「閉じるボタンで最小化」をチェックする => はい

2011-06-12

PORTDIR_OVERLAYの追加 part2

パッケージのディレクトリを追加します。
$ grep ^PORTDIR_OVERLAY /etc/make.conf
PORTDIR_OVERLAY="${PORTDIR_OVERLAY} /usr/local/portage/test"

パッケージのコピー。
$ cd /usr/local/portage/test/sys-apps/
$ sudo cp -ri /usr/portage/sys-apps/kuroevtd/ .

パッチの作成。
$ cd /tmp/
$ tar xvzf /usr/portage/distfiles/kuroevtd_1.1.3.tgz
$ cd kuroevtd/
$ sed -e "s#/dev/ttyS1#/dev/ttyS0#g" kuroevtd.c > kuroevtd.c.new
$ diff -u kuroevtd.c kuroevtd.c.new > kuroevtd-1.1.3-ttyS0.patch
$ sudo cp -i kuroevtd-1.1.3-ttyS0.patch /usr/local/portage/test/sys-apps/kuroevtd/files/

ebuildファイルの作成。
$ cd /usr/local/portage/test/sys-apps/kuroevtd/
$ sudo cp -i kuroevtd-1.1.3.ebuild kuroevtd-1.1.3-r1.ebuild
$ sudo vi kuroevtd-1.1.3-r1.ebuild

$ diff -u kuroevtd-1.1.3.ebuild kuroevtd-1.1.3-r1.ebuild
--- kuroevtd-1.1.3.ebuild       2011-06-12 17:02:40.000000000 +0900
+++ kuroevtd-1.1.3-r1.ebuild    2011-06-12 17:04:06.000000000 +0900
@@ -2,6 +2,8 @@
 # Distributed under the terms of the GNU General Public License v2
 # $Header: /var/cvsroot/gentoo-x86/sys-apps/kuroevtd/kuroevtd-1.1.3.ebuild,v 1.3 2007/07/02 15:27:48 peper Exp $

+inherit eutils
+
 DESCRIPTION="Monitors the Kurobox and LinkStation power and reset buttons."
 HOMEPAGE="http://kuro.dsk.jp/"
 SRC_URI="http://kuro.dsk.jp/data/bin/${PN}_${PV}.tgz"
@@ -19,6 +21,8 @@

 src_unpack() {
        unpack ${A}
+       cd "${S}"
+       epatch "${FILESDIR}/${P}-ttyS0.patch"
        sed -i -e 's:/etc/kuroevtd:\0.d:' \
                ${S}/kuroevtd.c ${S}/README
 }

インストール。
$ sudo rm -i kuroevtd-1.1.3.ebuild
$ sudo ebuild kuroevtd-1.1.3-r1.ebuild manifest
$ emerge -avtp kuroevtd
...
$ grep ttyS1 /usr/sbin/kuroevtd; echo $?
バイナリー・ファイル/usr/sbin/kuroevtdは一致しました
0
$ grep ttyS0 /usr/sbin/kuroevtd; echo $?
1
$ sudo emerge -avt kuroevtd
...
$ grep ttyS1 /usr/sbin/kuroevtd; echo $?
1
$ grep ttyS0 /usr/sbin/kuroevtd; echo $?
バイナリー・ファイル/usr/sbin/kuroevtdは一致しました
0

参考URL。
http://devmanual.gentoo.org/ebuild-writing/functions/src_unpack/index.html
http://devmanual.gentoo.org/ebuild-writing/functions/src_prepare/index.html
http://devmanual.gentoo.org/ebuild-writing/functions/src_prepare/epatch/index.html

# ttyS1 => ttyS0 は 2.6.28 以上? 2.6.38の場合は、そうなっている。
# 前面のスイッチ => 3秒以内に、押す離すを2回 => shutdown -r now
# 前面のスイッチ => 押しっぱなし => shutdown -h now
# 裏面のスイッチ => /etc/kuroevtd.d/resetpress の方はubootでemモードに入るので無し。
# たぶん shutdown -r now が動くだけ。
# write_ng, /dev/fl3, /dev/mtdblock2 などを設置すれば動くかもしれない。
# write_ng は mknod して NGNG を書くとか。
# ubootの場合 run emboot なので書きこんでrebootしても無理かもしれない。

PORTDIR_OVERLAYの追加

http://en.gentoo-wiki.com/wiki/Overlay

パッケージのディレクトリを追加します。
$ grep ^PORTDIR_OVERLAY /etc/make.conf
PORTDIR_OVERLAY="${PORTDIR_OVERLAY} /usr/local/portage/test"

ebuildファイルを追加します。
$ diff /usr/portage/sys-apps/ccs-tools/ccs-tools-1.8.0_p20110214.ebuild ccs-tools-1.8.1_p20110511.ebuild
28c28
<       epatch "${FILESDIR}/${P}-parallel.patch"
---
>       #epatch "${FILESDIR}/${P}-parallel.patch"

Manifestを作成します。
$ sudo ebuild ccs-tools-1.8.1_p20110511.ebuild manifest

ファイルの一覧。
$ find /usr/local/portage/test/sys-apps/ccs-tools
/usr/local/portage/test/sys-apps/ccs-tools
/usr/local/portage/test/sys-apps/ccs-tools/ccs-tools-1.8.1_p20110511.ebuild
/usr/local/portage/test/sys-apps/ccs-tools/Manifest
/usr/local/portage/test/sys-apps/ccs-tools/files

インストールします。
$ sudo ACCEPT_KEYWORDS="**" emerge -avt ccs-tools

成功しました。
$ eix -c ccs-tools
[D] sys-apps/ccs-tools (1.8.1_p20110511[?]@2011年06月11日 -> ??): TOMOYO Linux tools
[1] /usr/local/portage/test

正常に動くかどうかは不明です。
同じソフトか似ているソフトのebuildファイルをベースに使えばインストールだけは大丈夫そうです。








以下はメモです。

kernelをインストールする。
$ cd linux-2.6.38-gentoo-r6
$ wget -O ccs-tools-1.8.1-20110511.tar.gz 'http://sourceforge.jp/frs/redir.php?f=/tomoyo/49693/ccs-tools-1.8.1-20110511.tar.gz'
$ tar -zxf ccs-patch-1.8.1-20110511.tar.gz
$ patch --dry-run -Np1 < patches/ccs-patch-2.6.38.diff
$ patch -Np1 < patches/ccs-patch-2.6.38.diff
...

初期化する。
$ sudo /usr/lib/ccs/init_policy
$ sudo ls -Al /etc/ccs/
合計 16
-rwx------ 1 root root   65  6月 11 21:06 ccs-load-module
lrwxrwxrwx 1 root root   33  6月 11 21:06 domain_policy.conf -> policy/current/domain_policy.conf
lrwxrwxrwx 1 root root   36  6月 11 21:06 exception_policy.conf -> policy/current/exception_policy.conf
lrwxrwxrwx 1 root root   27  6月 11 21:06 manager.conf -> policy/current/manager.conf
drwx------ 3 root root 4096  6月 11 21:06 policy
lrwxrwxrwx 1 root root   27  6月 11 21:06 profile.conf -> policy/current/profile.conf
-rw-r--r-- 1 root root  158  6月 11 21:06 stat.conf
drwx------ 2 root root 4096  6月 11 21:06 tools

OSを再起動する。

ログ取得。
$ sudo ccs-auditd
$ sudo ls -al /var/log/tomoyo/

学習(0) => 強制(3)にしてログを見る。
$ sudo tail -f /var/log/tomoyo/reject_003.log
...

apacheを起動する。
$ sudo /etc/init.d/apache2 restart

apacheの設定の変更する。
$ sudo ccs-editpolicy
...

セーブする。
$ sudo ccs-savepolicy

OSを再起動する。

ブート時の内容が増えた?
...
linkstation: disarming the AVR watchdog:
Calling /sbin/ccs-init to load policy. Please wait.
CCSecurity: 1.8.1+   2011/05/11
Mandatory Access Control activated.

保存場所。
$ sudo ls -al /etc/ccs/policy

表示の切り替え後に /usr/sbin/apache2 の表示が消える。
$ sudo ccs-editpolicy
...
検索(f)で /usr/sbin/apache2 に移動してから表示の切り替え(@)を押すと画面の一番下に移動する。
もう一度検索する。

修正内容。
cgi系いらないかもしれないがそのまま。
ipアドレスはiptablesでいいかもしれないので全部許可。
拡張子をまとめる方法がわからない。ないかも。kernelのソフトは高機能な正規表現は禁止かも。
例。
file chown /var/run/cgisock.\$ 81
file mksock/chmod /var/run/cgisock.\$ 0700
file read /etc/apache2/modules.d/\+\+_\*.conf
file read /etc/apache2/vhosts.d/\+\+_\*.conf
file read /usr/lib/apache2/modules/mod_\*.so
file read /usr/share/apache2/icons/\*.gif
file read /usr/share/apache2/icons/\*.png
file read /usr/share/apache2/icons/\{\*\}/\*.gif
file read /usr/share/apache2/icons/\{\*\}/\*.png
file read /var/www/\{\*\}/htdocs/.htaccess
file read /var/www/\{\*\}/htdocs/\*.html
file read /var/www/\{\*\}/htdocs/\*.ico
file read /var/www/\{\*\}/htdocs/\*.php
file read /var/www/\{\*\}/htdocs/\*.txt
file read /var/www/\{\*\}/htdocs/\{\*\}/.htaccess
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.bz2
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.css
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.flv
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.gif
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.gz
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.html
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.ico
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.jpeg
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.jpg
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.js
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.pdf
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.php
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.png
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.tgz
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.txt
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.xml
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.xz
file read /var/www/\{\*\}/htdocs/\{\*\}/\*.zip
file unlink /var/run/cgisock.\$
network inet stream accept 0.0.0.0-255.255.255.255 1024-65000
network unix stream bind/listen /var/run/cgisock.\$

ログの閲覧。
最後の方の文字列が追加したい場合の内容っぽい。
$ sudo ls -al /var/log/tomoyo/
動かない => ログから設定追加。
or 動かない 3 => 2 => 動いたらログから設定追加。
or 動かない 3 => 1 => 動かない動作を再実行してから3に戻す。
or ログから対話式で設定を追加するコマンドがあると書いてあった。

用途。
未知のプログラムを動作させるときに、なにやっているか見る。
プログラムの使用しないファイルを削除する。
例えば利便性のために書き込みを許可して意味がなくなる。
web上からphpファイルを作成するphpプログラムなど。
file write /var/www/\{\*\}/htdocs/\*
file write /var/www/\{\*\}/htdocs/\{\*\}/\*
こんな感じであればまだ良い?すぐに消すのでなければ変わらない?
file write /var/www/\{\*\}/tmp/\*
file write /var/www/\{\*\}/tmp/\{\*\}/\*
file write /var/www/\{\*\}/htdocs/webtmp/\*
file write /var/www/\{\*\}/htdocs/webtmp/\{\*\}/\*
たぶんselinuxより設定するのが楽。しかしグラフィカルに設定するツールがあるが使ったことはない。

http://tomoyo.sourceforge.jp/1.8/index.html.ja
http://tomoyo.sourceforge.jp/1.8/policy-specification/expression-rules.html.ja#wildcard

2011-06-10

eix-remote

laymanの追加の参考に使う。eixの検索用データのみ追加される。

インストール。
$ wget -N -P /usr/portage/distfiles http://dev.gentooexperimental.org/eix_cache/eix-caches.tbz2
$ eix-remote -l /var/lib/layman/ -f /usr/portage/distfiles/eix-caches.tbz2 add

バイナリエディタ関連。(-Sは説明の検索)
$ eix -c -C editor -S hex
[N] app-editors/dhex (~0.65): ncurses-based hex-editor with diff mode
[N] app-editors/ghex (2.24.0(2)): Gnome hexadecimal editor
[N] app-editors/hexcurse (1.55): ncurses based hex editor
[N] app-editors/hexedit (1.2.12): View and edit files in hex or ASCII
[N] app-editors/lfhex (0.42): A fast, efficient hex-editor with support for large files and comparing binary files
[N] app-editors/shed (1.13): Simple Hex EDitor
[N] app-editors/wxhexeditor (~0.09): A cross-platform hex editor designed specially for large files.
[N] app-editors/hexer [2] (~0.1.5): Hex Editor with vi/ex-style user interface
[1] "dilfridge" layman/dilfridge
[2] "sunrise" layman/sunrise

Found 8 matches.

php関連。(-Oでoverlayのみ)
$ eix -* -c -C php | wc -l
490
$ eix -* -c -C php -O | wc -l
155

graaff, sunrise のみの場合。
$ eix -* -c -C php | wc -l
380
$ eix -* -c -C php -O | wc -l
4

削除。
$ eix-remote remove

unzipの文字化け

http://c.2ch.net/test/-.bb-EE/linux/1294700891/1-
http://logsoku.com/thread/hibari.2ch.net/linux/1294700891/
http://2bangai.net/read/edec18f33482f906c8e153a328b1d0b9dcf45bce5ad15089cdcc729f2da69f39/401

$ unzip 新しいフォルダ.zip
Archive:  新しいフォルダ.zip
   creating: ?V?????t?H???_/
   creating: ?V?????t?H???_/?V?????t?H???_/
 extracting: ?V?????t?H???_/?V?????t?H???_/?V?K?e?L?X?g ?h?L???????g.txt

$ eix -c -U natspec
[I] app-arch/unzip (6.0-r1@2011年05月20日): unzipper for pkzip-compressed files
[I] app-arch/zip (3.0@2011年03月28日): Info ZIP (encryption support)
Found 2 matches.

$ sudo USE="natspec" ACCEPT_KEYWORDS="~*" emerge -avt zip unzip
...

$ eix -c -U natspec
[D] app-arch/unzip (6.0-r2@2011年06月10日 -> 6.0-r1): unzipper for pkzip-compressed files
[D] app-arch/zip (3.0-r1@2011年06月10日 -> 3.0): Info ZIP (encryption support)
Found 2 matches.

$ unzip 新しいフォルダ.zip
Archive:  新しいフォルダ.zip
   creating: 新しいフォルダ/
   creating: 新しいフォルダ/新しいフォルダ/
 extracting: 新しいフォルダ/新しいフォルダ/新規テキスト ドキュメント.txt

CONFIG_SCHED_AUTOGROUP

参考URL。
http://daemon.plala.jp/~meke/tdiary/?date=20101121
http://d.hatena.ne.jp/tmatsuu/20090110/1231557035

バージョンが2.6.38でCONFIG_SCHED_AUTOGROUPでmake menuconfigで検索する。

General setup  --->
[*] Automatic process group scheduling

インストール後。
$ cat /proc/sys/kernel/sched_autogroup_enabled
1

.configの変更点。
> CONFIG_CGROUPS=y
> CONFIG_CGROUP_SCHED=y
> CONFIG_FAIR_GROUP_SCHED=y
> CONFIG_SCHED_AUTOGROUP=y

genkernelコマンドのサンプル。
$ sudo genkernel --makeopts="-j4 KCFLAGS=\\\"-march=amdfam10 -mcx16 -msahf -mpopcnt --param l1-cache-size=64 --param l1-cache-line-size=64 --param l2-cache-size=512 -mtune=amdfam10 -Os\\\"" --kernel-config=/etc/kernels/kernel-config-x86_64-2.6.38-hardened-r6 --menuconfig all

# make menuconfigは"/"で検索できます。
# 手動のmakeでKCFLAGSを入れた場合、警告が表示されます。指定しても大丈夫かどうかは不明です。
# 上記の例のKCFLAGSは"AMD Phenom(tm) 9350e Quad-Core Processor"用です。

2011-06-07

必要ないファイルの検索の例

特定のディレクトリ以外の、シンボリックリンク以外の、365日以上古い、パッケージ管理外の、ファイルパスを探す。
* この例の場合、消すと不具合を起こすファイルを含みます。
* この例のqfileはgentooのコマンドです。
sudo find / \
-path "/lib/modules" \
-prune -o -path "/usr/src" \
-prune -o -path "/usr/portage" \
-prune -o -path "/var/lib/layman" \
-prune -o -path "/proc" \
-prune -o -path "/sys" \
-prune -o -path "/dev" \
-prune -o -path "/tmp" \
-prune -o -path "/var/tmp" \
-prune -o -path "/var/cache" \
-prune -o -path "/etc/config-archive" \
-prune -o -path "/usr/local" \
-prune -o -path "/home" \
-prune -o -path "/var/www" \
-prune -o -path "/mnt/share" \
-prune -o ! -type l -mtime +365 | qfile -o -f - > /tmp/qfile.txt

特定のディレクトリ以外の、シンボリックリンクで、リンク切れかループしている、ファイルパスを探す。
sudo find / \
-path "/usr/portage" \
-prune -o -path "/var/lib/layman" \
-prune -o -path "/proc" \
-prune -o -path "/sys" \
-prune -o -path "/dev" \
-prune -o -path "/tmp" \
-prune -o -path "/mnt/share" \
-prune -o -type l -printf "%p:%Y\n" | grep ":[LN]$" > /tmp/link.txt

redhat系。
$ cat /etc/redhat-release
Fedora release 15 (Lovelock)
$ rpm -qa | while read PKGNAME; do rpm -ql $PKGNAME; done | sort > /tmp/pkgfiles.txt
$ sudo find / \
-path "/proc" \
-prune -o -path "/sys" \
-prune -o -path "/dev" \
-prune -o -path "/run" \
-prune -o -path "/selinux" \
-prune -o -path "/var/run" \
-prune -o -path "/media" \
-prune -o -path "/var/lock" \
\
-prune -o -path "/tmp" \
-prune -o -path "/var/tmp" \
-prune -o -path "/var/cache" \
-prune -o -path "/usr/local" \
-prune -o -path "/home" \
-prune -o -path "/var/www" \
-prune -o ! -type l \
-mtime +365 \
| while read FILE; do if [ "$(grep -P "^\Q${FILE}\E($|((?<=/).*[^/]$))" /tmp/pkgfiles.txt)" = "" ]; then echo $FILE; fi; done \
> /tmp/rpm.txt

redhat系。
sudo find / \
-path "/proc" \
-prune -o -path "/sys" \
-prune -o -path "/dev" \
-prune -o -path "/run" \
-prune -o -path "/selinux" \
-prune -o -path "/var/run" \
-prune -o -path "/media" \
-prune -o -path "/var/lock" \
\
-prune -o -path "/tmp" \
-prune -o -path "/var/tmp" \
-prune -o -path "/var/cache" \
-prune -o -path "/usr/local" \
-prune -o -path "/home" \
-prune -o -path "/var/www" \
-prune -o ! -type l \
-mtime +365 \
| while read FILE; do rpm -qf ${FILE} >/dev/null 2>&1; if [ $? -ne 0 ]; then echo $FILE; fi; done \
> /tmp/rpm.txt

debian系。
sudo find / \
-path "/dev" \
-prune -o -path "/lib/init/rw" \
-prune -o -path "/proc" \
-prune -o -path "/sys" \
-prune -o -path "/tmp" \
\
-prune -o -path "/var/tmp" \
-prune -o -path "/var/cache" \
-prune -o -path "/usr/local" \
-prune -o -path "/home" \
-prune -o ! -type l \
-mtime +365 \
| while read FILE; do dpkg -S "$(echo "${FILE}" | perl -pe "s/([^\\w\\s])/\\\\\$1/g")" >/dev/null 2>&1; if [ $? -ne 0 ]; then echo $FILE; fi; done \
> /tmp/dpkg.txt

pstreeの例

あるプロセスの子プロセスをチェックする。

emerge
$ pstree -p | grep emerge
        |-pump(11033)---emerge(11059)---ebuild.sh(8460)---ebuild.sh(8729)---emake(12684)---make(12688)---sh(12728)---make(12745)---+
$ pstree -a 11059
emerge /usr/bin/emerge -evt --jobs=8 --load-average=2 system
  └─ebuild.sh /usr/lib/portage/bin/ebuild.sh compile
      └─ebuild.sh /usr/lib/portage/bin/ebuild.sh compile
          └─emake /usr/lib/portage/bin/ebuild-helpers/emake LDFLAGS=-Wl,-O1 -Wl,--as-needed STAGE1_CFLAGS=...
              └─make -j2 LDFLAGS=-Wl,-O1 -Wl,--as-needed STAGE1_CFLAGS= ...
                  └─sh -c...
                      └─make DESTDIR= RPATH_ENVVAR=LD_LIBRARY_PATH TARGET_SUBDIR=powerpc-unknown-linux-gnu...
                          └─sh -c...
                              └─make DESTDIR= RPATH_ENVVAR=LD_LIBRARY_PATH TARGET_SUBDIR=powerpc-unknown-linux-gnu...
                                  └─sh -c...
                                      └─make DESTDIR= RPATH_ENVVAR=LD_LIBRARY_PATH ...
                                          ├─xgcc -B/var/tmp/portage/sys-devel/gcc-4.4.5/work/build/./prev-gcc/
                                          │   ├─as -mppc -many -Qy -K PIC -o ipa-reference.o -
                                          │   └─cc1 -quiet -I. -I.-I/var/tmp/portage/sys-devel/gcc-4.4.5/work/gcc-
                                          └─xgcc -B/var/tmp/portage/sys-devel/gcc-4.4.5/work/build/./prev-gcc/
                                              ├─as -mppc -many -Qy -K PIC -o ipa-struct-reorg.o -
                                              └─cc1 -quiet -I. -I.-I/var/tmp/portage/sys-devel/gcc-4.4.5/work/gcc-
$ pstree -al 11059
...

postfix
$ pstree -p | grep master
        |-master(29589)-+-pickup(30197)
$ pstree -a 29589
master
  ├─pickup -l -t fifo -u
  └─qmgr -l -t fifo -u

apache
$ pstree -p | grep apache
        |-apache2(11395)-+-apache2(9928)
        |                |-apache2(10312)
        |                |-apache2(10313)
        |                |-apache2(10314)
        |                |-apache2(10316)
        |                `-apache2(10317)
$ pstree -a 11395
apache2 -D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE -D PHP5 -D PROXY -D EXTRACT_FORWARDED -DSV
  ├─apache2 -D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE -D PHP5 -D PROXY -D EXTRACT_FORWARDED -DSV
  ├─apache2 -D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE -D PHP5 -D PROXY -D EXTRACT_FORWARDED -DSV
  ├─apache2 -D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE -D PHP5 -D PROXY -D EXTRACT_FORWARDED -DSV
  ├─apache2 -D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE -D PHP5 -D PROXY -D EXTRACT_FORWARDED -DSV
  ├─apache2 -D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE -D PHP5 -D PROXY -D EXTRACT_FORWARDED -DSV
  └─apache2 -D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE -D PHP5 -D PROXY -D EXTRACT_FORWARDED -DSV

2011-06-06

emacsの文字情報の取得

C-x =
例。(〓にカーソルを合わせた後にコマンドを入力する)
Char: 〓 (12307, #o30023, #x3013, file ...) point=1 of 1 (0%) column=0

詳細に表示。
C-u C-x = 
例。
character: 〓 (12307, #o30023, #x3013)
preferred charset: japanese-jisx0208 (JISX0208.1983/1990 Japanese Kanji: ISO-IR-87)
       code point: 0x222E
           syntax: _    which means: symbol
         category: .:Base, c:Chinese, h:Korean, j:Japanese, |:line breakable
      buffer code: #xE3 #x80 #x93
        file code: #xE3 #x80 #x93 (encoded by coding system utf-8-unix)
          display: terminal code #xE3 #x80 #x93

Character code properties: customize what to show
  name: GETA MARK
  general-category: So (Symbol, Other)

There are text properties here:
  fontified            t

[back]

2011-06-04

kuroboxHGのカーネル更新

2.6.25 => 2.6.27, 2.6.38 などにする場合、
u-bootを1.1.4 => 1.2.0に更新する。
kuroboxHG.dtbというファイルを/boot/に設置する。

u-boot-1.2.0のバイナリは下記で配布されている。
http://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?LinkStation%2F%E7%8E%84%E7%AE%B1%2Fkernel#g31b0b2f

u-bootの書き込みとkuroboxHG.dtbの作成は下記を参考にする。
http://www.tkn.mydns.jp/blog/?p=1441
http://yahho.ii2.cc/modules/bwiki/index.php?%B8%BC%C8%A2HG%A1%A1Debian%A1%A1%BC%AB%C2%F0%A5%B5%A1%BC%A5%D0%B2%BD%C1%ED%CA%D4








以下は詳細。

uImage作成のためmkimageをインストールする。
sudo ACCEPT_KEYWORDS="**" emerge -av =dev-embedded/u-boot-tools-2010.12

2.6.27.59で作成したが起動しなかった。
u-bootの画面ではエラーはない。(kuroboxHG.dtbが無いので起動できない)
http://www.kernel.org/pub/linux/kernel/v2.6/longterm/

2.6.25 => 2.6.27以降ではハードウェア情報が別ファイルになる。(2.6.26は未調査)
u-bootも対応済みのものを使う。バイナリを探したところあった。
2.6.27のソースにはkuroboxHGでテスト済みとあるので動く可能性は高い。(2.6.38も同じ)

u-bootを1.2へ更新する。
http://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?LinkStation%2F%E7%8E%84%E7%AE%B1%2Fkernel#g31b0b2f
http://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?plugin=attach&pcmd=info&file=u-boot-1.2.0-hg.flash.bin&refer=LinkStation%2F%E7%8E%84%E7%AE%B1%2Fkernel
fileu-boot-1.2.0-hg.flash.bin
    ページ:LinkStation/玄箱/kernel
    格納ファイル名:attach/4C696E6B53746174696F6E2FE78E84E7AEB12F6B65726E656C_752D626F6F742D312E322E302D68672E666C6173682E62696E
    MD5ハッシュ値:c3ae10f906db089213978b71c2a8f3f1
    サイズ:183.1KB (187488 bytes)
    Content-type:application/octet-stream
    登録日時:2009/03/26 17:19:25
    アクセス数:461 

kuroboxHG.dtb を作る。
http://www.tkn.mydns.jp/blog/?p=1441
http://yahho.ii2.cc/modules/bwiki/index.php?%B8%BC%C8%A2HG%A1%A1Debian%A1%A1%BC%AB%C2%F0%A5%B5%A1%BC%A5%D0%B2%BD%C1%ED%CA%D4
linux/arch/powerpc/boot/dtc -f -I dts -O dtb -o /tmp/kuroboxHG.dtb -V 16 linux/arch/powerpc/boot/dts/kuroboxHG.dts
cd /boot/
sudo cp -i /tmp/kuroboxHG.dtb .

EMモード。
# cp -i u-boot-1.2.0-hg.flash.bin gentoo/gentoo-20060907/gentoo-20060907-stock/root/
# cd /
# tar xvzf /root/hda3/EM_mode_binaries.tar.gz
# cd /root/hda3/gentoo/gentoo-20060907/gentoo-20060907-stock/
# mount -t proc none proc/
# mount -o bind /dev dev/
# chroot . /bin/bash

# source /etc/profile
# export PS1="(chroot) $PS1"
# md5sum /root/u-boot-1.2.0-hg.flash.bin
c3ae10f906db089213978b71c2a8f3f1  /root/u-boot-1.2.0-hg.flash.bin
# ls -al /dev/fl2
brw-rw-r-- 1 root root 250, 2 Nov 28  2002 /dev/fl2

### 引き返せないコマンド!!!表示なしで成功???
# cat /root/u-boot-1.2.0-hg.flash.bin > /dev/fl2
#

成功した。微妙にバージョン増えた。
$ uname -a
Linux kuroboxhg 2.6.27.59 #1 Fri Jun 3 00:53:28 JST 2011 ppc 82xx Linkstation I/Kurobox(HG) GNU/Linux

ncの番号が変わった。
$ sudo ifconfig br0:0 192.168.10.21 netmask 255.255.255.0
$ nc -n -u -s 192.168.10.21 -p 6666 192.168.10.145 6666
nc: using datagram socket
...

参考URL。
http://egfinal.jp/another/kuro-box/2.6.28memo.txt
http://logsoku.com/thread/hibari.2ch.net/linux/1261303328/
http://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?LinkStation%2F%E7%8E%84%E7%AE%B1%2Fkernel#g31b0b2f
http://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?LinkStation%2F%E7%8E%84%E7%AE%B1%2Fkernel#wa3827d5
http://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?LinkStation%2FTeraStation%2F%E7%8E%84%E7%AE%B1%2FPPC%2Fkernel%2F2.6.30.5
http://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?SheevaPlug%2FU-Boot
http://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?plugin=attach&refer=LinkStation%2FTeraStation%2F%E7%8E%84%E7%AE%B1%2FPPC%2Fkernel%2F2.6.28&openfile=build-kernel-2.6.28-from-2ch.txt
http://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?plugin=attach&refer=LinkStation%2FTeraStation%2F%E7%8E%84%E7%AE%B1%2FPPC%2Fkernel%2F2.6.30.5&openfile=config-MTD-from-2ch.txt
http://www.tkn.mydns.jp/blog/?p=1441
http://yahho.ii2.cc/modules/bwiki/index.php?%B8%BC%C8%A2HG%A1%A1Debian%A1%A1%BC%AB%C2%F0%A5%B5%A1%BC%A5%D0%B2%BD%C1%ED%CA%D4

# dir_index,large_fileを追加するとEMモードのfsckが動かない。

テスト。
o vanilla-sources-2.6.38
o gentoo-sources-2.6.38-r6
x hardened-sources-2.6.38
x hardened-sources-2.6.36
x hardened-sources-2.6.32

### カーネル作成の例。

別サーバーで作成。
$ sudo ACCEPT_KEYWORDS="~*" emerge -av dev-embedded/u-boot-tools
$ cp -ri /usr/src/linux-2.6.38-gentoo-r6/ .
$ cd linux-2.6.38-gentoo-r6/
$ cp -i arch/powerpc/configs/linkstation_defconfig .config
$ yes '' | make ARCH=powerpc CROSS_COMPILE=powerpc-unknown-linux-gnu- oldconfig
$ make ARCH=powerpc CROSS_COMPILE=powerpc-unknown-linux-gnu- KCFLAGS="-mcpu=603e -Os" -j4 uImage
$ make ARCH=powerpc CROSS_COMPILE=powerpc-unknown-linux-gnu- KCFLAGS="-mcpu=603e -Os" -j4 modules
$ cd ..
$ tar cvzf linux-2.6.38-gentoo-r6.tgz linux-2.6.38-gentoo-r6/
$ scp linux-2.6.38-gentoo-r6.tgz kuroboxhg:/tmp/

kuroboxhgで作業する。
$ sudo tar xvzf linux-2.6.38-gentoo-r6.tgz
$ sudo mv -i linux-2.6.38-gentoo-r6 /usr/src/linux-2.6.38-gentoo-r6-cross
$ cd /usr/src/
$ sudo rm -i linux
$ sudo ln -s linux-2.6.38-gentoo-r6-cross
$ cd linux-2.6.38-gentoo-r6-cross/
$ sudo make ARCH=powerpc CROSS_COMPILE=powerpc-unknown-linux-gnu- KCFLAGS="-mcpu=603e -Os" -j4 modules_install
$ cd /boot/
$ sudo mv -i .config System.map kuroboxHG.dtb vmlinux.UBoot vmlinux.bin 2011-06-03.2/
$ sudo cp -pi /usr/src/linux/.config .
$ sudo cp -pi /usr/src/linux/System.map .
$ sudo cp -pi /usr/src/linux/arch/powerpc/boot/uImage vmlinux.UBoot
$ /usr/src/linux/scripts/dtc/dtc -f -I dts -O dtb -o /tmp/kuroboxHG.dtb -V 16 /usr/src/linux/arch/powerpc/boot/dts/kuroboxHG.dts
bash: /usr/src/linux/scripts/dtc/dtc: バイナリファイルを実行できません

gcc-4.4.5 => 4.3.4のため?作成元で生成する。
$ ./linux-2.6.38-gentoo-r6/scripts/dtc/dtc -f -I dts -O dtb -o /tmp/kuroboxHG.dtb -V 16 ./linux-2.6.38-gentoo-r6/arch/powerpc/boot/dts/kuroboxHG.dts
$ scp /tmp/kuroboxHG.dtb kuroboxhg:/tmp/

確認、リブート。
$ sudo cp -pi /tmp/kuroboxHG.dtb .
$ sudo chown root.root .config System.map kuroboxHG.dtb vmlinux.UBoot
$ file 2011-06-03.2/.config .config
$ file 2011-06-03.2/System.map System.map
$ file 2011-06-03.2/kuroboxHG.dtb kuroboxHG.dtb
$ file 2011-06-03.2/vmlinux.UBoot vmlinux.UBoot
$ ll /lib/modules/2.6.38-gentoo-r6/
$ sudo reboot

以前より情報が多い。IPアドレスが変わる直前まで送ってくれるようになった?
$ sudo ifconfig br0:0 192.168.10.21 netmask 255.255.255.0
$ nc -n -u -s 192.168.10.21 -p 6666 192.168.10.145 6666
...
U-Boot 1.2.0 (Mar 26 2009 - 11:36:56) LinkStation HG / KuroBox HG
...
   Image Name:   Linux-2.6.38-gentoo-r6
...
linkstation: disarming the AVR watchdog:

成功。
$ uname -a
Linux kuroboxhg 2.6.38-gentoo-r6 #2 Fri Jun 3 23:04:11 JST 2011 ppc 82xx Linkstation I/Kurobox(HG) GNU/Linux

kuroboxHGでのみテスト済み?
$ head -n19 /usr/src/linux/arch/powerpc/platforms/embedded6xx/Kconfig|tail -n6
        help
          Select LINKSTATION if configuring for one of PPC- (MPC8241)
          based NAS systems from Buffalo Technology. So far only
          KuroboxHG has been tested. In the future classical Kurobox,
          Linkstation-I HD-HLAN and HD-HGLAN versions, and PPC-based
          Terastation systems should be supported too.

ハードウェア情報のファイル?
$ ls /usr/src/linux/arch/powerpc/boot/dts/
...

### u-boot書き込み確認。
http://nice.kaze.com/shiro-box-hg.html
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230888/
http://downloads.buffalo.nas-central.org/ALL_LS_KB_PPC/Distributions/Gentoo/

EMモード => 古いgentooのシステムへchrootする。gcc-3.4.4有り。
# mkdir /root/hda3
# mount /dev/hda3 /root/hda3
# cd /
# tar xvzf /root/hda3/EM_mode_binaries.tar.gz
# cd /root/hda3/gentoo/gentoo-20060907/gentoo-20060907-stock/
# mount -t proc none proc/
# mount -o bind /dev dev/
# chroot . /bin/bash

本来書きこみ時に行うデータチェックを今行う。あまり意味ない。
# source /etc/profile
# md5sum /root/u-boot-1.2.0-hg.flash.bin
c3ae10f906db089213978b71c2a8f3f1  /root/u-boot-1.2.0-hg.flash.bin
# dd if=/dev/fl2 of=/root/bootcode-2011-06-04.bin
896+0 records in
896+0 records out
458752 bytes (459 kB) copied, 0.133927 seconds, 3.4 MB/s
# md5sum /root/bootcode-2011-06-04.bin
af906f6bbe8bfef83332c80a7d5c4273  /root/bootcode-2011-06-04.bin

違う?
# cd /root/
# chmod -w bootcode-2011-06-04.bin u-boot-1.2.0-hg.flash.bin
# cd /tmp/
# split -b 187488 /root/bootcode-2011-06-04.bin out.
# md5sum out.aa
c3ae10f906db089213978b71c2a8f3f1  out.aa

u-bootのファイルと先頭からファイルサイズ分のデータは同じ。全領域で459 kBのようです。
u-bootのchecksum badはこれが原因かもしれない。残りをnullで埋めるとか?

終了。
# exit
# umount proc/
# umount dev/
# umount /dev/hda3
# sync; sync
# reboot

ちょっと心配。起動した。
$ nc ...
s
run writeok
boot

EMモード終了前に書きこんでも同じ。
$ echo -n 'OKOK' > /dev/fl3
$ echo -n "OKOK" > /dev/mtdblock2 
$ reboot

gentooのコンパイルオプション

gentooは、システム全体、パッケージごとの全体、パッケージごとのバージョン、でオプション追加可能。
$ cat /etc/portage/env/net-misc/wget
CFLAGS="${CFLAGS} -Os"
CXXFLAGS="${CFLAGS}"

$ cat /etc/portage/env/net-misc/wget-1.12-r3
CFLAGS="${CFLAGS} -O1"
CXXFLAGS="${CFLAGS}"

$ sudo emerge -v wget

$ ps auxwww|grep -P "O[s1]"
root      3724  0.0  0.0   8820  1032 pts/10   S+   10:59   0:00 /usr/x86_64-pc-linux-gnu/gcc-bin/4.4.5/x86_64-pc-linux-gnu-gcc -c -O2 -pipe -march=native -Os -O1 -Os -O1 -Os -O1 -Os -O1 conftest.c

"-O2 -pipe -march=native -Os -O1 -Os -O1 -Os -O1 -Os -O1"なので読み込み回数が多い?
追記だと、どんどん増えるかもしれない。

$ grep CFLAG /etc/make.conf | grep -v ^#
CFLAGS="-O2 -pipe -march=native"
CXXFLAGS="${CFLAGS}"

例。
http://www.gentoo-wiki.info/CflagsExceptions#Safe_Options
$ ll /etc/portage/env/dev-*/*
-rw-r--r-- 1 root root 54 2011-06-02 08:30:49 /etc/portage/env/dev-db/sqlite
-rw-r--r-- 1 root root 54 2011-06-02 08:29:12 /etc/portage/env/dev-lang/python
$ cat /etc/portage/env/dev-*/*
CFLAGS="-O3 -pipe -march=native"
CXXFLAGS="${CFLAGS}"
CFLAGS="-O3 -pipe -march=native"
CXXFLAGS="${CFLAGS}"

gccの同時に作業するjob数を減らす。
$ cat /etc/portage/env/sys-devel/gcc
MAKEOPTS="-j1"