Solaris 2.4 システム管理 - スタンドアローン編

概要

この資料は Solaris 2.4 を主としたシステム設定を解説している。その範囲はスタン ドアーロン環境を前提としている。つまりサーバに依存しない、対象とするシステム 単独で動作可能な場合を想定している。
ネットワーク・サービスの設定は「ネットワーク編」を参照のこと。

なお本文中 Digital UNIX は DU と省略表記している。

  1. Boot 〜 shutdown
  2. ユーザ登録
  3. ディスク・メンテナンス
  4. バックアップとリストア
  5. ソフトウエアのインストール
  6. 自動起動
  7. システム・パラメータ
  8. その他

Boot 〜 shutdown

Solaris 2.4 のシステム起動手順は System V 系の Run-Level とよばれる手法を用い ている(これは OSF/1 も同じ)。
従って BSD のように、Single user mode → Multi user mode という2段階ではなく、 level 0 → S → 2 や 0 → S → 3 という具合に異なるシステム環境で動作させるこ とが可能となっている。ここでいうシステム環境とは、デーモンの設定を意味している。
たとえば Solaris の標準では、従来 Multi user mode と呼ばれていた段階が level 2 または 3 の何れかを選択できる。level 2 と level 3 の違いは、 NFS server として 動作するか、しないかである。

boot が開始されると level S (Single user mode) を経て level 2/3 に移行する。 最終的な level は /etc/inittab に定義されている。例えば以下のエントリは level 3 でシステムを起動することを意味している。
is:3:initdefault:
Run level が移行するたびに /etc/rcX にあるスクリプト群が実行される。 これについては、「自動起動」の項を参照のこと。
また現在の run-level は "who -r" にて確認できる。

	% who -r
	   .       run-level 3   5月 10 17:07     3      0  S
Solaris では Single user mode になると、root のパスワードが要求される。従来の ように Super user の password を忘れてしまうと、大抵の場合は手出しできなくなる ので注意が必要。

boot

boot は Power On Boot でなければ boot コンソールコマンドをもちいる。大抵の場合 は引き数なしでよいが、場合によっては boot device を指定しなくてはならない。
SPARC は非常に指定方法が煩わしいので、環境変数に設定しておくことが望ましい。

shutdown

シャットダウンは3種類の方法がある。システム推奨は System V 系の shutdown コマ ンドを利用することであるが、BSD や init でも問題はない。 各コマンドの引き数と、動作一覧
シャットダウンの一覧SVR4BSD init
システム停止(halt) -i0 -h 0
Single user mode へ -is なし s
Reboot -i6 -r 6
halt & 電源断 -i5 N/A 5
ただし電源断はH/Wに依存する。 ex.
        haltする場合    /usr/sbin/shutdown -g0 -i0
        reboot  〃      /usr/ucb/shutdown -r now
        Single user     /sbin/init s

□ ユーザ登録

Solaris ではデフォルトで C2-Security が組み込まれており、従来の passwd(4) から、 パスワード情報が分離され shadow(4) が追加されている。 従って、必ず専用の手順に従わないとユーザは作成できない。

登録に必要な情報と事前準備

ユーザ登録に際し事前に決定しておく必要があるのはおよそ以下の通り。GUI を利用し た登録方法の場合は、省略値を利用できるものもある。

コマンドラインによるユーザ登録

ユーザ追加用コマンド useradd(1m) を用いる。このコマンドは引き数が非常に多く、 またグループにGID(数値)を指定しなければならないため、操作に当たっては十分な 注意が必要である。
        /usr/sbin/useradd [-u uid [-o] | -g group | -G group[[,group]...] |
        -d dir | -s shell | -c comment | -m [-k skel_dir] | -f inactive |
        -e expire ] login
