Solaris9でおうちのルータを作ろう


Sun Ultra2 を手に入れたので(2001/11/13), おうちのルータにしてみました(2001/2/5).
折角なので,Solaris9(Early Access)を入れてみました.
あと,家で使っている環境について,雑多に書いています.
その後,Beta_Refresh -> Release と upgrade しました. メモ1, メモ2

機器構成

Ultra2 + Let's Note CF-B5R with Flet's ADSL + 無線LAN という 環境で使っています. ネットワーク構成図

サーバ

省スペースのため,ディスプレイ,キーボード,マウスなどはなしです.
残念ながら 64-bit では動きません.
ネットワークインタフェースが3つもあるので,hme0 をプライベートの 10.0.0.1 として,hme1 を PPPoE用にしました.hme2 は余っています.

クライアント(NotePC)

雑多

あとは,UPSが欲しいです.普通の家には停電というものがあるのを忘れていま した.
衝動買いしてしました…(2002/07/26)

サーバの設定

PPPoE

RP-PPPoEを使ってみました.
/usr/lib/inet/pppoec とかを 使わないのは,わたしの性格が曲っているせいだと思います. pppoecでやりたい人は, 日刊いんすとーらー いつも心に太陽をやへ.
% tar zxvf rp-pppoe-3.3.tar.gz % cd rp-pppoe-3.3/src % env ECHO=/usr/ucb/echo ./configure HAVE_NET_BPF_H が誤検出されるので,手で undefする. % vi config.h 74 /* Define if you have the header file. */ 75 /* #define HAVE_NET_BPF_H 1 */ 76 #undef HAVE_NET_BPF_H % make # make install # touch /etc/ppp/options # vi /etc/ppp/pppoe.conf ETH=/dev/hme1 USER='opaopa-test@plala.or.jp' DNSTYPE=NOCHANGE USEPEERDNS=no DEFAULTROUTE=no /etc/ppp/pppoe.confはadsl-setupで設定する方がいいです
うちは,アドレス非固定なので,グローバルアドレスに固有な設定は, adsl-updateというスクリプトで やることにします. adsl-updateは常駐させて, アドレスが変更されたら,再度設定の更新を行ないます.
adsl-updateの中では,IP_Filter,NATの設定と, Dynamic DNSの設定を行ないます. それぞれ,setipnatsethomeというスクリプトを 呼び出しています. そのままでは使えませんが, 適当に修正すれば,Solaris以外でも使えると思います.

起動とともに,PPPoEするように,/etc/rc2.d/S95adslを設定しています. これで,Ultra-2が電源入れるだけで,ホーム・ルーターになります. (^_^)
固定IPのために,プロバイダをInterlink にしてみたんですが, CHAP認証に失敗するようになってしまいました.ちょっと,はまりましたが, /etc/ppp/options に以下のように書いて,無理矢理 PAP認証するようにさせました.
refuse-chap

DHCP daemon

ISC DHCP server を入れました.
dhcp-3.0.1rc8 以下にはセキュリティホールがあるので, dhcp-3.0.1rc9 以上にしましょう.
dhcp-3.0.1rc10 以下にはセキュリティホールが見つかりました. dhcp-3.0.1rc11 以上にしましょう.
% tar zxvf dhcp-3.0.1rc9.tar.gz % cd dhcp-3.0.1rc9 % vi siet.conf INSTALL=/usr/ucb/install MANINSTALL=/usr/ucb/install LIBS = -lresolv -lsocket -lnsl -lgen CC=gcc COPTS = $(BINDDEF) -Wall -Wno-unused -Wno-implicit -Wno-comment \ -Wno-uninitialized -Wno-char-subscripts -Wno-switch -Werror \ -DSOLARIS_MAJOR=$(MAJORVERSION) -DSOLARIS_MINOR=$(MINORVERSION) \ $(CC_OPTIONS) CF = cf/sunos5-5.h ADMMANDIR = /usr/share/man/man1m ADMMANEXT = .1m FFMANDIR = /usr/share/man/man4 FFMANEXT = .4 LIBMANDIR = /usr/share/man/man3 LIBMANEXT = .3 USRMANDIR = /usr/share/man/man1 USRMANEXT = .1 MANCAT = man VARRUN = /etc VARDB = /etc SCRIPT=solaris % make # make install

