Trouble Shooting Record (Solaris 関連)


1. crontab -e で編集できない [解決]

環境

Solaris 2.5.1

現象

リモートログインして crontab -e を実行しても、端末上に 688 と表示されるだけで、 編集することが出来ない。

解決方法

デフォルトでは、GUI なエディタが起動するのが原因 (よってコンソール on X11 の場合は問題なし) 。 X クライアントが動作できるようにする (xhost & DISPLAY 環境変数の設定) か、 EDITOR 環境変数に端末上で動作するエディタを指定する。
(例: bash の場合)
$ export EDITOR=vi
[ 先頭 | 末尾 | 戻る | トップページに戻る ]

2. OpenSSL/OpenSSH アップデート時に 「重大なエラー: libcrypto.so.0: open に失敗しました」 [解決]

環境

Solaris 8
OpenSSL 0.9.6a
OpenSSH 2.9p1

現象

OpenSSL-0.9.6 (Sunfreeware.com から 取って来たパッケージ) と OpenSSH-2.5.2p2 (自作パッケージ) をインストールした 状態から、OpenSSL-0.9.6a/OpenSSH-2.9p1 (共に自作パッケージ) にアップデート したところ、新パッケージの sshd 起動時に以下のエラー。
# pkgrm <旧 OpenSSL パッケージ>
# pkgadd -d <旧 OpenSSL パッケージ>
# pkgrm <旧 OpenSSH パッケージ>
# pkgadd -d  <旧 OpenSSH パッケージ>
(snip)
/usr/local/man/man1/ssh.1
/usr/local/man/man8/sftp-server.8
/usr/local/man/man8/sshd.8
/usr/local/sbin/sshd
[ クラス  を検査しています ]
## postinstall スクリプトを実行中です。
/usr/local/etc/ssh_host_key already exists, skipping.
/usr/local/etc/ssh_host_dsa_key already exists, skipping.
/usr/local/etc/ssh_host_rsa_key already exists, skipping.
ld.so.1: /usr/local/sbin/sshd: 重大なエラー: libcrypto.so.0: open に失敗しました
: ファイルもディレクトリもありません。
Killed

 のインストールに成功しました。

調べてみると確かに libcrypt.so.0 は存在しない。 ldd sshd してみると /usr/local/ssl/lib/libcrypt.so.0 を要求している。 うーむ。なんでないのだ? っつーか、新しくコンパイルした OpenSSL では lib*.so.* なんて作ってない。でもバイナリは libcrypt.so.0 を要求している。 何故...?

解決方法

新しく作った OpenSSH パッケージのコンパイル時点では Sunfreeware.com から 持って来た OpenSSL パッケージが入った状態であり、こいつに libcrypt.so.0 が 含まれていたのが原因。コンパイル時にリンクしていた libcrypt.so.0 は OpenSSL のアップデートで消えてしまったという訳。

解決方法としては「libcrypt.so.0 を作る」だが、 ここでは安易 (?) な方法として OpenSSL がアップデートされた状態で、 つまり libcrypt.so.0 がなく libcrypt.a しかない状態で、再度 OpenSSH の コンパイルからやり直せば問題解決。
[ 先頭 | 末尾 | 戻る | トップページに戻る ]

3. syslog が記録されない [解決]

環境

Solaris 8
OpenSSH 2.9p2

現象

ある日、ふと気付くと syslogd に SSH のログが記録されなくなっているのに気付いた。よく調べると他にも記録されなく なっているログがいくつかある。syslogd を再起動しても現象変わらず。
/etc/syslogd.conf は以下の通り (関連部分のみ引用) 。
auth.*;local2.*                             /var/log/auth.log
mail.*                                      /var/log/mail.log
daemon.*                                    /var/log/daemon.log
cron.*                                      /var/log/cron.log

解決方法

syslogd を -d オプションを付けて起動してみると原因判明。
# /usr/sbin/syslogd -t -d
getnets() found 1 addresses, they are: ::.2.2
getnets() found 1 addresses, they are: 0.0.0.0.2.2
amiloghost() testing xxx.xxx.xxx.xxx.2.2
I am loghost
cfline(*.err;kern.notice;auth.notice                            /dev/sysmsg)
cfline(*.debug;auth.none;mail.none;daemon.none;cron.none;local2.none    /var/log
/messages)
cfline(*.alert;kern.err;daemon.err                      operator)
cfline(*.alert                                          root)
cfline(*.emerg                                          *)
cfline(auth.*;local2.*                                  /var/log/auth.log)
syslogd: line 21: unknown priority name "*"
cfline(mail.*                                           /var/log/mail.log)
syslogd: line 22: unknown priority name "*"
cfline(daemon.*                                 /var/log/daemon.log)
syslogd: line 23: unknown priority name "*"
cfline(cron.*                                           /var/log/cron.log)
syslogd: line 24: unknown priority name "*"

  syslogd: version 1.84
  Started: Thu Aug  2 10:56:23 2001
