在 Debian 和衍生产品(Mepis、Mint、Ubuntu)中从源代码重建软件包

在 Debian 和衍生产品(Mepis、Mint、Ubuntu)中从源代码重建软件包

我之前在 Ubuntu 12.04 Server 上安装了 cURL 7.22.0...但现在我需要升级到 cURL 7.30.0。

我已完成以下步骤来为 Ubuntu 编译此版本:

wget http://curl.haxx.se/download/curl-7.30.0.tar.gz

tar -xvzf curl-7.30.0.tar.gz

cd curl-7.30.0/

./configure --prefix=/usr

make clean

make

make install

完成所有这些操作后,我运行curl --version并希望看到安装的新版本。cURL 已按预期更新至 7.30.0,但 libcurl 还没有:

curl 7.30.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 libssh2/1.2.8 librtmp/2.3 Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtmp rtsp scp sftp smtp smtps telnet tftp Features: GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

但是,如果我运行,curl-config --version我会得到libcurl 7.30.0正确的结果。

有人能解释一下为什么版本号会有差异吗?以及如何让它们都显示正确的 7.30.0?

有人有任何教程/建议/任何帮助吗?恰当的将与 cURL 相关的所有内容升级到更高版本的方法。网上似乎非常缺乏这个主题,不知道为什么 :/

谢谢

编辑 -根据其中一条评论,这里有一些附加信息:

which curl-config给出/usr/bin/curl-config

which curl给出/usr/bin/curl

whereis curl给出curl: /usr/bin/curl /usr/include/curl /usr/share/man/man1/curl.1.gz /usr/share/man/man1/curl.1

whereis libcurl给出libcurl: /usr/lib/libcurl.a /usr/lib/libcurl.so /usr/lib/libcurl.la /usr/share/man/man3/libcurl.3

echo $PATH给出/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

答案1

我正在复制我为zabbix 维基希望对你有用。

在 Debian 和衍生产品(Mepis、Mint、Ubuntu)中从源代码重建软件包

本指南主要关注 Debian,尽管在其他衍生产品中从源代码构建应该基本相同。上游 文档 关于包管理的最终是最权威的智慧来源。

为什么应该选择打包而不是“make install”?

软件包在许多方面使您的生活在很多方面变得更加轻松:

  1. 您可以使用存储库轻松地在许多系统上部署软件包
  2. 您可以以干净的方式安装和删除它们
  3. 系统会为您跟踪对其他软件包的依赖关系
  4. 有一个更新配置文件的策略

源包在哪里?/

检查在官方存储库中可以找到哪些版本 DebianUbuntu

本指南针对以下场景

  1. 您正在使用 Debian 稳定版,并希望从源代码重建以更改一些默认选项
  2. 您正在使用 Debian 稳定版,并希望使用测试版或不稳定版
  3. 你想从上游源构建一个 deb 包
  4. 官方 Debian 打包系统的替代品

本指南的其余部分将假设命令由具有 sudo 访问权限的非 root 用户运行

$ sudo -l
  • 激活源存储库,在你的 sources.list 中
  • 安装构建、重新编译和打包所需的基础设施

    $ sudo aptitude 安装 build-essentials devscripts quilt

1. 您正在使用 Debian 稳定版,并希望重建源代码

当你想要激活/停用预编译二进制文件中默认构建的某些功能、应用额外的补丁、反向移植某个功能、使用编译时优化(针对特定平台)时,就会出现这种情况。硬化选项)。步骤如下:

创建临时目录以供工作

$ mkdir ~/temp && cd ~/temp

获取源码包

$ apt-get source curl 

deb-src或者(如果你的文件中没有sources.list 指向稳定版本的行),你可以从网上获取 .dsc 文件,对于当前稳定版本,该文件为

$ dget http://security.debian.org/debian-security/pool/updates/main/c/curl/curl_7.21.0-2.1+squeeze3.dsc 

两种替代方法中的任何一种都可以

  1. 从存储库获取源代码
  2. 验证包的加密签名
  3. 应用所有发行版特定补丁

检查 debian/rules makefile

$ cd curl*
$ vi debian/rules

这是打包过程的主要 makefile,在这里您可以查看可选的配置选项,还可以启用/禁用有关将要构建的所有包(服务器、代理、代理服务器)的功能

使用以下方式查看补丁被子

假设你对一个或多个发行版补丁感兴趣 不是正在应用。要检查源代码中有哪些可用的补丁,请使用

$ quilt series

检查已应用的补丁(此阶段列表应该相同)

$ quilt applied

恢复所有补丁

$ quilt pop -a

可选择删除不需要的

$ quilt delete -r $patch_name

应用其余补丁

$ quilt push -a

安装要重新编译的包的依赖项

$ apt-get build-dep curl

选择性地标记包

$ dch -l +local 'Rebuilt from sources'

如果您需要添加更详细的变更日志条目,请查看 dch 手册页。

最后重新编译包

$ debuild -us -uc

完成此过程后,在 zabbix-* 目录之外,您将找到刚刚编译的 deb 包,可以进行安装。

$ sudo dpkg -i $deb_package

2. 你正在使用 Debian 稳定版,并且想要使用测试版或不稳定版

这一过程被称为向后移植

采取以下预防措施

  • 该软件包可能根本不适合您
  • 为了构建它可能需要更新依赖项
  • 为了构建它可能需要额外的包
  • 包装布局可能已改变

该过程与为稳定版本重建的过程相同,但源包除外,源包可以从 apt 存储库中获取,使用 sources.list 中的类似行(请注意,只能选择其中一种)

deb-src http://ftp.de.debian.org/debian/ testing main non-free contrib
deb-src http://ftp.de.debian.org/debian/ unstable main non-free contrib

或者再次使用网络

$ dget http://ftp.de.debian.org/debian/pool/main/c/curl/curl_7.30.0-1.dsc

一个额外的预防措施是对软件包进行标记,以便在需要卸载时轻松识别。

$ dch -l ~local 'Sid backport'

该过程的其余部分是相同的,并且结果将是可以与其余部分一起安装的反向移植软件包。

3. 你想从上游源构建一个 deb 包

如果你想要或需要比 Sid 中更新的版本,你仍然可以查看实验 存储库,以及git 维护者的存储库,查看是否有正在进行的工作。除此之外,您还需要使用上游项目存储库,但您仍然可以从 Debian 打包结构中受益。为此,可以获取最新稳定版本或 alpha 版本的快照下载。因此,在从发行版(Debian 或 Ubuntu,视情况而定)存储库下载源包(如上所述)后,接下来的步骤将是(使用的版本可能有所不同):

 $ wget https://github.com/bagder/curl/archive/curl-7_30_0.zip
 $ mv master.zip curl-7.30.0.zip
 $ cd curl-${stable}
 $ uupdate ../curl-7.30.0.zip -v 7.30.0
 $ cd ../curl-7.30.0

此后,必须检查 debian/patches 中的所有补丁,以确定它们是否仍然有用或必须丢弃。使用 quilt 如上所述。完成重新编译过程标记

$ dch -l ~local 'Upstream packaging'

重建

$ debuild -us -uc

和安装

$ sudo dpkg -i $deb_package

包裹。

4. Debian 官方打包系统的替代品

有些人认为 Debian 打包系统过于复杂,但仍想从使用打包软件的优势中获益。有些项目正在尝试解决这种情况。这里给出了一个列表,但使用这些工具的细节留给读者作为练习。

相关内容