/etc/dhcpd.confを以下のように設定しました.
NotePCに振られるIPは,常に 同じもの(10.0.0.2)になるようにしました.
# resolv.confの設定 option domain-name "opaopa.org"; option domain-name-servers 10.0.0.1, 130.54.?.?; ddns-update-style none; default-lease-time 600; max-lease-time 7200; log-facility local7; # 一般用 subnet 10.0.0.0 netmask 255.0.0.0 { range 10.0.0.10 10.0.0.20; option routers 10.0.0.1; } # 有線LAN用 host sakana { hardware ethernet 00:80:45:12:?:?; fixed-address sakana; option host-name "sakana"; } # 無線LAN用 host sakana-wireless { hardware ethernet 00:02:2D:3D:?:?; fixed-address sakana; option host-name "sakana"; }
あとは,こんなものを/etc/rc2.d/ 以下に置いておきます.

DNS

附属の in.named は 8.2.2-P5 だったので,bind-9.2.0 にしました.
djbdnsというのも お勧めです.
% tar zxvf bind-9.2.0.tar.gz % cd bind-9.2.0/ % ./configure --enable-libbind % make # make install
プラベートには,p.opaopa.org (10.0.0.0/8) という名前を ふりました.正引き,逆引きができるようにしました.
// named.conf acl local-machines { 10.0.0.0/8; 127.0.0.1/32; }; options { directory "/etc/bind/"; datasize 80M; allow-query { local-machines; }; // allow-transfer { none; }; allow-transfer { local-machines; }; }; controls {}; zone "0.0.127.in-addr.arpa" { type master; file "localhost.rev"; notify no; }; zone "p.opaopa.org" { type master; file "p.opaopa.org"; notify no; }; zone "0.0.10.in-addr.arpa" { type master; file "10.rev"; notify no; }; zone "." { type hint; file "named.root"; };
その他の設定ファイルも置いておきます.

sendmail

Solaris9にバンドルされていた sendmail は 8.11.4 と古かったので, 手で最新のを入れることにしました.
まず,パッチなどで 新たに入れた sendmail が上書きされないように, 元々の sendmail を pkgrm しておきます.
# pkgrm SUNWsndmu # pkgrm SUNWsndmr

追記
と思ったんですが,Beta_Refresh にアップグレードしたら, 8.12.1 で上書きされてしまいました.
やっぱり最新ではないので,8.12.2で上書きしました.
sendmail を入れる前に,cyrus-sasl-1.5.27 を入れます. cyrus-sasl-1.5.27 を入れる前に,db-3.3.11 と openssl-0.9.6c を入れて おきます.
% tar zxvf cyrus-sasl-1.5.27.tar.gz % cd cyrus-sasl-1.5.27 % export LDFLAGS='-L/usr/local/ssl/lib -L/usr/local/BerkeleyDB.3.3/lib -R/usr/local/BerkeleyDB.3.3/lib' % export CPPFLAGS='-I/usr/local/BerkeleyDB.3.3/include' % ./configure --disable-gssapi --disable-krb4 --enable-login \ --with-dblib=berkeley --with-des=/usr/local/ssl % vi config.h /dev/random でなく /dev/urandom を使う. /dev/random を使うと認証時に妙に待たされます. #ifndef DEV_RANDOM #define DEV_RANDOM "/dev/urandom" #endif # make install # (cd utils;make install) # ln -s ../local/lib/sasl /usr/lib
あとは,saslpasswd -u home kokada とかして /etc/sasldb を作っておきます.

