在<Debian、Ubuntu源码编译制作安装包(一)>文章中描述了dpkg基本制作安装包过程,本篇文章描述如何增加patch及解决出错问题。

章节预览:

5. 增加patch
6. 修改/跳过编译项
7. 错误解决
8. rpm源码包在Debian系列系统编译
目录预览

章节内容:

5. 增加patch

Debian系列系统制作或增加patch较为简单,即可以通过diff -Naur等指令制作patch,也可以直接修改源码,执行dpkg-buildpackage指定patch名称方式生成并增加patch。

patch存在的路径在debian/patches/,放入patch文件并在series文件中追加patch名称即可。

下面演示直接修改源码生成patch,进入openssl-1.1.1k文件夹并打开config:

图9 修改config文件

参考图9,我们在config文件中注释"-h This help."这一行,保存并退出文件。 接下来,在控制台中输入dpkg-buildpackage

图10 上游更改

参考图10,根据提示在控制台中输入dpkg-source --commit,然后输入patch名称(如"test.patch"),按回车键后选择编辑器,选择"2. /usr/bin/vim.basic"即可,然后保存退出编辑器:

图11 生成并增加patch

现在patch已经生成并自动追加入series文件,接下来,在控制台中输入dpkg-buildpackage

图12 生成deb安装包

编译完成,生成deb安装包。

6. 修改/跳过编译项

编译较为复杂的项目会遇到"测试失败"、"debug生成失败"等问题,这些问题一般不影响功能的实用性,可以通过修改编译项进行跳过。

打开debian/rules文件:

图13 默认rules文件

参考图13,使用默认rules文件编译过程可能会遇到一些问题,如执行./configure时参数不完整,控制台中会显示停止在dh_auto_configure,参考下图:

图14 停止在dh_auto_configure

这里我们可以通过在rules文件增加override_auto_configure及执行内容解决问题:

图15 增加dh_auto_configure及内容

实际编译过程中,我们可以通过停止时的编译信息判断出具体出错项,如dh_auto_make,可以通过override + _ + dh_auto_make组成make的重写项,之后编译将执行这部分内容。部分不重要的编译项,如test、debug等,可以通过定义编译项不实现内容,达到跳过效果:

override_auto_test:

7. 错误解决

编译过的源码会生成部分临时文件,若对源码某部分修改需要删除这些临时文件后才能再次编译

1. 根目录下临时文件一般以.开头,如.Version,编译失败时可以删除这个文件再次尝试编译;还有一些.开头的二进制文件,这些随项目生成,出错时排查一下.隐藏文件即可。

2. debian/changelog文件也会出现导致源码编译失败的情况

图16 changelog

changelog文件中的版本信息需要与压缩包一致,如压缩包命名为test_1.16.0-1.tar.gz,changelog文件中的版本需要是(1.16.0-1),版本不相同则会出错。

3. 当编译过的源码移植到别的机器编译时,需要注意一下debian/source/format文件。由于不同的机器quilt版本可能不同,在一个新机器编译之前,应先删除debian/source/format文件。

8. rpm源码包在Debian系列系统编译

rpm源码包在Debian系列系统有两种编译方式:

方式一

1. 通过rpm2cpio解决****.src.rpm,找到压缩包和patch文件;

2. 使用debmake -a 压缩包,生成源码文件夹;

3. 把所有patch文件拷贝到源码文件夹的debian/patches 内,并追加所有patch名称到series内;

4. 根据rpmbuild的编译规则(编译参数)写入debian/rules内,如增加override_auto_configure、override_auto_make等等;

5. 结合override_跳过部分可忽略编译项(根据编译情况来定);

方式二

这个方案主要针对patch文件比较多,并且dpkg编译不通过的情况下。

1. 在rpm系列系统中,执行rpmbuild -bp *****.spec,生成完整源码文件夹;

2. 压缩源码文件夹,注意版本号要一致;

3. 拷贝压缩包到dpkg系列系统,并执行debmake -a 压缩包,生成源码文件夹;

4. 根据rpmbuild的编译规则(编译参数)写入debian/rules内,如增加override_auto_configure、override_auto_make等等;

5. 结合override_跳过部分可忽略编译项(根据编译情况来定);

目录预览

<Debian、Ubuntu源码编译制作安装包(一)>

