我在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?
答案 0 :(得分:3)
Sam发布了一般策略(可行):从Fedora 20下载Boost 1.54源RPM并根据我的目的进行修改。
以下是我必须编辑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
从“提升”改为“jason-boost”
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”
E.g。
自:
Requires: boost-atomic = %{version}-%{release}
要:
Requires: jason-boost-atomic = %{version}-%{release}
E.g。
自:
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
在没有python3,mpich或openmpi的情况下构建RPM。 Python3不容易使用unden RHEL 6.4和mpich和openmpi有各种其他编译麻烦。
rpmbuild -ba jason-boost.spec --without python3 --without mpich --without openmpi
答案 1 :(得分:1)
构建RPMS本身就是一项技能。跑步,不要走路,到最近的商店,买一本“最高转速”书,第2版,它将教你如何建立RPMS。
构建RPMS并不完全是火箭科学,但这里不能解释几段。我不太熟悉boost,但是快速检查上面列出的软件包:在Fedora上,所有这些软件包都是从同一个源RPM构建的。它是一个单一的源代码包,并且,作为构建RPM的一部分,RPM构建脚本会自动将其打包成多个包,就像您看到的那样。所以,它实际上是一个包,以及RPM构建脚本。
尝试从源RPM重建Fedora的boost程序包可能值得一试,看看它是否适合你。最新的Fedora升级包似乎是1.54,所以1.56甚至还没有建成。至少还没有使用Fedora 20. 21 beta可能会有更新的推动力;我不知道。
尝试从源RPMS重建是值得一试的。它不会花很长时间,它既可以工作,也可以不工作。从Fedora的下载库获取boost-1.54.0-9.fc20.src.rpm的副本;将它下载到您的RHEL框中,并尝试查看会发生什么:
[user@localhost]$ rpmbuild --rebuild boost-1.54.0-9.fc20.src.rpm
你会很快知道它是否有效。
但即使这项工作,你还没有成为森林。 Boost在版本之间不是二进制ABI兼容的。这意味着,只要您更新了boost软件包,就几乎可以保证打破现有的任何应用程序,包括连接boost的RHEL软件包;和rpm可能会或可能不会捕获。所以,如果你做到这一点,也要为重建一堆其他非增强RPMS的可能性做好准备。