查看“Deb包管理向导”的源代码
来自Ubuntu中文
←
Deb包管理向导
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
== dpkg的编译安装 == 核心软件包的编译: dpkg的编译: <pre> git clone http://anonscm.debian.org/git/dpkg/dpkg.git cd dpkg ./configure --prefix=/usr --with-admindir=/var/lib/dpkg make && make install </pre> 编译完成后,需要手动配置dpkg: mkdir -pv /var/lib/dpkg/touch /var/lib/dpkg/status dpkg打包相关的一些命令会依赖如下Perl模块 ==== TimeDate Perl模块 ==== <pre> wget http://mirrors.btte.net/CPAN/authors/id/G/GB/GBARR/TimeDate-1.20.tar.gz tar -xvpf TimeDate-1.20.tar.gz cd TimeDate-1.20 perl Makefile.PL && make && make install </pre> ==== 安装TermReadKey-2.14 ==== ln -sv /usr/bin/gcc /usr/bin/cc <pre> wget http://mirrors.xmu.edu.cn/CPAN/authors/id/J/JS/JSTOWE/TermReadKey-2.30.tar.gz tar -xvpf TermReadKey-2.30.tar.gz cd TermReadKey-2.30 perl Makefile.PL && make && make install </pre> ==== 安装 libxml2-2.9.0 ==== <pre> wget http://xmlsoft.org/sources/libxml2-2.9.0.tar.gz tar -xvpf libxml2-2.9.0.tar.gz cd libxml2-2.9.0 ./configure --prefix=/usr --disable-static && make make install </pre> ==== 安装libxslt ==== <pre> wget http://xmlsoft.org/sources/libxslt-1.1.27.tar.gz tar -xvpf libxslt-1.1.27.tar.gz cd libxslt-1.1.27 ./configure --prefix=/usr --disable-static && make make install </pre> ==== 安装gettext ==== <pre> wget http://mirrors.163.com/cpan/authors/id/P/PV/PVANDRY/gettext-1.05.tar.gz tar -xvpf Gettext-0.01.tar.gz cd Gettext-0.01 perl Makefile.PL && make && make install </pre> ==== SGMLSpm ==== <pre> wget http://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/authors/id/R/RA/RAAB/SGMLSpm-1.1.tar.gz tar -xvpf SGMLSpm-1.1.tar.gz cd SGMLSpm-1.1 perl Makefile.PL && make && make install </pre> ==== Text-WrapI18N-0.06 ==== <pre> wget http://mirrors.ustc.edu.cn/CPAN/authors/id/K/KU/KUBOTA/Text-WrapI18N-0.06.tar.gz tar -xvpf Text-WrapI18N-0.06.tar.gz cd Text-WrapI18N-0.06 perl Makefile.PL && make && make install </pre> == dpkg-dev的编译安装 == ==== File-FcntlLock-0.14 ==== <pre> wget http://mirrors.btte.net/CPAN/authors/id/J/JT/JTT/File-FcntlLock-0.14.tar.gz tar -xvpf File-FcntlLock-0.14.tar.gz cd File-FcntlLock-0.14 perl Makefile.PL && make && make install </pre> ==== Unicode-LineBreak ==== <pre> wget http://mirrors.btte.net/CPAN/authors/id/N/NE/NEZUMI/Unicode-LineBreak-2012.10.tar.gz tar -xvpf Unicode-LineBreak-2012.10.tar.gz cd Unicode-LineBreak-2012.10 perl Makefile.PL && make && make install </pre> ==== dh-make ==== <pre> git clone git://anonscm.debian.org/collab-maint/dh-make.git cd dh-make dpkg-buildpackage </pre> ==== 安装 po4a ==== <pre> wget http://alioth.debian.org/frs/download.php/3786/po4a-0.44.tar.gz tar -xvpf po4a-0.44.tar.gz cd po4a-0.44 dpkg-buildpackage </pre> ==== 安装 debhelper ==== <pre> git clone git://git.debian.org/git/debhelper/debhelper.git cd debhelper </pre> dpkg依赖关系:LFS额外的软件包:TimeDate debhelper 依赖关系: perl , po4a-0.41 po4a 依赖关系:TermReadKey-2.14 == 首次 "Debian" == 所谓的“Debian化”是指:当我们获取上游社区发布的软件包后,需要对软件包里面的内容进行调整,以适应deb打包的需要,所幸的是现在这个工作不需要过多的手动操作,我们可以使用 dh-make 这个工具可以很简单地帮助您作“Debian化”。 我们以GNU官方的tar-1.2.6.tar.gz为例子来演示如何使用dh-make “Debian化”一个上游源码包,获取源码: <pre> wget http://ftp.gnu.org/gnu/tar/tar-1.26.tar.bz2 </pre> 将源码解后进入源码目录,执行命令: <pre> tar -xvpf tar-1.26.tar.bz2 cd tar-1.26 dh_make -e regulus_cn@163.com -f ../tar-1.26.tar.bz2 ... </pre> == debian/rules示例 == rules文件本质上是一个Makefile文件,这个Makefile文件定义了创建deb格式软件包的规则。打包工具按照rules文件指定的规则,完成编译,将软件安装到临时安装目录,清理编译目录等操作,并依据安装到临时目录的文件来生成deb格式的软件包。 rules文件一般会包含,”binary-arch”, ”binary-indep”,”binary”,”build”, ”clean”, ”install”, 等targets。 debian/rules 示例: <pre> #!/usr/bin/make -f binary:build install dh_makeshlibs dh_shlibdeps dh_installdeb dh_gencontrol dh_md5sums dh_builddeb binary-indep: binary binary-arch: binary build: ./configure --prefix=/usr --sysconfdir=/etc --mandir=/usr/share/man --localstatedir=/var make -j16 install: dh_auto_install clean: dh_auto_clean rm -rf debian/xorg .PHONY: build clean binary-indep binary-arch binary install </pre> == dh命令简要解析 == dh是debhelper包中的命令序列,dh开头的命令主要用于简化rules文件的编写,把一些通用的重复的操作用perl命令来代替。 下面是一些dh命令和实际对应执行的操作的简要介绍 <pre> dh_auto_clean make distclean dh_auto_configure ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var ... dh_auto_build make dh_auto_test make test dh_auto_install make install DESTDIR=/path/to/package_version-revision/debian/package </pre> 以上的targets 如果需要 fakeroot 操作,则需要加上dh_testroot,下面还有一些功能性的操作 <pre> dh_makeshlibs dh_shlibdeps 自动生成软件包的依赖关系 dh_installdeb </pre> == deb包的执行脚本 == 许多软件安装前或安装后都需要进行一些设置工作,deb格式的软件安装过程执行的操作是由如下脚本来控制的 <pre> debian/preinst 安装前执行脚本 debian/postinst 安装后执行脚本 debian/prerm 卸载前执行脚本 debian/postrm 卸载后执行脚本 </pre> === debian/preinst === <pre> #!/bin/sh if [ "$1" = "upgrade" ] || [ "$1" = "install" ];then 需要执行的脚本 fi </pre> === debian/postinst === <pre> #!/bin/sh set -e if [ "$1" = "configure" ]; then ldconfig fi </pre> === debian/prerm === <pre> if [ "$1" = "remove" -o "$1" = "deconfigure" ]; then 需要执行的脚本 fi </pre> === debian/postrm === <pre> #!/bin/sh if [ "$1" = "purge" ] ; then 需要执行的脚本 fi </pre> == dsc源码包格式 == 在 man dpkg-source 中包含 deb 源代码新格式的一些介绍,也许有的朋友会感兴趣。 * 一.新格式的优点 支持 bzip2、lzma (估计就是 7z 格式)、gzip 压缩格式 支持多个上游 tarballs 支持包含二进制文件,旧格式使用 diff 文件(diff.gz)来存储打包过程中对源代码的改变,而 diff 文件是处理文本文件的,所以如果想添加一个二进制文件(比如 png 图标),就需要使用 uuencode 把二进制文件转换为文本文件,比较麻烦不需要因为 strip debian 目录而重新打包上游 tarball(debian 目录在 deb 源代码包解压缩的时候自动被.debian.tar.{gz,bz2,lzma}里面的设为首页内容取代)Debian-specific 的改变现在不是保存在单一的 .diff.gz 文件里面而是保存在 debian/patches/ 下的多个 patch 文件里。这种处理方式和 quilt 的处理方式兼容但不需要使用 quilt,因为 dpkg-source 可以处理所有的事情,它在解压缩过程中使用 patch 文件,在构建二进制包的过程中更新 patch series NMU workflow is now really: unpack, hack, rebuild (for all 3.0 (quilt) packages). * 二.新格式的种类 <pre> Format:1.0 Format:2.0 Format:3.0 (native) Format:3.0 (quilt) Format:3.0 (git) Format:3.0 (bzr) </pre> * 三.Format:1.0 格式介绍 这个是原来的格式:一个 .dsc 文件,一个 .orig.tar.gz 文件,一个 .diff.gz 文件 * 四.Format:2.0 格式介绍 这个格式不建议广泛使用,是个过渡格式 * 五.Format:3.0 (native) 格式介绍 这个格式是 Format:1.0 的扩展,可以支持多种压缩方式{gz,bz2,lzma} * 六.Format:3.0 (quilt) 格式介绍 这个格式可能被 debian 的下一个版本采用,它是 Format:2.0 的扩展,因为它补丁的处理方式和 quilt 兼容,所以如此命名 源代码包的组成: 一个 .orig.tar.{gz,bz2,lzma}压缩包,这个包是上游源代码更名后得到的 一个 .debian.tar.{gz,bz2,lzma}压缩包,这个包包含了 debian 化的所有更改 零个或者多个 .orig-.tar.{gz,bz2,lzma},比如:.orig-hello.tar. {gz,bz2,lzma} 或 .orig-world.tar.{gz,bz2,lzma}。这是为了支持多个上游 tarball 一个 .dsc 文件 源代码包的解压缩:orig 包首先解压缩,产生一个目录,比如:helloworld_0.1.1.orig.tar.gz 就会生成 helloworld-0.1.1 这个包含上游源代码的目录所有 orig- 解压缩,产生一个目录,比如:helloworld_0.1.1.orig-toy.tar.gz 就会生成 helloworld-0.1.1/toy/ 目录,这个目录包含 helloworld_0.1.1.orig-toy.tar.gz 里面所有的内容,原来存在的 helloworld-0.1.1/toy/ 将被取代 (man dpkg-source 这一段没有看懂,可能理解有误。) debian 包解压缩,生成 debian 目录,比如:helloworld_0.1.1.debian.tar.gz 就会生成 helloworld-0.1.1/debian/ 目录,原来存在的这个目录在这个过程中将被删除….注意:debian.tar.{gz,bz2,lzma}里面必须包含一个 debian 目录,它也可以包含二进制文件。 应用补丁:文件 debian/patches/debian.series 或者 debian/patches/series 里面罗列的补丁。补丁必须是 patch -p1 的。补丁也可以删除文件。如果在解压缩过程中应用了某些补丁,那么 debian/patch/.dpkg-source-applied 文件会记录它们。 和 quilt 的默认相似,这里使用补丁也可以删除文件 源代码包的构建: 更新 debian-changes- 补丁:当前目录中所有的源代码包 (orig 包,component 包) 都会解压缩到一个临时目录中,然后 debian 目录也拷贝到这个临时目录最后打上除 debian-changes- 补丁外的所有补丁,比较临时目录和源代码所得补丁(如果不同),会保存为 debian/patches/ 补丁文件,任何二进制文件的变化都不会出现在 diff 中,否则会导致构建失败,除非维护人员决定在 debian 包中包含二进制文件 (相对于源代码目录,在 debian/source/include-binaries 中列出添加或更改的二进制文件的文件名) 如果发现 debian 子目录中有二进制文件,构建也会失败,除非文件名已经在 debian/source/include-binaries 中列出。 更新 debian.tar.{gz,bz2,lzma}:通过更新的 debian 目录和更改过的二进制文件 (列出的) 会重新生成 debian 包 注意:自动生成的 diff 不包含 VCS 描述文件和许多临时文件 (参照 -i 选项) 的变化,例如:quilt 使用的 .pc 目录在生成自动补丁时就会被忽略。 * 七.Format:3.0 (git) 这个源代码格式是实验性质的,也许会在 debian 的下下或者下下下个版本采用,也许永远不会采用……这是源代码包和版本控制系统 (git) 的结合,具体细节请:man dpkg-source。 * 八.Format:3.0 (bzr) 这个源代码格式是实验性质的,也许会在 debian 的下下或者下下下个版本采用,也许永远不会采用………这是源代码包和版本控制系统 (bzr) 的结合,具体细节请:man dpkg-source。 == deb仓库管理 == === 创建配置文件 === <pre> cat > conf/distributions << "EOF" Origin: regulus Label: regulus Codename: rongshu Architectures: i386 amd64 source Components: main Version:2012 Description: linux-regulus 2012 EOF </pre> === 示例 === <pre> reprepro includedeb rongshu deb/*.deb for file in deb/*.dsc; do reprepro includedsc rongshu $file; done </pre> === 仓库地址 === <pre> deb file:///localdir/regulus rongshu main deb http://localhost/regulus rongshu main </pre>
返回
Deb包管理向导
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
登录
导航
首页
最近更改
随机页面
页面分类
帮助
搜索
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息