SPARC/Solaris 探検隊
第14回:Solarisを使ってみよう(前編) ~パッケージの仕組みとインストール~

2017年2月7日


 

第7回第8回では、Solarisのよさを簡単にお伝えしました。
今回は、もう少し詳しいSolarisのお話として、「Solarisのパッケージの仕組み」について、ご紹介したいと思います。

Solarisのパッケージって?

「パッケージ」とは基本的にソフトウェアのことを指しますが、その細かい意味合いは場合によって異なります。
一般的には量販店で販売されている、CDやDVD・マニュアルなどがまとめて箱に入ったものを指すことが多いのですが、ここでは、「Solarisが用意している標準ソフトウェア」のことを指します。
Solarisでは、ドライバ、ネットワークサービス、システム管理などの基本的なソフトウェアや、開発環境、ツールなどの特定の用途に使用するソフトウェアなど、さまざまなパッケージが用意されています。

Solarisのパッケージは、ネットワークでつながった「リポジトリサーバ」というサーバに用意されています。リポジトリサーバはOracle社がインターネット上に公開している「リリースリポジトリ」と、ユーザーが独自に構築した「ローカルリポジトリ」のどちらかまたは両方を使うことができます。


パッケージの仕組み

ワンポイント

リポジトリサーバのパッケージが格納されている領域を「リポジトリ」と呼びますが、リポジトリサーバそのもののことを単にリポジトリと呼ぶこともあります。

OSをインストールしたあとの初期状態では、基本的なパッケージのみがインストールされています。Solarisに限らず、サーバではインストールした直後のOSをそのまま使い続けることは少なく、そのサーバの用途やシステムに合わせて、パッケージを追加でインストールして使用します。

それでは、リポジトリにあるパッケージを確認したりインストールしたりするための機能や、その仕組みについてご紹介していきます。

パッケージをかんたんにインストール

パッケージインストールの前に

Solarisのパッケージは、ネットワーク経由でリポジトリサーバからインストールできます。
CDやDVDなどのメディアは必要ありません。
Solarisの操作は基本的にコマンドラインで実行します。操作によっては複雑な知識が必要になるときもあるのですが、パッケージの操作に関しては非常に簡単です。

Solarisのパッケージの操作は、「pkg」というコマンドで実行します。
pkgコマンドにはたくさんの機能(サブコマンド)がありますが、よく使う機能は限られていて、あまり多くのことを覚える必要はありません。

Step1:利用できるパッケージを確認する

まずは、リポジトリにあるパッケージを確認するため、pkg list -aコマンドを実行します。

# pkg list -a
NAME (PUBLISHER)                        VERSION                  IFO
OSOLvpanels-hypervisor                  0.5.11-0.151             --o
OSOLvpanels-mysql                       0.5.11-0.130             --o

~(省略)~
service/network/samba                   3.6.25-0.175.3.0.0.30.0  ---
service/network/sip/ser                 0.8.12-0.142             --o
service/network/sip/ser/administration  0.5.11-0.142             --o
service/network/slp                     0.5.11-0.175.3.0.0.30.0  i--
service/network/smtp/postfix            2.11.3-0.175.3.0.0.30.0  ---
service/network/smtp/sendmail           8.15.1-0.175.3.1.0.2.0   i-
~(省略)~

このようにパッケージの名前とバージョン、そしてIFOと呼ばれるフラグが一覧表示されます。

IFOについては、「一番左の部分にiが表示されているかどうか」だけを確認すれば十分です。一番左に「i」が表示されているものは既にインストールされているパッケージ、何も書かれていないものはまだインストールされていないパッケージを指します。

ちなみに、-aオプションをつけないと、既にインストールされているパッケージのみが表示されます。

Step2:パッケージのバージョンなどの情報を確認する

さて、この一覧から、パッケージを選んで、情報を取得してみます。
ここでは、「service/network/samba」パッケージに着目してみます。これは、UNIX/Linuxで最もよく使われる、ファイルサーバのフリーソフトウェアSambaのパッケージですね。
パッケージの情報取得には、pkg info -rコマンドを使用します。

