问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用源代码构建一个可用的 Ubuntu 软件包

发布网友 发布时间:2022-04-26 08:32

我来回答

1个回答

热心网友 时间:2022-06-25 20:50

用dpkg-source -x
foo.dsc从foo.orig.gz和foo.diff.gz创建工作目录foo:一份发行版中立的源码目录,加上一个debian目录以及目录下的meta文件,就构成了一份可以生成二进制deb包的源码工作目录。其实从apt-get
source抓下来的目录,已经是通过dpkg-source -x解压过的了。dpkg-source
-x所做的主要事情就是1.解压;2.把foo.diff.gz里的patch打到原始文件上。生成的foo目录下的源文件,都已经是打过deb源码包里的patch了的。
在foo目录下,执行dpkg-buildpackage -us
-uc构建包。-us和-uc参数是不做签名,适合于本地构建本地使用的情况。这个命令的输出有两个,一个是二进制deb包,另一个是源码包,为什么这里还要生成源码包?因为你可能改动某些文件,那么会生成新的diff.gz来记录所有你针对原始源码的改动,不管发布还是保存更改都更方便,下一次你只需要在生成的新的.dsc文件上执行dpkg-source -x就可以产生一个一模一样的源码了。如果你什么都没改动,那么新产生的源码包同你构建所来源的源码包是一样的。你也可以用参数-b和-S来控制这次构建只产生二进制包或者只产生源码包。
两个最重要的meta文件,debian/control和debian/rules。control文件决定了哪些二进制包将从这份源码目录中构建,一个源码目录往往是好几个二进制包的输入源。你不想生成哪个屏蔽它就行。二进制包的运行时依赖关系也在包的声明中可见,并且control文件也声明了构建过程中的依赖,不过可以给dpkg-buildpackage传-d参数来忽略构建依赖。
debian/rules文件其实就是个Makefile,你可以执行make -f debian/rules target来单独执行某个目标。rules文件里基本上都是对debhelper脚本函数的调用,像是dh_*这样的函数,它们负责大部分的构建过程。常用的clean, install目标在rules文件中也有,有些基于源码包的Makefile上所做的事情如make clean需要通过make -f debian/rules clean来代替。
和传统意义的Make过程有点不一样的就是,默认状态下,每次dpkg-buildpackage,其实都是把从configure.ac生成configure脚本,到生成Makefile,到构建source,到安装binary都做一遍,哪怕你并没有改过configure.ac,或者改过源代码.c文件,假如构建失败了,就需要尝试改动源代码重新构建,有时候需要反复尝试这个过程直到构建成功,如果包很大的话那需要花费的时间就很长,这时传入-nc参数可以让dpkg-buildpackage保留当前的构建结果,就像传统的make一样只会从出错的地方重新开始。当然,当对源代码的改动终止后,最后还是需要再执行一遍不带-nc参数的命令”dpkg-buildpackage -us -uc”来重新完全构建一遍,否则在生成源码包时可能会出错。
dpkg-buildpackage不用担心它会自动改变你的源文件(即通过dpkg-source
-x产生的文件),当然前提是你确实改动的是”源”文件,比如是configura.ac而不是configure,是dkms.conf.in而不是dkms.conf。
构建软件时做得最多的事就是根据自己系统的需求调整./configure参数了吧,比如–enable–xxx或者–disable-xxx,在rules文件中,通过带override前缀的target可以起到为默认的target定制参数的目的,如override_dh_auto_xconfigure:
对源码包有修改最好通过dch -i来生成一个新的changelog文件,每个change item的title部分都是表示这次change的最新版本号,dpkg-buildpackage的输出二进制包的版本号其实就是从changelog里提取的(不是写在control文件里的)。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎么考经纪人 如何去除白墙上的彩笔字 消除墙上彩笔的小妙招 保健器械 淘宝:淘宝网上卖的medex护腰,护膝,护腕 等医疗器械、是不是... 淘宝上有卖沃尔康护腰的吗?有链接吗? 跪求 黄家强 清唱吧《海阔天空》 96年、黄家强唱的祝你愉快,海阔天空在哪可以下载? 黄家强1996年唱的海阔天空MP3哪有下载啊? 朱关田作品 书画名家朱关田 朱关田代表作 【欣赏 价格 图片 鉴定... 用肝病冷藏食品比用冰好的理由是 杜长明相关成果 越狱后源怎么使用 如何使用软件源代码 IE 7 浏览器里的源是干什么的,怎么用呢? 如何使用源代码? 如何使用源代码 现在有一体4k3d蓝光硬盘播放机吗 4K UHD蓝光 开博尔4K蓝光播放器可以播吗? 4K蓝光盘可以在普通蓝光播放器里播放吗 买蓝光原盘,4k的光碟,有播放机,但是电视不是4k的 有影响吗? 芝杜z9s 4K蓝光播放器怎么样? 4K蓝光硬盘播放器可以看直播吗 现在市面上销售的UHD4K蓝光播放器有哪几款? 哪款4k蓝光播放器支持蓝光原盘片源? 用php 可以实现扫码枪 扫码后 录入商品信息么? php中BarCode128生成条形码怎么调整长度 php投票的条形柱状图和百分比该怎么做 thinkphp如何生成条形码? php生成竖排条形码 正常都是横着的 现在需求竖着的 不能旋转旋转后的条形码失真不清晰有前辈可以帮助下么 怎么用php生成18位条形码 php 条形码可以不要下面文 字吗 如何用源代码保存图片。 源代码怎么用的? 源码怎么使用 c语言如何使用其他源文件 如何用源代码建站,我下载了源代码,不知道从何下手啊?请各位大虾救急,谢谢! 不完美越狱后cydia怎么用软件源 源代码怎么用呀 如何利用源文件下载网站的电影?? 网上下载的源代码怎么用啊 金立手机s5.5怎么设置锁屏照片 金立s5怎么设置故事锁屏壁纸 损失补偿原则的内容有哪些 损失补偿原则指的是? 保险原则损失补偿原则 简述损失补偿原则的含义 取自古典诗词歌赋的好名字大全 刘姓男宝宝取名,希望能从楚辞或古诗词中取名,请大家帮忙,衷心的感谢... 姓李男孩取名大全 (古诗词取名)? 古诗大全快!!! qq黄钻1级能干什么?