よく使うオプションを以下に解説する。 useradd では passwd の設定は行なわれないため、個別に shadow(4)を修正するか、 passwd(1) を使って設定する必要がある。省略時は最初の login 時に設定要求がある。
また、ユーザ情報の修正は usermod(1m)、削除は userdel(1m) による。 何れも詳しい内容については man page を参照のこと。
usermod -u uid [-o] | -g group | -G group[[,group]...] | -d dir [-m] |
        -s shell | -c comment | -l new_logname | -f inactive |
        -e expire login
※ Solaris 2.4 では、chfn, chsh が廃止になっており、全て usermod で行なう。 また、これらユーザ情報に関するコマンドは root 権限が必要。

GUI によるユーザ登録

GUI によるシステム管理ツールは admintool (Solaris2.5 では solstice) である。 最初にメニュー画面が表示されるので、User account .. を選択する。 あとはネーム・サービスの種類を設定

パスワード変更

passwd(4) を直接編集してパスワード部分を修正する場合は vipw によって以下の手 順が必要。
  1. passwd(4) を修正。パスワード部分の削除( :x: を :: にする)。
  2. share(4) のパスワード部分を削除。
  3. pwconv(1m)
パスワードを「なし」に場合は、最初のlogin 時にユーザに対して、パスワード設定 の要求がある。
パスワードは 6 文字以上、2つ以上の英字と1つ以上の数字または特種文字を含む 必要がある。ただし root がパスワードの付け替えを行なう場合は、この限りではな い。

ディスク・メンテナンス

Solaris で使用できるファイルシステムは UFS, NFS, proc-fs, swap-fs, TFS, hsfs, pcfs が使用可能で Solaris 1.x であった RFS は廃止されている。 この項では UFS を対象としている。NFS は「ネットワーク編」参照のこと。 ディスクを接続する手順は、以下の通り

デバイスの追加

ディスクを追加し、ファイルシステムの構築を行なう。 デバイスが接続されているかどうかは probe-scsi コンソールコマンドで確認できる。
	ok probe-scsi
また SCSI-ID はデバイスの種類に応じて予約されており、これ以外を使用すると不 都合が生じる(なんらかのプログラムが動作不良?)場合がある。
        0 - 3   : Disk (3 は内蔵)
        4, 5    : Tape
        6       : CD-ROM
デバイス接続が確認されたら、構成変更モード(-r 付き boot コマンド)でシステム をブートする。これはコンフィグレーションがダイナミックに変更できるようになっ たためで、デバイスの追加についてはカーネルの再構築は不要となった。

このとき /dev/, /devices/ が再作成され、関連ドライバーもインストールされる。 Solaris のデバイスファイルは非常に長い名前になっている。

                block device)   /dev/dsk/c0t3d0s0
                char. device)   /dev/rdsk/c0t3d0s0

この名前にはそれぞれ2桁づつ区切って意味がある。 なおこのファイル名は従来の UNIX との互換の為に作られたリンク名であり、 実際には以下の様にバス名を含む非常に長い名称となっている。
/devices/iommu@f,e0000000/sbus@f,e0001000/espdma@f,400000/esp@f,800000/sd@3,0:a

パーティション変更

スライス情報の変更は format(1m) により行なう。なお format では従来通りのパー ティションという用語になっているため混乱しないように。 format(1m) はメニュー形式で処理できるため詳しい説明は省略する。

システム省略値は従来と同様で、以下の通り
スライスディレクトリ
s0/
s1swap
s2(ディスク全体)
s3未使用
s4未使用
s5/opt
s6/usr
s7/export/home

フォーマット

newfs(1m) コマンドは従来通り使用可能。
        # /usr/sbin/newfs /dev/rdsk/c0t3d0s3

newfs により lost+found が作成される。但し Digital UNIX のような mklost+found
はないため、誤って削除すると作成に手間がかかる。
DU の mklost+found はスクリプトであるため、これを流用することも出来る。