# pkg info -r service/network/samba
          名前: service/network/samba
      サマリー: samba - A Windows SMB/CIFS fileserver for UNIX
      カテゴリ: System/File System
          状態: インストール済みでない
パブリッシャー: solaris
    バージョン: 3.6.25
ビルドリリース: 5.11
          分岐: 0.175.3.6.0.2.0
パッケージ化の日付: 2016年02月22日 16時56分28秒
        サイズ: 184.38 MB
          FMRI: pkg://solaris/service/network/samba@3.6.25,5.11-0.175.3.6.0.2.0:20160222T165628Z

このようにパッケージ名を指定して実行すると、そのパッケージのバージョンの詳細やインストールに必要なディスクの容量などの詳しい情報が表示されます。

Step3:パッケージをインストールする

それではこのパッケージをインストールしてみましょう。パッケージインストールには、pkg installコマンドを使用します。

# pkg install -v service/network/samba
  インストールするパッケージ:         2
            変更するサービス:         1
            推定使用可能容量:  43.98 GB
                推定消費容量: 607.29 MB
            ブート環境の作成: いいえ
バックアップブート環境の作成: いいえ
    ブートアーカイブの再構築: いいえ

変更されたパッケージ:
solaris
  service/network/samba
    None -##morethan## 3.6.25,5.11-0.175.3.0.0.30.0:20150821T172051Z
  system/library/iconv/unicode
    None -##morethan## 0.5.11,5.11-0.175.3.0.0.26.2:20150705T204702Z

サービス:
  restart_fmri:
    svc:/system/manifest-import:default

ダウンロード  パッケージ  ファイル  転送 (MB)    速度
完了          2/2         3038/3038 127.3/127.3  9.4M/s

フェーズ                                    項目
新しいアクションをインストールしています    3301/3301
パッケージ状態データベースを更新しています  完了
パッケージキャッシュを更新しています        0/0
イメージ状態を更新しています                完了
スピード検索データベースを作成しています    処理中
スピード検索データベースを作成しています    処理中
スピード検索データベースを作成しています    完了
パッケージキャッシュを更新しています        1/1

これで、パッケージのインストールが完了しました。
pkg listコマンドとpkg infoコマンドでパッケージの情報を取得して、pkg installコマンドでパッケージをインストールする、これが基本的な操作です。

GUIでインストール

パッケージは、実はSolarisのGUI環境でも、簡単にインストールできます。
SolarisのGUI環境ではこのような「パッケージマネージャー」と呼ばれる、パッケージの管理ソフトウェアを使用できます。
パッケージマネージャーによって、パッケージの検索・インストールなどがGUIで簡単に実行できます。

かんたんインストールの裏側をのぞいてみると

パッケージのインストールのために必要なパッケージ ~依存関係~

パッケージのインストールで非常にややこしいのが「依存関係」という概念です。
ほとんどのパッケージには、「そのパッケージをインストールするために必要なパッケージ」というものが存在します。このようなパッケージ間の関係を依存関係と呼びます。
例えば、「パッケージAをインストールするためには、パッケージBをインストールする必要がある」という場合、パッケージBはパッケージAの依存パッケージとなります。

依存関係にあるパッケージが少ない場合は、あまり大変ではありませんが、規模が大きくなってくるとパッケージをインストールするのが非常に大変になってきます。

「パッケージAのインストールにはパッケージBが必要」、さらに、「パッケージBのインストールにはパッケージCが必要」だったり、「パッケージCは、よそのパッケージDのインストールにも必要」だったり…リポジトリの中は、けっこう複雑なのです。


パッケージ間の複雑な関係…

必要なパッケージをそろえて並べる ~依存関係の解決~

