package コマンドの命令を記述しています。
構文
package 構成ファイルには、 package コマンドによって、構成中の AFS クライアント・マシンのローカル・ディスクに作成または変更されるファイル・システム要素が定義されています。使用する構成ファイルを指定する場合には、-config または -fullconfig 引き数を指定して、 package コマンドを使用してください。
構成ファイル内の命令の要約
構成ファイルの各行には、次の命令の 1 つ以上のインスタンスを記述することができます。このリストの後で、各命令の構文について詳しく説明します。
ブロックおよびキャラクター単位装置を定義する B および C 命令
package構成ファイルの B 命令は、ディスクなど、マルチバイト・コマンド・ブロック単位での入力を扱うブロック単位装置を定義します。 C 命令は、端末または tty など 1 文字単位での入力を扱うキャラクター単位装置を定義します。これらの命令の構文は同じです。
{B | C} device_name major_device minor_device owner group mode_bits
ここで、
package 構成ファイルの D 命令は、ローカル・ディスク上にディレクトリーを作成します。ローカル・ディスク上に同じ名前のシンボリック・リンク、ファイル、またはその他の要素がある場合、それはディレクトリーで置き換えられます。そのディレクトリーがすでに存在する場合、その所有者、グループ、およびモード・ビットは、命令に適合するよう必要に応じて変更されます。この命令の構文は、次のとおりです。
D[update_code] directory owner group mode_bits
ここで、
package 構成ファイルの F 命令は、指定されたソース・ファイルの内容をコピーして、ローカル・ディスク上のファイルを作成または更新します。このソース・ファイルは、AFS にある場合も、ローカル・ディスクにある場合もあります。 package コマンド・インタープリターがソース・ファイルにアクセスできないと、構成ファイル内でいずれの命令も実行せずに終了します。
同じ名前のファイルがディスクに存在する場合、I 更新コードが使用されていなければ、 package コマンドは、ソース・ファイルの内容で上書きします。ファイルの現行バージョンに .old 拡張子を追加する場合には、O 更新コードを指定してください。package プログラムの完了後、マシンを自動的にリブートさせる場合には、Q 更新コードを指定してください。
ローカル・ディスク上に同じ名前のシンボリック・リンク、ディレクトリー、またはその他の要素がある場合、それはファイルで置き換えられます (必要に応じて、ディレクトリーの内容が最初に削除されます)。
この命令の構文は、次のとおりです。
F[update_code] file source_file [owner group mode_bits]
ここで、
A 更新コードを指定する場合には、ソース・ファイルの完全なパス名を指定してください。そうでない場合には、package コマンドは、このパス名に file パス名を追加して、ソース・ファイルの完全名を生成します。たとえば、A 更新コードが指定されず、 /afs/abc.com/rs_aix42/bin/grep ファイルが /bin/grep バイナリーのソース・ファイルである場合、このフィールドに適切な値は、 /afs/abc.com/rs_aix42 になります。
ソース・ファイルの所有者をターゲット・ファイルにコピーする場合には、このフィールドを空のまま残してください。この場合、group および mode_bits フィールドも空にしてください。
ソース・ファイルのグループをターゲット・ファイルにコピーする場合には、このフィールドを空のまま残してください。この場合、owner および mode_bitsフィールドも空にしてください。
ソース・ファイルのモード・ビットをターゲット・ファイルにコピーする場合 には、このフィールドを空のまま残してください。この場合、owner および group フィールドは空にしてください。
package 構成ファイルの L 命令は、AFS またはローカル・ディスク上の別の場所にあるディレクトリーまたはファイルを指すシンボリック・リンクをローカル・ディスク上に作成します。標準 UNIX の ln -s コマンドの場合と同様に、このリンクは、実際のファイルまたはディレクトリーが存在しなくても作成されます。
ローカル・ディスク上に同じ名前のファイルまたはディレクトリーがある場合、 package コマンドは、シンボリック・リンクで置換します。
この命令の構文は、次のとおりです。
L[update_code] link actual_path [owner group mode_bits]
ここで、
package コマンド・インタープリターは、./ (ピリオド、スラッシュ) または ../ (ピリオド 2 つ、スラッシュ) 表記で始まるパス名は、package コマンドが呼び出される現行作業ディレクトリーを基準として解釈し、正しく処理します。
シンボリック・リンクの所有者として package コマンドの発行側 (通常は、ローカル・スーパーユーザー root) を指定する場合には、このフィールドを空のままにしてください。この場合、group および mode_bits フィールドも空にしてください。
シンボリック・リンクのグループを package コマンドの発行側に関連したデフォルト・グループと一致させる場合には、このフィールドを空のままにしてください。通常、コマンドの発行側はローカル・スーパーユーザー root で、デフォルト・グループは、ローカルの /etc/passwd ファイルまたは同等のファイルにある発行側の項目で決まります。このフィールドが空のままの場合は、owner と mode_bits フィールドも空にしなければなりません。
このフィールドを空にすると、シンボリック・リンクのモード・ビットは 777 (rwxrwxrwx) に設定されます。この場合、owner および group フィールドは空にしてください。
package 構成ファイルの S 命令は、ローカル・ディスク上に (UDP または TCP/IP 接続の通信装置となる) ソケットを作成します。この命令の構文は、次のとおりです。
S socket [owner group mode_bits]
ここで、
ソケットの所有者として package コマンドの発行側 (通常は、ローカル・スーパーユーザー root です) を指定する場合には、このフィールドを空にしてください。この場合、group および mode_bits フィールドも空にしてください。
シンボリック・リンクのグループを package コマンドの発行側に関連したデフォルト・グループと一致させる場合には、このフィールドを空のままにしてください。通常、コマンドの発行側はローカル・スーパーユーザー root で、デフォルト・グループは、ローカルの /etc/passwd ファイルまたは同等のファイルにある発行側の項目で決まります。このフィールドが空のままの場合は、owner と mode_bits フィールドも空にしなければなりません。
このフィールドを空にすると、シンボリック・リンクのモード・ビットは、セルの umask で調整され、777 (rwxrwxrwx) に設定されます。この場合、owner および group フィールドは空にしてください。
定義を宣言する、あるいは宣言しない %define または %undef 命令
package 構成ファイルの %define 命令は、引き数の数に応じて変数を宣言または定義します。
%undef ステートメントは、引き数を未定義として宣言するか、変数の場合には変数の値を無効と宣言して、直前の %define ステートメントの結果を否定します。
この 2 つの命令の構文は、次のとおりです。
%define declaration %define variable value %undef declaration %undef variable
ここで、
実行する条件付きアクションを指定する %ifdef および %ifndef 命令
package 構成ファイルの %ifdef 命令は、指示された文字列が単一の引き数の %define ステートメントで宣言されているか、または 2 つの引き数を取る %define ステートメントで定義されている値の変数である場合に実行する 1 つ以上のアクションを指定します。
同様に、%ifndef 命令は、指定された文字列がまだ宣言されていないか、あるいは %define ステートメントで定義されていないか、 %undef ステートメントで未定義にされたために値を持たない変数である場合に実行する 1 つ以上のアクションを指定します。
いずれの場合も、オプションの %else ステートメントを使用して、最初のステートメントが false と評価された場合に実行する 1 つ以上の代替アクションを指定することができます。 (%ifdef ステートメントの場合、指定された文字列が宣言されていなかったり、値を持たない変数か、あるいは %undef ステートメントでいずれかが未定義にされると、%else ステートメントが実行されます。 %ifndef ステートメントの場合には、文字列が宣言されるか、または値を持つ変数の場合に実行されます。)
%ifdef および %ifndef ステートメントは、いくつかネストすることができます。
この 2 つのステートメントの構文は共通です。これらの構文は次のとおりです。
%ifdef | ifndef declaration action+ [%else [declaration] alternate_action+] %endif declaration
ここで、
package 構成ファイルの %include 命令は、 %include 命令のあるプロトタイプ・ファイルのコンパイル後に、指定されたライブラリー・ファイルの内容を構成ファイルに組み込みます。この命令の構文は、次のとおりです。
%include pathname
ここで、
注意
構成ファイルは、完全に正しくなければなりません。何らかの構文エラーまたは誤った値がある場合は、 package コマンド・インタープリターは、いずれの命令も実行せずに終了します。
例
次の例では、B および C 命令により、メジャーおよびマイナー装置番号がそれぞれ 1 および 0 で、モード・ビットが、-rw-r--r-- のディスク /dev/hd0a と、メジャーおよびマイナー装置番号がそれぞれ 6 および 5 で、モード・ビットが -rw-rw-rwの tty /dev/ttyp5 を定義しています。いずれの場合も、所有者は root で、所有グループは wheel です。
B /dev/hd0a 1 0 root wheel 644 C /dev/ttyp5 6 5 root wheel 666
次の例では、D 命令により、所有者 root、グループ wheel、モード・ビットが drwxr-xr-x のローカル /usr ディレクトリーを作成しています。 R 更新コードにより、構成ファイルにはなく、/usr ディレクトリーに存在するファイルおよびサブディレクトリー (もしあれば) を削除しています。
DR /usr root wheel 755
次の例は、ABC Corporation セルで AIX 4.2 を実行するマシンに適切な F 命令により、/afs/abc.com/rs_aix42/bin/grep をソースとして使用し、ローカル・ディスク・ファイル /bin/grep を作成または更新しています。
F /bin/grep /afs/abc.com/rs_aix42 root wheel 755
次の例では、F 命令により、/usr/vice/etc/ThisCellファイルを作成しています。ここでは、A 更新コードの指定に従って、ソース・ファイルに絶対パス名を指定しています。Q コードで、package コマンドが終了時に状況コード 4 を戻すように設定しています。これは、マシンの AFS 初期設定ファイルに、標準の package に関連した変更が行われると、マシンのリブートを要求します。所有者、グループおよびモード・ビットの値は指定していません。これらは、ソース・ファイルから継承されます。
FAQ /usr/vice/etc/ThisCell /afs/abc.com/common/etc/ThisCell
次の例では、ABC Corporation セルで AIX 4.2 を実行するマシンに適切な L 命令により、ローカル・ディスク上の /etc/ftpd からファイル /afs/abc.com/rs_aix42/etc/ftpd へのシンボリック・リンクを作成しています。
L /etc/ftpd /afs/abc.com/rs_aix42 root wheel 644
次の例では、S 命令でソケット /dev/printer を定義しています。
S /dev/printer root wheel 777
次の例では、%define 命令で変数 ${diskmode} に値を定義しています。この変数は、D、F、または L 命令の owner_name、group_name、および mode_bits フィールドを埋めるために、テンプレートで使用されます。
%define diskmode root wheel 644
次の例では、%undef 命令により、未定義の文字列 afsd を宣言しています。
%undef afsd
次の例では、%ifdef 命令により、文字列 rs_aix42 が宣言されたら、命令を含むプロトタイプ・ファイルのコンパイル時に指定された 3 つのライブラリー・ファイルを組み込むように指定しています。代替アクションは定義されていません。プロトタイプ・ファイルの先頭のほうに、rs_aix42 を宣言し、${wsadmin} 変数に値を割り当てる %define ステートメントが必要です。
%ifdef rs_aix42 %include ${wsadmin}/lib/rs_aix42.readonly %include ${wsadmin}/lib/rs_aix42.generic %include ${wsadmin}/lib/rs_aix42.generic.dev %endif rs_aix42
次の例では、State University セルに適切な %ifndef 命令により、${cell} 変数の値として stateu.edu を定義しています。
%ifndef cell %define cell stateu.edu %endif cell
次の例では、%include 命令で、package に関連したファイルが常駐するディレクトリーの lib サブディレクトリーからライブラリー・ファイル base.generic を組み込んでいます。コンパイル時に、${wsadmin} 変数は実際のパス名 (/afs/abc.com/wsadmin など)に解決されます。
%include ${wsadmin}/lib/base.generic
関連情報