また minfree の値を 0 にする事が出来るようになった。 newfs の(-m)パラメータ でも指定できるが、既に使用を開始しているファイルシステムであれば tunefs を利 用する。

        # /usr/sbin/tunefs -m 0 /dev/rdsk/c0t3d0s3

マウント

まず手動でマウントし、確認できたら vfstab に記述する。 mount は mount(1m) により行なう。多くのファイルシステムをサポートするため、 ファイルシステム指定オプション(-F)がある。
        # mount -F ufs /dev/dsk/c0t3d0s3  /opt
動作確認ができたら、/etc/vfstab に記述する。vfstab では boot 時に自動的にマ ウントするかどうかの属性があるので、従来と同じようにマウントする場合は、この フィールドを yes にする。

vfstab(4) は空白(タブ)で区切られた7つフィールドからなる。以下に先頭から順を 追って解説する。

  • デバイス名1 ( device to mount )
    mount(1m) の引き数となるデバイス名
  • デバイス名2 ( device to fsck )
    fsck(1m) の引き数となるデバイス名。
    fsck に関係ない場合はハイフン(-)を指定
  • マウントポイント ( mount point )
    mount(1m) の引き数となるディレクトリ名
  • ファイルシステム形式 ( FS type )
    ufs, nfs, tmpfs, proc, fd, hsfs など。(man -k filesystem)
  • fsck 順序 (fsck pass)
    boot 時に fsck を行なう順序を指定する。
    fsck に関係ない場合はハイフン(-)を指定
  • boot 時マウント (mount at boot)
    boot 時に自動的にマウントする場合は yes を、そうでない場合は no を指定する。
    特に no は NFS の場合に効果的である。
  • mount オプション (mount options)
    mount(1m) に関するオプション。いくつもある場合はカンマ(,)で区切っ て指定する。また必要がない場合はハイフン(-)を指定。
vfstab にあるエントリ全てについて mount, umount を行なうには、専用のコマンド mountall, umountall を用いる。このコマンドは boot時 mount が yes の物につい てのみ有効である。
                # mountall -F nfs
                # umountall
また /etc/vfstab に記述することで、mount コマンドはより簡単に実行できるよう になる。
        # mount  /opt

mount 状況確認

mount 状況は引き数なしの mount で表示できる。
        # mount
        / on /dev/dsk/c0t3d0s0 read/write/setuid on Thu Feb 23 13:54:11 1995
        /usr on /dev/dsk/c0t3d0s6 read/write/setuid on Thu Feb 23 13:54:11 1995
この値は少々わずらわしいのでオプション(-p)の使用を薦める。なお、このオプショ ンは vfstab(4) の形式で出力されるため、手作業で mount したディスクを vfstab に記述する際には便利である。
        # mount -p
        /dev/dsk/c0t3d0s0 - / ufs - no rw,suid
        /dev/dsk/c0t3d0s6 - /usr ufs - no rw,suid

□ バックアップとリストア

dump/resotre は ufsdump/ufsrestore に置き代わっている。名称がかわっただけで、 その使い方は従来とかわらない。
また特定のファイルシステムを構成するデバイス表示コマンドがあるため、バックアッ プ・デバイスの確認が容易になった。
	# devnm /usr/ucb
	/dev/dsk/c0t3d0s6 /usr/ucb

	# ufsdump 0uf /dev/rmt/0hn  /dev/dsk/c0t3d0s6
なおテープ装置のデバイス名は以下のネーミング・ルールとなっている。(詳細は、 st(7) 参照のこと)
	/dev/rmt/<通番><密度><動作指定>
  • 通番
    通番はシステムに接続されているテープ装置全を通した通番で、0 から始ま る。一つしか接続されていない場合は 0 である。
  • 密度
    記録密度の値は H/W に依存するが、l,m,h,u の順に高くなる。
    • 1/2-inch SCSI Front loading Tape (9track Open Reel)
      /dev/rmt/0l 800BPI 20MB
      /dev/rmt/0m 1200BPI 40MB
      /dev/rmt/0h 6250BPI 150MB
    • 1/4-inch cartridge (QIC)
      /dev/rmt/0l QIC-11(1000BPI) 60MB
      /dev/rmt/0m QIC-24(1000BPI) 60MB
      /dev/rmt/0h QIC-150(1250BPI) 150MB
    • 8mm
      /dev/rmt/0l - 2.3GB
      /dev/rmt/0m - 5.0GB
  • 動作指定
    n - まき戻しを行なわない
    b - BSD 互換動作