「目当てのパッケージ(パッケージA)のインストールにはパッケージBが必要」、「パッケージBのインストールにはパッケージCが必要」という場合、A、B、Cの3つのパッケージをそろえたうえで、C→B→Aの順にインストールしていかなくてはいけません。
Solarisではこのようなややこしい「依存解決」をなんと自動で解決してくれます。

パッケージの依存関係が複雑になっていても、ユーザーは目当てのパッケージをインストールするコマンド(pkg install)を実行するだけで、自動でSolarisが依存パッケージを正しい順番でインストールしてくれます。


依存パッケージを集めて、順番に並べます

ここで、先ほどのSambaのパッケージをインストールしたときのログをもう一度見てみましょう。

# pkg install -v service/network/samba
  インストールするパッケージ:         2
~(省略)~

変更されたパッケージ:
solaris
  service/network/samba
    None -##morethan## 3.6.25,5.11-0.175.3.0.0.30.0:20150821T172051Z
  system/library/iconv/unicode
    None -##morethan## 0.5.11,5.11-0.175.3.0.0.26.2:20150705T204702Z
~(省略)~

「インストールするパッケージ: 2」と「system/library/iconv/unicode」に注目してください。
コマンドではSambaのパッケージをインストールするように指示していますが、自動でsystem/library/iconv/unicodeというパッケージ(文字コードの変換機能・コマンド)もインストールされています。
これはSolarisがパッケージの依存関係を自動で調査して、解決してくれていることを示しています。

では、それを確かめるために、Sambaパッケージの依存パッケージを調べてみましょう。
依存パッケージの確認にも、pkgコマンドを使用します。

# pkg contents -o fmri -t depend service/network/samba
FMRI
pkg:/library/file-monitor/gamin@0.1.10-0.175.3.0.0.26.0
pkg:/library/ncurses@5.7-0.175.3.0.0.29.1
pkg:/library/popt@1.7-0.175.3.0.0.29.1
pkg:/library/print/cups-libs@1.4.5-0.175.3.0.0.29.1
pkg:/library/readline@5.2-0.175.3.0.0.29.1
pkg:/library/samba/libsmbclient@3.5.8-0.175.3.0.0.29.1
pkg:/library/zlib@1.2.8-0.175.3.0.0.29.1
pkg:/runtime/perl-512@5.12.5-0.175.3.0.0.29.1
pkg:/service/security/kerberos-5@0.5.11-0.175.3.0.0.29.1
pkg:/shell/ksh93@93.21.0.20110208-0.175.3.0.0.29.1
pkg:/system/core-os@0.5.11-0.175.3.0.0.29.1
pkg:/system/library/iconv/unicode
pkg:/system/library/security/crypto@0.5.11-0.175.3.0.0.29.1
pkg:/system/library/security/gss@0.5.11-0.175.3.0.0.29.1
pkg:/system/library@0.5.11-0.175.3.0.0.29.1
pkg:/system/network/avahi@0.6.30-0.175.3.0.0.26.0
pkg:/system/network@0.5.11-0.175.3.0.0.29.1

細かいコマンドやオプションの説明は省略しますが、このようにして依存パッケージを一覧表示させることができます。また、GUIのパッケージマネージャーでも同様の一覧表示が可能です。ここで、先ほどSambaパッケージと自動でインストールされた「system/library/iconv/unicode」が確認できます。

また、このiconvのパッケージにも同様に依存パッケージが存在します。

# pkg contents -o fmri -t depend system/library/iconv/unicode
FMRI
consolidation/l10n/l10n-incorporation
pkg:/system/library@0.5.11-0.175.3.0.0.23.1
system/library/iconv/unicode-core

Solarisはこのような非常に複雑な依存関係を自動で解決してくれるため、簡単にパッケージをインストールできます。

このようにSolarisにはパッケージを簡単に使える便利な仕組みがいくつかあります。
Solarisに詳しい方は以下の資料も参考にしてみてください。


応援メッセージはtwitterにて、ハッシュタグ #fjsparc  までお願いします。