Archive for the ‘gentoo’ Category

2006/10/29追記: 以下の内容はイマイチ不正確なので[修正版][memo] postfix + dovecotでSMTP AUTH & IMAPなメールサーバを立ち上げるで書き直しています。

Gentooではいきなりpostfixを入れようとしても、デフォルトでssmtpが入っていてblockされるのでssmtpを消すのが先決。

# emerge -C ssmtp

んでGentooの基本だけど、emergeするときはemerge -pvでどんなフラグが有効になるか必ず確認。postfixにmysqlがついちゃうので、必要ないならpackage.useで外す。あとsaslが必要なのでこれは付けておく。あとなんでかわからないけどpostfixにsaslを付けるとついてくるcyrus-saslで、gdbmやcryptをUSEするとコンパイルに失敗したので外した。

# echo "mmail-mta/postfix -mysql sasl" >> /etc/portage/package.use
# echo "dev-libs/cyrus-sasl -mysql -java -gdbm -crypt" >> /etc/portage/package.use
# emerge -v postfix

postfixの設定は /etc/postfix/main.cf で行う。以下のように設定した。

soft_bounce = no
myhostname = 普通はmyhostnameから最初の要素を取ったもの
mydomain = gethostname()から得られるFQDN
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, $mydomain, mail.$mydomain, localhost
mynetworks_style = subnet
mynetworks = 192.168.0.0/24, 127.0.0.0/8
relay_domains = $mydestination
alias_maps = hash:/etc/mail/aliases
alias_database = hash:/etc/mail/aliases
home_mailbox = .Maildir/
header_checks = regexp:/etc/postfix/header_checks
smtpd_banner = mail.$mydomain ESMTP $mail_name ($mail_version)
smtpd_helo_required = yes
disable_vrfy_command = yes
strict_rfc821_envelopes = yes
allow_percent_hack = yes
swap_bangpath = yes
allow_untrusted_routing = no
message_size_limit = 1024000
smtpd_recipient_restrictions = permit_sasl_authenticated,
                             permit_mynetworks,
                             reject_unauth_destination
smtpd_sender_restrictions = reject_unknown_sender_domain
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = no
allow_mail_to_commands = alias,forward,include
smtpd_client_restrictions = permit_mynetworks,
                        reject_invalid_hostname,
                        reject_non_fqdn_sender,
                        reject_non_fqdn_recipient,
                        reject_unknown_sender_domain,
                        reject_unknown_recipient_domain,
                        reject_rbl_client bl.spamcop.net,
                        reject_rbl_client blackholes.mail-abuse.org,
                        reject_rbl_client dynablock.wirehub.net,
                        reject_rbl_client korea.services.net,
                        reject_rbl_client opm.blitzed.org,
                        reject_rbl_client relays.ordb.org,
                        reject_rbl_client relays.visi.com,
                        reject_rbl_client sbl.spamhaus.org,
                        reject_rbl_client sbl-xbl.spamhaus.org,
                        permit

hostnameとかdomainnameは適宜読み替えること。デフォルトから変えていないところは割愛した。
次に/etc/postfix/master.cfの以下の部分のコメントアウトを外す。

submission inet n     -     n     -     -     smtpd
        -o smtpd_etrn_restrictions=reject
        -o smtpd_client_restrictions=permit_sasl_authenticated,reject

smtpd_client_restrictionsはmain.cfで書いてあるので消していいかも。あとデフォルトで有効になっているsmtpの行をコメントアウト。

次は/etc/sasl2/smtpd.confを以下のようにする。

pwcheck_method: saslauthd

ここまで出来たら送信は可能になったはずなので

# /etc/init.d/postfix start
# /etc/init.d/saslauthd start
# rc-update add postfix default
# rc-update add saslauthdd default

として、クライアントのメーラなどで、今使ってるメールアドレスに送信テストしてみるのを忘れずに。上手く行かないときはmyhostnameとかmydomainの設定がおかしいか、ルータでフィルタされてるか、587番か143番が該当サーバにIPマスカレードされていない。メーラではIMAPでアカウント作って、TLSを使うようにすればOKなはず。

次にdovecotだが、こっちは設定簡単。まずお約束でemerge -pv dovecotして、フラグを確認。何のフラグかわからないときはeuse -i フラグ名で調べること。付けるフラグがデフォルトと違うなら、postfixのときと同じように/etc/portage/package.useに書いて、emerge -av dovecot。とりあえずpamとsslだけでいいと思われる。設定ファイルは/etc/dovecot.confにあるのでそれを編集。

protocols = pop3 imap
default_mail_env = maildir:%h/.Maildir