sasldb 以外を使いたい場合は,/usr/lib/sasl/sendmail.conf などに
pwcheck_method: pam
のように設定します.
SMTP AUTH と STARTTLS を使えるようにしておきます.
% tar zxvf zxvf sendmail.8.12.5.tar.gz % cd sendmail-8.12.5 % vi devtools/OS/SunOS.5.9 define(`confMAPDEF', `-DNEWDB -DMAP_REGEX') define(`confENVDEF', `-DSOLARIS=20900 -DSASL -DSTARTTLS') define(`confSM_OS_HEADER', `sm_os_sunos') define(`confLIBDIRS', `-R/usr/local/lib -L/usr/local/lib/sasl -R/usr/local/lib/sasl -L/usr/local/ssl/lib -L/usr/local/BerkeleyDB.3.3/lib -R/usr/local/BerkeleyDB.3.3/lib') define(`confINCDIRS', `-I/usr/local/ssl/include -I/usr/local/BerkeleyDB.3.3/include') define(`confLIBS', `-lsocket -lnsl -lssl -lcrypto -lsasl') define(`confMANROOT', `/usr/local/man/man') define(`confMANROOTMAN', `/usr/local/man/man') % make # groupadd -g 25 smmsp # useradd -u 25 smmsp # make install # mkdir /var/spool/mqueue # /usr/local/ssl/bin/openssl req -new -x509 -nodes -out sendmail.pem -days 366 -keyout sendmail.pem # cp sendmail.perm /usr/local/ssl/certs/sendmail.pem # chmod 600 /usr/local/ssl/certs/sendmail.pem

sendmail.cf は m4 で作ります.
m4でのsendmail.cfの作り方としては,附属の cf/README が非常に参考になります.
英語なので,わかりにくいという方は, ここ cf/READMEの日本語訳というのもあります.
ちなみに,Sun バンドルのcfは,/usr/lib/mail/ にあります.

下のように sendmail.mc を設定しておいて,
% m4 cf/m4/cf.m4 sendmail.mc > sendmail.cf # cp sendmail.cf /etc/mail # cp cf/cf/submit.cf /etc/mail
します.
コマンドラインやinetやcronの結果やらから sendmail を使う時は,sendmail.cfの代りにsubmit.cfが使われます. cronからのメールがエラーになったりするような場合は,submit.cfも ちゃんと設定してください.
divert(-1) divert(0)dnl VERSIONID(`$Id: home.opaopa.org.mc $') OSTYPE(`solaris2')dnl # cf/domain/general.m4 の代り define(`confFORWARD_PATH', `$z/.forward.$w+$h:$z/.forward+$h:$z/.forward.$w:$z/.forward')dnl define(`confMAX_HEADERS_LENGTH', `32768')dnl FEATURE(`redirect')dnl FEATURE(`use_cw_file')dnl # From envelope MASQUERADE_AS(`h.opaopa.org') FEATURE(`allmasquerade') # envelope from なども h.opaopa.org にする FEATURE(`masquerade_envelope') # RELAYを許すホストの設定などは,access_dbでやります FEATURE(`access_db')dnl # h.opaopa.orgという MX を設定して,受けとれるようにしておきます. # To header $j define(`confDOMAIN_NAME', `h.opaopa.org')dnl define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy') FEATURE(`no_default_msa')dnl # SMTP AUTHの設定 define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 PLAIN LOGIN ANONYMOUS')dnl define(`confAUTH_OPTIONS', `A')dnl define(`confRAND_FILE', `/dev/urandom')dnl # DIGEST-MD5 CRAM-MD5 の認証のみ信用する(RELAYを許可する) TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5')dnl # SSL 関連の設定 define(`confCACERT_PATH', `/usr/local/ssl/certs/')dnl define(`confCACERT', `/usr/local/ssl/certs/sendmail.pem')dnl define(`confSERVER_CERT', `/usr/local/ssl/certs/sendmail.pem')dnl define(`confSERVER_KEY', `/usr/local/ssl/certs/sendmail.pem')dnl define(`confCLIENT_CERT', `/usr/local/ssl/certs/sendmail.pem')dnl define(`confCLIENT_KEY', `/usr/local/ssl/certs/sendmail.pem')dnl # ヘッダの変更 (別にしなくていいです) define(`confRECEIVED_HEADER', `_REC_HDR_ $.$?{auth_type}(authenticated as ${auth_authen} $?{auth_author}for ${auth_author} $.with ${auth_type}) _REC_BY_ (using ${tls_version} with cipher ${cipher} (${cipher_bits}bits)) _REC_END_')dnl MAILER(local)dnl MAILER(smtp)dnl
DOMAIN(general)を入れると,EXPOSED_USER(root) がついてくるので,はずす.
EXPOSED_USER(root) があると,root@<プライベートアドレス> に送ろうとする.
受け取るアドレスは,/etc/mail/local-host-names に指定します.
以下のようにしておきました.
h.opaopa.org sushi.p.opaopa.org home.opaopa.org home.d.opaopa.org

リレイの設定は,/etc/mail/access でします.
/etc/mail/access: 10.0.0.1 RELAY 10.0.0.2 RELAY 10.0.0.3 RELAY
/etc/mail/access を更新したら, /etc/mail/access.db も更新する必要があります.
面倒なので /etc/mail/Makefile を 使って,/etc/mail で make すればいいだけにしました.

IP Filter