また rdump/rrestore は廃止されたが、ufsdump/ufsrestore が拡張されているため、 そちらを使用すればいい。
	# ufsrestore if server:/dev/rmt1h

ソフトウエアのインストール

Solaris のソフトウエアはその製品によって、インストール方法、ライセンス管理 方法がマチマチである。
ここでは一般的に Sun が提供している方法を解説している。インストールにあたっ ては個々のソフトウエアに付属するドキュメントを参照すること(例えば C コンパ イラは install_tool 等の専用ユーティリティが付属している)。

Sun が提供するソフトウエアは機能毎にソフトウエア・パッケージと呼ばれる単位で 扱う(これは DU のサブセットに対応するものである)。さらに製品として複数のパッ ケージをまとめたクラスタも存在する。

インストール

インストールは pkgadd による。pkgadd はキットのディレクトリと、パッケージ名 を引き数とする。
        # /usr/sbin/pkgadd -d /cdrom/cdrom0/s0/Solaris_2.5 SUNWman
同様にデインストールは pkgrm による。
        # /usr/sbin/pkgrm SUNWman
pkgadd, pkgrm とも依存するパッケージをチェックする。これにより他から参照され ているパケージの誤削除の回避、インストールに際し不足したパッケージの表示が可 能となった。

インストール状況の確認

インストールされているパッケージは pkginfo により確認できる。
        % pkginfo
        system      JSatok7r       ATOK7 for Japanese Solaris, (Root)
        system      JSatok7u       ATOK7 for Japanese Solaris, (Usr)
        application SPJAabcc       C 3.0.1 Japanese AnswerBook
        application SPJAabins      3.0.1 Installation Japanese AnswerBook
                        :

またパッケージのインストール確認は pkgchk で行なう。
        % pkgchk -a JSatok7r    # インストール済みの場合なにも表示されない
        % pkgchk -a HOREHORE
        警告:  と関連するパス名がありません。
またインストールされたパッケージのインストール時の属性と現在の属性の比較も 可能。
        % pkgchk -a -p /tmp
            ERROR: /tmp
            グループ名  は実際には  です。
            所有者名  は実際には  です。


自動起動

BSD であった /etc/rc.local のように、システム起動時に実行するコマンド群は、 rc スクリプトと呼ばれ、Run Level に対応したディレクトリにスクリプトを置くこ とで制御している。
/etc/init.d にはスクリプト本体を置く。これを対応する rcX.d に特定のネーミン グ・ルールに従いリンクする。DU は Symbolic link だが Solaris は伝統的に Hard link を使用している。

スクリプトの作成

スクリプトは /bin/sh で作成する。これは rc* を実行するシェルが Bone shell であるためと、Single user mode で動作可能なのはスタティック・リンクの /bin/sh だけであるため。

スクリプトは /etc/init.d の下に作成する。おおよそ他のスクリプトに似せて作成 すればよい。唯一の規則は引き数は1つで、start または stop が渡される。 スクリプトではこの引き数に従って、サービスを起動または停止させる。 一般的なパターンは以下のようになる。

        # /sbin/sh
        # コメント
              :
        case $1 in
        'start')
              起動処理
                ;;
        'stop')
              停止処理
                ;;
        esac

スクリプトの配置

作成したスクリプトを rcX.d に再配置する。ネーミング・ルールは以下の通りで、 スクリプト名は /etc/init.d のものと必ずしも一致していなくてもよい。但し、順序 番号が同じ場合は ASCII 順に早いものが先に実行される。
        <順序番号2桁>スクリプト名[.sh]
