Проблемы создания зависимой коллекции программного обеспечения с другим поставщиком
Итак, в интересах полного раскрытия информации создание RPM, включая Software Collections, на самом деле не моя ежедневная работа, поэтому извиняюсь, если я упустил очевидный трюк.
Моя цель состоит в том, чтобы создать коллекцию программного обеспечения, которая упаковывает несколько модулей Python (наш собственный код плюс некоторые зависимости, которые в настоящее время недоступны в основных коллекциях). Я бегу RHEL 6.4.
Подход, который я хотел бы использовать, заключается в том, чтобы зависеть от основных пакетов python27, где я могу (python27-python-2.7.5-10.el6.x86_64, python27-python-libs-2.7.5-10.el6.x86_64, python27-python-jinja2-2.6-10.el6.noarch и т. д.)
Следовательно, надежда состоит в том, что все, что уже доступно как часть коллекции python27, в конечном итоге находится ниже /opt/rh/python27 (стандарт), а все, что мне нужно добавить, находится ниже / opt / myorg / mycollection, с удалением из / opt / для чего-то нестандартного.
Для меня это выглядело как правильная стратегия, но если есть лучший альтернативный подход, я буду рад это услышать. Одна вещь, которая пришла мне в голову, это просто полностью упаковать python27 в нашу собственную коллекцию, но я не чувствовал себя лучшим маршрутом.
Итак, создав файл метапакета (см. Ниже), я решаю следующие проблемы:
- В файлах "/opt/rh/..." дважды указаны предупреждения о сборке метапакета. *
- (1) распространяется на пакеты, которые я собираю на основе метапакета.
* - Выпуск один раз, даже если я в точности пробую пример vt191, приведенный в Руководстве по пакетированию Software Collections v1.2 ("Расширение коллекций программного обеспечения python27 и python33", как это изначально было в http://developerblog.redhat.com/2014/03/27/building-software-collections-on-top-of-rhscl/
Я подозреваю, что проблема вращается вокруг некоторых предопределенных макросов (scl_prefix?), Но я не могу взломать его
Я буду очень признателен за помощь.
Metapackage Spec File.
%global scl_name_base myapp
%global scl_name_prefix myorg-
%global scl_name_version 122
# define name of the scl
%global scl %{scl_name_prefix}%{scl_name_base}%{scl_name_version}
%scl_package %scl
%global _scl_prefix /opt/myorg
# Defaults for the values for the python27 Software Collection. These
# will be used when python27-scldevel is not in the buildroot
%{!?scl_python:%global scl_python python27}
%{!?scl_prefix_python:%global scl_prefix_python %{scl_python}-}
# Only for this build, we need to override default __os_install_post, because
# the default one would find /opt/.../lib/python2.7/ and rpmbuild would
# try to bytecompile with the system /usr/bin/python2.7 (which doesn't exist)
%global __os_install_post %{%{scl_python}_os_install_post}
# Similarly, override __python_requires for automatic dependency generator
%global __python_requires %{%{scl_python}_python_requires}
# The directory for site packages for this Software Collection
%global myapp_sitelib %(echo %{python27python_sitelib} | sed 's|%{scl_python}|%{scl}|' | sed 's|/opt/rh|%{_scl_prefix}|')
%global myapp_sitearch %(echo %{python27python_sitearch} | sed 's|%{scl_python}|%{scl}|' | sed 's|/opt/rh|%{_scl_prefix}|')
Summary: Package that installs %scl
Name: %scl_name
Version: 1
Release: 1%{?dist}
License: TBD
BuildRequires: scl-utils-build
# Always make sure that there is the python27-sclbuild
# package in the buildroot
BuildRequires: %{scl_prefix_python}scldevel
# Require python27-python-devel, we will need macros from that package
BuildRequires: %{scl_prefix_python}python-devel
#TODO - On Near Completion, add all the runtime dependencies required. As per guide:
#Consider specifying all packages in your Software Collection that are essential for the Software
#Collection run time as dependencies of the metapackage. That way you can ensure that the
#packages are installed with the Software Collection metapackage.
#Need 27 backported subprocess32 module - Has threading fixes.
#Requires: %%{scl_prefix}python-subprocess32
%description
This is the main package for %scl Software Collection.
MyApp does stuff.
%package runtime
Summary: Package that handles %scl Software Collection.
Requires: scl-utils
Requires: %{scl_prefix_python}runtime
%description runtime
Package shipping essential scripts to work with %scl Software Collection.
%package build
Summary: Package shipping basic build configuration
Requires: scl-utils-build
# Require python27-scldevel so that there is always access
# to the %%scl_python and %%scl_prefix_python macros in builds for this Software
# Collection
Requires: %{scl_prefix_python}scldevel
%description build
Package shipping essential configuration macros to build %scl Software Collection.
#Do need an scldevel package to ship scl_name_base and scl_prefix macros?
%package scldevel
Summary: Package shipping development files for %scl
%description scldevel
Package shipping development files, especially useful for development of
packages depending on %scl Software Collection.
%prep
%setup -c -T
%install
%scl_install
#TODO - Further Update Path for everthing runtime on completion, especially paths.
# Create the enable scriptlet that:
# - Adds an additional load path for the Python interpreter.
# - Runs scl_source so that you can run:
# scl enable package "bash"
# instead of:
# scl enable python27 package "bash"
cat >> %{buildroot}%{_scl_scripts}/enable << EOF
. scl_source enable %{scl_python}
export PYTHONPATH=%{myapp_sitelib}:%{myapp_sitearch}${PYTHONPATH:+:${PYTHONPATH}}
EOF
mkdir -p %{buildroot}%{myapp_sitelib}
mkdir -p %{buildroot}%{myapp_sitearch}
# - Enable Software Collection-specific byte compilation macros from
# the python27-python-devel package.
# - Also override the %%python_sitelib and arch macro to point to the package Software
# Collection.
cat >> %{buildroot}%{_root_sysconfdir}/rpm/macros.%{scl}-config << EOF
%%scl_package_override() %%{expand:%{?python27_os_install_post:%%global __os_install_post %%python27_os_install_post}
%%global __python_requires %%python27_python_requires
%%global __python_provides %%python27_python_provides
%%global __python %python27__python
%%global __python2 %python27__python
%%global python_sitelib %myapp_sitelib
%%global python2_sitelib %myapp_sitelib
%%global python_sitearch %myapp_sitearch
%%global python2_sitearch %myapp_sitearch
}
EOF
#And add the scldevel macros specific to this scl
#Could possibly just go with above?
cat >> %{buildroot}%{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel << EOF
%%scl_%{scl_name_base} %{scl}
%%scl_prefix_%{scl_name_base} %{scl_prefix}
EOF
%files
%files runtime
%scl_files
%myapp_sitelib
%myapp_sitearch
%files build
%{_root_sysconfdir}/rpm/macros.%{scl}-config
%files scldevel
%{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel
%changelog
* Mon Jan 01 1970 John Doe <john.doe@anorg.com> - 1-1
- Initial package.