ip_filter で,世界の荒波からおうちのネットワークを守っています.
3.4.28 から,ftp proxy が動かなくなったようです. ipnat で,ftp proxy していた人は注意が必要です.
% tar zxvf ip_fil3.4.23.tar.gz % cd ip_fil3.4.23 % make solaris % cd SunOS5 # pkgrm ipf # make pakcage # vi /etc/opt/ipf/ipf.conf # vi /etc/syslog.conf local0.info /var/adm/ipf # touch /var/adm/ipf # kill -HUP
NATの設定は,global 側のアドレスを指定する必要があるので, adsl-updateから setipnatを呼んで設定するように しています.

ip_forwardするために, /usr/sbin/ndd -set /dev/ip ip_forwarding 1 しなければ いけないのですが, ちゃんと設定されていない場合があるようです.
/etc/init.d/ipfboot の最後の方で強制指定するようにしています.

/usr/sbin/ndd -get /dev/ip ip_forwarding で 確認できます.

ftp://ftp.ring.gr.jp/pub/net/ip-filter/

後記
プライベートの中から,VPNを使おうとしたら gre がはねられていました./etc/protocols を IP filter附属のものに置きかえて(greだけでいいんですが), 以下のルールを ipf.conf に追加しておきました.
## pptp gre
pass in quick proto gre from any to any group 100
pass in quick proto tcp from any port = 1723 to any group 100
pass out quick proto gre from any to any group 150
pass out quick proto tcp from any to any port = 1723 group 150

Dynamic DNS

よく無料で提供されているような Dynamic DNSのサービスは利用せずに, 自前でやっています.
もちろん,グローバルで固定なアドレスを持つDNSサーバが必要です.

bindのnsupdateを使って実現しています.
サーバ側の named.conf に以下のようなのを追加します.
zone "d.opaopa.org" { type master; file "dynamic.opaopa.org"; allow-update { localhost; }; };
"dynamic.opaopa.org"は,なんでもいいのですが, 以下のようにTTLを短かめにしておきます.
$ORIGIN . $TTL 3600 ; 1 hour d.opaopa.org IN SOA d.opaopa.org. postmaster.d.opaopa.org. ( 2002021600 ; serial 1800 ; refresh (30 minutes) 900 ; retry (15 minutes) 86400 ; expire (1 day) 3600 ; minimum (1 hour) ) NS ??.opaopa.org. $ORIGIN d.opaopa.org. hoge A ?.?.?.?

あとは, サーバ側にhostupdateというのを置いて, クライアント側からsethomeというスクリプトを 実行すれば,アドレスの更新を行なうことができます.
わたしは,adsl-updateから 自動で行なっています.

シリアルコンソール

Ultra-2 には,キーボードもディスプレイもつないでいないので, シリアルコンソールを使えるようにしておきます. Ultra-2 側では,特に設定をする必要もなく,キーボードをつながずに ブートすると,勝手にシリアルに出力が切り替わります.
NotePCから 9pin - 25pinのクロスケーブルでつなぎます. NotePCからは, Kermitと, そのフロントエンドである minicomを使っています.
/usr/local/etc/minicom/minirc.dfl は以下のようにしておきます.
pr port /dev/ttyS0 pu baudrate 9600 pu minit ^M pu mreset pu mdialpre
Stop + a は,シリアルから Break 信号を送信することで実現できます. minicom なら C-z f で Break 信号を送ることができます.

注意: NotePCをhalt やら suspend したりすると 勝手にシリアルに Break信号が送信されるようです. suspend などする場合には,その前にシリアルケーブルを 抜いておいたほうがいいです.
追記: USB-Serialの変換ケーブルを使うとBreak信号が出ないようです.
ノートPCが Let's note CF-R1P になって,シリアルケーブルがなくなりました.
しかたがないので, ELECOM UC-SGT USBシリアルケーブル というのでつないでいます.
とりあえず,そのままでは認識しなかったので,VMWare上のWin2000から 使っていたのですが,ちょっと調べたら FreeBSDとかでは使えているみたいです. ということは,Linuxでも使えるんだろうな.今度やってみます.
Linux 2.4.20だと pl2303.o というドライバで使えます. ちゃんと差すだけで認識してくれます.
pr port /dev/ttyUSB0 pu baudrate 9600 pu minit ^M pu mreset pu mdialpre
あとは,/dev/ttyUSB0 がなければ作ってください.
# mknod /dev/ttyUSB0 c 188 0 # mknod /dev/ttyUSB1 c 188 1 # chown root:dialout /dev/ttyUSB* # chmod 660 /dev/ttyUSB*
みたいな感じで.パーミッションなどは適当に.
ちなみに,普通のシリアルと違って,reboot や suspendしても Break信号を送出しないので,嬉しい人も多いかもしれません.

