云网牛站
所在位置:首页 > Linux教程 > 流程式文件分析指导,轻松搞定Deb编包方式

流程式文件分析指导,轻松搞定Deb编包方式

2017-11-19 15:35:21作者:Linux编辑稿源:优麒麟

Deb包介绍

Deb是Debian软件包格式,文件扩展名为.deb,deb包是Unixar的标准归档,将包文件信息以及包内容,经过gzip和tar打包而成,处理deb包的经典程序是dpkg,经常是通过apt来运作。

 

Deb打包

一、编译环境准备

sudo apt-get install build-essential debhelper make autoconf automake dpkg-dev fakeroot pbuilder gnupg

二、debian文件解析

1、安装前执行脚本debian/preinst

Debian软件包(".deb")解压前执行的脚本,为正在被升级的包停止相关服务,直到升级或安装完成(成功后执行 'postinst' 脚本)

#!/bin/sh

if [ "$1" = "upgrade" ] || [ "$1" = "install" ];then

需要执行的脚本

fi

2、安装后执行脚本debian/postinst

主要完成软件包(".deb")安装完成后所需的配置工作。通常,postinst 脚本要求用户输入, 和/或警告用户如果接受默认值,应该记得按要求返回重新配置这个软件。一个软件包安装或升级完成后,postinst 脚本驱动命令,启动或重起相应的服务。

#!/bin/sh

set -e

if [ "$1" = "configure" ]; then

ldconfig

fi

3、卸载前执行脚本debian/prerm

停止一个软件包的相关进程,要卸载软件包的相关文件前执行。

if [ "$1" = "remove" -o "$1" = "deconfigure" ]; then

需要执行的脚本

fi

4、卸载后执行脚本debian/postrm

修改相关文件或连接,和/或卸载软件包所创建的文件。

#!/bin/sh

if [ "$1" = "upgrade" ] ; then

需要执行的脚本

elif [ "$1" = "remove" ] || [ "$1" = "purge" ] ; then

需要执行的脚本

fi

5、debian/changelog

changelog提供版本修改信息,帮助下载软件包的人了解软件包中是否有他们需要知道的信息,决定着生成的deb包的版本号。格式如下:

package (version) distribution(s); urgency=urgency

[optional blank line(s), stripped]

* change details

more change details

[blank line(s), included in output of dpkg-parsechangelog]

* even more change details

[optional blank line(s), stripped]

-- maintainer name [two spaces] date

(注:date可以使用命令date -R获取)

6、debian/control

control决定着deb包的包名、编译依赖和运行依赖。用dh_make生成的默认control文件格式如下(行号是为了添加解释,我们在这里特意加入的):

1 Source: uk-deb-demo

2 Section: unknown

3 Priority: extra

4 Maintainer: Kobe Lee

5 Build-Depends: debhelper (>=9)

6 Standards-Version: 3.9.5

7 Homepage: <insert the upstream URL, if relevant>

8

9 Package: uk-deb-demo

10 Architecture: any

11 Depends: ${shlibs:Depends}, ${misc:Depends}

12 Description: <insert up to 60 chars description>

13 <insert long description, indented with spaces>

1-7行是源码的control信息,9-13是二进制包的control信息。

第 1 行是源代码包的名称。

第 2 行是该源码包要进入发行版中的分类。

第 3 行是描述用户安装该包的重要程度。由于这是一个常规优先级的软件,并不与其他软件包冲突,我们将优先级改为 optional。

每个软件包都有一个维护者指定的优先级,用于包管理系统。这些优先级是:

必须的(Required):系统运转所必须的软件包。包括修复系统缺陷所必须的所有工具。不能删除这些软件包,否则系统可能会崩溃,且甚至有可能无法用 dpkg 恢复。仅有这类包的系统是不可用的,但是它为系统管理员启动系统安装其它软件提供足够的功能。

重要的(Important):在任何类 Unix 系统上均安装有该级别软件包。没有这类包,其它的包无法在系统上正常运转或使用,Emacs,X11,TeX 等大型应用程序不在此列。此类包构成基本系统。

一般的(Standard):Linux 系统里的一般软件包,构成小型字符系统。这是用户什么也不选也会默认安装的软件包. 不包括大型软件, 但是 Emacs(与其说它是一个应用软件,不如说它是基础构件)一小部分 TeX 和 LaTeX(不支持X)除外。