設定したらルータで110番を開けて、以下のお約束を行う。

# /etc/init.d/dovecot start
# rc-update add dovecot default

俺の場合dovecot startしたら”dovecot: Warning: Fixing permissions of /var/run/dovecot to be world-readable”とwarnがでたので以下のようにして回避した。バグっぽい。

# chmod 755 /var/run/dovecot
# chmod 750 /var/run/dovecot/login

メーラで受信しようとするとパスワードを聞かれるはずなので、入れないと弾かれることと、入れて受信できることの両方を確認して終了。

, , ,

[memo] サーバのCPU動作周波数を下げるの続き。

やってみないとわからんので、cpufreq_ondemandを試してみる。

# modprobe cpufreq_ondemand
# echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

# cd /sys/devices/system/cpu/cpu0/cpufreq/ondemand/
# ls
ignore_nice_load sampling_down_factor sampling_rate sampling_rate_max sampling_rate_min up_threshold
# cat ignore_nice_load
0
# cat sampling_down_factor
1
# cat sampling_rate
1040000
# cat sampling_rate_max
520000000
# cat sampling_rate_min
520000
# cat up_threshold
80

詳細はKernel メモ ondemand参照。とりあえずignore_nice_loadは1に設定しておいた。急がないけど負荷になりそうな作業なんかはniceすること。

実際にemerge –syncとかして/proc/cpuinfoを見てたら、普段1GHzで動作しているのが2GHz→1.8GHzとなって1GHzに戻った。上手く動いているっぽい。試しにnice revdep-rebuildとかすると1GHzから変わらないことも確認。とりあえずこのまま運用してみる。

, , ,

普通にsshで繋がるようになったらsvn+sshを使いたくなる。サーバー側はemerge subversionするぐらいで設定は特にない。svnadmin create /var/svn/hoge とか svn import ~/moge file:///var/svn/hogeとかしておくだけ。svnserveを立ち上げる必要はない。svn+sshで接続するときは、sshで認証した後svnserve -tを勝手にしてくれ、接続を切るとsvnserveプロセスもなくなってくれる。よってルータで3690番のポートを開けておくとかいう作業は必要ない。22番だけ開いていればいい。

クライアント側は、Poderosaで作った鍵(例えばファイル名をid_rsaとする)しかない場合はPuTTY用の鍵を作る。puttygenを起動して、秘密鍵を読み込んでパスフレーズを入力すれば変換される。変換された秘密鍵をid_rsa.ppkとして保存。とりあえずPuTTYを起動して接続-データで自動ログインのユーザ名と、接続-SSH-認証で認証のためのプライベートキーファイルでさっきの.ppkファイルを設定。接続してみてパスフレーズ入力してログイン出来ればOK。

次にputty.exeと同じフォルダにあるpageant.exeを起動する。タスクトレイに常駐するので右クリックして鍵の追加を選んで、.ppkを選択する。パスフレーズを入力すれば作業終わり。以降、PuTTYでもTortoiseSVNでもパスフレーズは入力しないでもいい。ただ、これはWindowsにログインしなおすと消えてしまうので、ログイン毎に鍵の追加→パスフレーズの入力を行う必要がある。ランチャーに登録するかスタートアップに入れておく。

後はTortoiseSVNの設定で、ネットワークにあるSSHクライアントにTortoisePlink.exeを設定。これでTortoiseSVNからリボジトリブラウザを開いて、URL欄に svn+ssh://ユーザ名@ホスト名/var/svn/hoge と入力してエラーが出なければ終了。

, , , ,

俺のようにしょっちゅうemergeしたい人はUSEフラグの管理が大変だ。知らないうちに勝手にgtk2フラグが有効になっててXがインストールされたりして大変ウザイ。そんなわけでGentoo使いの先輩に教えて貰ったeixとeuseを使ってみる。

% sudo emerge eix
% sudo eix-sync