HTTP

Solaris9にバンドルされていたApacheをそのまま使っています. HTTPは個人的な趣味であまり好きではないので 完全に手抜きです.
ln -s ../init.d/apache /etc/rc2.d/S96apache
として,/etc/apache/httpd.conf を下のように変更しただけです.
MinSpareServers 1 MaxSpareServers 1 StartServers 1 MaxClients 10 #Loadmodule jserv_module libexec/mod_jserv.so #AddModule mod_jserv.c ServerAdmin webmaster@opaopa.org Servername home.opaopa.org
超手抜き…
webalizer も入れておきました.
cron でまわしています.
% tar zxvf webalizer-2.01-09-src.tar.gz % cd webalizer-2.01-09 % ./configure --enable-dns --with-language=japanese % make # make install # cp /etc/webalizer.conf.sample /etc/webalizer.conf # vi /etc/webalizer.conf OutputDir /var/apache/htdocs/stats/ LogFile /var/apache/logs/access_log HostName home.opaopa.org Incremental yes

samba

私自身は Windows は使わないのですが,来客用に samba も用意しておきます.
常設させないので, これを /etc/init.d/samba-ja などに置いておいて, 必要に応じて,
# /etc/init.d/samba-ja start
# /etc/init.d/samba-ja stop
とかします.
% tar zxvf samba-2.2.2-ja-1.0.tar.gz % cd samba-2.2.2-ja-1.0/source % ./configure % make # make install # /usr/local/samba/bin/smbpasswd -a kokada

/usr/local/samba/lib/smb.conf を適当に編集します.
# workgroup の変更 workgroup = 適当に # プラーベート側からのみ参照できるようする hosts allow = 10.0.0. # 無線LANのドライバを取れるようにする [drivers] path = /usr/local/samba/share/drivers public = yes writable = no
念のため,ip_filter でも,外部からアクセスできないように しておきます.

追記
Beta_Refreshにアップグレードしたら,/usr/sfw 以下に samba がついて きました.でも,バージョンが 2.2.1a だったので使っていません.

ftp

ProFTPDを入れます. site index も使えるようにしておきます.
% tar zxvf proftpd-1.2.5rc1.tar.gz % cd proftpd-1.2.5rc1 % tar zxvf ../proftpd-site_index-0.1.tar.gz % ./configure --with-modules=mod_site_index % make # make install # groupadd ftp # useradd -g ftp ftp
sample-configurations/basic.conf を元に /usr/local/etc/proftpd.conf を設定します.
ServerName "ProFTPD opaopa.org" AllowSiteIndex on SiteIndexFile /00ls_archive MaxSiteIndexLines 30
ほとんど,そのままで,site index 関連の設定を追加しただけです.

検索用に index file を作るのに, ls_archiveを使います.
あとは,以下のようなスクリプトで,index file を更新します. 中身は適当に修正してください.
#!/bin/sh ftphome=/usr/ftp lsfile=$ftphome/00ls_archive tmpfile=/tmp/00ls_archive /usr/local/bin/ls_archive \ -p /pub/ \ $ftphome/pub > $tmpfile 2> /dev/null if [ -f $lsfile ] ; then /bin/mv $lsfile $lsfile.old fi /bin/cp $tmpfile $lsfile ; /bin/rm -f $tmpfile /bin/chmod 444 $lsfile

ntp

NTPも動かしておきます. ntp.sut.ac.jp と同期を取り,プライベートには NTPのブロードキャストをするという手抜き設定です.
broadcastclient yes driftfile /etc/ntp.drift server ntp.sut.ac.jp broadcast 10.255.255.255

ssh

Beta_Refresh にしたら,ssh もついてました. そっちを使うことにします.
SSH-1.99-Sun_SSH_1.0
というやつのようです.
鍵の共有等いろいろありましたが, 詳しくは こっちに書いてみました.

newsyslog

