kumo.jpは正統派UNIXであるSolaris10で運用されています。この時の構築・運用ノウハウをご紹介していきたいと思います。
Solaris10はアーキテクチャの変更が運用にも大きく影響しています。またLinuxの便利な機能や全部設定してある状態に比べると手を入れなくてはいけない点があります。その辺を中心に、書いていこうと思います。
当初は
を行い、その後に
を実施していきたいと思います。
このページを作成するに当たっての基本方針は、
ということにしています。
LinuxやFreeBSDと違い、Solarisはあまり便利なツールは入っていません。例えばtarも、GNU Tarではありませんので-zオプションなどは使えません。このような注意点について、ご紹介します。
SolarisのtarはGNU Tarではありませんので、tar.gzを解凍する時は次のようにするのが一般的です。
gzcat hoge.tar.gz | tar xpvf -
もしくはGNU Tarを入れてしまってください。実際、すんごく長いファイル名や深いディレクトリは対応できなかったことがありました。詳細は忘れましたが。でも基本的に私は余計なものを入れたくないので問題が起きてから対応する予定です。
Solarisにはtopコマンドはついていません。が、prstatというコマンドでほぼ同様のことができます。でも実はSolarisはプロセス関係のコマンドが豊富で、かなり詳細なことまで調べられます。それらはたいてい"p"で始まるコマンドですので
p[ctrl+D]
などで気になったコマンドは調べてみてください。
これも、ありません。でもsnoopというコマンドがついています。これで出力したファイルはEhterealで読み込むことができます。よく使うコマンド例を載せておきます。
snoop -o hoge.dat port 80 and host 10.10.10.10
上記で10.10.10.10宛てかつポート80のパケットを取得し、カレントディレクトリのhoge.datとして記録します。or指定をするとポート80番のパケットと、10.10.10.10宛のパケット両方を取得します。ctrl+Cで止めます。
コマンドではないのですが、Solarisのcronでは*/5という表記は使えません。5,10,15...と、書いていく必要があります。ちなみにrootのcronは/var/spool/cron/crontabs/rootにあります。
セキュリティ対策、バグ対策のパッチあてはOS運用管理上非常に重要なものです。パッチはライセンスを購入した有償のものと、セキュリティパッチなど最低限のものだけの無償パッチの二種類があります。違いとしては、無償版はセキュリティパッチとハードウェアドライバのアップデートだけ、有償版はそれに通常のバグフィックス(機能追加もか?)を含むということです。
ここからSolaris10用のクラスタパッチをダウンロードできます。
コマンドの場合はsmpatchコマンドを使います。ただ、当初はユーザ登録などは不要でしたが現在は一度登録する必要があるようです。詳しくは調べてないのでコマンドだけでできるのか、Webから登録できるのかは知りませんが、一般的な手順としてはXのupdatemanagerを起動して登録します。しかしこれも3/05版には入っていませんので、次の手順を実施することになります。
その後、日常的なパッチあて作業は以下のようになります。
smpatch update
そこそこ時間がかかります。終わったら、コマンド終了後
% smpatch add -x idlist=/var/sadm/spool/disallowed_patch_list
で当てられなかったパッチを手動で適用します。たいていの場合再起動が必要なので、日時を調整して再起動を実施します。
svcadm disable svc:/network/finger:default svcadm disable svc:/network/telnet:default svcadm disable svc:/network/login:rlogin svcadm disable svc:/network/shell:default
svcadm disable svc:/system/name-service-cache:default
svcadm disable svc:/network/rpc/gss:default svcadm disable svc:/network/rpc/mdcomm:default svcadm disable svc:/network/rpc/meta:default svcadm disable svc:/network/rpc/metamed:default svcadm disable svc:/network/rpc/metamh:default svcadm disable svc:/network/rpc/rstat:default svcadm disable svc:/network/rpc/rusers:default svcadm disable svc:/network/rpc/smserver:default svcadm disable svc:/network/rpc-100235_1/rpc_ticotsord:default svcadm disable svc:/network/rpc-100083_1/rpc_tcp:default svcadm disable svc:/network/rpc-100068_2-5/rpc_udp:default
svcadm disable svc:/network/nfs/nlockmgr:default svcadm disable svc:/network/nfs/status:default svcadm disable svc:/network/nfs/client:default
ログ管理は大きく二つの設計と運用が必要になります。
SMFRはsvc:/system/system-log:defaultです。svcadm restart system-logなどでOKです。なお試験やスクリプトでログを書き込む時はLinuxなどと同様、loggerコマンドを使えます。
/var/adm/cat2940.log -A 1d -C 14 -z 0 -a 'kill -HUP `cat /var/run/syslog.pid`'
その後syslogを再起動します。/usr/sbin/logadmはcronで定期実行されます。下記はデフォルト値。
10 3 * * * /usr/sbin/logadm
/usr/sfw/sbin/snmpd
を実行すれば起動します。ただしデフォルトのものはバージョン5.0.9です。そのためsnmpd.confでlinkupdownnotificationsなどのオプションは使えません。設定ファイルは/etc/snmp/conf/snmpd.confです。
ちなみにNet-SNMPの通常コマンドは/usr/sfw/bin/以下にあります。snmpwalkなどを使いたいときにはここ以下を探してください。snmpdやsnmptrapdは/usr/sfw/sbin/以下にあります。
関連ファイルを表にしてみます。
| 修正するファイル | ホスト名変更時 | IPアドレス変更時 | ファイルの説明 |
|---|---|---|---|
| /etc/nodename | 変更必要 | ホスト名が記述される | |
| /etc/hostname.<ifname> | 変更必要 | NIC に対応したホスト名を定義し、/etc/inet/ipnodes ファイルから IPv6 アドレスを特定する | |
| /etc/hosts | 変更必要 | 変更必要 | ホスト名と IPv4 アドレスの対応を定義 |
| /etc/networks | 変更必要 | ネットワーク名とネットマスク番号を定義 | |
| /etc/netmasks | 変更必要 | ネットワーク番号とネットマスク番号を定義 | |
| /etc/defaultrouter | 変更必要 | デフォルトゲートウェイを定義 |
データベースの更新は updatedb で実行する。下記リンクを作成。
ln -s /usr/local/bin/locate /usr/local/bin/updatedb
この後 updatedb を実行すると index ができるので、適当にパスの通ったディレクトリにそれぞれのバイナリをコピーする。
locate のパーミッションとオーナーは
-rwxr-sr-x 1 root slocate
とする。(2755)
最後に cron に登録する。
0 3 * * * /usr/local/bin/updatedb > /dev/null 2>&1
server ntp.ring.gr.jp prefer server ntp.ring.gr.jp server 127.127.1.0 fudge 127.127.1.0 stratum 10 enable auth monitor driftfile /var/ntp/ntp.drift statsdir /var/ntp/ntpstats/ filegen peerstats file peerstats type day enable filegen loopstats file loopstats type day enable filegen clockstats file clockstats type day enable
touch /var/ntp/ntp.drift
/usr/sbin/svcadm enable ntp
/usr/sbin/svcadm disable ntp
/usr/sbin/svcadm restart ntp
x20% ntpq -pn
remote refid st t when poll reach delay offset disp
==============================================================================
127.127.1.0 127.127.1.0 10 l 3 64 377 0.00 0.000 10.03
*133.23.250.240 133.243.237.141 2 u 253 512 377 30.56 0.333 41.46
+133.243.3.209 133.243.230.51 2 u 492 512 377 20.14 1.033 66.16
Nov 26 00:05:30 x20 ntpdate[12056]: [ID 558275 daemon.notice] adjust time server 133.186.4.15 offset -0.052978 sec Nov 26 00:05:30 x20 xntpd[12058]: [ID 702911 daemon.notice] xntpd 3-5.93e+sun 03/08/29 16:23:05 (1.4) Nov 26 00:05:30 x20 xntpd[12058]: [ID 301315 daemon.notice] tickadj = 5, tick = 10000, tvu_maxslew = 495, est. hz = 100 Nov 26 00:05:30 x20 xntpd[12058]: [ID 266339 daemon.notice] using kernel phase-lock loop 0041, drift correction 0.00000 Nov 26 00:05:31 x20 xntpd[12058]: [ID 266339 daemon.notice] using kernel phase-lock loop 0041, drift correction -13662.79297
PasswordAuthentication no #PasswordAuthentication yes
PAMAuthenticationViaKBDInt no #PAMAuthenticationViaKBDInt yes
秘密鍵がない環境からアクセスできないのでパスワード認証を許可した方がよいという人も多いので、その辺はさじ加減で。
106キーボードと指定していてもうまく行かない場合は以下を実行すると、直ります。
eeprom kbd-type=Japanese\(106\)
まずはユーザ・グループの作成です。
% groupadd -g 3002 postfix % groupadd -g 3003 postdrop % useradd -g postfix -u 3002 postfix
次にBerkeley DBの最新版をゲット、コンパイル、インストールします。
%wget http://downloads.sleepycat.com/db-4.4.16.tar.gz %cd db-4.4.16/build_unix %env CC=gcc ../dist/configure %/usr/ccs/bin/make %/usr/ccs/bin/make install %/usr/ccs/bin/make distclean
続いてcyrus-saslの2系も入れておきます。
%wget ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-2.1.20.tar.gz %gzcat cyrus-sasl-2.1.20.tar.gz | tar xfpv - %cd cyrus-sasl-2.1.20 %./configure --enable-login --enable-plain --disable-anon --disable-digest --disable-krb4 --disable-gssapi --disable-otp --disable-sql --with-plugindir=/usr/local/lib/sasl2 --with-saslauthd=/var/cyrus --with-pwcheck=/var/cyrus --with-dblib=none %/usr/sfw/bin/gmake %/usr/sfw/bin/gmake install
SASL関係の設定は/usr/local/lib/sasl2/smtpd.confを以下のようにします。
pwcheck_method: saslauthd allowanonymouslogin: no allowplaintext: yes mech_list: plain login
pamで個別に起動する場合は以下のように指定。(特に実施の必要はない)
/usr/local/sbin/saslauthd -a pam
mkdir /var/cyrus chmod 700 /var/cyrus chown postfix /var/cyrus
次にsaslauthdをSMF化します。
cp /var/svc/manifest/application/management/webmin.xml /var/svc/manifest/application/management/saslauthd.xml % vi /var/svc/manifest/application/management/saslauthd.xml
変更点
% diff /var/svc/manifest/application/management/webmin.xml /var/svc/manifest/application/management/saslauthd.xml 6c6 < ident "@(#)webmin.xml 1.1 04/11/11 SMI" --- > ident "@(#)saslauthd.xml 1.1 04/11/11 SMI" 8c8 < Service manifest for the Webmin service. --- > Service manifest for the saslauthd service. 11c11 < <service_bundle type='manifest' name='SUNWwebminr:webmin'> --- > <service_bundle type='manifest' name='saslauthd'> 14c14 < name='application/management/webmin' --- > name='application/management/saslauthd' 41c41 < exec='/usr/sfw/lib/webmin/start' --- > exec='/usr/local/sbin/saslauthd -a pam' 56c56 < Webmin, a httpd based system administration tool. --- > saslauthd 60,61c60,61 < <manpage title='webmin' section='1M' < manpath='/usr/sfw/man' /> --- > <manpage title='saslauthd' section='8' > manpath='/usr/local/man' />
設定内容の確認と取り込み。
% svccfg validate /var/svc/manifest/application/management/saslauthd.xml % svccfg -v import /var/svc/manifest/application/management/saslauthd.xml
ここで登録確認と起動と動作確認をしましょう。
% svcs -x saslauthd svc:/application/management/saslauthd:default (saslauthd) 状態: 2005年11月26日 11時31分41秒 以降disabledです 原因: 管理者が使用不可にしました。 参照: http://sun.com/msg/SMF-8000-05 参照: saslauthd(8) 影響: このサービスは動作していません。
まだサービスはありません。
% svcadm enable saslauthd % svcs -x saslauthd svc:/application/management/saslauthd:default (saslauthd) 状態: 2005年11月26日 11時32分21秒 以降onlineです 参照: saslauthd(8) 参照: /var/svc/log/application-management-saslauthd:default.log 影響: ありません。
これでsaslauthdはまともに動いていることが確認できました。さていよいよPostfixの最新版をゲット、コンパイル、インストールです。
ftp://ftp.ixp.jp/postfix/official/postfix-2.2.5.tar.gz wget http://mirror.postfix.jp/postfix-release/official/postfix-2.2.5.tar.gz gzcat postfix-2.2.5.tar.gz | tar xpvf - cd postfix-2.2.5 /usr/ccs/bin/make tidy 念のための不要ファイルの削除なので、なくてもいい。 /usr/sfw/bin/gmake -f Makefile.init makefiles CCARGS='-DHAS_DB -I/usr/local/BerkeleyDB.4.4/include -DUSE_SASL_AUTH -I/usr/local/include/sasl' AUXLIBS='-L/usr/local/lib -L/usr/local/BerkeleyDB.4.4/lib -R/usr/local/lib -R/usr/local/BerkeleyDB.4.4/lib -ldb -lsasl2 -lm -lz'
/usr/sfw/bin/gmake install
途中の対話は基本的に全てEnterでOK。/etc/postfix/main.cfで中核の設定をします。
allow_mail_to_commands = alias,forward,include command_directory = /usr/sbin config_directory = /etc/postfix daemon_directory = /usr/libexec/postfix debug_peer_level = 2 home_mailbox = Maildir/ html_directory = no mail_owner = postfix mailq_path = /usr/bin/mailq manpage_directory = /usr/local/man mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, mydomain = kumo.jp myhostname = mail.kumo.jp mynetworks = 192.168.33.0/24, 127.0.0.0/8 myorigin = $mydomain newaliases_path = /usr/bin/newaliases queue_directory = /var/spool/postfix readme_directory = no sample_directory = /etc/postfix sendmail_path = /usr/lib/sendmail setgid_group = postdrop smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous unknown_local_recipient_reject_code = 550
postfix checkで設定を確認します。
以下はおまけ。
cd /etc/postfix newaliases
そしてPostfixをSMF化するために、sendmailのファイルを利用します。
cp /var/svc/manifest/network/smtp-sendmail.xml /var/svc/manifest/network/postfix.xml
% diff /var/svc/manifest/network/smtp-sendmail.xml /var/svc/manifest/network/postfix.xml
15c15
< <service_bundle type='manifest' name='SUNWsndmr:sendmail'>
---
> <service_bundle type='manifest' name='postfix'>
49,56d48
< name='identity'
< grouping='optional_all'
< restart_on='refresh'
< type='service'>
< <service_fmri value='svc:/system/identity:domain' />
< </dependency>
<
< <dependency
64c56
< <instance name='sendmail' enabled='false'>
---
> <instance name='postfix' enabled='false'>
72c64
< value='file://localhost/etc/mail/sendmail.cf' />
---
> value='file://localhost/etc/postfix/main.cf' />
75,110d66
< <dependency
< name='nsswitch'
< grouping='require_all'
< restart_on='refresh'
< type='path'>
< <service_fmri
< value='file://localhost/etc/nsswitch.conf' />
< </dependency>
<
< <!--
< If autofs is enabled, wait for it to get users' home
< directories.
< -->
< <dependency
< name='autofs'
< grouping='optional_all'
< restart_on='none'
< type='service'>
< <service_fmri value='svc:/system/filesystem/autofs' />
< </dependency>
<
< <dependent
< name='smtp-sendmail_multi-user'
< grouping='optional_all'
< restart_on='none'>
< <service_fmri
< value='svc:/milestone/multi-user' />
< </dependent>
<
< <!--
< Sendmail is hard-coded to sleep for 60 seconds if it cannot
< determine the FQHN, so the timeout for start must be longer
< than that. For details, see
< http://www.sendmail.org/vendor/sun/differences.html#3.2
< -->
<
114,115c70,71
< exec='/lib/svc/method/smtp-sendmail start'
< timeout_seconds='120' />
---
> exec='/usr/sbin/postfix start'
> timeout_seconds='30' />
120,121c76,77
< exec='/lib/svc/method/smtp-sendmail stop %{restarter/contract}'
< timeout_seconds='60' />
---
> exec='/usr/sbin/postfix stop'
> timeout_seconds='120' />
126c82
< exec='/lib/svc/method/smtp-sendmail refresh'
---
> exec='/usr/sbin/postfix reload'
136c92
< value='solaris.smf.manage.sendmail' />
---
> value='solaris.smf.manage.postfix' />
142c98
< sendmail SMTP mail transfer agent
---
> postfix SMTP mail transfer agent
146,147c102,103
< <manpage title='sendmail' section='1M'
< manpath='/usr/share/man' />
---
> <manpage title='postfix' section='1M'
> manpath='/usr/local/man' />
設定をインポートします。
% svccfg -v import /var/svc/manifest/network/postfix.xml
これで、svcadm start postfixなどが使えるようになります。
昔はfmlを使っていたのですが、やはり今風のWeb管理画面を持つMLの方が何となくよいので、mailmanを導入しました。
groupadd -g 3004 mailman useradd -g mailman -u 3003 mailman
mkdir /usr/local/mailman chgrp mailman /usr/local/mailman chmod a+rx,g+ws /usr/local/mailman
(パスの確認)
setenv PATH /usr/local/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/ccs/bin:/usr/sfw/bin:/usr/sfw/sbin:.
./configure --with-cgi-gid=webservd /usr/sfw/bin/gmake install /usr/local/mailman/bin/check_perms -f
httpd.conf に下記を追加。
Alias /pipermail/ "/usr/local/archives/public/" ScriptAlias /mailman/ "/usr/local/mailman/cgi-bin/"
cp /usr/local/mailman/icons/* /var/apache2/icons/
main.cf に追加。
owner_request_special = no recipient_delimiter = +
svcadm restart postfix
/usr/local/mailman/Mailman/mm_cfg.py に以下を追加する。
DEFAULT_EMAIL_HOST = 'kumo.jp'
DEFAULT_URL_HOST = 'kumo.jp'
DEFAULT_SERVER_LANGUAGE = 'ja'
MTA = 'Postfix'
add_virtualhost('kumo.jp','kumo.jp')
/usr/apache2/bin/apachectl configtest svcadm restart apache2
開始は/etc/init.d/mailman start
ML 作成時は Web での入力後、/usr/local/mailman/data でpostalias hash:aliases aliases