Input message count: system 0, network 0
# Outputs: 10

そういえば先日、SEVERITY を debug から * に変更しただわ。(^^; むぅ。Solaris syslogd では SEVERITY に * は使えないのね〜。 Linux で使えるものだから、すぐに原因に気付かなかっただわ。
とゆー訳で、以下のように SEVERITY を debug に変更すれば OK 。
auth.debug;local2.debug                         /var/log/auth.log
mail.debug                                      /var/log/mail.log
daemon.debug                                    /var/log/daemon.log
cron.debug                                      /var/log/cron.log
[ 先頭 | 末尾 | 戻る | トップページに戻る ]

4. パッケージ作成時に "パッケージの省略形 が正しくありません" [回避]

環境

Solaris 8

現象

Solaris パッケージ作成時に次のエラーが発生。
# pkgmk -o -r . -d . -f nullmailer_prototype
## prototype ファイルから pkgmap を作成中です。
## pkginfo ファイルを処理中です。
pkgmk: エラー:パッケージの省略形  が正しくありません。
## パッケージ処理に失敗しました。

解決方法

どうやら prototype ファイルの PKG 名に "null" が含まれるのがダメらしい。 他の文字列に変更して解決。
PKG="nullmailer"
     ~~~~ これがダメらしい
[ 先頭 | 末尾 | 戻る | トップページに戻る ]

5. SMCbash で CTRL+C が効かない [回避]

環境

Solaris 8
SMCbash 3.0 (bash version 3.00.0(2))

現象

bash に sunfreeware からダウンロードした SMCbash (bash-3.0-sol8-sparc-local.gz) をインストールした環境で、何故か login shell においてのみ CTRL+C が効かない。
bash のバージョンはこんな感じ。
$ bash --version
GNU bash, version 3.00.0(2)-release (sparc-sun-solaris2.8)

$ pkginfo -l SMCbash
   PKGINST:  SMCbash
      NAME:  bash
  CATEGORY:  application
      ARCH:  sparc
   VERSION:  3.0
   BASEDIR:  /usr/local
    VENDOR:  FSF
    PSTAMP:  Steve Christensen
  INSTDATE:  11月 28 2005 14:22
     EMAIL:  steve@smc.vnet.net
    STATUS:  完全にインストールされました。
     FILES:      261 installed pathnames
                   5 shared pathnames
                  22 directories
                  21 executables
               16794 blocks used (approx)

調べてみると、/etc/profile で一時的に SIGINT, SIGQUIT を無効にした後、 最後に 'trap 2 3' で元に戻す処理があるが、何故か SMCbind 3.0 ではこれが効かない。
$ trap
$ trap "" 2 3
$ trap
trap -- '' SIGINT
trap -- '' SIGQUIT
$ trap 2 3
$ trap
trap -- '' SIGINT    <--- 元に戻っていない
trap -- '2' SIGQUIT  <--- 元に戻っていない

上述のように SIGINT, SIGQUIT の設定が元に戻っておらず、SIGQUIT については '2' という訳のわからない設定になっている。 他の環境ではこう。
$ trap
$ trap "" 2 3
$ trap
trap -- '' SIGINT
trap -- '' SIGQUIT
$ trap 2 3
$ trap               <--- ちゃんと元に戻っている

解決方法

原因不明だが、SMCbash 3.0 固有の問題っぽい。 とりあえず暫定回避策として .bash_profile に次のエントリを追加すれば OK.
trap 2
trap 3
[ 先頭 | 末尾 | 戻る | トップページに戻る ]

6. SMClogr (logrotate) で圧縮に失敗する [解決]

環境

Solaris 10
SMClogr 3.7.1 (logrotate) SUNWgzip 1.10.0,REV=2005.01.08.05.16 (GNU zip)

現象

logrotate で圧縮の設定をしているにも関らずログファイルが圧縮されず、 root 宛に cron から次の内容のメールが届く。
error: failed to compress log /var/log/messages.1

解決方法

logrotate が圧縮コマンド (gzip) のパスをフルパスで覚えているのが原因。
$ strings /usr/local/sbin/logrotate | grep gzip
/usr/local/bin/gzip

これに対し、gzip は Solaris 10 付属の SUNWgzip (/usr/bin/gzip) を使っていたため、gzip を呼べなかったらしい。 SMCgzip (/usr/local/bin/gzip) に入れ換えれば OK。
やっぱりパッケージャの異なる複数のパッケージをインストールするのは トラブルの元ね...。(--;
[ 先頭 | 末尾 | 戻る | トップページに戻る ]