euseはgentoolkitに入っている。eixはemerge –searchと似たようなモンだがこっちのほうが速いし使いやすい。んで、本題のeuseだが、使い方自体は–helpすりゃわかるんだが。フラグの説明見たり、どれが使われてるか見れたり、フラグを有効にしたり無効にしたりできる。つーか詳細はman euseで(w euse使うとmake.confのUSEフラグの部分が整形されて見やすくなるのも嬉しい。まぁ説明見るだけなら /usr/portage/profiles/use.desc
見ればいいんだが。

同じくgentoolkitに含まれているequeryも激しく便利。こいつで

% equery depends mysql

とかやってやればmysqlフラグに依存しているパッケージを調べることが出来るし、dependsをdepgraphに変えてやると依存関係をツリーで見れる。超便利。

, ,

CPUに関する情報は/sys/devices/system/cpu/cpu0/cpufreq/で次のファイルをcatする。まぁファイル名のまんまだが。

  • affected_cpus : 影響する他のCPU。俺の場合はデュアルコアなので当然0と1
  • cpuinfo_cur_freq : 現在の動作周波数
  • cpuinfo_max_freq : 最大周波数。AMD64X2 3800+の場合は2000000
  • cpuinfo_min_freq : 最低周波数。AMD64X2 3800+の場合は1000000
  • scaling_available_freqyencies : 設定可能な周波数。AMD64X2 3800+の場合は2000000/1800000/1000000しかない。intelだともっと多いらしい
  • scaling_available_governors : 設定可能な動作モード。Gentooのデフォルトではperformanceのみ
  • scaling_cur_freq : 現在の動作周波数
  • scaling_driver : 周波数コントロールのための仕組みの名前
  • scaling_governor : 動作モード。scaling_available_governorsのどれか
  • scaling_max_freq : cpuinfo_max_freqと何が違うのかわからん
  • scaling_min_freq : cpuinfo_min_freqと何が違うのかわからん

普段は高周波数で動いてくれなくていいというか、その方が電気代が安くなって地球に優しいためいい感じ。そんなわけで以下の手順を踏んで周波数を下げてみた。

(今の周波数を確認)
% cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

(どんなdriverがあるか探す)
% find /lib/modules/2.6.17-gentoo-r7/ -name '*.ko'|grep cpu

(明らかにそれっぽい奴を見つけたので読み込む)
% sudo modprobe cpufreq_powersave

(動作モードが増えたことを確認)
% cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

(動作モードを上で確認したやつに変更)
# su - ; echo "powersave" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# exit

(周波数が下がったことを確認)
% cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

これだと確かに周波数は下がるが下がりっぱなしだ。Gentooだと最新を追っかけたい人はコンパイルをしょっちゅうするので、そういうときにいちいち戻すのが面倒だ。そこでcpufreq_ondeamndというdriverを使うと、なんかいい感じに自動化できそうな予感がする。が、もうちょっと調べて、しっかり設定しないと下がりっぱなしとか上がりっぱなしになりそうな予感がするのでとりあえずスルー。

, , ,

特に書くことないほどあっさり終了。LiveCDを焼いてそいつでブートし、デスクトップ画面が出てきたら”Gentoo Linux installer”をダブルクリックして指示に従っていくだけ。つかパソコンふぉあ障害者ず Gentoo Linux 2006.0(インストール-LiveCD-)を参考に。変えたところはIPアドレスとかその辺のネットワーク設定周りと、ステージを3からにしたのと、CFLAGで-O3にしたぐらい。インストールが終わったら上部のメニューからrebootしてCD抜いて終わり。

pingして外に繋がることを確認したら
emerge --sync

してから、必要なものをガンガン入れるんだが、その前に
/etc/init.d/hdparm start

してDMAを有効にしておく。んでいい加減sshで繋いで作業したいので
nano -w /etc/ssh/sshd_config

で適切にsshを設定。

PermitRootLogin no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no

とかそんな感じに。

クライアントで鍵セットを作って、USBメモリでサーバに公開鍵を置く。マウントするのは

# mkdir /mnt/usbmemory
# mount -t vfat /dev/sdb1 /mnt/usbmemory

で、/mnt/usbmemoryが見えるようになる。後は公開鍵を置いてパーミッション変えればOK。

% mkdir ~/.ssh
% cat /mnt/usbmemory/id_rsa >> ~/.ssh/authorized_keys
% chmod 700 ~/.ssh
% chmod 600 ~/.ssh/authorized_keys

クライアントからsshで繋いでrootになって、ひたすら
emerge -av パッケージ名

。入れたパッケージは以下の通り。

  • 管理系:gentoolkit/htop/traceroute/tcpdump
  • デーモン系:apache2/proftpd/mysql/subversion/trac/samba
  • ユーティリティ系:sudo/screen/ftp/zsh/w3m/svk/lv/nkf
  • 言語:python/ruby/jdk/groovy

keywordでmaskされてるとか怒られるやつは

# ACCEPT_KEYWORDS="~amd64" emerge -av パッケージ名

で入る。色々入れたり消したりしてるうちに依存関係がおかしくなったりしたときは、revdep-rebuildする。特定のライブラリに依存するもの、とかの指定もできる。

あとはapacheやらsambaやらの設定だな。

, ,