パッケージガイド
Red Hat Enterprise Linux の Software Collections をパッケージ化するガイド
概要
多様性を受け入れるオープンソースの強化 リンクのコピーリンクがクリップボードにコピーされました!
第1章 Software Collections の概要 リンクのコピーリンクがクリップボードにコピーされました!
1.1. RPM を使用したパッケージソフトウェアの理由 リンクのコピーリンクがクリップボードにコピーされました!
RPM を使用すると、以下が可能になります。
- パッケージのインストール、再インストール、削除、アップグレード、および検証。
- ユーザーは、標準のパッケージ管理ツール (Yum や PackageKit など) を使用して、RPM パッケージのインストール、再インストール、削除、アップグレード、および検証を行うことができます。
- インストール済みのパッケージのデータベースを使用した、パッケージのクエリーおよび検証。
- RPM はインストールしたパッケージとそのファイルのデータベースを維持するので、ユーザーは、システムのパッケージを簡単にクエリーし、検証することができます。
- メタデータを使用して、パッケージ、それらのインストール手順などを記述します。
- 各 RPM パッケージには、パッケージのコンポーネント、バージョン、リリース、サイズ、プロジェクト URL、インストール手順などを記述するメタデータが含まれています。
- ソースパッケージとバイナリーパッケージへの元のソフトウェアソースのパッケージ化
- RPM を使用すると、元のソフトウェアのソースを取得して、ユーザーのためにソースパッケージやバイナリーパッケージにパッケージ化することができます。ソースパッケージでは、使用しているパッチと、完全なビルド命令とともに、元のソースを使用できます。この設計により、新しいバージョンのソフトウェアがリリースされると、パッケージのメンテナンスが簡単になります。
- Yum リポジトリーへのパッケージの追加。
- Yum リポジトリーにパッケージを追加すると、クライアントがソフトウェアを見つけ、デプロイできるようになります。
- パッケージへのデジタル署名
- GPG 署名鍵を使用すると、パッケージにデジタル署名し、ユーザーがパッケージの信頼性を検証できるようになります。
1.2. Software Collections とは リンクのコピーリンクがクリップボードにコピーされました!
Software Collections
- システムファイルを上書きしない
- Software Collections は、複数のコンポーネントセットとして配布され、システムファイルを上書きせずに完全な機能を提供します。
- システムファイルとの競合を避けるように設計されています。
- Software Collections は、単一の Software Collection とベースシステムインストールの競合を避けるために、特別なファイルシステム階層を利用します。
- RPM パッケージマネージャーへの変更を必要としません。
- Software Collections では、ホストシステムに存在する RPM パッケージマネージャーを変更する必要はありません。
- spec ファイルへのマイナーな変更のみが必要
- 従来のパッケージを単一の Software Collection に変換するには、パッケージ spec ファイルにマイナーな変更を加えるだけで済みます。
- 1 つのスペックファイルで従来のパッケージと Software Collection パッケージを構築できるようにします。
- 従来のパッケージと Software Collection パッケージの両方を構築できます。
- 含まれるすべてのパッケージの一意に名前を付ける
- Software Collection の名前空間では、Software Collection に含まれるすべてのパッケージが一意に名前が付けられます。
- 更新されたパッケージと競合しないようにしてください。
- Software Collection の名前空間により、システムでパッケージを更新すると競合が発生することはありません。
- 他の Software Collections に依存
- 1 つの Software Collection は他のソフトウェアコレクションに依存する可能性があるため、複数の依存関係レベルを定義できます。
1.3. Software Collections のサポートの有効化 リンクのコピーリンクがクリップボードにコピーされました!
yum install scl-utils scl-utils-build
# yum install scl-utils scl-utils-build
Optional チャンネルを有効にして scl-utils-build パッケージをインストールする必要がある場合があります。
1.4. ソフトウェアコレクションのインストール リンクのコピーリンクがクリップボードにコピーされました!
software_collection_1 という名前のメタパッケージを使用して Software Collection をインストールするには、以下のコマンドを実行します。
yum install software_collection_1
# yum install software_collection_1
1.5. インストールされた Software Collections の一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
scl --list
scl --list
scl --list software_collection_1
scl --list software_collection_1
1.6. ソフトウェアコレクションの有効化 リンクのコピーリンクがクリップボードにコピーされました!
scl action software_collection_1 software_collection_2 command
scl action software_collection_1 software_collection_2 command
scl action software_collection_1 software_collection_2 'command --argument'
scl action software_collection_1 software_collection_2 'command --argument'
scl action software_collection_1 software_collection_2 -- command --argument
scl action software_collection_1 software_collection_2 -- command --argument
以下の点に留意してください。
- scl ツールを実行すると、現在のシェルの子プロセス (subshell) を作成します。コマンドを再度実行すると、サブシェルのサブシェルが作成されます。
- 現在のサブシェルの有効な Software Collections を一覧表示できます。詳細は、「有効な Software Collections の一覧表示」 を参照してください。
- 最初に有効な Software Collection を無効にして、再度有効にする必要があります。Software Collection を無効にするには、Software Collections を有効にする際に作成したサブシェルを終了します。
- scl ツールを使用して Software Collection を有効にする場合は、一度に有効な Software Collection で 1 つのアクションのみを実行できます。別のアクションを実行する前に、有効な Software Collection を無効にする必要があります。
1.6.1. アプリケーションの直接的な実行 リンクのコピーリンクがクリップボードにコピーされました!
--versions オプションで Perl を直接実行するには、次のコマンドを実行します。
scl enable software_collection_1 'perl --version'
scl enable software_collection_1 'perl --version'
1.6.2. 複数の Software Collections が有効になっているシェルの実行 リンクのコピーリンクがクリップボードにコピーされました!
scl enable software_collection_1 software_collection_2 bash
scl enable software_collection_1 software_collection_2 bash
1.6.3. ファイルに保存されたコマンドの実行 リンクのコピーリンクがクリップボードにコピーされました!
cat cmd | scl enable software_collection_1 -
cat cmd | scl enable software_collection_1 -
cmd ファイルに保存されているコマンドを実行します。
1.7. 有効な Software Collections の一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
$X_SCLS 環境変数を出力します。
echo $X_SCLS
echo $X_SCLS
1.8. Software Collections のアンインストール リンクのコピーリンクがクリップボードにコピーされました!
software_collection_1 という名前の Software Collection に含まれるパッケージおよびサブパッケージをすべてアンインストールするには、以下のコマンドを実行します。
yum remove software_collection_1\*
yum remove software_collection_1\*
第2章 Software Collections のパッケージ化 リンクのコピーリンクがクリップボードにコピーされました!
2.1. 独自のソフトウェアコレクションの作成 リンクのコピーリンクがクリップボードにコピーされました!
- 必要な Software Collections およびパッケージをすべて手動でインストールしてから、アプリケーションをデプロイする、または
- アプリケーションの新しい Software Collection を作成します。
アプリケーション用に新しい Software Collection を作成する場合:
- Software Collection メタパッケージの作成
- 各 Software Collection にはメタパッケージが含まれており、ユーザーは Software Collection で最も一般的なタスクを実行するために必要な Software Collection パッケージのサブセットをインストールします。メタパッケージの作成に関する詳細は、「メタパッケージ」 を参照してください。
- Software Collection の root ディレクトリーの場所を指定することを検討する
- Software Collection の spec ファイルに
%_scl_prefixマクロを設定して、Software Collection の root ディレクトリーの場所を指定することが推奨されます。詳細は、「Software Collection Root ディレクトリー」 を参照してください。 - Software Collection パッケージの名前の接頭辞付けを検討する
- Software Collection パッケージの名前の前には、ベンダーおよび Software Collection の名前を付けることが推奨されます。詳細は、「Software Collection 接頭辞」 を参照してください。
- アプリケーションに必要なすべての Software Collections およびその他のパッケージを依存関係として指定します。
- アプリケーションに必要なすべての Software Collections およびその他のパッケージが、Software Collection の依存関係として指定されていることを確認します。詳細は、「Software Collection を別の Software Collection に依存させる」 を参照してください。
- 既存の従来のパッケージを変換または新しい Software Collection パッケージの作成
- Software Collection パッケージの spec ファイルのすべてのマクロが条件を使用していることを確認します。既存パッケージの spec ファイルを変換する方法は、「従来の spec ファイルの変換」を参照してください。
- Software Collection の構築
- Software Collection のメタパッケージを作成し、Software Collection のパッケージを変換または作成したら、rpmbuild ユーティリティーを使用して Software Collection を構築できます。詳細は、「Software Collection の構築」 を参照してください。
2.2. ファイルシステム階層 リンクのコピーリンクがクリップボードにコピーされました!
/opt/ にあります。/opt/ ディレクトリーの使用は、ファイルシステム階層標準 (FHS) によって推奨されます。
図2.1 Software Collection File System 階層
2.3. Software Collection Root ディレクトリー リンクのコピーリンクがクリップボードにコピーされました!
%_scl_prefix マクロを設定して、root ディレクトリーの場所を変更できます。
%global _scl_prefix /opt/provider
%global _scl_prefix /opt/provider
/opt/provider/prefix-application-version/
/opt/provider/prefix-application-version/
_scl_prefix マクロの上に %scl_package マクロを定義する必要があります。
2.4. Software Collection 接頭辞 リンクのコピーリンクがクリップボードにコピーされました!
- provider の名前を定義するプロバイダーの部分
- Software Collection 自体の名前
-) で区切られています。
myorganization-ruby193
myorganization-ruby193
rh をプロバイダーの名前として使用します。以下に例を示します。
rh-ruby23
rh-ruby23
2.5. Software Collection パッケージ名 リンクのコピーリンクがクリップボードにコピーされました!
- 接頭 辞の部分 (「Software Collection 接頭辞」 を参照)
- Software Collection に含まれるアプリケーションの名前とバージョン番号。
-) で区切ります。
myorganization-ruby193-foreman-1.1
myorganization-ruby193-foreman-1.1
2.6. Software Collection スクリプトレット リンクのコピーリンクがクリップボードにコピーされました!
/opt/provider/software_collection/ ディレクトリーにあります。Software Collection に 1 つのスクリプトレットのみを配布する必要がある場合には、そのスクリプトレットの名前として enable を使用することが強く推奨されます。ユーザーが scl enable software_collection コマンド を実行して Software Collection 環境でコマンドを実行すると、/opt/provider/software_collection/enable スクリプトレットは検索パスの更新などに使用されます。
2.7. パッケージレイアウト リンクのコピーリンクがクリップボードにコピーされました!
2.7.1. メタパッケージ リンクのコピーリンクがクリップボードにコピーされました!
- メインパッケージ: %name
- Software Collection のメインパッケージには、Software Collection に含まれるベースパッケージの依存関係が含まれています。main パッケージにはファイルが含まれません。Software Collection のパッケージの依存関係を指定する場合は、Software Collection の他のパッケージがメインパッケージに依存していないことを確認してください。メインパッケージの目的は、ユーザーが Software Collection で最も一般的なタスクを実行するために必要なパッケージのみをインストールすることです。通常、メインパッケージはビルド時の依存関係 (たとえば、別の Software Collection のパッケージのビルド時間依存関係のみのパッケージ) を指定しないようにします。たとえば、Software Collection の名前が
myorganization-ruby193の場合、メインパッケージマクロは以下に展開されます。myorganization-ruby193
myorganization-ruby193Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ランタイムサブパッケージ: %name-runtime
- Software Collection の runtime サブパッケージは Software Collection のファイルシステムを所有し、Software Collection のスクリプトレットを配布します。ユーザーが Software Collection を使用できるようにするには、このパッケージをインストールする必要があります。たとえば、Software Collection の名前が
myorganization-ruby193の場合、ランタイムパッケージマクロは以下に展開されます。myorganization-ruby193-runtime
myorganization-ruby193-runtimeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ビルドサブパッケージ: %name-build
- Software Collection の build サブパッケージは、Software Collection のビルド設定を提供します。Software Collection にパッケージを構築するのに必要な RPM マクロが含まれます。build サブパッケージは任意で、Software Collection から除外できます。たとえば、Software Collection の名前が
myorganization-ruby193の場合、ビルドサブパッケージマクロは以下に展開されます。myorganization-ruby193-build
myorganization-ruby193-buildCopy to Clipboard Copied! Toggle word wrap Toggle overflow myorganization-ruby193-buildサブパッケージの内容を以下に示します。cat /etc/rpm/macros.ruby193-config %scl myorganization-ruby193
$ cat /etc/rpm/macros.ruby193-config %scl myorganization-ruby193Copy to Clipboard Copied! Toggle word wrap Toggle overflow - syspaths サブパッケージ: %name-syspaths
- Software Collection の syspaths サブパッケージは、便利なシェルラッパーとシンボリックリンクを標準パスにインストールして、ベースシステムのインストールを変更するオプションの方法を提供します。ただし、Software Collection パッケージでバイナリーファイルをより簡単に作成できます。たとえば、Software Collection の名前が
myorganization-ruby193の場合、syspaths パッケージマクロは以下に展開されます。myorganization-ruby193-syspaths
myorganization-ruby193-syspathsCopy to Clipboard Copied! Toggle word wrap Toggle overflow syspaths サブパッケージの詳細は、「syspaths サブパッケージの提供」を参照してください。 - scldevel サブパッケージ: %name-scldevel
- %name Software Collection の scldevel サブパッケージには開発ファイルが含まれています。このファイルは、%name Software Collection に依存する別の Software Collection のパッケージを開発する際に便利です。scldevel サブパッケージは任意で、%name Software Collection から除外できます。たとえば、Software Collection の名前が
myorganization-ruby193の場合、scldevel サブパッケージマクロは以下に展開されます。myorganization-ruby193-scldevel
myorganization-ruby193-scldevelCopy to Clipboard Copied! Toggle word wrap Toggle overflow scldevel サブパッケージの詳細は、「scldevel サブパッケージの提供」 を参照してください。
2.7.2. メタパッケージの作成 リンクのコピーリンクがクリップボードにコピーされました!
新しいメタパッケージを作成する場合は、以下を行います。
%scl_packageマクロの上に、メタパッケージ仕様ファイルの先頭に以下のマクロを定義します。scl_name_prefixSoftware Collection 名の接頭辞として使用するプロバイダーの名前を指定します (例: myorganization-)。これは_scl_prefixとは異なるもので、Software Collection の root を指定しますが、プロバイダーの名前も使用します。詳細は、「Software Collection 接頭辞」 を参照してください。scl_name_baseSoftware Collection のベース名を指定します (例: ruby)。scl_name_versionSoftware Collection のバージョンを指定します (例: 193)。
- 設定ファイルと状態ファイルの場所を変更して、NFS で Software Collection を使用できるようにする Software Collection マクロを定義する
nfsmountableことが推奨されます。詳細は、「NFS での Software Collections の使用」 を参照してください。 - Software Collection のランタイムに不可欠なすべてのパッケージをメタパッケージの依存関係として指定することを検討してください。これにより、Software Collection メタパッケージでパッケージがインストールされているようになります。
- build サブパッケージに
Requires: scl-utils-buildを追加することが推奨されます。 - メタパッケージで、Software Collection 固有のマクロに条件を使用する必要はありません。
- Software Collection のパッケージが
enableスクリプトレットで必要となる可能性があるパスの再定義を含めます。一般的に使用されるパスの再定義に関する情報は、「一般的に使用されるパスの再定義」 を参照してください。 - メタパッケージに
%prepセクションに %setup マクロが含まれていることを確認してください。そうしないと、Software Collection の構築に失敗します。%setupマクロで特定のオプションを使用する必要がない場合は、%setup -c -Tコマンドを%prepセクションに追加します。これは、%setup マクロが%buildsubdirディレクトリーを定義し、作成するためです。これは通常、ビルド時に一時ファイルを保存するために使用されます。Software Collection パッケージで %setup を定義しない場合は、%buildsubdirディレクトリー内のファイルは上書きされ、ビルドは失敗します。 - build サブパッケージの
macros.%{scl}-configファイルに使用するマクロを追加します。
メタパッケージの例
2.8. Software Collection マクロ リンクのコピーリンクがクリップボードにコピーされました!
scl は、Software Collection のファイル構造の再配置先を定義します。移動したファイル構造は、Software Collection 専用で使用されるファイルシステムです。
%scl_package マクロは、Software Collection のメタパッケージの所有者を定義し、Software Collection 環境で使用する追加のパッケージマクロを提供します。
%{?scl:macro} の説得時を Software Collection マクロに付けます。
%{?scl:Requires: %scl_runtime}
%{?scl:Requires: %scl_runtime}
%scl_runtime マクロは Requires タグの値です。マクロとタグの両方が %{?scl: 接頭辞を使用します。
2.8.1. Software Collection に固有のマクロ リンクのコピーリンクがクリップボードにコピーされました!
|
マクロ
|
詳細
|
値の例
|
|---|---|---|
%scl_name
|
Software Collection の名前
| software_collection_1
|
%scl_prefix
|
末尾にダッシュが追加された Software Collection の名前
| software_collection_1-
|
%pkg_name
|
元のパッケージの名前
| perl
|
%_scl_prefix
|
Software Collection の root (パッケージの root ではない)
| /opt/provider/
|
%_scl_scripts
|
Software Collection のスクリプトレットの場所
| /opt/provider/software_collection_1/
|
%_scl_root
|
パッケージのインストール root (install-root)
| /opt/provider/software_collection_1/root/
|
%scl_require_package software_collection_1 package_2
|
特定の Software Collection の特定のパッケージに依存します。
| software_collection_1-package_2
|
2.8.2. Software Collection に指定されていないマクロ リンクのコピーリンクがクリップボードにコピーされました!
_root を接頭辞として使用します。
|
マクロ
|
詳細
|
再配置
|
値の例
|
|---|---|---|---|
%_root_prefix
|
Software Collection の
%_prefix マクロ
|
いいえ
| /usr/
|
%_root_exec_prefix
|
Software Collection の
%_exec_prefix マクロ
|
いいえ
| /usr/
|
%_root_bindir
|
Software Collection の
%_bindir マクロ
|
いいえ
| /usr/bin/
|
%_root_sbindir
|
Software Collection の
%_sbindir マクロ
|
いいえ
| /usr/sbin/
|
%_root_datadir
|
Software Collection の
%_datadir マクロ
|
いいえ
| /usr/share/
|
%_root_sysconfdir
|
Software Collection の
%_sysconfdir マクロ
|
いいえ
| /etc/
|
%_root_libexecdir
|
Software Collection の
%_libexecdir マクロ
|
いいえ
| /usr/libexec/
|
%_root_sharedstatedir
|
Software Collection の
%_sharedstatedir マクロ
|
いいえ
| /usr/com/
|
%_root_localstatedir
|
Software Collection の
%_localstatedir マクロ
|
いいえ
| /usr/var/
|
%_root_includedir
|
Software Collection の
%_includedir マクロ
|
いいえ
| /usr/include/
|
%_root_infodir
|
Software Collection の
%_infodir マクロ
|
いいえ
| /usr/share/info/
|
%_root_mandir
|
Software Collection の
%_mandir マクロ
|
いいえ
| /usr/share/man/
|
%_root_initddir
|
Software Collection の
%_initddir マクロ
|
いいえ
| /etc/rc.d/init.d/
|
|
%
_root_libdir
|
Software Collection の
%_libdir マクロ (Software Collection のメタパッケージがプラットフォームに依存していない場合、このマクロは機能しません)
|
いいえ
| /usr/lib/
|
2.8.3. nfsmountable マクロ リンクのコピーリンクがクリップボードにコピーされました!
nfsmountable を使用すると、_sysconfdir、_sharedstatedir、および _localstatedir マクロの値を変更できるため、Software Collection が、状態ファイルと設定ファイルが、Software Collection の /opt ファイルシステム階層外に置かれます。これにより、NFS で Software Collection を使用する場合に、ファイルの管理が容易になり、必要になります。
nfsmountable の使用は任意ですが推奨されます。詳細は、「NFS での Software Collections の使用」 を参照してください。
2.9. 一般的に使用されるパスの再定義 リンクのコピーリンクがクリップボードにコピーされました!
enable スクリプトレットのパスを再定義するのに一般的に使用される環境変数の一覧を紹介します。また、Software Collection のファイルシステム階層内の Software Collection コンポーネントの場所を指定するためにも使用されます。
enable スクリプトレットでパスの再定義を指定する必要があるかどうかは、Software Collection に含まれるパッケージにより異なります。通常、環境変数は以下のパターンに従います。
$ENV_VAR=$SCL_ENV_VAR:$ENV_VAR
$ENV_VAR=$SCL_ENV_VAR:$ENV_VAR
2.9.1. 言語固有のパスの再定義 リンクのコピーリンクがクリップボードにコピーされました!
- GEM_PATH
GEM_PATH環境変数で Ruby gems の場所を指定します。したがって、rh-ruby23 Software Collection を拡張する Software Collections でも使用されます。詳細は、「rh-ruby23 Software Collection の拡張」 を参照してください。enableスクリプトレットに以下を追加して、環境変数を再定義します。export GEM_PATH="\${GEM_PATH:=%{gem_dir}:\`scl enable %{scl_ruby} -- ruby -e "print Gem.path.join(':')"\`}"export GEM_PATH="\${GEM_PATH:=%{gem_dir}:\`scl enable %{scl_ruby} -- ruby -e "print Gem.path.join(':')"\`}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - GOPATH
GOPATH環境変数で、Go ソースおよびバイナリーファイルの場所を指定します。enableスクリプトレットに以下を追加して、環境変数を再定義します。export GOPATH="%{gopath}\${GOPATH:+:\${GOPATH}}"export GOPATH="%{gopath}\${GOPATH:+:\${GOPATH}}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - JAVACONFDIRS
JAVACONFDIRS環境変数は、java.conf設定ファイルの場所を指定するために使用されます。enableスクリプトレットに以下を追加して、環境変数を再定義します。export JAVACONFDIRS="%{_sysconfdir}/java\${JAVACONFDIRS:+:}\${JAVACONFDIRS:-}"export JAVACONFDIRS="%{_sysconfdir}/java\${JAVACONFDIRS:+:}\${JAVACONFDIRS:-}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - PERL5LIB
PERL5LIB環境変数は、%{?_scl_root}接頭辞でインストールできるように、カスタム Perl モジュールの場所を指定するのに使用されます。enableスクリプトレットに以下を追加して、環境変数を再定義します。export PERL5LIB="%{_scl_root}%{perl_vendorlib}\${PERL5LIB:+:\${PERL5LIB}}"export PERL5LIB="%{_scl_root}%{perl_vendorlib}\${PERL5LIB:+:\${PERL5LIB}}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - PYTHONPATH
PYTHONPATH環境変数で、カスタム Python ライブラリーの場所を指定します。enableスクリプトレットに以下を追加して、環境変数を再定義します。export PYTHONPATH="%{_scl_root}%{python_sitearch}:%{_scl_root}%{python_sitelib}\${PYTHONPATH:+:}\${PYTHONPATH:-}"export PYTHONPATH="%{_scl_root}%{python_sitearch}:%{_scl_root}%{python_sitelib}\${PYTHONPATH:+:}\${PYTHONPATH:-}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.9.2. 他のパスの再定義 リンクのコピーリンクがクリップボードにコピーされました!
- CPATH
CPATH環境変数は、GCC コンパイラーが使用するパスを指定します。enableスクリプトレットに以下を追加して、環境変数を再定義します。export CPATH="%{_includedir}\${CPATH:+:\${CPATH}}"export CPATH="%{_includedir}\${CPATH:+:\${CPATH}}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - INFOPATH
INFOPATH環境変数は、Info ファイルが含まれるディレクトリーを指定します。enableスクリプトレットに以下を追加して、環境変数を再定義します。export INFOPATH="%{_infodir}\${INFOPATH:+:\${INFOPATH}}"export INFOPATH="%{_infodir}\${INFOPATH:+:\${INFOPATH}}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - LD_LIBRARY_PATH
LD_LIBRARY_PATH環境変数で、ライブラリーの場所を指定します。詳細は、「Software Collection Library のサポート」 を参照してください。enableスクリプトレットに以下を追加して、環境変数を再定義します。export LD_LIBRARY_PATH="%{_libdir}\${LD_LIBRARY_PATH:+:\${LD_LIBRARY_PATH}}"export LD_LIBRARY_PATH="%{_libdir}\${LD_LIBRARY_PATH:+:\${LD_LIBRARY_PATH}}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - LIBRARY_PATH
LIBRARY_PATH環境変数は、GCC が使用する特別なリンカーファイルまたは通常のライブラリーの場所を指定します。enableスクリプトレットに以下を追加して、環境変数を再定義します。export LIBRARY_PATH="%{_libdir}\${LIBRARY_PATH:+:\${LIBRARY_PATH}}"export LIBRARY_PATH="%{_libdir}\${LIBRARY_PATH:+:\${LIBRARY_PATH}}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - MANPATH
MANPATH環境変数で man ページの場所を指定します。詳細は、「Software Collection MANPATH サポート」 を参照してください。enableスクリプトレットに以下を追加して、環境変数を再定義します。export MANPATH="%{_mandir}:\${MANPATH:-}"export MANPATH="%{_mandir}:\${MANPATH:-}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - PATH
PATH環境変数で、バイナリーファイルの場所を指定します。enableスクリプトレットに以下を追加して、環境変数を再定義します。export PATH="%{_bindir}:%{_sbindir}\${PATH:+:\${PATH}}"export PATH="%{_bindir}:%{_sbindir}\${PATH:+:\${PATH}}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - PCP_DIR
PCP_DIR環境変数は、PCP が使用するファイルおよびディレクトリーの場所を指定します。enableスクリプトレットに以下を追加して、環境変数を再定義します。export PCP_DIR="%{_scl_root}"export PCP_DIR="%{_scl_root}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - PKG_CONFIG_PATH
PKG_CONFIG_PATH環境変数は、pkg-config プログラムによって使用される.pcファイルの場所を指定します。詳細は、「Software Collection .pc ファイルのサポート」 を参照してください。enableスクリプトレットに以下を追加して、環境変数を再定義します。export PKG_CONFIG_PATH="%{_libdir}/pkgconfig\${PKG_CONFIG_PATH:+:\${PKG_CONFIG_PATH}}"export PKG_CONFIG_PATH="%{_libdir}/pkgconfig\${PKG_CONFIG_PATH:+:\${PKG_CONFIG_PATH}}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - XDG_CONFIG_DIRS
XDG_CONFIG_DIRS環境変数は、freedesktop.org 仕様に従ってデスクトップ設定ファイルの場所を指定します。enableスクリプトレットに以下を追加して、環境変数を再定義します。export XDG_CONFIG_DIRS="%{_sysconfdir}/xdg:\${XDG_CONFIG_DIRS:-/etc/xdg}"export XDG_CONFIG_DIRS="%{_sysconfdir}/xdg:\${XDG_CONFIG_DIRS:-/etc/xdg}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - XDG_DATA_DIRS
XDG_DATA_DIRS環境変数は、freedesktop.org 仕様に従ってデスクトップデータファイルの場所を指定します。Software Collections によっては、Software Collections 固有のスクリプトを検索したり、bash の完了を有効にしたりするために使用されます。enableスクリプトレットに以下を追加して、環境変数を再定義します。export XDG_DATA_DIRS="%{_datadir}:\${XDG_DATA_DIRS:-/usr/local/share:%{_root_datadir}}"export XDG_DATA_DIRS="%{_datadir}:\${XDG_DATA_DIRS:-/usr/local/share:%{_root_datadir}}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.10. 従来の spec ファイルの変換 リンクのコピーリンクがクリップボードにコピーされました!
2.10.1. 変換スペックファイルの例 リンクのコピーリンクがクリップボードにコピーされました!
2.10.2. タグおよびマクロ定義の変換 リンクのコピーリンクがクリップボードにコピーされました!
手順2.1 タグおよびマクロ定義の変換
%_scl_prefixの上に%scl_package macroマクロを定義することで、root ディレクトリーの場所を変更できます。%{?scl:%global _scl_prefix /opt/provider}%{?scl:%global _scl_prefix /opt/provider}Copy to Clipboard Copied! Toggle word wrap Toggle overflow %scl_packageマクロを spec ファイルに追加します。次のように、スペックファイルのプリアンブルの前にマクロを配置します。%{?scl:%scl_package package_name}%{?scl:%scl_package package_name}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Software Collection 用にパッケージを構築していない場合は、spec ファイルのプリアンブルで
%pkg_nameマクロを定義することが推奨されます。%{!?scl:%global pkg_name %{name}}%{!?scl:%global pkg_name %{name}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow したがって、%pkg_nameマクロを使用して、従来のパッケージと Software Collection の両方を構築するのに使用できるスペックファイルで、パッケージの元の名前を定義することができます。 - spec ファイルの Preamble で
Nameタグを以下のように変更します。Name: %{?scl_prefix}package_nameName: %{?scl_prefix}package_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 他の Software Collection パッケージを構築したり、リンクしたりする場合は、以下のように
RequiresタグおよびBuildRequiresタグにある パッケージの名前に%{?scl_prefix}を付けます。Requires: %{?scl_prefix}ifconfigRequires: %{?scl_prefix}ifconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow パッケージのシステムバージョンによっては、バージョン管理RequiresまたはBuildRequiresを使用しないでください。システムで更新できるパッケージに依存する必要がある場合は、Software Collection にそのパッケージを含めるか、システムパッケージの更新時に Software Collection を再ビルドすることを忘れないようにしてください。 - Software Collection の基本的なパッケージがすべてメインのメタパッケージの依存関係であることを確認するには、spec ファイルの
BuildRequiresタグまたはRequiresタグの後に以下のマクロを追加します。%{?scl:Requires: %scl_runtime}%{?scl:Requires: %scl_runtime}Copy to Clipboard Copied! Toggle word wrap Toggle overflow Obsoletes、ConflictsおよびBuildConflictsタグの前に%{?scl_prefix}を付けます。これは、たとえば、ベースシステムのインストールからObsolete削除されるなどして、Software Collection を使用して、古いシステムに新しいパッケージをデプロイできるようにします。以下に例を示します。Obsoletes: %{?scl_prefix}lesspipe < 1.0Obsoletes: %{?scl_prefix}lesspipe < 1.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下の例のように、
Providesタグの前に%{?scl_prefix}を付けます。Provides: %{?scl_prefix}moreProvides: %{?scl_prefix}moreCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.10.3. サブパッケージの変換 リンクのコピーリンクがクリップボードにコピーされました!
-n オプションで名前を定義するサブパッケージの場合は、以下の例のようにその名前の前に %{?scl_prefix} を付けます。
%package -n %{?scl_prefix}more
%package -n %{?scl_prefix}more
%package マクロだけでなく、%description および %files に対しても適用されます。以下に例を示します。
%description -n %{?scl_prefix}rubygems
RubyGems is the Ruby standard for publishing and managing third party
libraries.
%description -n %{?scl_prefix}rubygems
RubyGems is the Ruby standard for publishing and managing third party
libraries.
%{?scl_prefix}%{pkg_name} を使用するようにサブパッケージの Requires タグも調整してください。以下に例を示します。
Requires: %{?scl_prefix}%{pkg_name} = %{version}-%{release}
Requires: %{?scl_prefix}%{pkg_name} = %{version}-%{release}
2.10.4. RPM スクリプトの変換 リンクのコピーリンクがクリップボードにコピーされました!
%prep、%build、%install、%check、%pre、および %post セクションで頻繁に検索できる RPM スクリプトを変換する一般的なルールを説明します。
%nameはすべて%pkg_nameに置き換えます。最も重要な点として、これには%setupマクロの調整が含まれます。- スペックファイルの
%prepセクションで%setupマクロを調整し、そのマクロが Software Collection 環境で異なるパッケージ名を処理できるようにします。%setup -q -n %{pkg_name}-%{version}%setup -q -n %{pkg_name}-%{version}Copy to Clipboard Copied! Toggle word wrap Toggle overflow %setupマクロが必要なため、Software Collection を正常に構築するには-nオプションとともにマクロを使用する必要があります。
%_root_マクロのいずれかを使用してシステムファイルシステム階層を参照する場合は、これらのマクロに条件を使用する必要があります。これにより、従来のパッケージと Software Collection の両方を構築するために spec ファイルを使用することができます。以下の例のようにマクロを編集します。mkdir -p %{?scl:%_root_sysconfdir}%{?!scl:%_sysconfdir}mkdir -p %{?scl:%_root_sysconfdir}%{?!scl:%_sysconfdir}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 他の Software Collection パッケージに依存する Software Collection パッケージを構築する場合は、scl enable 機能リンクを正しく実行したり、適切なバイナリーを実行することが重要になることがよくあります。これが必要な例は、Software Collection ライブラリーに対してコンパイルするか、Software Collection でインタープリターを使用してインタープリターを実行する例です。以下の例のように、
%{?scl:接頭辞を使用してスクリプトをラップします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow スクリプトでset -eを指定することが重要です。これにより、スクリプトが rpm シェルまたは scl 環境で実行されるかどうかに関わらず、スクリプトの動作が一貫性を保つことが重要です。 - Software Collection パッケージのインストール時に実行されるスクリプトに注意してください。以下に例を示します。
%pretrans、%pre、%post、%postun、%posttrans、%triggerin、%triggerun、および%triggerpostun
このスクリプトの scl enable 機能を使用する場合は、ベースシステムのインストールとの意図しない競合を避けるために、空の環境から開始することが推奨されます。これを行うには、以下の例のように、Software Collection を有効にする前にenv -i -を使用します。%posttrans %{?scl:env -i - scl enable %{scl} - << \EOF} %vagrant_plugin_register %{vagrant_plugin_name} %{?scl:EOF}%posttrans %{?scl:env -i - scl enable %{scl} - << \EOF} %vagrant_plugin_register %{vagrant_plugin_name} %{?scl:EOF}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - RPM スクリプトで見つかったハードコーディングされたパスはすべて適切なマクロに置き換える必要があります。たとえば、すべての
/usr/shareを%{_datadir}で置き換えます。これは、$RPM_BUILD_ROOT変数と%{build_root}マクロがsclマクロで移動しないため、必要です 。
2.10.5. Software Collection の自動 Provides および Requires ならびにフィルタリングサポート リンクのコピーリンクがクリップボードにコピーされました!
Provides、自動 Requires およびフィルタリングをサポートします。たとえば、すべての Python ライブラリーでは、RPM は自動的に以下の Requires を追加します。
Requires: python(abi) = (version)
Requires: python(abi) = (version)
Requires: %{?scl_prefix}python(abi) = (version))
Requires: %{?scl_prefix}python(abi) = (version))
Provides と Requires の自動書き込みを行い、macros.%{scl}-config マクロファイルに以下の行を追加します。
%__python_provides /usr/lib/rpm/pythondeps-scl.sh --provides %{_scl_root} %{scl_prefix}
%__python_requires /usr/lib/rpm/pythondeps-scl.sh --requires %{_scl_root} %{scl_prefix}
%__python_provides /usr/lib/rpm/pythondeps-scl.sh --provides %{_scl_root} %{scl_prefix}
%__python_requires /usr/lib/rpm/pythondeps-scl.sh --requires %{_scl_root} %{scl_prefix}
/usr/lib/rpm/pythondeps-scl.sh ファイルは、従来のパッケージの pythondeps.sh ファイルをベースとしており、検索パスを調整します。
pkg_config Provides など、調整が必要な Provides または Requires がある場合には、2 つの方法があります。
- Software Collection のすべてのパッケージに適用されるように、
macros.%{scl}-configマクロファイルに次の行を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ProvidesまたはRequiresにフィルター処理を行うすべての spec ファイルのタグ定義の後に以下の行を追加します。%{?scl:%filter_from_provides s|pkgconfig|%{?scl_prefix}pkgconfig|g} %{?scl:%filter_from_requires s|pkgconfig|%{?scl_prefix}pkgconfig|g} %{?scl:%filter_setup}%{?scl:%filter_from_provides s|pkgconfig|%{?scl_prefix}pkgconfig|g} %{?scl:%filter_from_requires s|pkgconfig|%{?scl_prefix}pkgconfig|g} %{?scl:%filter_setup}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Requires: pkgconfig(package_1) および Requires: pkgconfig(package_2) であり、package_2 は Software Collection に含まれる場合は、package_1 の Requires タグにフィルターを適用しないようにしてください 。
2.10.6. Software Collection マクロファイルのサポート リンクのコピーリンクがクリップボードにコピーされました!
%{?scl:%{_root_sysconfdir}}%{!?scl:%{_sysconfdir}}/rpm/ ディレクトリーにあります。これは、従来のパッケージの /etc/rpm/ ディレクトリーに対応します。マクロファイルを読み込む際には、以下を確認します。
.%{scl}を名前に追加してマクロファイルの名前を変更する場合は、ベースシステムインストールのファイルと競合しないようにします。- マクロファイル内のマクロは、以下の例のように、拡張されていないか、条件を使用しているかのいずれかになります。
%__python2 %{_bindir}/python %python2_sitelib %(%{?scl:scl enable %scl '}%{__python2} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"%{?scl:'})%__python2 %{_bindir}/python %python2_sitelib %(%{?scl:scl enable %scl '}%{__python2} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"%{?scl:'})Copy to Clipboard Copied! Toggle word wrap Toggle overflow
%{__python2} マクロを定義します。このマクロは /opt/provider/mypython/root/usr/bin/python2 に評価されますが、python2 バイナリーは python26 Software Collection (/opt/provider/python26/root/usr/bin/python2) でのみ利用できます。
- python26-python-devel パッケージの一部である
macros.python.python26マクロファイルには、以下の行が含まれます。%__python26_python2 /opt/provider/python26/root/usr/bin/python2
%__python26_python2 /opt/provider/python26/root/usr/bin/python2Copy to Clipboard Copied! Toggle word wrap Toggle overflow - また、python26-build サブパッケージ内のマクロファイルと、Software Collection の build サブパッケージには、以下の行が含まれます。
%scl_package_override() {%global __python2 %__python26_python2}%scl_package_override() {%global __python2 %__python26_python2}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
%{__python2} マクロが再定義されます。これは通常、その Software Collection のソフトウェアを構築することを意味します。
2.10.7. Software Collection シバンのサポート リンクのコピーリンクがクリップボードにコピーされました!
#!/usr/bin/env example- このシバンは、
/usr/bin/envプログラムにインタープリターの実行を指示します。自動依存関係ジェネレーターは、予想通りに /usr/bin/env プログラムに依存関係を作成します。enableスクリプトレットで$PATH環境変数が適切に再定義された場合、example インタープリターは期待通りに Software Collection ファイルシステム階層にあります。Software Collection パッケージでシバンを書き直し、シバンが Software Collection ファイルシステム階層にあるインタープリターへの完全パスを指定することが推奨されます。 #!/usr/bin/example- このシバンはインタープリターへの直接パスを指定します。自動依存関係ジェネレーターは、Software Collection ファイルシステム階層外にある
/usr/bin/exampleインタープリターの依存関係を作成します。ただし、Software Collection のパッケージを構築する場合は、多くの場合、Software Collection ファイルシステム階層にある%{?_scl_root}/usr/bin/exampleインタープリターに依存します。$PATH環境変数を適切に再定義しても、インタープリターが使用されるものには影響しないことに注意してください。Software Collection ファイルシステム階層外にあるインタープリターのシステムバージョンは常に使用されます。大半の場合、これは望ましくありません。このタイプのシバンを使用していて、シバンが Software Collection パッケージの構築時に Software Collection ファイルシステム階層を参照するようにするには、以下のようなコマンドを使用します。find %{buildroot} -type f | \ xargs sed -i -e '1 s"^#!/usr/bin/example"#!%{?_scl_root}/usr/bin/example"'find %{buildroot} -type f | \ xargs sed -i -e '1 s"^#!/usr/bin/example"#!%{?_scl_root}/usr/bin/example"'Copy to Clipboard Copied! Toggle word wrap Toggle overflow /usr/bin/example は、使用するインタープリターになります。
2.10.8. Software Collection を別の Software Collection に依存させる リンクのコピーリンクがクリップボードにコピーされました!
BuildRequires タグおよび Requires タグを調整する必要があります。
BuildRequires: scl-utils-build Requires: %scl_require software_collection_1 Requires: %scl_require software_collection_2
BuildRequires: scl-utils-build
Requires: %scl_require software_collection_1
Requires: %scl_require software_collection_2
%scl_package マクロも含まれていることを確認してください。
%{?scl:%scl_package less}
%{?scl:%scl_package less}
%scl_package マクロは、Software Collection の spec ファイルに含める必要があることに注意してください。
%scl_require_package マクロを使用して、以下の例にあるように、特定の Software Collection から特定のパッケージの依存関係を定義することもできます。
BuildRequires: scl-utils-build Requires: %scl_require_package software_collection_1 package_name
BuildRequires: scl-utils-build
Requires: %scl_require_package software_collection_1 package_name
2.11. すべての Software Collection ディレクトリーのアンインストール リンクのコピーリンクがクリップボードにコピーされました!
%scl_runtime マクロで、以下の行を、各パッケージおよびサブパッケージの spec ファイルに追加します。
%{?scl:Requires: %scl_runtime}
%{?scl:Requires: %scl_runtime}
2.12. Software Collection の構築 リンクのコピーリンクがクリップボードにコピーされました!
rpmbuild -ba package.spec --define 'scl name'
rpmbuild -ba package.spec --define 'scl name'
--define オプションを追加する必要があります。
--define オプションは、scl マクロを定義します。これは、Software Collection の spec ファイル (package.spec) で設定された Software Collection を使用します。
package.spec ファイルで以下を指定します。
BuildRequires: software_collection-build
BuildRequires: software_collection-build
2.12.1. サブパッケージを構築せずにソフトウェアコレクションの再構築 リンクのコピーリンクがクリップボードにコピーされました!
2.12.2. debuginfo ファイルの競合の回避 リンクのコピーリンクがクリップボードにコピーされました!
Source タグを指定する 2 つの Software Collection パッケージ (または従来の RPM パッケージと Software Collection パッケージ) を構築すると、%_builddir ディレクトリーにあるソースファイルを同じディレクトリーに展開すると、その debuginfo パッケージによりファイルの競合が発生します。このような競合により、ユーザーは両方のパッケージを同時に同じシステムにインストールすることができません。
%_builddir ディレクトリーの下にあるビルドツリーにディレクトリーレベルが 1 つ以上追加されます。これを実行することで、debuginfo パッケージ生成スクリプトは、他の debuginfo パッケージのファイルと競合しない debuginfo ファイルを作成します。
第3章 高度なトピック リンクのコピーリンクがクリップボードにコピーされました!
3.1. NFS での Software Collections の使用 リンクのコピーリンクがクリップボードにコピーされました!
nfsmountable には、Software Collection マクロを定義する必要があります。Software Collection の構築時にマクロが定義されている場合には、生成される Software Collection には、Software Collection の /opt ファイルシステム階層外にある状態ファイルと設定ファイルがあります。これにより、NFS に /opt ファイルシステム階層を読み取り専用としてマウントできます。また、状態ファイルと設定ファイルの管理が容易になります。
nfsmountable の使用は任意ですが推奨されます。
nfsmountable マクロを定義するには、Software Collection のメタパッケージの spec ファイルに以下の行が含まれていることを確認してください。
%global nfsmountable 1 %scl_package %scl
%global nfsmountable 1
%scl_package %scl
nfsmountable マクロを定義する前に %scl_package マクロを定義する必要があります。これは、nfsmountable マクロが定義されているかどうかに応じて、%scl_package マクロが、_sysconfdir、_sharedstatedir、_localstatedir のマクロを再定義するためです。再定義されたマクロで nfsmountable が変更する値は、以下の表で説明されています。
|
マクロ
|
元の定義
|
元の定義に対する拡張された値
|
変更された定義
|
元の定義に対する拡張された値
|
|---|---|---|---|---|
_sysconfdir
|
%{_scl_root}/etc
|
/opt/provider/%{scl}/root/etc
|
%{_root_sysconfdir}%{_scl_prefix}/%{scl}
|
/etc/opt/provider/%{scl}
|
_sharedstatedir
|
%{_scl_root}/var/lib
|
/opt/provider/%{scl}/root/var/lib
|
%{_root_localstatedir}%{_scl_prefix}/%{scl}/lib
|
/var/opt/provider/%{scl}/lib
|
_localstatedir
|
%{_scl_root}/var
|
/opt/provider/%{scl}/root/var
|
%{_root_localstatedir}%{_scl_prefix}/%{scl}
|
/var/opt/provider/%{scl}
|
3.1.1. ディレクトリー構造およびファイル所有者の変更 リンクのコピーリンクがクリップボードにコピーされました!
nfsmountable マクロは、scl_install および scl_files マクロがディレクトリー構造の作成方法にも影響し、rpmbuild コマンドの実行時にファイルの所有権を設定します。
nfsmountable マクロを持つ software_collection という名前の Software Collection のディレクトリー構造は、以下のようになります。
3.1.2. Software Collections の登録および登録解除 リンクのコピーリンクがクリップボードにコピーされました!
scl register /opt/provider/software_collection
$ scl register /opt/provider/software_collection
enable スクリプトレットと root/ ディレクトリーに含まれる必要があります。
deregister スクリプトレットを呼び出します。
scl deregister software_collection
$ scl deregister software_collection
3.1.2.1. Software Collection Metapackage での (de)register スクリプトレットの使用 リンクのコピーリンクがクリップボードにコピーされました!
%file セクションに明示的に追加するようにしてください。
/etc/opt/ や /var/opt/ にファイルを作成するコマンドなど、Software Collection の登録時に実行するコマンドをオプションで指定できます。
3.2. Software Collection スクリプトレットの環境モジュールへの変換 リンクのコピーリンクがクリップボードにコピーされました!
/usr/share/Modules/bin/createmodule.sh スクリプトで Software Collection の enable スクリプトレットを環境モジュールに変換します。
手順3.1 enable スクリプトレットの環境モジュールへの変換
- environment-modules パッケージがシステムにインストールされていることを確認します。
yum install environment-modules
# yum install environment-modulesCopy to Clipboard Copied! Toggle word wrap Toggle overflow /usr/share/Modules/bin/createmodule.shスクリプトを実行して、Software Collection のenableスクリプトレットを環境モジュールに変換します。/usr/share/Modules/bin/createmodule.sh /path/to/enable/scriptlet
/usr/share/Modules/bin/createmodule.sh /path/to/enable/scriptletCopy to Clipboard Copied! Toggle word wrap Toggle overflow /path/to/enable/scriptlet は、変換するenableスクリプトレットのファイルパスに置き換えます。- Software Collection メタパッケージの
%preセクションの /usr/share/Modules/bin /createmodule.sh /path/to/enable/scriptlet コマンド (enableスクリプトレットを生成するコード) を追加します。Software Collection パッケージのいずれかに、enableスクリプトレットをファイルとしてパッケージ化されている場合は、%postセクションに /usr/share/Modules/bin/createmodule.sh /path/to/enable/scriptlet コマンドを追加します。
3.3. syspaths サブパッケージの提供 リンクのコピーリンクがクリップボードにコピーされました!
PATH、LD_LIBRARY_PATH などの環境変数を変更する scl enable 呼び出しを使用する必要があります。systemd サービスの代替名を使用する必要もあります。一部のスクリプトは、/usr/bin/mysql など、完全なパスを使用してバイナリーを呼び出すこともできます。その結果、これらのスクリプトは Software Collection で機能しない可能性があります。
/usr/bin) にインストールされるシェルラッパーおよびシンボリックリンクを提供します。つまり、syspaths サブパッケージのインストールを選択すると、ユーザーがベースシステムのインストールを意図的に変更し、一度に複数のバージョンの同じパッケージをインストールし、実行する必要のないユーザーに適した syspaths サブパッケージになります。これは特にデータベースを使用する場合です。
3.3.1. syspaths サブパッケージの命名 リンクのコピーリンクがクリップボードにコピーされました!
binary_1 と、software_collection_1-package_2 パッケージに含まれるバイナリーファイル binary_2 のラッパーを含めたい場合は、software_collection_1 Software Collection に以下の 3 つの syspaths サブパッケージを作成します。
software_collection_1-syspaths software_collection_1-package_1-syspaths software_collection_1-package_2-syspaths
software_collection_1-syspaths
software_collection_1-package_1-syspaths
software_collection_1-package_2-syspaths
3.3.2. syspaths サブパッケージに含まれるファイル リンクのコピーリンクがクリップボードにコピーされました!
binary_1 のラッパーの例です。これは、/opt/rh/software_collection_1/root/usr/bin/binary_1 にあります。
#!/bin/bash source scl_source enable software_collection_1 exec "/opt/rh/software_collection_1/root/usr/bin/binary_1" "$@"
#!/bin/bash
source scl_source enable software_collection_1
exec "/opt/rh/software_collection_1/root/usr/bin/binary_1" "$@"
/usr/bin/binary_1 にこのラッパーをインストールする場合は、scl enable software_collection_1 を付けなくても binary_1 コマンドを実行できます。/usr/bin/ にインストールされているラッパーは正しい環境を設定し、/opt/provider/%{scl} ファイルシステム階層とともに配置されるターゲットバイナリーを実行します。
3.3.3. syspaths Wrapper の制限 リンクのコピーリンクがクリップボードにコピーされました!
/opt/provider/%{scl} はラッパーシェルスクリプトでは機能しないため、gdb ファイルシステム階層を指定するフルパスを使用する必要があります。
3.3.4. syspaths サブパッケージのシンボリックリンク リンクのコピーリンクがクリップボードにコピーされました!
/opt、/etc/opt/、または /var/opt/ ディレクトリー以外のインストールに適したファイルが多数存在するため、syspaths サブパッケージで提供できます。たとえば、データベースファイル (通常は /var/opt/provider/%{scl} に配置) へのパスを作成して、/var/lib/ にあるシンボリックリンクを簡単に検出できます。ただし、一部のシンボリックリンクでは、ベースシステムインストールの従来の RPM パッケージ名が競合する可能性があるため、元の名前で /var/lib/ にインストールしないことが推奨されます。
/var/lib/software_collection_1-original_name または同様の名前を付けることが推奨されます。ログファイルの場合は、推奨される名前は /var/log/software_collection_1-original_name または同様の名前になります。名前自体は重要ではないことに注意してください。ここでの設計目標は、これらのファイルを /var/lib/ または /var/log/ ディレクトリーで簡単に検索することです。
/etc ディレクトリーで簡単に検出することです。
3.3.5. 接頭辞のないサービス リンクのコピーリンクがクリップボードにコピーされました!
rh-mariadb102-mariadb) で始まる名前になります。
mariadb、mongod、postgresql などの従来のサービス名を使用できます。これを行うには、従来のサービスファイルを参照するシンボリックリンク名に Software Collection 名を含めずに、シンボリックリンクを作成します。
/etc/rc.d/init.d/software_collection_1-service_1 ファイルが通常提供する software_collection_1 Software Collection のサービス _1 は、以下のシンボリックリンクを作成して service_1 としてアクセスできます。
/etc/rc.d/init.d/service_1 -> /etc/rc.d/init.d/software_collection_1-service_1
/etc/rc.d/init.d/service_1 -> /etc/rc.d/init.d/software_collection_1-service_1
/usr/lib/systemd/system/service_1 -> /usr/lib/systemd/system/software_collection_1-service_1
/usr/lib/systemd/system/service_1 -> /usr/lib/systemd/system/software_collection_1-service_1
3.4. Software Collections でのサービス管理 リンクのコピーリンクがクリップボードにコピーされました!
%install セクションを調整して、Software Collection に含まれるサービスのシステムバージョンと名前が競合しないようにします。
%install
install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{?scl:%_root_sysconfdir}%{!?scl:%_sysconfdir}/rc.d/init.d/%{?scl_prefix}service_name
%install
install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{?scl:%_root_sysconfdir}%{!?scl:%_sysconfdir}/rc.d/init.d/%{?scl_prefix}service_name
%install セクションを調整します。
%install
install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_unitdir}/%{?scl_prefix}service_name.service
%install
install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_unitdir}/%{?scl_prefix}service_name.service
%{?scl_prefix}service_name
%{?scl_prefix}service_name
3.4.1. サービス環境の設定 リンクのコピーリンクがクリップボードにコピーされました!
手順3.2 Red Hat Enterprise Linux 6 でサービス用の環境の設定
- 以下の内容で、
/opt/provider/software_collection/service-environmentに設定ファイルを作成します。[SCLNAME]_SCLS_ENABLED="software_collection"
[SCLNAME]_SCLS_ENABLED="software_collection"Copy to Clipboard Copied! Toggle word wrap Toggle overflow SCLNAME を、(大文字で書かれた) Software Collection の名前の一意の識別子に置き換えます。software_collection を、%scl_nameマクロで定義した Software Collection の名前に置き換えます。 - SysV init スクリプトの最初に以下の行を追加します。
source /opt/provider/software_collection/service-environment
source /opt/provider/software_collection/service-environmentCopy to Clipboard Copied! Toggle word wrap Toggle overflow - SysV init スクリプトで、
/opt/provider/ファイルシステム階層にあるバイナリーを実行するコマンドを決定します。これらのコマンドの前に scl enable $[SCLNAME]_SCLS_ENABLED (Software Collection 環境でコマンドを実行する場合と同様) を指定してください。たとえば、以下の行を置き換えます。/usr/bin/daemon_binary --argument-1 --argument-2
/usr/bin/daemon_binary --argument-1 --argument-2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の行を、以下のように置き換えます。scl enable $[SCLNAME]_SCLS_ENABLED -- /usr/bin/daemon_binary --argument-1 --argument-2
scl enable $[SCLNAME]_SCLS_ENABLED -- /usr/bin/daemon_binary --argument-1 --argument-2Copy to Clipboard Copied! Toggle word wrap Toggle overflow - su や runuser などの一部のコマンドは、環境変数をクリアします。したがって、これらのコマンドが SysV init スクリプトで使用されている場合は、このコマンドの実行後に Software Collection を再度有効にします。たとえば、以下の行を置き換えます。
su - user_name -c '/usr/bin/daemon_binary --argument-1 --argument-2'
su - user_name -c '/usr/bin/daemon_binary --argument-1 --argument-2'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上のコマンドを、下のコマンドに置き換えます。su - user_name -c '\ source /opt/provider/software_collection/service-environment \ scl enable $SCLNAME_SCLS_ENABLED -- /usr/bin/daemon_binary --argument-1 --argument-2'
su - user_name -c '\ source /opt/provider/software_collection/service-environment \ scl enable $SCLNAME_SCLS_ENABLED -- /usr/bin/daemon_binary --argument-1 --argument-2'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順3.3 Red Hat Enterprise Linux 7 でサービス用の環境の設定
- 以下の内容で、
/opt/provider/software_collection/service-environmentに設定ファイルを作成します。[SCLNAME]_SCLS_ENABLED="software_collection"
[SCLNAME]_SCLS_ENABLED="software_collection"Copy to Clipboard Copied! Toggle word wrap Toggle overflow SCLNAME を、(大文字で書かれた) Software Collection の名前の一意の識別子に置き換えます。software_collection を、%scl_nameマクロで定義した Software Collection の名前に置き換えます。 - systemd サービスファイルに以下の行を追加して、設定ファイルを読み込みます。
EnvironmentFile=/opt/provider/software_collection/service-environment
EnvironmentFile=/opt/provider/software_collection/service-environmentCopy to Clipboard Copied! Toggle word wrap Toggle overflow - systemd サービスファイルでは、Software Collection 環境でコマンドを実行するときと同様に、
ExecStartPre、ExecStart、および同様のディレクティブで指定されたすべてのコマンドの前に scl enable $[SCLNAME]_SCLS_ENABLED を付けてください。ExecStartPre=/usr/bin/scl enable $[SCLNAME]_SCLS_ENABLED -- /opt/provider/software_collection/root/usr/bin/daemon_helper_binary --argument-1 --argument-2 ExecStart=/usr/bin/scl enable $[SCLNAME]_SCLS_ENABLED -- /opt/provider/software_collection/root/usr/bin/daemon_binary --argument-1 --argument-2
ExecStartPre=/usr/bin/scl enable $[SCLNAME]_SCLS_ENABLED -- /opt/provider/software_collection/root/usr/bin/daemon_helper_binary --argument-1 --argument-2 ExecStart=/usr/bin/scl enable $[SCLNAME]_SCLS_ENABLED -- /opt/provider/software_collection/root/usr/bin/daemon_binary --argument-1 --argument-2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ExecStart* コマンドの前に scl enable ... を使用すると、サービスが、SELinux ポリシーで示されるターゲットの SELinux コンテキストに移行できなくなります。SELinux を使用してこのサービスを制限する場合は、systemd サービスファイルでバイナリーを直接実行する必要があります。バイナリーが Software Collection に含まれる共有ライブラリーにリンクされている場合、DT_RUNPATH 属性は scl enable ... ラッパーを使用せずに、ランタイム時にこれらの共有ライブラリーにアクセスできるようにするのに役立ちます。詳細は、「Red Hat Enterprise Linux 7 での SELinux サポート」 を参照してください。
3.5. Software Collection Library のサポート リンクのコピーリンクがクリップボードにコピーされました!
enable スクリプトレットの LD_LIBRARY_PATH 環境変数を更新します。
export LD_LIBRARY_PATH="%{_libdir}\${LD_LIBRARY_PATH:+:\${LD_LIBRARY_PATH}}"
export LD_LIBRARY_PATH="%{_libdir}\${LD_LIBRARY_PATH:+:\${LD_LIBRARY_PATH}}"
LD_LIBRARY_PATH 環境変数の代わりに DT_RUNPATH 属性を使用して、Software Collection 環境でプライベートの共有ライブラリーにアクセスできるようにすることを検討してください。
3.5.1. Software Collection 以外のライブラリーの使用 リンクのコピーリンクがクリップボードにコピーされました!
/etc/ld.so.conf.d/ ディレクトリーを使用できます。
/etc/ld.so.conf.d/ には使用しないでください。/etc/ld.so.conf.d/ を使用すると、Software Collection のライブラリーのバージョンが、ライブラリーのシステムバージョンよりも優先される可能性があるため、システムで利用できないライブラリーにのみの使用が推奨されます。これにより、予期せぬ終了やデータ損失などの、アプリケーションのシステムバージョンの動作が望ましくない可能性があります。
手順3.4 Software Collection のライブラリーに /etc/ld.so.conf.d/ を使用
%{?scl_prefix}libs.confという名前のファイルを作成し、spec ファイル設定を適宜調整します。SOURCE2: %{?scl_prefix}libs.confSOURCE2: %{?scl_prefix}libs.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow %{?scl_prefix}libs.confファイルに、Software Collection に関連付けられたライブラリーのバージョンがあるディレクトリーの一覧を含めます。以下に例を示します。/opt/provider/software_collection_1/root/usr/lib64/
/opt/provider/software_collection_1/root/usr/lib64/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、Software Collection software_collection_1 に含まれる/usr/lib64/ディレクトリーが一覧に含まれます。- 以下のように
%{?scl_prefix}libs.confファイルがインストールされているように、spec ファイルの%installセクションを編集します。%install install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{?scl:%_root_sysconfdir}%{!?scl:%_sysconfdir}/ld.so.conf.d/%install install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{?scl:%_root_sysconfdir}%{!?scl:%_sysconfdir}/ld.so.conf.d/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5.2. Software Collection 名を使用したライブラリーメジャー soname の接頭辞 リンクのコピーリンクがクリップボードにコピーされました!
LD_LIBRARY_PATH 環境変数が正しく設定されていない場合でも、アプリケーションが誤ったライブラリーにリンクされていないことを確認するには、Software Collection に含まれるライブラリーのメジャー soname を変更します。メジャーの soname を変更するには、メジャーの soname バージョン番号の前に Software Collection 名を付けることが推奨されます。
mysql55- 接頭辞が付いた MySQL クライアントライブラリーの例です。
rpm -ql mysql55-mysql-libs | grep 'lib.*so' /opt/provider/mysql55/root/usr/lib64/mysql/libmysqlclient.so.mysql55-18 /opt/provider/mysql55/root/usr/lib64/mysql/libmysqlclient.so.mysql55-18.0.0
$ rpm -ql mysql55-mysql-libs | grep 'lib.*so'
/opt/provider/mysql55/root/usr/lib64/mysql/libmysqlclient.so.mysql55-18
/opt/provider/mysql55/root/usr/lib64/mysql/libmysqlclient.so.mysql55-18.0.0
rpm -ql mysql-libs | grep 'lib.*so' /usr/lib64/mysql/libmysqlclient.so.18 /usr/lib64/mysql/libmysqlclient.so.18.0.0
$ rpm -ql mysql-libs | grep 'lib.*so'
/usr/lib64/mysql/libmysqlclient.so.18
/usr/lib64/mysql/libmysqlclient.so.18.0.0
Provides タグを生成します。上記のように soname の接尾辞を付けない場合は、mysql パッケージの場合の Provides の例は libmysqlclient.so.18()(64bit) となります。この Provides を使用して、RPM は誤った RPM パッケージを選択することができるため、アプリケーションには要件がなくなります。
Provides の例は、libmysqlclient.so.mysql55-18()(64bit) となります。この Provides では、RPM で正しい RPM 依存関係が選択され、アプリケーションの要件が適用されます。
3.5.3. Red Hat Enterprise Linux 7 での Software Collection Library のサポート リンクのコピーリンクがクリップボードにコピーされました!
%__provides_exclude_from マクロを使用して、自動的に生成される RPM シンボル用に特定のファイルをスキャンしないようにします。
%{_libdir} ディレクトリー内の .so ファイルのスキャンを防ぐには、Software Collection の spec ファイルに、BuildRequires タグまたは Requires タグの前に以下の行を追加します。
%if %{?scl:1}%{!?scl:0}
# Do not scan .so files in %{_libdir}
%global __provides_exclude_from ^%{_libdir}/.*.so.*$
%endif
%if %{?scl:1}%{!?scl:0}
# Do not scan .so files in %{_libdir}
%global __provides_exclude_from ^%{_libdir}/.*.so.*$
%endif
Provides および Requires の RPM サポートの一部です。詳細は「Software Collection の自動 Provides および Requires ならびにフィルタリングサポート」を参照してください。
3.6. Software Collection .pc ファイルのサポート リンクのコピーリンクがクリップボードにコピーされました!
PKG_CONFIG_PATH 環境変数を更新します。.pc ファイルで定義されている内容に応じて、%{_libdir} マクロの PKG_CONFIG_PATH 環境変数 (ライブラリーディレクトリー (通常は /usr/lib/ または /usr/lib64/) に拡張)、または %{_datadir} マクロ (通常は共有ディレクトリー /usr/share/ に拡張) を更新します。
%install セクションを調整して、PKG_CONFIG_PATH 環境変数を更新します。
%install
cat >> %{buildroot}%{_scl_scripts}/enable << EOF
export PKG_CONFIG_PATH="%{_libdir}/pkgconfig\${PKG_CONFIG_PATH:+:\${PKG_CONFIG_PATH}}"
EOF
%install
cat >> %{buildroot}%{_scl_scripts}/enable << EOF
export PKG_CONFIG_PATH="%{_libdir}/pkgconfig\${PKG_CONFIG_PATH:+:\${PKG_CONFIG_PATH}}"
EOF
%install セクションを調整して、PKG_CONFIG_PATH 環境変数を更新します。
%install
cat >> %{buildroot}%{_scl_scripts}/enable << EOF
export PKG_CONFIG_PATH="%{_datadir}/pkgconfig\${PKG_CONFIG_PATH:+:\${PKG_CONFIG_PATH}}"
EOF
%install
cat >> %{buildroot}%{_scl_scripts}/enable << EOF
export PKG_CONFIG_PATH="%{_datadir}/pkgconfig\${PKG_CONFIG_PATH:+:\${PKG_CONFIG_PATH}}"
EOF
enable スクリプトレットを設定します。
/usr/bin ディレクトリーなど、Software Collection を有効にするためにシステムが認識できるラッパースクリプトを提供します。この場合は、Software Collection が無効であっても .pc ファイルがシステムに表示されていることを確認します。
PKG_CONFIG_PATH 環境変数を更新します。.pc ファイルで定義されている内容に応じて、%{_libdir} マクロ (ライブラリーディレクトリーに拡張)、または%{_datadir} マクロ (共有ディレクトリーに拡張) の PKG_CONFIG_PATH 環境変数を更新します。
手順3.5 %{_libdir} の PKG_CONFIG_PATH 環境変数の更新
%{_libdir}マクロのPKG_CONFIG_PATH環境変数を更新するには、カスタムスクリプト/etc/profile.d/name.shを作成します。このスクリプトは、システムでシェルが起動するとあらかじめ読み込みます。たとえば、以下のファイルを作成します。%{?scl_prefix}pc-libdir.sh%{?scl_prefix}pc-libdir.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow PKG_CONFIG_PATH変数を変更して .pc ファイルを参照するように短いスクリプトpc-libdir.shを使用します。export PKG_CONFIG_PATH="%{_libdir}/pkgconfig:/opt/provider/software_collection/path/to/your/pc_files"export PKG_CONFIG_PATH="%{_libdir}/pkgconfig:/opt/provider/software_collection/path/to/your/pc_files"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - このファイルを Software Collection パッケージの spec ファイルに追加します。
SOURCE2: %{?scl_prefix}pc-libdir.shSOURCE2: %{?scl_prefix}pc-libdir.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Software Collection パッケージの spec ファイルの
%installセクションを調整して、このファイルをシステムの/etc/profile.d/ディレクトリーにインストールします。%install install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{?scl:%_root_sysconfdir}%{!?scl:%_sysconfdir}/profile.d/%install install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{?scl:%_root_sysconfdir}%{!?scl:%_sysconfdir}/profile.d/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順3.6 %{_datadir} の PKG_CONFIG_PATH 環境変数の更新
%{_datadir}マクロのPKG_CONFIG_PATH環境変数を更新するには、カスタムスクリプト/etc/profile.d/name.shを作成します。このスクリプトは、システムでシェルが起動するとあらかじめ読み込みます。たとえば、以下のファイルを作成します。%{?scl_prefix}pc-datadir.sh%{?scl_prefix}pc-datadir.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow PKG_CONFIG_PATH変数を変更して .pc ファイルを参照するように短いスクリプトpc-datadir.shを使用します。export PKG_CONFIG_PATH="%{_datadir}/pkgconfig:/opt/provider/software_collection/path/to/your/pc_files"export PKG_CONFIG_PATH="%{_datadir}/pkgconfig:/opt/provider/software_collection/path/to/your/pc_files"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - このファイルを Software Collection パッケージの spec ファイルに追加します。
SOURCE2: %{?scl_prefix}pc-datadir.shSOURCE2: %{?scl_prefix}pc-datadir.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Software Collection パッケージの spec ファイルの
%installセクションを調整して、このファイルをシステムの/etc/profile.d/ディレクトリーにインストールします。%install install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{?scl:%_root_sysconfdir}%{!?scl:%_sysconfdir}/profile.d/%install install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{?scl:%_root_sysconfdir}%{!?scl:%_sysconfdir}/profile.d/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.7. Software Collection MANPATH サポート リンクのコピーリンクがクリップボードにコピーされました!
MANPATH 環境変数を更新します。
MANPATH 環境変数を更新するには、Software Collection の spec ファイルの %install セクションに以下を追加します。
%install
cat >> %{buildroot}%{_scl_scripts}/enable << EOF
export MANPATH="%{_mandir}:\${MANPATH:-}"
EOF
%install
cat >> %{buildroot}%{_scl_scripts}/enable << EOF
export MANPATH="%{_mandir}:\${MANPATH:-}"
EOF
MANPATH 環境変数を更新する enable スクリプトレットが設定されます。その後、Software Collection が有効になっていない限り、Software Collection に関連付けられた man ページは表示されません。
/usr/bin ディレクトリーなど、Software Collection を有効にするためにシステムが認識できるラッパースクリプトを提供します。この場合は、Software Collection が無効であっても、man ページがシステムに表示されていることを確認します。
MANPATH 環境変数を更新します。
手順3.7 無効化されたソフトウェアコレクションの MANPATH 環境変数の更新
MANPATH環境変数を更新するには、カスタムスクリプト/etc/profile.d/name.shを作成します。このスクリプトは、システムでシェルが起動するとあらかじめ読み込みます。たとえば、以下のファイルを作成します。%{?scl_prefix}manpage.sh%{?scl_prefix}manpage.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow MANPATH変数を変更して man パスディレクトリーを参照するようにmanpage.sh短いスクリプトを使用します。export MANPATH="/opt/provider/software_collection/path/to/your/man_pages:${MANPATH}"export MANPATH="/opt/provider/software_collection/path/to/your/man_pages:${MANPATH}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - このファイルを Software Collection パッケージの spec ファイルに追加します。
SOURCE2: %{?scl_prefix}manpage.shSOURCE2: %{?scl_prefix}manpage.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Software Collection パッケージの spec ファイルの
%installセクションを調整して、このファイルをシステムの/etc/profile.d/ディレクトリーにインストールします。%install install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{?scl:%_root_sysconfdir}%{!?scl:%_sysconfdir}/profile.d/%install install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{?scl:%_root_sysconfdir}%{!?scl:%_sysconfdir}/profile.d/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.8. Software Collection cronjob サポート リンクのコピーリンクがクリップボードにコピーされました!
手順3.8 cronjobs で定期的なタスクの実行
- 定期的なタスクを実行するために cronjobs を使用するには、Software Collection の
crontabファイルを、Software Collection の名前のある/etc/cron.dディレクトリーに配置します。たとえば、以下のファイルを作成します。%{?scl_prefix}crontab%{?scl_prefix}crontabCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下の例のように、
crontabファイルの内容が標準のcrontabファイル形式に準拠することを確認します。0 1 * * Sun root scl enable software_collection '/opt/provider/software_collection/root/usr/bin/cron_job_name'
0 1 * * Sun root scl enable software_collection '/opt/provider/software_collection/root/usr/bin/cron_job_name'Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここで、software_collection は Software Collection の名前で、/opt/provider/software_collection/root/usr/bin/cron_job_nameは定期的に実行するコマンドです。 - このファイルを Software Collection パッケージの spec ファイルに追加します。
SOURCE2: %{?scl_prefix}crontabSOURCE2: %{?scl_prefix}crontabCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Software Collection パッケージの spec ファイルの
%installセクションを調整して、システムディレクトリー/etc/cron.d/にインストールします。%install install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{?scl:%_root_sysconfdir}%{!?scl:%_sysconfdir}/cron.d/%install install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{?scl:%_root_sysconfdir}%{!?scl:%_sysconfdir}/cron.d/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.9. Software Collection ログファイルのサポート リンクのコピーリンクがクリップボードにコピーされました!
/opt/provider/%{scl}/root/var/log/ ディレクトリーにログファイルが作成されます。
_localstatedir マクロを再定義する nfsmountable マクロを使用することが推奨されます。これにより、/var/opt/provider/%{scl}/log/ ディレクトリーの下にログファイルが作成されます。これは、/opt/provider/%{scl} ファイルシステム階層外にあることになります。
/var/log/mydaemon/mydaemond.log に保存します。mydaemon が software_collection Software Collection としてパッケージ化され、nfsmountable マクロが定義されている場合には、software_collection 内のログファイルへのパスは以下のようになります。
/var/opt/provider/software_collection/log/mydaemon/mydaemond.log
/var/opt/provider/software_collection/log/mydaemon/mydaemond.log
nfsmountable マクロの使用方法は、「NFS での Software Collections の使用」 を参照してください。
3.10. Software Collection logrotate サポート リンクのコピーリンクがクリップボードにコピーされました!
手順3.9 logrotate でログファイルの管理
- logrotate を使用してログファイルを管理するには、logrotate ジョブ
/etc/logrotate.d/のシステムディレクトリーに、Software Collection のカスタム logrotate ファイルを置きます。たとえば、以下のファイルを作成します。%{?scl_prefix}logrotate%{?scl_prefix}logrotateCopy to Clipboard Copied! Toggle word wrap Toggle overflow logrotateファイルの内容が、以下のように標準のlogrotateファイル形式に準拠することを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - このファイルを Software Collection パッケージの spec ファイルに追加します。
SOURCE2: %{?scl_prefix}logrotateSOURCE2: %{?scl_prefix}logrotateCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Software Collection パッケージの spec ファイルの
%installセクションを調整して、システムディレクトリー/etc/logrotate.d/にインストールします。%install install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{?scl:%_root_sysconfdir}%{!?scl:%_sysconfdir}/logrotate.d/%install install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{?scl:%_root_sysconfdir}%{!?scl:%_sysconfdir}/logrotate.d/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.11. Software Collection /var/run/ ファイルのサポート リンクのコピーリンクがクリップボードにコピーされました!
/var/run/package_name/ ディレクトリーの下にあるファイルの 1 つの例です。PID ファイルを Software Collection にパッケージ化する場合は、nfsmountable マクロを使用し、以下のディレクトリーに PID ファイルを保存することが推奨されます。
/var/run/software_collection-package_name/
/var/run/software_collection-package_name/
tmpfs ファイルシステムなどの /var/run/ 機能を使用できるようにします。
nfsmountable マクロの使用方法は、「NFS での Software Collections の使用」 を参照してください。
3.12. Software Collection のロックファイルのサポート リンクのコピーリンクがクリップボードにコピーされました!
/opt/provider/%{scl}/root/var/lock/ ディレクトリーにロックファイルを作成します。
_localstatedir マクロを再定義する nfsmountable マクロを使用することが推奨されます。これにより、/var/opt/provider/%{scl}/lock/ ディレクトリーの下にログファイルが作成されます。これは、/opt/provider/%{scl} ファイルシステム階層外にあることになります。
/var/opt/provider/%{scl}/lock/ ディレクトリーの下にあるロックを書き込むと、これらのアプリケーションとサービスは、システムバージョンと同時に実行できます (Software Collection のアプリケーションやサービスのリソースがシステムバージョンのリソースと競合することはありません)。
mylockfile.lock は、通常ベースシステムインストールの /var/lock/ ディレクトリーに作成されます。ロックファイルが software_collection Software Collection の一部で、nfsmountable マクロが定義されている場合は、software_collection のロックファイルへのパスは以下のようになります。
/var/opt/provider/software_collection/lock/mylockfile.lock
/var/opt/provider/software_collection/lock/mylockfile.lock
nfsmountable マクロの使用方法は、「NFS での Software Collections の使用」 を参照してください。
プログラムが継続的に実行されないようにする
/var/lock にロックを書き込むことを確認してください。これにより、アプリケーションまたはサービスのロックファイルは上書きされません。ロックファイルの名前は変更されず、名前はシステムバージョンと同じままになります。
3.12.1. Software Collection SysV init Lock File のサポート リンクのコピーリンクがクリップボードにコピーされました!
/var/lock/subsys/ ディレクトリー内でロックファイルが作成されます。「Software Collections でのサービス管理」で説明されているように、サービス名には Software Collection の接頭辞が含まれます。/var/lock/subsys/ 以下でファイルの同じ命名規則を使用して、ロックファイル名がベースシステムのインストールと競合しないようにします。
3.13. Software Collection 設定ファイルのサポート リンクのコピーリンクがクリップボードにコピーされました!
/opt/provider/%{scl} ファイルシステム階層に保存されます。
_sysconfdir マクロを再定義する nfsmountable マクロを使用することが推奨されます。これにより、設定ファイルは、/etc/opt/provider/%{scl}/ ファイルシステム階層外にある /opt/provider/%{scl} ディレクトリーの下に作成されます。
/etc ディレクトリーに保存されます。設定ファイルが software_collection Software Collection の一部で、nfsmountable マクロが定義されている場合には、software_collection 内の設定ファイルへのパスは以下のようになります。
/etc/opt/provider/software_collection/example.conf
/etc/opt/provider/software_collection/example.conf
nfsmountable マクロの使用方法は、「NFS での Software Collections の使用」 を参照してください。
3.14. Software Collection カーネルモジュールのサポート リンクのコピーリンクがクリップボードにコピーされました!
- カーネルモジュールパッケージの名前には、カーネルバージョンが含まれます。
- タグ
Requiresは、カーネルモジュールの spec ファイルにあります。これには、(kernel-version-revision形式の) カーネルのバージョンおよびリビジョンが含まれます。
3.15. Software Collection SELinux サポート リンクのコピーリンクがクリップボードにコピーされました!
/opt/provider/software_collection_1/root/usr/ ディレクトリーが従来のパッケージの /usr/ ディレクトリーを省略する場合は、以下のように SELinux ラベルを設定します。
semanage fcontext -a -e /usr /opt/provider/software_collection_1/root/usr
semanage fcontext -a -e /usr /opt/provider/software_collection_1/root/usr
restorecon -R -v /opt/provider/software_collection_1/root/usr
restorecon -R -v /opt/provider/software_collection_1/root/usr
/usr/ ディレクトリー内のディレクトリーとファイルがすべて、/opt/provider/software_collection_1/root/usr/ ディレクトリーにあるかのように SELinux によってラベル付けされるようにします。
3.15.1. Red Hat Enterprise Linux 7 での SELinux サポート リンクのコピーリンクがクリップボードにコピーされました!
%post セクションに追加し、SELinux ラベルを設定します。
semanage fcontext -a -e /usr /opt/provider/software_collection_1/root/usr
semanage fcontext -a -e /usr /opt/provider/software_collection_1/root/usr
restorecon -R -v /opt/provider/software_collection_1/root/usr
restorecon -R -v /opt/provider/software_collection_1/root/usr
selinuxenabled && load_policy || :
selinuxenabled && load_policy || :
Requires に policycoreutils-python を追加することが重要です。
unconfined_service_t コンテキストを使用してサービスが 制限のないプロセス として実行されます。このコンテキストには設計による移行ルールがないため、SELinux ポリシーにより示されるターゲットの SELinux コンテキストに移行することができません。つまり、scl enable ... は、開始するサービスが SELinux を使用して制限される場合は、Red Hat Enterprise Linux 7 では使用できません。
3.16. Red Hat Enterprise Linux 6 と 7 の相違点 リンクのコピーリンクがクリップボードにコピーされました!
3.16.1. %license マクロ リンクのコピーリンクがクリップボードにコピーされました!
%license マクロを使用すると、パッケージにインストールするライセンスファイルを指定できます。このマクロは、Red Hat Enterprise Linux 7 の RPM Package Manager でのみサポートされます。Red Hat Enterprise Linux 6 および 7 の両方で Software Collection パッケージを構築する場合は、以下のように Red Hat Enterprise Linux 6 の %license マクロを宣言します。
%{!?_licensedir:%global license %%doc}
%{!?_licensedir:%global license %%doc}
3.16.2. ランタイムのサブパッケージ依存関係がない リンクのコピーリンクがクリップボードにコピーされました!
Requires を自動的に生成します。これは、Red Hat Enterprise Linux 6 では機能しません。Software Collection をそのシステム用に構築する場合は、各 Software Collection パッケージの runtime サブパッケージの依存関係を明示的に指定する必要があります。
Requires: %{?scl_prefix}runtime
Requires: %{?scl_prefix}runtime
3.16.3. scl-package() の Provides リンクのコピーリンクがクリップボードにコピーされました!
Provide: scl-package() タグが生成されます。この目的は、構築されたパッケージを特定の Software Collection に属するものとして内部的に特定することです。タグの詳細を以下の表に示します。
|
Software Collection パッケージ
|
Provides
|
|---|---|
| scl-package(software_collection_1)
|
${software_collection_1}-build
| scl-package(software_collection_1)
|
${software_collection_1}-runtime
| scl-package(software_collection_1)
|
Provide: scl-package() タグは 1 つだけです。これは予想される動作であり、違いは scl ツールによって内部的に処理されます。
|
Software Collection パッケージ
|
Provides
|
|---|---|
${software_collection_1}
| scl-package(software_collection_1)
|
第4章 Red Hat Software Collections の再構築 リンクのコピーリンクがクリップボードにコピーされました!
4.1. scldevel サブパッケージの提供 リンクのコピーリンクがクリップボードにコピーされました!
4.1.1. scldevel サブパッケージの作成 リンクのコピーリンクがクリップボードにコピーされました!
手順4.1 独自の scldevel サブパッケージを提供
- Software Collection のメタパッケージで、名前、要約、および説明を定義して scldevel サブパッケージを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 依存する Software Collections のパッケージを構築する際には、仮想Provides: scldevel(%{scl_name_base})を使用することが推奨されます。これにより、以下の手順で指定されているように、%{scl_name_base}Software Collection とそのマクロのバージョンが利用できるようになります。 - Software Collection のメタパッケージの
%installセクションで、scldevel サブパッケージに含まれるmacros.%{scl_name_base}-scldevelファイルを作成し、以下を追加します。cat >> %{buildroot}%{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel << EOF %%scl_%{scl_name_base} %{scl} %%scl_prefix_%{scl_name_base} %{scl_prefix} EOFcat >> %{buildroot}%{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel << EOF %%scl_%{scl_name_base} %{scl} %%scl_prefix_%{scl_name_base} %{scl_prefix} EOFCopy to Clipboard Copied! Toggle word wrap Toggle overflow 同じ%{scl_name_base}名を共有するすべての Software Collections の間で、提供されるmacros.%{scl_name_base}-scldevelファイルが競合する必要があることに注意してください。これにより、複数のバージョンの%{scl_name_base}Software Collections のインストールは許可されません。たとえば、ruby193-scldevel サブパッケージがインストールされている場合は、ruby200-scldevel サブパッケージをインストールすることができません。
4.1.2. 依存する Software Collection での scldevel サブパッケージの使用 リンクのコピーリンクがクリップボードにコピーされました!
手順4.2 依存するソフトウェアコレクションで独自の scldevel サブパッケージの使用
- メタパッケージの spec ファイルの最初に以下を追加することを検討してください。
%{!?scl_ruby:%global scl_ruby ruby200} %{!?scl_prefix_ruby:%global scl_prefix_ruby %{scl_ruby}-}%{!?scl_ruby:%global scl_ruby ruby200} %{!?scl_prefix_ruby:%global scl_prefix_ruby %{scl_ruby}-}Copy to Clipboard Copied! Toggle word wrap Toggle overflow これら 2 行は任意です。これは、依存する Software Collection が ruby200 Software Collection に依存するように設計されている視覚的なヒントとしてのみ意図されています。ビルドルートで利用できる scldevel サブパッケージが他にない場合は、ruby200-scldevel サブパッケージがビルド要件として使用されます。これらの行を以下の行に置き換えることができます。%{?scl_prefix_ruby}%{?scl_prefix_ruby}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下のビルド要件をメタパッケージに追加します。
BuildRequires: %{scl_prefix_ruby}scldevelBuildRequires: %{scl_prefix_ruby}scldevelCopy to Clipboard Copied! Toggle word wrap Toggle overflow このビルド要件を指定すると、scldevel サブパッケージがビルドルートにあり、デフォルト値が使用されていないことを確認します。このパッケージを省略すると、後続のパッケージのビルド時間で要求が破損する可能性があります。 - メタパッケージの spec ファイルの
%package runtimeに以下の行が含まれていることを確認します。%package runtime Summary: Package that handles %scl Software Collection. Requires: scl-utils Requires: %{scl_prefix_ruby}runtime%package runtime Summary: Package that handles %scl Software Collection. Requires: scl-utils Requires: %{scl_prefix_ruby}runtimeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - メタパッケージの spec ファイルの
%package buildに、以下の行を含めることを検討してください。%package build Summary: Package shipping basic build configuration Requires: %{scl_prefix_ruby}scldevel%package build Summary: Package shipping basic build configuration Requires: %{scl_prefix_ruby}scldevelCopy to Clipboard Copied! Toggle word wrap Toggle overflow Requires: %{scl_prefix_ruby}scldevelを指定すると、Software Collection のすべてのパッケージでマクロが利用可能になります。これを追加することは、依存する Software Collection のパッケージが scldevel サブパッケージが提供するマクロを使用するなど、特定のユースケースでRequiresのみ有効であることに注意してください。
4.2. python27 および rh-python35 Software Collections の拡張 リンクのコピーリンクがクリップボードにコピーされました!
%scl_package_override() をサポートするように拡張されました。これにより、依存する Software Collection のパッケージ化が容易になりました。
4.2.1. vt191 Software Collection リンクのコピーリンクがクリップボードにコピーされました!
vt191 という名前が付けられ、versiontools Python パッケージバージョン 1.9.1 が同梱されています。
- vt191 Software Collection メタパッケージには、以下のビルド依存関係が設定されています。
BuildRequires: %{scl_prefix_python}scldevelBuildRequires: %{scl_prefix_python}scldevelCopy to Clipboard Copied! Toggle word wrap Toggle overflow これは、たとえば python27-scldevel などに展開されます。python27-scldevel サブパッケージには、2 つの重要なマクロ%scl_pythonおよび%scl_prefix_pythonが同梱されています。このマクロは、メタパッケージの spec ファイルの上部に定義されていることに注意してください。定義は必須ではありませんが、vt191 Software Collection が python27 Software Collection に構築されるように設計されているという視覚的なヒントを提供します。フォールバック値としても機能します。 site-packagesディレクトリーを正しく設定するには、%python27python_sitelibマクロの値を使用して、python27をvt191に置き換えます。Software Collection を別のプロバイダー (例:/opt/myorganization/instead of/opt/rh/) を使用して構築する場合は、これらも変更する必要があります。重要/opt/rh/プロバイダーは Red Hat が提供する Software Collections のインストールに使用するため、競合の可能性を回避するために別のプロバイダーを使用することを強く推奨します。詳細は、「Software Collection Root ディレクトリー」 を参照してください。- vt191-build サブパッケージには、以下の依存関係セットがあります。
Requires: %{scl_prefix_python}scldevelRequires: %{scl_prefix_python}scldevelCopy to Clipboard Copied! Toggle word wrap Toggle overflow これは、たとえば python27-scldevel などに展開されます。この依存関係の目的は、vt191 Software Collection のパッケージを構築する際にマクロが常に存在することを確認することです。 - vt191 Software Collection の
enableスクリプトレットは、以下の行を使用します。. scl_source enable %{scl_python}. scl_source enable %{scl_python}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 行の先頭にあるドットに注意してください。この行では、vt191 Software Collection が起動すると、Python Software Collection が暗黙的に起動されます。これにより、ユーザーは scl enable python27 vt191 command のかわりに、scl enable vt191 command のみを入力して、Software Collection 環境で command を実行できます。 - マクロファイル
macros.vt191-configは、%__os_install_post、Python 依存関係ジェネレーター、および他のパッケージの spec ファイルで使用される特定の Python 固有のマクロを適切に上書きする%scl_package_overrideを呼び出します。
4.2.2. python-versiontools パッケージ リンクのコピーリンクがクリップボードにコピーされました!
BuildRequiresタグの接頭辞は、%{scl_prefix}ではなく、%{?scl_prefix_python}になります。%installセクションは、--install-purelibを明示的に指定します。
4.2.3. vt191 Software Collection の構築 リンクのコピーリンクがクリップボードにコピーされました!
- python27 Software Collection に含まれる python27-scldevel サブパッケージおよび python27-python-devel サブパッケージをインストールします。
vt191.specを構築して、vt191-runtime パッケージおよび vt191-build パッケージをインストールします。- versiontools のビルド要件である python27-python-setuptools パッケージをインストールします。
python-versiontools.specをビルドします。
4.2.4. vt191 Software Collection のテスト リンクのコピーリンクがクリップボードにコピーされました!
- vt191-python-versiontools パッケージをインストールします。
- 次のコマンドを実行します。
scl enable vt191 "python -c 'import versiontools; print(versiontools.__file__)'"
$ scl enable vt191 "python -c 'import versiontools; print(versiontools.__file__)'"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 出力に以下の行が含まれることを確認します。
/opt/rh/vt191/root/usr/lib/python2.7/site-packages/versiontools/__init__.pyc
/opt/rh/vt191/root/usr/lib/python2.7/site-packages/versiontools/__init__.pycCopy to Clipboard Copied! Toggle word wrap Toggle overflow パスのプロバイダーrhは、%_scl_prefixマクロの再定義により異なる可能性があることに注意してください。詳細は、「Software Collection Root ディレクトリー」 を参照してください。
4.3. rh-ruby23 Software Collection の拡張 リンクのコピーリンクがクリップボードにコピーされました!
4.3.1. rh-ror42 Software Collection リンクのコピーリンクがクリップボードにコピーされました!
- rh-ror42 Software Collection の spec ファイルには、以下のビルド依存関係セットがあります。
BuildRequires: %{scl_prefix_ruby}scldevel BuildRequires: %{scl_prefix_ruby}rubygems-develBuildRequires: %{scl_prefix_ruby}scldevel BuildRequires: %{scl_prefix_ruby}rubygems-develCopy to Clipboard Copied! Toggle word wrap Toggle overflow これは、rh-ruby23-scldevel、rh-ruby23-rubygems-devel などに展開されます。この rh-ruby23-scldevel サブパッケージには、重要なマクロが 2 つ (%scl_rubyおよび%scl_prefix_ruby) あります。rh-ruby23-scldevel サブパッケージはビルドルートで利用できる必要があります。Ruby Software Collections が複数ある場合は、rh-ruby23-scldevel は、利用可能な Software Collections をどれを使用するかを決定します。%scl_rubyおよび%scl_prefix_rubyマクロは、spec ファイルの上部でも定義されることに注意してください。定義は必須ではありませんが、rh-ror42 Software Collection が rh-ruby23 Software Collection に構築されるように設計されているという視覚的なヒントを提供します。フォールバック値としても機能します。 - rh-ror42-runtime サブパッケージは、依存する Software Collection の runtime サブパッケージに依存する必要があります。この依存関係は以下のように指定されます。
%package runtime Requires: %{scl_prefix_ruby}runtime%package runtime Requires: %{scl_prefix_ruby}runtimeCopy to Clipboard Copied! Toggle word wrap Toggle overflow パッケージが rh-ruby23 Software Collection に対して構築されると、rh-ruby23-runtimeに展開されます。 - rh-ror42-build サブパッケージは、依存する Software Collection の scldevel サブパッケージに依存する必要があります。これは、この Software Collection の他のすべてのパッケージが同じマクロを定義しているため、同じ Ruby バージョンに対して構築されるようにするためです。
%package build Requires: %{scl_prefix_ruby}scldevel%package build Requires: %{scl_prefix_ruby}scldevelCopy to Clipboard Copied! Toggle word wrap Toggle overflow rh-ruby23 Software Collection の場合には、rh-ruby23-scldevelに展開されます。 - rh-ror42 Software Collection の
enableスクリプトレットには、以下の行が含まれます。. scl_source enable %{scl_ruby}. scl_source enable %{scl_ruby}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 行の先頭にあるドットに注意してください。この行では、rh-ror42 Software Collection が起動すると、Ruby Software Collection が暗黙的に開始するため、ユーザーは scl enable rh-ruby23 rh-ror42 command の代わりに、scl enable rh-ror42 command のみを実行して、Software Collection 環境で command を実行できます。 - この rh-ror42-scldevel サブパッケージは、rh-ror42 Software Collection を拡張する Software Collection を構築する必要がある場合は利用できるようにすることができます。このパッケージは、rh-ror42 Software Collection を拡張するために使用できる
%{scl_ror}および%{scl_prefix_ror}マクロを提供します。 - rh-ror42 Software Collection の gems は別のルートディレクトリー構造にインストールされるため、rubygems ディレクトリーの正しい所有権が設定されていることを確認する必要があります。これは、スニペットを使用してファイル一覧 rubygems_filesystem.list を生成することで行います。root ファイルシステムに置かれた場合は、別の runtime パッケージが所有するディレクトリーをすべて所有するように設定することが推奨されます。rh-ror42 Software Collection の場合におけるそのようなディレクトリーの 1 つが Rubygem ディレクトリー構造です。
4.3.2. rh-ror42-rubygem-bcrypt パッケージ リンクのコピーリンクがクリップボードにコピーされました!
BuildRequiresタグの接頭辞は、%{scl_prefix}ではなく、%{?scl_prefix_ruby}になります。
4.3.3. rh-ror42 Software Collection の構築 リンクのコピーリンクがクリップボードにコピーされました!
- rh-ruby23 Software Collection に含まれる rh-ruby23-scldevel サブパッケージをインストールします。
rh-ror42.specを構築して、ror42-runtime パッケージおよび ror42-build パッケージをインストールします。rubygem-bcrypt.specをビルドします。
4.3.4. rh-ror42 Software Collection のテスト リンクのコピーリンクがクリップボードにコピーされました!
- rh-ror42-rubygem-bcrypt パッケージをインストールします。
- 次のコマンドを実行します。
scl enable rh-ror42 -- ruby -r bcrypt -e "puts BCrypt::Password.create('my password')"$ scl enable rh-ror42 -- ruby -r bcrypt -e "puts BCrypt::Password.create('my password')"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 出力に以下の行が含まれることを確認します。
$2a$10$s./ReniLY.wXPHVBQ9npoeyZf5KzywfpvI5lhjG6Ams3u0hKqwVbW
$2a$10$s./ReniLY.wXPHVBQ9npoeyZf5KzywfpvI5lhjG6Ams3u0hKqwVbWCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4. rh-perl524 Software Collection の拡張 リンクのコピーリンクがクリップボードにコピーされました!
- Perl モジュールを提供しないでください。
- rh-perl524 Software Collection が提供する Perl モジュールのみに依存します。
4.4.1. h2m144 Software Collection リンクのコピーリンクがクリップボードにコピーされました!
- h2m144 Software Collection メタパッケージには、以下のビルド依存関係セットがあります。
BuildRequires: %{scl_prefix_perl}scldevelBuildRequires: %{scl_prefix_perl}scldevelCopy to Clipboard Copied! Toggle word wrap Toggle overflow これは、rh-perl524-scldevel に展開されます。rh-perl524-scldevel サブパッケージには 2 つの重要なマクロ (%scl_perlおよび%scl_prefix_perl) が含まれます。Perl 依存関係ジェネレーターも提供します。マクロは、メタパッケージの spec ファイルの上部に定義されていることに注意してください。定義は必須ではありませんが、h2m144 Software Collection が rh-perl524 Software Collection に構築されるように設計されているという視覚的なヒントを提供します。フォールバック値としても機能します。 - h2m144-build サブパッケージには、以下の依存関係セットがあります。
Requires: %{scl_prefix_perl}scldevelRequires: %{scl_prefix_perl}scldevelCopy to Clipboard Copied! Toggle word wrap Toggle overflow これは、rh-perl524-scldevel に展開されます。この依存関係の目的は、h2m144 Software Collection のパッケージを構築する際にマクロと依存関係ジェネレーターを常に存在させることです。 - h2m144 Software Collection の
enableスクリプトレットには、以下の行が含まれます。. scl_source enable %{scl_perl}. scl_source enable %{scl_perl}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 行の先頭にあるドットに注意してください。この行では、h2m144 Software Collection が起動すると Perl Software Collection が暗黙的に起動されます。これにより、ユーザーは scl enable rh-perl524 h2m144 command のかわりに、scl enable h2m144 command だけを実行して Software Collection 環境で command を実行することができます。 - マクロファイル
macros.h2m144-configは Perl 依存関係ジェネレーターと、他のパッケージの spec ファイルで使用される特定の Perl 固有のマクロを呼び出します。
4.4.2. help2man パッケージ リンクのコピーリンクがクリップボードにコピーされました!
BuildRequiresタグの接頭辞は、%{scl_prefix}ではなく、%{?scl_prefix_perl}になります。
4.4.3. h2m144 Software Collection の構築 リンクのコピーリンクがクリップボードにコピーされました!
- perl524 Software Collection に含まれる rh-perl524-scldevel パッケージおよび rh-perl524-perl-macros パッケージをインストールします。
- h2m144.spec を構築して、h2m144-runtime パッケージおよび h2m144-build パッケージをインストールします。
- help2man のすべてのビルド要件である rh-perl524-perl パッケージ、rh-perl524-perl-Text-ParseWords パッケージ、および rh-perl524-perl-Getopt-Long パッケージをインストールします。
help2man.specをビルドします。
4.4.4. h2m144 Software Collection のテスト リンクのコピーリンクがクリップボードにコピーされました!
- h2m144-help2man パッケージをインストールします。
- 次のコマンドを実行します。
scl enable h2m144 'help2man bash'
$ scl enable h2m144 'help2man bash'Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 出力が以下の行と類似することが確認されます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第5章 Software Collections のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
5.1. Error: line XX: Unknown tag: %scl_package software_collection_name リンクのコピーリンクがクリップボードにコピーされました!
yum install scl-utils-build
# yum install scl-utils-build
5.2. scl command does not exist リンクのコピーリンクがクリップボードにコピーされました!
yum install scl-utils
# yum install scl-utils
5.3. Unable to open /etc/scl/prefixes/software_collection_name リンクのコピーリンクがクリップボードにコピーされました!
5.4. scl_source: command not found リンクのコピーリンクがクリップボードにコピーされました!
yum update scl-utils
# yum update scl-utils
付録A 詳細情報の入手 リンクのコピーリンクがクリップボードにコピーされました!
A.1. Red Hat 開発者 リンクのコピーリンクがクリップボードにコピーされました!
- Overview of Red Hat Software Collections on Red Hat Developers 『Red Hat Developers』 ポータルでは、さまざまな開発技術を使用してコードを開発するためのチュートリアルがいくつか紹介されています。これには、Node.js、Perl、PHP、Python、Ruby Software Collections が含まれます。
- Red Hat Developer Blog - 『Red Hat Developer Blog』 には、最新の情報、ベストプラクティス、意見、製品およびプログラムアナウンス、ならびに Red Hat の技術に基づくアプリケーションを設計および開発するユーザー向けのサンプルコードやその他のリソースへのポインターが含まれます。
A.2. インストールされているドキュメント リンクのコピーリンクがクリップボードにコピーされました!
- scl(1) - Software Collections を有効にし、Software Collection の環境でプログラムを実行する scl ツールの man ページです。
- scl --help - Software Collections を有効にし、Software Collection の環境でプログラムを実行する scl ツールの一般的な使用情報です。
- rpmbuild(8) - バイナリーパッケージとソースパッケージの両方を構築する rpmbuild ユーティリティーの man ページです。
A.3. Red Hat ドキュメントへのアクセス リンクのコピーリンクがクリップボードにコピーされました!
- Red Hat Software Collections 3.8 リリースノート - Red Hat Software Collections 3.8 の 『リリースノート』 では、主な機能と、動的なプログラミング言語、データベースサーバー、さまざまな関連パッケージを提供する Red Hat 製品である Red Hat Software Collections に関するその他の情報が含まれています。
- Red Hat Developer Toolset 12.1 User Guide - Red Hat Developer Toolset 12.1 の 『ユーザーガイド』 には、Red Hat Enterprise Linux プラットフォーム上の開発者向けの Red Hat 製品である Red Hat Developer Toolset に関する情報が記載されています。Software Collections を使用すると、Red Hat Developer Toolset は、GCC コンパイラー、GDB デバッガー、およびその他のバイナリーユーティリティーの現在のバージョンを提供します。
- Red Hat Software Collections 3.8 Container Images の使用 - 本書は、Red Hat Software Collections をベースとしたコンテナーイメージを使用する方法を説明します。利用可能なコンテナーイメージには、アプリケーション、デーモン、およびデータベースが含まれます。イメージは、Red Hat Enterprise Linux 7 Server および Red Hat Enterprise Linux Atomic Host で実行できます。
- Red Hat Enterprise Linux 7 開発者ガイド: Red Hat Enterprise Linux 7 の 『開発者ガイド』 では、Red Hat Developer Toolset 機能の詳細と、Red Hat Software Collections の概要と、ライブラリーおよびランタイムサポートに関する情報、コンパイルおよび構築、デバッグ、およびプロファイリングについて説明します。
- Red Hat Enterprise Linux 7 システム管理者のガイド - Red Hat Enterprise Linux 7 の 『システム管理者のガイド』 では、Red Hat Enterprise Linux 7 のデプロイメント、設定、および管理に関する情報を説明しています。
- Red Hat Enterprise Linux 6 開発者ガイド: Red Hat Enterprise Linux 6 の 『開発者ガイド』 では、Red Hat Developer Toolset 機能の詳細と、Red Hat Software Collections の概要と、ライブラリーおよびランタイムサポートに関する情報、コンパイルおよび構築、デバッグ、およびプロファイリングについて説明します。
- Red Hat Enterprise Linux 6 デプロイメントガイド - Red Hat Enterprise Linux 6 の 『デプロイメントガイド』では、Red Hat Enterprise Linux 6 のデプロイメント、設定、および管理に関する関連情報を提供します。
付録B 更新履歴 リンクのコピーリンクがクリップボードにコピーされました!
| 改訂履歴 | ||||
|---|---|---|---|---|
| 改訂 4.2-0 | Fri Jun 09 2023 | |||
| ||||
| 改訂 4.1-9 | Tue May 23 2023 | |||
| ||||
| 改訂 4.1-8 | Mon Nov 15 2021 | |||
| ||||
| 改訂 4.1-7 | Mon Oct 11 2021 | |||
| ||||
| 改訂 4.1-6 | Thu Jun 03 2021 | |||
| ||||
| 改訂 4.1-5 | Mon May 03 2021 | |||
| ||||
| 改訂 4.1-4 | Tue Dec 01 2020 | |||
| ||||
| 改訂 4.1-3 | Tue Oct 29 2020 | |||
| ||||
| 改訂 4.1-2 | Tue May 26 2020 | |||
| ||||
| 改訂 4.1-1 | Tue Apr 21 2020 | |||
| ||||
| 改訂 4.1-0 | Tue Dec 10 2019 | |||
| ||||
| 改訂 4.0-9 | Mon Oct 28 2019 | |||
| ||||
| 改訂 4.0-8 | Tue Jun 04 2019 | |||
| ||||
| 改訂 4.0-7 | Wed Apr 10 2019 | |||
| ||||
| 改訂 4.0-6 | Thu Nov 01 2018 | |||
| ||||
| 改訂 4.0-5 | Wed Oct 17 2018 | |||
| ||||
| 改訂 4.0-4 | Thu Apr 12 2018 | |||
| ||||
| 改訂 4.0-3 | Fri Mar 16 2018 | |||
| ||||
| 改訂 4.0-2 | Tue Oct 17 2017 | |||
| ||||
| 改訂 4.0-1 | Thu Aug 31 2017 | |||
| ||||
| 改訂 3.10-0 | Mon Jun 5 2017 | |||
| ||||
| 改訂 3.9-0 | Thu Apr 20 2017 | |||
| ||||
| 改訂 3.8-0 | Wed Apr 05 2017 | |||
| ||||
| 改訂 3.7-0 | Wed Jan 25 2017 | |||
| ||||
| 改訂 3.6-0 | Wed Nov 02 2016 | |||
| ||||
| 改訂 3.5-0 | Wed Oct 12 2016 | |||
| ||||
| 改訂 3.4-0 | Mon May 23 2016 | |||
| ||||
| 改訂 3.3-0 | Tue Apr 26 2016 | |||
| ||||
| 改訂 3.2-0 | Wed Nov 04 2015 | |||
| ||||
| 改訂 3.1-0 | Tue Oct 06 2015 | |||
| ||||
| 改訂 3.0-2 | Tue May 19 2015 | |||
| ||||
| 改訂 3.0-1 | Wed Apr 22 2015 | |||
| ||||
| 改訂 2.2-4 | Fri Nov 21 2014 | |||
| ||||
| 改訂 2.2-2 | Thu Oct 30 2014 | |||
| ||||
| 改訂 2.2-1 | Tue Oct 07 2014 | |||
| ||||
| 改訂 2.2-0 | Tue Sep 09 2014 | |||
| ||||
| 改訂 2.1-29 | Wed Jun 04 2014 | |||
| ||||
| 改訂 2.1-21 | Thu Mar 20 2014 | |||
| ||||
| 改訂 2.1-18 | Tue Mar 11 2014 | |||
| ||||
| 改訂 2.1-8 | Tue Feb 11 2014 | |||
| ||||
| 改訂 2.0-12 | Tue Sep 10 2013 | |||
| ||||
| 改訂 2.0-8 | Tue Aug 06 2013 | |||
| ||||
| 改訂 2.0-3 | Tue May 28 2013 | |||
| ||||
| 改訂 1.0-2 | Tue Apr 23 2013 | |||
| ||||
| 改訂 1.0-1 | Tue Jan 22 2013 | |||
| ||||
| 改訂 1.0-2 | Thu Nov 08 2012 | |||
| ||||
| 改訂 1.0-1 | Wed Oct 10 2012 | |||
| ||||
| 改訂 1.0-0 | Tue Jun 26 2012 | |||
| ||||
| 改訂 0.0-2 | Tue Apr 10 2012 | |||
| ||||
| 改訂 0.0-1 | Tue Mar 06 2012 | |||
| ||||