可选的(Optional):软件包包含了所有的你想要安装的文件,如果你一开始不知道它是什么。或者没有特殊的需要。这包括 X11,所有的 TeX 和许多应用程序。

额外的(Extra):这类包不是与其它高优先级的软件冲突,只有知道它的用途才可能对你有用,就是因为特别的原因而不能进入"可选"优先级。

第 4 行是源码维护者的名字和邮箱。

第 5 行是源码的编译依赖。

第 6 行是此软件包所依据的“Debian Policy Manual” 标准版本号。

第 7 行是源码的主页。

第 9 行是二进制软件包的名称。通常情况下与源代码包相同,但不是必须的。

第 10 行是目标机架构,指明二进制包的类型。如果你的软件包是平台独立的(例如一个 shell 或 Perl 脚本,或一些文档),将这项改变为 all,否则写成any。

第 11 行显示了 Debian 软件包系统中最强大的特性之一。每个软件包都可以和其他软件包有各种不同的关系。除 Depends 外,还有 Recommends、Suggests、Pre-Depends、Breaks、Conflicts、Provides 和 Replaces。

第 12 行是软件的简短描述。

第 13 行是软件的详细描述。

7、debian/compat

定义兼容级别,Ubuntu Kylin下保持默认值即可。

8、debian/copyright

包含源码的版权和许可,dh_make 可以给出一个 copyright 文件的模板。

9、debian/install

一些文件可以通过该install脚本,在软件安装时安装到系统的指定路径下。在示例代码中我们使用的是setup.py文件来完成该工作的,install文件可以参考优客天气源码,源码地址:https://code.launchpad.net/~ubuntukylin-members/indicator-china-weather/trunk

10、debian/links

创建额外的符号链接。

11、debian/rules

rules文件本质上是一个Makefile文件,这个Makefile文件定义了创建deb格式软件包的规则。打包工具按照rules文件指定的规则,完成编译,将软件安装到临时安装目录,清理编译目录等操作,并依据安装到临时目录的文件来生成deb格式的软件包。

dh_make 会生成一个使用 dh 命令的非常简单但非常强大的默认的 rules 文件:

#!/usr/bin/make -f

# -*- makefile -*-

# Uncomment this to turn on verbose mode.

#export DH_VERBOSE=1

%:

dh $@

一般没有特殊要求的情况下,源码包使用默认配置就可以了,这里uk-deb-demo示例就是采用默认配置。

准备好debian目录和源码后,就可以用命令dpkg-buildpackage -rfakeroot -b来编包了。

Deb包示例:

将源码uk-deb-demo-1.0.0.tar.gz解压,进入解压源码文件夹uk-deb-demo-1.0.0(uk-deb-demo-1.0.0.tar.gz和uk-deb-demo-1.0.0文件夹在同一级目录),打开终端,执行:

$ dh_make -f ../uk-deb-demo-1.0.0.tar.gz

操作截图如下:

流程式文件分析指导,轻松搞定Deb编包方式

操作完成后,在源码文件夹uk-deb-demo-1.0.0下会自动生成了debian文件夹,保留截图所示的文件和文件夹,其他文件可以根据项目需要增减,如图:

流程式文件分析指导,轻松搞定Deb编包方式

修改changelog、control和copyright,详情见示例源码文件夹中的uk-deb-demo-debian,终端执行:

$ dpkg-buildpackage -rfakeroot -b

至此,deb包已经生产,可以终端执行命令进行安装:

$ sudo dpkg -i uk-deb-demo_1.0.0-0ubuntu1_all.deb

安装完成后,终端运行二进制则可以显示界面了。

$ uk-deb-demo

下载示例代码下载Debian目录

 

Launchpad平台介绍

Launchpad是Ubuntu母公司Canonical有限公司所资助架设的网站,是一个提供维护、支援或连络Ubuntu开发者的平台。 launchpad功能类似于koji,可以在launchpad上进行deb包的管理和编译,进行 Ubuntu(或其相关软体)的翻译工作或管理开发专权,也可以利用该网站的回报机制来回报相关软体的 Bug,或进一步提供相关建议 。

一、Lauchpad ID注册

1、生成OpenPGP密钥,终端输入gpg --gen-key,会提示输入各种信息,按照提示输入默认的即可,最后生成的密钥格式为

pub 4096R/DA4B90A1

密钥指纹 = 5816 2575 2356 CEEA ADFE C3C5 1FE5 3F96 EE0A ECCE