/usr/lib/newsyslog がださいので,BSD な newsyslog に入れ変えました.
Solaris 9 Release版では logadm というのになりました.
% gtar zxvf newsyslog-1.0.103.tar.gz % cd newsyslog-1.0.103 % ./configure --with-gzip --with-syslogd_pid=/var/run/syslog.pid --with-newsyslog_conf=/etc/newsyslog.conf % make SOELIM=gsoelim TBL=gtbl NROFF=gnroff % touch newsyslog.conf.5.html % touch newsyslog.8.html % make SOELIM=gsoelim TBL=gtbl NROFF=gnroff # make install # crontab -e #10 3 * * 0 /usr/lib/newsyslog 0 * * * * /usr/local/bin/newsyslog -i 60 # vi /etc/newsyslog.conf # # sample configuration file for newsyslog # # log_filename [owner:group] mode count kb hrs/at [flgs][/pid_file][sig] # | | | | | | | #/var/log/mail 644 30 * W0D0 Z0 #/var/log/mail.notice 644 30 * W0D0 Z0 /var/log/mail 644 30 100 * Z0 /var/log/mail.notice 644 30 100 * Z0 /var/adm/messages 644 30 100 * Z0 /var/adm/ipf 644 10 100 * Z0 /var/adm/pop 644 10 100 * Z0 /var/adm/dhcp 644 10 100 * Z0 /var/adm/adsl 644 10 100 * Z0 /var/adm/sudo 644 10 100 * Z0 /var/adm/kernel 644 10 100 * Z0 #/var/adm/cron 644 10 100 * Z0 #/var/cron/log 600 10 100 * Z0 /var/apache/logs/access_log 644 10 200 * Z0 /var/run/httpd.pid /var/apache/logs/error_log 644 10 200 * Z0 /var/run/httpd.pid /var/apache/logs/worm_log 644 10 200 * Z0 /var/run/httpd.pid
pid_file は一つだけ書けとありますが,サイズでrotateしたいので, とりあえずは無視.

groff と GNU make も必要でした.

apcupsd

apcupsdというのを 使って,APC の BK 500 を制御します.
% gtar zxvf apcupsd-3.8.5.tar.gz % cd apcupsd-3.8.5 % ./configure --with-serial-dev=/dev/ttyb % make # make install % vi /etc/opt/apcupsd/apcupsd.conf # ケーブルは自作します UPSCABLE simple # BK500 は backups UPSTYPE backups # /dev/ttya は シリアルコンソール用なので,ttyb を使う DEVICE /dev/ttyb # BK500 は MINUTES は使えません MINUTES -1 # MINUTES の代り.商用電源が落ちてから 300秒で shutdown TIMEOUT 300 # 一台しかつながないので off NETSERVER off # /etc/rc2.d/S89apcupsd start
BK500 にはケーブルが附属しているのですが,DB9 - DB9 な物なので, DB9 - DB25 なケーブルを自作しました.結線は apcupsd-?/doc/README.cable を 参考にして,下記のようにしました.
 PC            UPS
DB25           DB9
 4     -------  1 (黄)
 7     -------  4 (緑)
 8     -------  2 (青)
 frame -------  9 (銀)
色はごく個人的なメモなので気にしないでください.

附属していたケーブルは,940-0020C というもののようでしたが, README.cable の記述とはだいぶん違っているような…. まぁ,動いたんでいいんですが….

HDDの増設など - UFS スナップショットによるバックップ

元々,35GB のディスクを使っていたんですが,75GBのものを増設しました. 増設は halt して,ROMモニタから power-off します. 新たなディスクを刺して,

boot -r
とかやってください. もし面倒なら,rebootする前に
touch /reconfigure
としておくといいです.
あと,少しはまったこととしては,Sparc機では SCSI IDは自動的に 割り振られます.Ultra2 では奥側が ID=0 で,手前が ID=1 のようです.

余談
ノートパソコンが シリアルのないものになったので, シリアルコンソールなしで作業していました.reconfigureしたら boot diskを認識できなくなって,帰ってこなくなってあせりました. そうこうしていると, パーティションテーブルが壊れて,一時, どうしようもない状態になりました. ごちょごちょやって,なんとか復活しましたが, その間,一日半ぐらいはかなり欝でした….


ということで,こまめにバックアップをとることにしました.

余談
はじめ,Software RAID化することを検討したんですが, パーティションの切りなおしがどうにも面倒そうだったので,やめました.
Softwaer RAIDやりたい人は, とりあえず, ここここが 参考になると思います.

