安装向后移植而不是从源代码构建可能更容易。默认情况下,基于 RHEL 的发行版包括安全修复的向后移植。什么都不必做!您可以检查使用,即安全修补程序rpm -q --changelog httpd | grep CVE
的httpd
软件包。请考虑将其读为 CentOS 具有看似较旧版本的软件包的原因。如果您不喜欢此功能,请考虑使用其他一些使用前沿的发行版,是的,它是一个功能。如果您知道这一点,请继续阅读。
看来从网上的不同文章来看,在稳定的 CentOS 上安装源码包要特别小心,因为你破坏了系统的配置。此外,您永远不能以 root 身份构建软件包,因为在构建软件包时会尝试将其自身安装在系统上,在这种情况下建议使用两个终端,一个用于安装工具,yum
另一个用于构建软件包。也就是说,让我们打破你的系统:D。
在构建任何包之前,您需要正确的工具集(就像其他任何东西一样),因此您必须开始下载用于构建表单源的基本工具集:
$ sudo yum groupinstall "Development Tools"
$ sudo yum install rpm-build
Run Code Online (Sandbox Code Playgroud)
一些最近的软件包将需要包含在redhat-rpm-config
以下内容中的某些宏和脚本:
$ sudo yum install redhat-rpm-config
Run Code Online (Sandbox Code Playgroud)
也就是说,根据您尝试构建的包/源,您可能需要比这更多的标头。事先搜索特定的构建依赖项就足够了。
下一步是在您的主目录下创建构建 RPM 所需的文件和目录。如前所述,为了避免可能的系统库和其他文件损坏,您永远不应该使用 root 用户构建 RPM。为此,您应该始终使用非特权用户。
现在,让我们在您的主路径中创建目录结构:
$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
Run Code Online (Sandbox Code Playgroud)
我们需要编写~/.rpmmacros
,您应该检查您是否没有或备份当前的。
$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
Run Code Online (Sandbox Code Playgroud)
在此之后,您的系统应该准备好构建大多数 RPM 包,而无需再四处闲逛。
你听说过make
吗?好吧,我们还没有安装它。所以,让我们把手(手指)开始工作:
$ sudo yum install make
Run Code Online (Sandbox Code Playgroud)
此外,您可能需要一些C
库来构建一些在...中完成的包C
?
# yum install gcc
Run Code Online (Sandbox Code Playgroud)
正如我之前所说,您可能需要更多的库,但这取决于您正在构建的软件。通常这些文件以 结尾-devel
,因此如果软件包告诉zlib
您需要安装zlib-devel
.
.spec
你一定已经拿到了你的tar.gz
文件。如果没有,还等什么!?获得源后,您必须创建.spec
文件。这相当于debian/*
Debian 类系统中的文件,因为它们包含有关您将要构建的软件包的规则和信息。
这是从某处复制的示例:
#
# Example spec file for cdplayer app...
#
Summary: A CD player app that rocks!
Name: cdplayer
Version: 1.0
Release: 1
Copyright: GPL
Group: Applications/Sound
Source: ftp://ftp.gnomovision.com/pub/cdplayer/cdplayer-1.0.tgz
URL: http://www.gnomovision.com/cdplayer/cdplayer.html
Distribution: WSS Linux
Vendor: White Socks Software, Inc.
Packager: Santa Claus <sclaus@northpole.com>
%description
It slices! It dices! It's a CD player app that
can't be beat. By using the resonant frequency
of the CD itself, it is able to simulate 20X
oversampling. This leads to sound quality that
cannot be equaled with more mundane software...
Run Code Online (Sandbox Code Playgroud)
我认为到这里为止,一切都必须是不言自明的。但我们也应该在这里编写构建包的规则、准备工作等,但我会尽量让每个人都更容易,所以让我们使用宏:
%prep
%setup
Run Code Online (Sandbox Code Playgroud)
前几行的%prep
意思是准备,应该是升级、安装包之前要做的动作。您也可以手动制定自己的规则,但要真诚,这很痛苦。既然我们已经结束了,下一节是%build
,很容易知道这里发生了什么;)
%build
make
Run Code Online (Sandbox Code Playgroud)
您可以根据需要个性化此部分,使用BUILD_PARAMETERS="--some-switch"
,这当然取决于您的源包。现在%install
部分:
%install
make install
Run Code Online (Sandbox Code Playgroud)
这里没有火箭科学。所以只剩下一个部分,%files
:
%files
%doc README
/usr/local/bin/cdp
/usr/local/bin/cdplay
/usr/local/man/man1/cdp.1
Run Code Online (Sandbox Code Playgroud)
此部分列出了要包含在包中的所有文件,如果不设置此部分,则包将有效为空!%doc
文档的代表......你已经知道了。现在,如何选择要包含在该%files
部分中的文件?让我们引用:
由于应用程序的大部分文件是由其 makefile 安装的,RPM 无法控制构建过程的那部分,因此无法自动确定哪些文件应该是包的一部分。有些人试图使用修改版本的 install 来记录它安装的每个文件的名称。但并非每个 makefile 都使用 install,或者如果使用了,也会偶尔使用它。
另一种尝试的方法是获取构建系统上每个文件的列表,在构建前后立即,并将差异用作文件列表。虽然这种方法肯定会找到应用程序安装的每个文件,但它也可以找到无关的文件,例如系统日志、/tmp 中的文件等。开始使这种方法可行的唯一方法是在构建系统上不做任何其他事情,这是非常不方便的。这种方法还排除了在任何给定时间在系统上构建多个包的情况。
目前,创建文件列表的最佳方法是读取 makefile 以查看它安装了哪些文件,对照构建系统上安装的文件进行验证,然后创建列表。
取决于你怎么做:)。
好吧,您已经有了一个.spec
可以工作的简单文件。但是,世界不是玫瑰,在某些情况下这行不通,因此您可能需要更复杂的构建步骤。我发现本指南很容易理解,可能会对您有所帮助。
资料来源:
归档时间: |
|
查看次数: |
3545 次 |
最近记录: |