uid Kobe Lee (kylinkobe)

sub 1024g/98765432

2、提交密钥到密钥服务器,终端输入gpg --keyserver keyserver.ubuntu.com --send-key BBF9DC40,其中BBF9DC40是生成密钥后提示的字符串,可以使用gpg --fingerprint来查看。

3、进入个人主页的OpenPGP keys 设置,将密钥指纹填入,然后提交,最后会在注册邮箱中收到一份邮件,邮件正文是加密的,将正文存为本地a.txt文件,终端输入gpg –d a.txt来解密,解密完成后内容是一个网址,点击该网址来确认密钥的导入。

4、使用PPA之前还要签署Code of Conduct。在导入openPGP的页面上有一个Code of Conduct(行为守则)的链接。进入后下载UbuntuCodeofConduct-1.1.txt文件。然后使用gpg命令生成明文签名 ,终端输入

gpg --clearsignUbuntuCodeofConduct-1.1.txt

此时会生成UbuntuCodeofConduct-1.1.txt.asc文件,用编辑器打开,把里面的内容都贴到签署Code of Conduct输入框即可 。

5、完成上面OpenPGP密钥生成和签署Code of Conduct后,最后就可以创建个人编包的PPA了。进入个人主页,点击create a new PPA来生成,然后就是提示输入PPA的名字和介绍,输入完后,点击active完成PPA的创建。

二、Lauchpad Project注册

bzr whoami "yourID "

bzr launchpad-login launchpad括号中的ID

bzr branch; bzr add; bzr commit; bzr push

示例:

bzr whoami "kobe<xiangli@ubuntukylin.com>"

bzr launchpad-login kobe

三、Debian patch

1.下载需要修改的源码包:sudo apt-get source testsource

2.将源码进行备份

cp -r testsource-1.0.0 testsource-1.0.0.old

将对源码的修改都添加到 testsource-1.0.0中,然后将改动生成patch ( 修改源码文件时,不要使用gedit,建议使用vim,gedit修改后会留下缓存文件~,这样diff时会将该文件也diff进patch从而污染patch)

diff -Nur testsource-1.0.0.old testsource-1.0.0 > testsource-diff.patch

将patch加到debian文件夹中

rm -rf testsource-1.0.0

mv testsource-1.0.0.old testsource-1.0.0

cd testsource-1.0.0

cd debian

cd patches (如果没有该文件夹请自行创建)

cp ../../testsource-diff.patch ./

打开debian/patches/series文件(没有请自行创建),将添加的patch名加入该列表。进入 testsource-1.0.0文件夹,开始执行dpkg-buildpackage -rfakeroot生成deb包。往源码中添加patch内容:

patch -p0 < testsource-diff.patch(patch -p1 < ../testsource-diff.patch)

 

Git介绍

Git是一个分布式版本控制/软件配置管理软件,不需要中心仓库,是linux内核开发者Linus Torvalds为了更好地管理linux内核开发而创立的。Git分支与合并是比较简单,存储空间少,版本号都是生成的一个哈希值,比如:

bbaf6fb5060b4875b18ff9ff637ce118256d6f20

一、Git客户端配置

git config --system core.fileMode false #禁止Git对文件权限的跟踪

git config --system core.quotepath false #输出中文文件名显示问题

git config --system color.ui true #开启颜色显示

git config --global user.name "kobe" #配置Git用户名

git config --global user.email "xiangli@ubuntukylin.com" #配置mail

git config –l #查看Git设置

二、配置SSH key

ssh-keygen -t rsa -C “你的邮箱@ubuntukylin.com"

cat ~/.ssh/id_rsa.pub

cat ~/.ssh/id_rsa.pub > /dev/clipboard #将公钥复制到剪贴板

三、常用命令

创建一个库:git init

克隆一个库:git clone git://git.kernel.org/scm/git/git.git

提交:git add/git commit

获取信息:git help/git status/git diff/git log/git show (显示改动情况)

四、关键的Git文件或目录

~/.gitconfig

.git#在库的顶级目录当中,包含项目的所有对象、提交记录、配置

.gitignore#记录要忽略的文件

五、示例

mkdir testproject

cd testproject

git init

touch README

git add README

git commit -m 'first commit'

git remote add origin git@192.168.31.15:test.git

git push -u origin master

git clone git@192.168. 31.15:test.git(获取现有项目)

精选文章
热门文章