いちいち止めてからバックアップとるのも面倒なので, UFSスナップショットを使うことにしました. 詳細は Sunのドキュメント がわかりやすいです.
とりあえず,こんなスクリプトを 使ってバックアップをとっています.
注: そのままでは絶対に使えません.環境に合せて pathやマウントポイントを改変してください.

サルベージ - パーティションテーブルの修復

パーティションテーブル壊わしてしまいました.
結局,手でパーティションテーブルを修正しました.
基本原理は,一度マウントできてしまえば, df などで大まかなサイズは確認できるので, 次のパーティションの先頭シリンダ数を 適当に決めて,mount できれば当りという, ごく原始的な方法です.
先頭シリンダの探索は, 単純作業で,手でやるのは不毛なので, 簡単なスクリプト でごまかしました.
具体例ですが,まず,なんでもいいので,先頭パーティションをマウント します. 別マシンにつないでみます. わたしの場合は,完全につぶれていたようなので, 仮パーティションを上書きしました.
# format partition label quit quit
とりあえずマウントしてみると,大まかなブロック数が わかります.ただし,この値は 1ブロップ 1024byteとした ときのものなので,注意が必要です.
# mount /dev/dsk/c0t0d0s0 /mnt % df -k /mnt Filesystem 1k-blocks Used Available Use% Mounted on /dev/dsk/c0t0d0s0 492900 95565 348045 22% /
ブロクサイズは prtvtocで調べます. 1 block = 512 byteなので, /dev/dsk/c0t0d0s0 のブロック数は985800ぐらいとなります.
492900*1024/512 = 985800 blocks
普通シリンダ数単位でパーティションサイズを指定するので, この数字をシリンダ数になおします.
985800 / 2685 = 367.15 cylinder
実際には,もうちょっと大きい値になるので,368をスタートに 順番に探っていきます.

c.f. man newfs の -m のところ


ここで,先ほどスクリプトを使って,総あたりしていきます.
start=368
end=400
device=/devices/sbus\@1f,0/SUNW,fas\@e,8800000/sd\@0,0\:a,raw 
partition=/dev/dsk/c0t0d0s4
を適当に修正して,root で実行してください.
スクリプト中で,パーティションテーブルを書き変えているので, 必ず中身を理解してから使ってください.
これで見付かれば,順次,次のパーティションの先頭を探します.

Linuxの場合

PC-UNIXの場合は, fixdisktableGNU parted を 使うとパーティションテーブルの自動修復が可能です.
ext2 だと,fixdisktableや GNU parted,gpart などで修復可能なようですが, どうも ufsだとだめなようです.fixdisktableは core を吐きます.

参考になりそうな情報の得方.

Solaris9のインストール

Solaris9は ここから 持ってきます. 何台か入れる予定があったので,一度ファイルサーバに入れてからインストール してみました.
詳しいインストール方法は忘れてしまいましたが, 適当にやってたら入りました.

あと,もろもろ入れたもののリストも置いておきます.

Solaris9 Beta_Refreshへのアップグレード

Beta_Refresh が出ていたので,アップグレードしました. 既に Solaris9が入っているので,Live Upgradeでやろうと 思ったのですが,空いているパーティションがなかったので, CD から入れました. Live Upgrade でやろうと思う人は, ここが参考になるのではないでしょうか.
手順ですが,まず,CDを焼きます. ここから CD用のイメージを取ってきます.
sol-9-br-sparc-v1-a.zip
sol-9-br-sparc-v1-b.zip
sol-9-br-sparc-v1-c.zip
sol-9-br-sparc-v2.zip
sol-9-lang-br-sparc.zip
mkimages
以下のようにすると,
sh ./mkimages
*.isoができます.
なぜか,Linuxのマシンでやると,*.zip が corrupt だと言われてしまいました.
sol-9-br-sparc-v1.iso
sol-9-br-sparc-v2.iso
sol-9-lang-br-sparc.iso
あとは,xcdroastなりなんなりで,CD-Rに焼きます.

