検索

4.3. rh-ruby23 Software Collection の拡張

download PDF
Red Hat Software Collections 3.8 では、依存パッケージを追加して rh-ruby23 Software Collection を拡張できます。rh-ruby23 Software Collection が提供する Ruby 2.3 に構築される Ruby on Rails 4.2 (rh-ror42) Software Collection は、このような拡張機能の 1 つです。
本セクションでは、rh-ror42 Software Collection に含まれる rh-ror42-rubygem-bcryptメタパッケージと rh-ror42 パッケージの詳細情報を提供します。

4.3.1. rh-ror42 Software Collection

このセクションでは、rh-ror42 Software Collection の Ruby on Rails 4.2 メタパッケージのコメントされた例を説明します。rh-ror42 Software Collection は、rh-ruby23 Software Collection によって異なります。
rh-ror42 Software Collection のメタパッケージの例を以下に示します。
  • rh-ror42 Software Collection の spec ファイルには、以下のビルド依存関係セットがあります。
    BuildRequires: %{scl_prefix_ruby}scldevel
    BuildRequires: %{scl_prefix_ruby}rubygems-devel
    これは、rh-ruby23-scldevelrh-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
    パッケージが rh-ruby23 Software Collection に対して構築されると、rh-ruby23-runtimeに展開されます。
  • rh-ror42-build サブパッケージは、依存する Software Collection の scldevel サブパッケージに依存する必要があります。これは、この Software Collection の他のすべてのパッケージが同じマクロを定義しているため、同じ Ruby バージョンに対して構築されるようにするためです。
    %package build
    Requires: %{scl_prefix_ruby}scldevel
    rh-ruby23 Software Collection の場合には、rh-ruby23-scldevelに展開されます。
  • rh-ror42 Software Collection の enable スクリプトレットには、以下の行が含まれます。
    . scl_source enable %{scl_ruby}
    行の先頭にあるドットに注意してください。この行では、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 ディレクトリー構造です。
%global scl_name_prefix rh-
%global scl_name_base ror
%global scl_name_version 41

%global scl %{scl_name_prefix}%{scl_name_base}%{scl_name_version}

# Fallback to rh-ruby23. rh-ruby23-scldevel is unlikely to be available in
# the build root.
%{!?scl_ruby:%global scl_ruby rh-ruby23}
%{!?scl_prefix_ruby:%global scl_prefix_ruby %{scl_ruby}-}

# Do not produce empty debuginfo package.
%global debug_package %{nil}

# Support SCL over NFS.
%global nfsmountable 1

%{!?install_scl: %global install_scl 1}

%scl_package %scl

Summary: Package that installs %scl
Name: %scl_name
Version: 2.0
Release: 5%{?dist}
License: GPLv2+

%if 0%{?install_scl}
Requires: %{scl_prefix}rubygem-therubyracer
Requires: %{scl_prefix}rubygem-sqlite3
Requires: %{scl_prefix}rubygem-rails
Requires: %{scl_prefix}rubygem-sass-rails
Requires: %{scl_prefix}rubygem-coffee-rails
Requires: %{scl_prefix}rubygem-jquery-rails
Requires: %{scl_prefix}rubygem-sdoc
Requires: %{scl_prefix}rubygem-turbolinks
Requires: %{scl_prefix}rubygem-bcrypt
Requires: %{scl_prefix}rubygem-uglifier
Requires: %{scl_prefix}rubygem-jbuilder
Requires: %{scl_prefix}rubygem-spring
%endif
BuildRequires: help2man
BuildRequires: scl-utils-build
BuildRequires: %{scl_prefix_ruby}scldevel
BuildRequires: %{scl_prefix_ruby}rubygems-devel

%description
This is the main package for %scl Software Collection.

%package runtime
Summary: Package that handles %scl Software Collection.
Requires: scl-utils
# The enable scriptlet depends on the ruby executable.
Requires: %{scl_prefix_ruby}ruby

%description runtime
Package shipping essential scripts to work with %scl Software Collection.

%package build
Summary: Package shipping basic build configuration
Requires: scl-utils-build
Requires: %{scl_runtime}
Requires: %{scl_prefix_ruby}scldevel

%description build
Package shipping essential configuration macros to build %scl Software Collection.

%package scldevel
Summary: Package shipping development files for %scl
Provides: scldevel(%{scl_name_base})

%description scldevel
Package shipping development files, especially usefull for development of
packages depending on %scl Software Collection.

%prep
%setup -c -T

%install
%scl_install

cat >> %{buildroot}%{_scl_scripts}/enable << EOF
export PATH="%{_bindir}:%{_sbindir}\${PATH:+:\${PATH}}"
export LD_LIBRARY_PATH="%{_libdir}\${LD_LIBRARY_PATH:+:\${LD_LIBRARY_PATH}}"
export MANPATH="%{_mandir}:\${MANPATH:-}"
export PKG_CONFIG_PATH="%{_libdir}/pkgconfig\${PKG_CONFIG_PATH:+:\${PKG_CONFIG_PATH}}"
export GEM_PATH="\${GEM_PATH:=%{gem_dir}:\`scl enable %{scl_ruby} -- ruby -e "print Gem.path.join(':')"\`}"

. scl_source enable %{scl_ruby}
EOF