Debian、Ubuntu源码编译制作安装包(二)相关推荐

  1. Debian、Ubuntu源码编译制作安装包(一)

    Debian.Ubuntu系列linux操作系统制作安装包相较于CentOS更简便一些,如"dpkg -b"指令即可重新打包.如果需要源码级制作安装包则更困难一些,接下来,我们逐步 ...

  2. debian源码编译安装mysql5.6_MySQL 5.6 Linux Debian/Ubuntu源码编译安装 LNMP之MySQL

    安装所需依赖和工具apt-get install make gcc g++ libncurses5-dev cmake bison 配置cmake编译参数cmake . -DCMAKE_INSTALL ...

  3. 模仿qq客户端应用源码且带安装包

    这款源码案例是模仿qq客户端应用源码且带安装包,大家可以参考一下吧,也是比较完整的一款Android源码项目. 源码下载: http://code.662p.com/view/1931.html 00 ...

  4. linux下源码安装vim,ubuntu 源码编译安装最新的vim 8.0

    为什么要源码编译安装VIM? 因为我要安装ycm,但是ubuntu14.04仓库vim版本低 教程步骤: 1, 核对系统版本 2, 删除系统自带的vim 3, 编译安装vim 4, 检验vim的安装 ...

  5. ubuntu 源码编译libtorch

    ## pytorch/libtorch qq群: 1041467052 有一点儿感悟就是: 一定要去官网找一手资料,百度出来的都是个人根据官网来的,这个就随便看看了. 官网:https://githu ...

  6. git安装 perl ubuntu_【Git】Linux Ubuntu——源码编译安装Git 2.x 版本

    Git是一个开源的分布式版本控制系统,可以有效,高速的处理从很小到非常大的项目版本管理.Git与常用的版本控制工具CVS,Subversion等不同,它采用了分布式版本库的方式,不必服务器端软件支持. ...

  7. Ubuntu源码编译安装开源飞信OpenFetion

    基于 GTK2 的开源飞信最近发布了 1.8 版本,添加飞信群支持.本次 1.8 版本有如下更新: 添加了飞信群功能 添加了桌面位置记忆功能 修复了内存溢出等段错误 减小了大图标模式的图标尺寸 更换了 ...

  8. Ubuntu源码编译安装PCL

    ubuntu上可以通过命令apt install libpcl-dev安装PCL,但是一般版本都比较老,所以我喜欢下载最新的代码然后编译安装 步骤如下: 安装依赖以及第三方库:Boost,Eigen, ...

  9. php编译安装memcache,ubuntu源码编译安装memcached和php-memcache 扩展

    1.编译前,先确认gcc.make.patch等编译工具是否已安装,并可正常使用. 2.Libevent是一个异步事件处理软件函式库,以BSD许可证释出.Memcached  依赖Libevent,因 ...

最新文章

  1. supervisord+supervisorclusterctl+supervisord-monit
  2. C#_细说Cookie_Json Helper_Cookies封装
  3. vue插槽面试题_关于前端Vue框架的面试题,面试官可能会问到哪些。?
  4. python 面试宝典--集各家之所长,乱七八糟于一体
  5. PID控制器开发笔记之四:梯形积分PID控制器的实现
  6. arcgis xml 下载 切片_xml格式文件如何用arcgis进行编辑和更新
  7. ruby mysql 驱动_windows下Rails安装MySql驱动的配置
  8. concurrent包下的Exchanger练习
  9. vue限制只能输入数字_vue的input中,如何限制只能输入number
  10. ubuntu 文件及子文件夹的权限的查看及修改
  11. flowable工作流 流程变量_信也科技工作流平台的技术实践
  12. 想创业怕失败就不要轻易选择去创业
  13. Tomcat 映射虚拟目录
  14. Apache Flink Meetup · 北京站,1.13 新版本 x 互娱实践分享的开发者盛筵!
  15. 知识变现 常用课程制作实用工具大全(建议保存)
  16. 简单力场护盾效果ASE实现笔记
  17. mac清空废纸篓怎么恢复?
  18. 不用代码免费采集网站内容_看一遍就能上手的火车头采集图文全流程教程
  19. 三维视觉 | 03 MATLAB 单、双目相机标定
  20. 03.奇特的一生(笔记)

热门文章

  1. 知乎高赞:Serverless 能取代微服务吗?
  2. 2019年互联网实习高薪清单,看你有没有被倒挂
  3. 揭秘阿里中台!一文看懂阿里推荐业务的两大利器 | 赠书
  4. Hibernate VS Mybatis 的SQL不灵活通病如何解决?
  5. maven项目中整合grunt构建工具(二)-js合并、压缩技术
  6. 基于递归算法,树形结构数据下业务场景,封装解决方法
  7. 使用注解装配Bean
  8. WeTest功能优化第3期:业内首创,有声音的云真机
  9. 学习vi和vim编辑器(1):vi文本编辑器
  10. 把多个JavaScript函数绑定到onload事件处理函数上