最初は K または S で始まる。S は Start の意味で、この Run level に上がってきた ときに start が引き数として渡される。K は Kill の略で、上位の Run level から 下がってきた時に stop が引き数として渡される。
順序番号はスクリプト起動のタイミングを図るために2桁の整数を指定する。 スクリプト名は一般に /etc/init.d にある、オリジナルのスクリプト名を指定する。 なお、.sh で終わるファイルは、ドット・コマンド(. C-shell の source ) で実行 されるため、注意が必要。 ex.
        % cat /etc/init.d/oracle7
        :
        #
        # Oracle DB start up
        #
        ORACLE_HOME=/Ora/oracle7
        export ORACLE_HOME
        PATH=$PATH:$ORACLE_HOME/bin
        export PATH

        case "$1" in
        'start') echo "Starting ORACLE7" >/dev/console
                        su - oracle -c "$ORACLE_HOME/bin/dbstart"
                                ;;
        'stop') echo "Stopping ORACLE7" >/dev/console
                        su - oracle -c "$ORACLE_HOME/bin/dbshut"
                                ;;
        esac

        % cd /etc/
        % ls -li init.d/oracle7
          666 -rwxr--r--   3 root   sys  330  3月 27日  18:41 init.d/oracle7*
        % find /etc/ -inum 666 -print
        /etc/init.d/oracle7
        /etc/rc3.d/S90oracle
        /etc/rc0.d/K40oracle
また、現在 Solaris 2.4 では以下のディレクトリが標準的に存在する。
        /etc/init.d     rc スクリプト本体
        /etc/rc0.d/     ← Shut down 時に参照
        /etc/rcS.d/     ← Single user 移行時に参照(boot/shutdown)
        /etc/rc1.d/     ←
        /etc/rc2.d/     ← Multi user. Network 使用なし
        /etc/rc3.d/     ←     〃 Network 使用


システム・パラメータ

ORACLE のように標準のカーネル環境ではリソースが不足して動かないアプリケーショ ンでは、動作前にシステム・リソースを追加しなけばならない。
これらは /etc/system ファイルに必要なパラメータを記述することで行なう。
例えば ORACLE では、以下のようなパラメータを追加し、システムをリブートする。
	Shared memory for Oracle7 +++++++++++++++++
	set shmsys:shminfo_shmmax=33554432
	set shmsys:shminfo_shmmni=80
	set shmsys:shminfo_shmseg=6
	set semsys:seminfo_semmns=200
	set semsys:seminfo_semmni=50
	set semsys:seminfo_semmsl=20
	Shared memory for Oracle7 -----------------

その他

man page

オンライン・マニュアルの whatis データー・ベースは標準で添付されないため、 man -k KEY_WORD が使用できない。ディスクに容量があるならば、catman コマンド を使用して、whatis を作成する。
	# echo $MANPATH
	/usr/share/man:/usr/openwin/share/man
	# catman -w
また各種プロダクトも個別に man page を持つが、これらの whatis もない場合が多 いので、適時作成する事が望ましい。

root のパスワードを忘れた

root のパスワードを忘れた場合の対処方法。
もし sysadmin(GID=14) グループに所属するユーザが login できるのであれば、そ のユーザで login し、 admintool で root のパスワードを変更する。

当該ユーザがいない場合は、

  1. CD-ROM から boot する。
  2. root(/) device を mount する
  3. /etc/passwd のパスワード欄を削除(:x: を :: にする)。
  4. /etc/shadow のパスワード欄を削除。
  5. reboot
  6. パスワードの再設定

SU

DU では root への su は system グループのメンバーに限定されているが、Solaris では su(1) コマンドの実行についての制限はない。 なお su 時の振るまい(PATH の設定など)は /etc/default/su にて設定可能