cat >> %{buildroot}%{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel << EOF
%%scl_%{scl_name_base} %{scl}
%%scl_prefix_%{scl_name_base} %{scl_prefix}
EOF


scl enable %{scl_ruby} - << \EOF
set -e

# Fake rh-ror42 Software Collection environment.
GEM_PATH=%{gem_dir}:`ruby -e "print Gem.path.join(':')"` \
X_SCLS=%{scl} \
ruby -rfileutils > rubygems_filesystem.list << \EOR
  # Create the RubyGems file system.
  Gem.ensure_gem_subdirectories '%{buildroot}%{gem_dir}'
  FileUtils.mkdir_p File.join '%{buildroot}', Gem.default_ext_dir_for('%{gem_dir}')

  # Output the relevant directories.
  Gem.default_dirs['%{scl}_system'.to_sym].each { |k, p| puts p }
EOR
EOF

%files

%files runtime -f rubygems_filesystem.list
%scl_files

%files build
%{_root_sysconfdir}/rpm/macros.%{scl}-config

%files scldevel
%{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel


%changelog
* Thu Jan 16 2015 John Doe <jdoe@example.com> - 1-1
- Initial package.

4.3.2. rh-ror42-rubygem-bcrypt パッケージ

以下は、rh-ror42-rubygem-bcrypt パッケージの spec ファイルのコメントされた例です。このパッケージは、bcrypt Ruby gem を提供します。bcrypt の詳細は、以下の Web サイトを参照してください。
rh-ror42-rubygem-bcrypt パッケージの spec ファイルと通常の Software Collection の spec ファイルの大きな違いは、以下のとおりです。
  • BuildRequires タグの接頭辞は、%{scl_prefix} ではなく、%{?scl_prefix_ruby} になります。
%{?scl:%scl_package rubygem-%{gem_name}}
%{!?scl:%global pkg_name %{name}}

%global gem_name bcrypt

Summary: Wrapper around bcrypt() password hashing algorithm
Name: %{?scl_prefix}rubygem-%{gem_name}
Version: 3.1.9
Release: 2%{?dist}
Group: Development/Languages
# ext/* - Public Domain
# spec/TestBCrypt.java - ISC
License: MIT and Public Domain and ISC
URL: https://github.com/codahale/bcrypt-ruby
Source0: http://rubygems.org/downloads/%{gem_name}-%{version}.gem
Requires: %{?scl_prefix_ruby}ruby(release)
Requires: %{?scl_prefix_ruby}ruby(rubygems) 
BuildRequires: %{?scl_prefix_ruby}rubygems-devel
BuildRequires: %{?scl_prefix_ruby}ruby-devel
BuildRequires: %{?scl_prefix}rubygem(rspec)
Provides: %{?scl_prefix}rubygem(bcrypt) = %{version}

%description
bcrypt() is a sophisticated and secure hash algorithm designed by The
OpenBSD project for hashing passwords. bcrypt provides a simple,
humane wrapper for safely handling passwords.

%package doc
Summary: Documentation for %{pkg_name}
Group: Documentation
Requires: %{?scl_prefix}%{pkg_name} = %{version}-%{release}

%description doc
Documentation for %{pkg_name}.

%prep
%setup -n %{pkg_name}-%{version} -q -c -T
%{?scl:scl enable %{scl} - << \EOF}
%gem_install -n %{SOURCE0}
%{?scl:EOF}

%build

%install
mkdir -p %{buildroot}%{gem_dir}
cp -pa .%{gem_dir}/* \
        %{buildroot}%{gem_dir}/

mkdir -p %{buildroot}%{gem_extdir_mri}
cp -pa .%{gem_extdir_mri}/* %{buildroot}%{gem_extdir_mri}/

# Prevent a symlink with an invalid target in -debuginfo (BZ#878863).
rm -rf %{buildroot}%{gem_instdir}/ext/

%check
%{?scl:scl enable %{scl} - << \EOF}
pushd .%{gem_instdir}
# 2 failutes due to old RSpec
# https://github.com/rspec/rspec-expectations/pull/284
rspec -I$(dirs +1)%{gem_extdir_mri} spec |grep '34 examples, 2 failures' || exit 1
popd
%{?scl:EOF}

%files
%dir %{gem_instdir}
%exclude %{gem_instdir}/.*
%{gem_libdir}
%{gem_extdir_mri}
%exclude %{gem_cache}
%{gem_spec}
%doc %{gem_instdir}/COPYING

%files doc
%doc %{gem_docdir}
%doc %{gem_instdir}/README.md
%doc %{gem_instdir}/CHANGELOG
%{gem_instdir}/Rakefile
%{gem_instdir}/Gemfile*
%{gem_instdir}/%{gem_name}.gemspec
%{gem_instdir}/spec


%changelog
* Fri Mar 21 2015 John Doe <jdoe@example.com> - 3.1.2-4
- Initial package.

4.3.3. rh-ror42 Software Collection の構築

rh-ror42 Software Collection を構築するには、以下を実行します。
  1. rh-ruby23 Software Collection に含まれる rh-ruby23-scldevel サブパッケージをインストールします。
  2. rh-ror42.spec を構築して、ror42-runtime パッケージおよび ror42-build パッケージをインストールします。
  3. rubygem-bcrypt.spec をビルドします。

4.3.4. rh-ror42 Software Collection のテスト

rh-ror42 Software Collection をテストするには、以下を実行します。
  1. rh-ror42-rubygem-bcrypt パッケージをインストールします。
  2. 次のコマンドを実行します。
    $ scl enable rh-ror42 -- ruby -r bcrypt -e "puts BCrypt::Password.create('my password')"
  3. 出力に以下の行が含まれることを確認します。
    $2a$10$s./ReniLY.wXPHVBQ9npoeyZf5KzywfpvI5lhjG6Ams3u0hKqwVbW
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.