Как собрать / развернуть RPM для новой версии Boost на RHEL?

Я работаю в команде из 10+ разработчиков, и мы используем RHEL 6.4 как для наших машин разработки, так и для наших серверов (на которых развернуто наше программное обеспечение).

RHEL 6.4 поставляется с Boost 1.41, но мне нужны исправления, которые входят как минимум в 1.47. Я бы хотел обновиться до последней версии (сейчас 1.56).

Это не так просто, как загрузка исходного кода и сборка / установка, потому что:

  • Я хочу, чтобы у всех в нашей команде (включая будущих членов команды) был легкий доступ к новой версии Boost. Попросить всех собрать / установить — это много проблем и могут быть несоответствия.
  • Наше программное обеспечение развернуто как RPM-пакеты, которые устанавливаются на сотнях серверов (и эти серверы принадлежат другим командам и находятся вне нашего контроля). Они также работают RHEL 6.4. Наше программное обеспечение (предположительно) должно было бы во время выполнения работать с новыми общими библиотеками Boost на всех этих машинах.

Похоже, что у 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 в нашей ситуации?

4

Решение

Создание 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 без ускорения.

1

Другие решения

Сэм опубликовал общую стратегию (которая работает): загрузите исходную версию Boost 1.54 из Fedora 20 и измените ее для моих целей.

Вот дополнительная информация о том, как мне пришлось отредактировать файл boost.spec, чтобы переименовать RPM-файлы в jason-boost * и установить в / opt / install / thirdparty.

  1. Переименуйте boost.spec в jason-boost.spec. Затем отредактируйте jason-boost.spec следующим образом.
  2. Переопределить макросы из /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
    
  3. + Изменить Name от «буст» к «джейсон-буст»

  4. + Изменить Summary в «Обновленная версия TBS LTE библиотеки Boost (без изменений)»
  5. + Изменить toplev_dirname

    • От:

      %define toplev_dirname %{name}_%{version_enc}
      
    • Для того, чтобы:

      %define toplev_dirname boost_%{version_enc}
      
  6. + Изменить Source0

    • От:

      Source0: http://downloads.sourceforge.net/%{name}/%{toplev_dirname}.tar.bz2
      
    • Для того, чтобы:

      Source0: http://downloads.sourceforge.net/boost/boost_1_54_0.tar.bz2
      
  7. Переименуйте подпакеты «boost» в «jason-boost»

    • Например.

      • От:

        Requires: boost-atomic = %{version}-%{release}
        
      • Для того, чтобы:

        Requires: jason-boost-atomic = %{version}-%{release}
        
    • Например.

      • От:

        Requires: boost = %{version}-%{release}
        
      • Для того, чтобы:

        Requires: jason-boost = %{version}-%{release}
        
  8. добавлять --prefix=/opt/install/thirdparty в bootstrap.sh опции

    • От:

      ./bootstrap.sh --with-toolset=gcc --with-icu
      
    • Для того, чтобы:

      ./bootstrap.sh --with-toolset=gcc --with-icu --prefix=/opt/install/thirdparty
      
  9. + Изменить

    • От:

      %{_includedir}/%{name}
      
    • Для того, чтобы:

      %{_includedir}/boost
      
  10. Сборка RPM без python3, mpich или openmpi. Python3 нелегко доступен, unden RHEL 6.4, а у mpich и openmpi есть множество других проблем с компиляцией.

    rpmbuild -ba jason-boost.spec --without python3 --without mpich --without openmpi
    
3

По вопросам рекламы [email protected]