作業は,シリアルコンソールからやりました.1枚目のCDを入れて reboot します. 起動中にBreak信号を送って,ブートプロンプトに落し, boot cdrom します.あとは,インストーラに従って, 入力していくとインストールできます. 自分自身でDNSのサービスしていたので, インストール時はネームサービス を None にしましたが, 起動したら,以前の設定が保存されていました. 端末は xterm などを選ぶといいでしょう.
インストールが終ると,
/var/sadm/system/logs/upgrade_log
/var/sadm/system/data/upgrade_cleanup
を確認しろというメッセージと2枚目のCDを入れて, リブートするように指示されます. ここで,eject cdrom とかやってもCDを取り出せないので, 少しあせりますが,とりあえず1枚目のCDを入れたままでリブートします. ブート途中で,
{0} eject cdrom
{0} boot
して,CDを入れ換えます.2枚目のCDはbootableではないので, アップグレードした OS の方をそのまま起動します.
ネットワークの設定が不十分で, いろいろ文句を言われましたが,あんまり関係なかったです. ほおっておくと,勝手にインストールが進みます.
--- 25% ------ 50% 
とか出て,100%になると,Language CDを入れるように言われます. なしでもいいでしょう.
それも終わり,リブートすると,アップグレードは完了です.
SunOS sushi 5.9 Beta sun4u sparc SUNW,Ultra-2
SunOS sushi 5.9 Beta_Refresh sun4u sparc SUNW,Ultra-2
になりました.
あと,/usr/swf/bin/ の下はおもしろいです.
ncftp
ggrep
gtar
glib-config
gtk-config
tclsh8.3
smb*
wget
など入っています.

アップグレードすると,止めていたサービスが復活したので, 新ためてサービスを停止させます. /etc/rc?.d 以下は,/etc/init.d へのハードリンクなので, 単純に以下のファイルを消しました.
止めるサービス
/etc/rc2.d/S80lp
/etc/rc2.d/S85power
/etc/rc2.d/S90wbem
/etc/rc2.d/S94Wnn6
/etc/rc2.d/S95IIim
/etc/rc2.d/S99dtlogin
/etc/rc3.d/S76snmpdx
/etc/rc3.d/S77dmi
/etc/inetd.conf は,ほぼ全て止めています.
注: rpc.smserverdも止めたら,voldがちゃんと 動かなくなりました. CDが automount されないので,あせりました.

Solaris9 Releaseへのアップグレード

遅ればせながら,Relaese版に upgrade しました.(2002/07/26)
前回と同じく CD から入れました. 手順は,Beta から Beta_Refresh にしたと同じです. パッと見で,Beta_Refreshからの違いは,/usr/lib/newsyslog が /usr/sbin/logadm になった事でしょうか.あまり便利そうでもないので, やっぱり BSD の newsyslogを使う事にします.

あと,sshd が動かなくなりました.:(
どうも,/etc/hosts.allow を参照しているようです.
sshd: ALL
を追加しておきました.

Sun推奨セキュリティパッチもあてました. 112785-04.zip などを展開して,patchadd 112785-04 するだけです.

推奨パッチをあてる

Sun推奨セキュリティパッチのページは,日付の順番がばらばらで, わけがわかりません.
パッチの数が増えてくると,どのパッチをあてるべきで, 既にどのパッチをあてたのか調べるのは,大変面倒です.

そこで,これを使うと, 簡単に差分をとる事ができます.
% gunzip -c patch.tar.gz | tar xvf - % make % less result-*
生成された result-* を見てください.
INSTALLED PATCHES, UNINSTALLED RECOMMENDED PATCHES, UNINSTALLED SECURITY PATCHES, UNINSTALLED Y2K PATCHESの項目があります.
INSTALLED PATCHES Patch Installed Latest Synopsis ID Revision Revision ------ --------- -------- ------------------------------------------------------------ 112233 02 CURRENT SunOS 5.9: Kernel Patch 112617 01 CURRENT CDE 1.5: rpc.cmsd patch 112785 05 06 X11 6.6.1: Xsun patch 112808 02 03 OpenWindows 3.6.3: Tooltalk patch
INSTALLED でも,Installed Revision が Latest Revision よりも古い場合は, 新しい Revision のものを ここ から取ってきて,入れましょう.
たまに,ここからは取れない場合があるようなので, その場合は,直接 ftp://sunsolve.sun.com/pub/patches/ から 取りましょう.

もちろん,UNINSTALLED だと言われたパッチも入れましょう.

無線LAN

MELCOのAirStationを (WLA-L11G)
無線LANの基地局です.WLI-PCM-L11GPに合せて買いました. Windows用の設定ツールがついていますが,Web経由のみで設定可能です. ブリッジとして使っています. 有線LANからhttp://1.1.1.1 で設定できます.つながらなければ,
 
route add -host 1.1.1.1 eth0
とかやってみてください.

リンク