Я работаю в команде из 10+ разработчиков, и мы используем RHEL 6.4 как для наших машин разработки, так и для наших серверов (на которых развернуто наше программное обеспечение).
RHEL 6.4 поставляется с Boost 1.41, но мне нужны исправления, которые входят как минимум в 1.47. Я бы хотел обновиться до последней версии (сейчас 1.56).
Это не так просто, как загрузка исходного кода и сборка / установка, потому что:
Похоже, что у RedHat есть собственный запатентованный способ объединения / упаковки программного обеспечения / библиотек Boost в RPM. У них не только один RPM, но и ряд меньших RPM:
$ yum list installed|grep boost
boost.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-date-time.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-devel.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-filesystem.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-graph.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-iostreams.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-program-options.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-python.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-regex.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-serialization.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-signals.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-system.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-test.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-thread.x86_64 1.41.0-11.el6_1.2 @Workstation
boost-wave.x86_64 1.41.0-11.el6_1.2 @Workstation
Я гуглил и не могу найти легкого решения. Я также несколько новичок, когда дело доходит до RPM.
Как я могу собрать / развернуть Boost 1.56 в качестве RPM в нашей ситуации?
Создание RPMS само по себе является навыком. Бегите, не ходите, в ближайший магазин и купите копию книги «Максимальное число оборотов в минуту», 2-е издание, которая научит вас создавать RPMS.
Создание RPMS — это не совсем ракетостроение, но это не то, что можно объяснить несколькими параграфами здесь. Я не очень знаком с boost, но проверил перечисленные выше пакеты: в Fedora все они собраны из одного и того же RPM-пакета с исходным кодом. Это один пакет с исходным кодом, и, как часть построения RPM, скрипт сборки RPM автоматически разбивает его на несколько пакетов, например, тот, который вы видите. Итак, это действительно один пакет и скрипт сборки RPM.
Возможно, вам стоит попробовать пересобрать пакет надстройки Fedora из исходного RPM-пакета и посмотреть, работает ли он для вас. Последний пакет повышения для Fedora выглядит как 1.54, так что 1.56 еще даже не собран. По крайней мере, пока нет на Fedora 20. 21 бета может иметь более новый импульс; Я не знаю.
Попытка пересобрать из исходного RPMS стоит шот. Это не займет много времени, это будет либо работать, либо нет. Получите копию boost-1.54.0-9.fc20.src.rpm из репозитория загрузки Fedora; загрузите его на свой ящик RHEL и попробуйте посмотреть, что произойдет:
[user@localhost]$ rpmbuild --rebuild boost-1.54.0-9.fc20.src.rpm
Вы довольно быстро узнаете, сработает ли это или нет.
Но даже если это сработает, ты еще не в лесу. Boost не является двоичным ABI-совместимым между выпусками. Это означает, что, как только вы обновите свои буст-пакеты, вы почти гарантированно сломаете все имеющиеся у вас приложения, в том числе пакеты RHEL, которые ссылаются на буст; и rpm может или не может быть в состоянии поймать это. Так что, если вы доберетесь до этого, подготовьтесь к возможности перестроить кучу других RPMS без ускорения.
Сэм опубликовал общую стратегию (которая работает): загрузите исходную версию Boost 1.54 из Fedora 20 и измените ее для моих целей.
Вот дополнительная информация о том, как мне пришлось отредактировать файл boost.spec, чтобы переименовать RPM-файлы в jason-boost * и установить в / opt / install / thirdparty.
Переопределить макросы из /usr
(по умолчанию) /opt/install/thirdparty
, Добавить в начало файла:
# Override installation dirs. We don't want things to go into
# /usr (default) because they would overwrite the system Boost
# library.
%define _prefix /opt/install/thirdparty
%define _defaultdocdir /opt/install/thirdparty/share/doc
%define _mandir /opt/install/thirdparty/share/man
+ Изменить Name
от «буст» к «джейсон-буст»
Summary
в «Обновленная версия TBS LTE библиотеки Boost (без изменений)»+ Изменить toplev_dirname
От:
%define toplev_dirname %{name}_%{version_enc}
Для того, чтобы:
%define toplev_dirname boost_%{version_enc}
+ Изменить Source0
От:
Source0: http://downloads.sourceforge.net/%{name}/%{toplev_dirname}.tar.bz2
Для того, чтобы:
Source0: http://downloads.sourceforge.net/boost/boost_1_54_0.tar.bz2
Переименуйте подпакеты «boost» в «jason-boost»
Например.
От:
Requires: boost-atomic = %{version}-%{release}
Для того, чтобы:
Requires: jason-boost-atomic = %{version}-%{release}
Например.
От:
Requires: boost = %{version}-%{release}
Для того, чтобы:
Requires: jason-boost = %{version}-%{release}
добавлять --prefix=/opt/install/thirdparty
в bootstrap.sh
опции
От:
./bootstrap.sh --with-toolset=gcc --with-icu
Для того, чтобы:
./bootstrap.sh --with-toolset=gcc --with-icu --prefix=/opt/install/thirdparty
+ Изменить
От:
%{_includedir}/%{name}
Для того, чтобы:
%{_includedir}/boost
Сборка RPM без python3, mpich или openmpi. Python3 нелегко доступен, unden RHEL 6.4, а у mpich и openmpi есть множество других проблем с компиляцией.
rpmbuild -ba jason-boost.spec --without python3 --without mpich --without openmpi