用通俗到业余水平的语言教你编译和打包

编译打包和其他
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: 用通俗到业余水平的语言教你编译和打包

#46

帖子 tusooa » 2009-10-31 9:41

代码: 全选

make DESTDIR=/usr/fakeroot/$PKG-$VER install

代码: 全选

] ls -ld //
猪4321
帖子: 1
注册时间: 2009-11-01 21:57

Re: 用通俗到业余水平的语言教你编译和打包

#47

帖子 猪4321 » 2009-11-01 22:43

还是不明白。但是我把他拷贝下来了。。。。慢慢看//////

刚刚用虚拟机跑linux的路过
头像
carlos444_444
帖子: 448
注册时间: 2005-06-06 21:35
系统: Debian
来自: 四海为家
联系:

Re: 用通俗到业余水平的语言教你编译和打包

#48

帖子 carlos444_444 » 2009-11-14 11:09

转贴
一、使用deb包

1. 查看deb包含有哪些文件(不安装)
$ dpkg -c xxx.deb // 安装前根据deb文件查看
$ dpkg -L debname // 安装后根据包名查看

2. 安装deb包
$ dpkg -i xxx.deb
注意,如果提示错误,可以加参数—force-all强制安装,但不推荐这样做

3. 查看某个文件属于哪个deb包
$ dpkg -S filepath

4. 移除deb包
$ dpkg -r debname

二、制作deb包

1. 原理

1) deb包通常包含两部分:控制信息(DEBIAN目录)、安装内容(模拟root目录)

2) 通过解开已有的deb包看其中内容

i. 释放安装内容到dirname目录中
$ dpkg -X xxx.deb dirname

ii. 释放控制信息到当前目录下的DEBIAN子目录中
$ dpkg -e xxx.deb

2. 准备

1) 实验平台
ubuntu 8.04

2) 安装相关工具
$ apt-get install dh-make checkinstall

3) 下载示例软件包
以游戏模拟器为例(也可使用其它源码包),制作它的deb包,下载地址:

http://prdownloads.sourceforge.net/fceu ... rc.tar.bz2

4) 注意:对于自己写的代码制做deb包,建议用autoconf, automake生成编译脚本,例程见
http://xy0811.spaces.live.com/default.a ... A6B17!1002

3. 方法一: 使用checkinstall方法创建deb包
checkinstall不仅可以生成deb包,还可以生成rpm包,使用简单,但是不灵活,功能粗糙,只做介绍,不推荐使用

$ tar xvjf fceu-0.98.12.src.tar.bz2 // 解包
$ cd fceu;./configure;make // 编译
$ checkinstall -D -y -install=no --pkgversion-0.98 --pkgname=fceuxy --pkgcource=./ --showinstall=no -default make install // 制作deb包
此时当前目录下生成了deb包

4. 方法二: 使用dpkg方法创建deb包
dpkg是最基本的制作deb包的方法,推荐使用
$ tar xvjf fceu-0.98.12.src.tar.bz2 // 解包
$ mv fceu fceu-0.98 // 改目录名为 包名-版本号
$ cd fceu-0.98
$ dh_make -s -e xieyan0811@sina.com.cn -f ../fceu-0.98.12.src.tar.bz2 // 生成制作deb包所需的默认信息
此时当前目录下生成了debian目录,此时通常修改两个文件:
  修改debian/control文件,配置你的信息,具体字段见参考部分
  修改debian/rules脚本,它决定编译参数(也可以不改)
$ dpkg-buildpackage -rfakeroot
此时可以看到,上层目录中已建立了deb包

5. 方法三: 修改已有deb包
自己创建deb所需目录结构(控制信息和安装内容),然后打包,一般使用这种方法来修改已有的deb包,而不是新建deb包,命令如下:
$ dpkg -X xxx.deb test // 解包安装内容
$ cd test
$ dpkg -e ../xxx.deb // 解包控制信息
修改其中内容
$ cd ../
$ dpkg -b dirname xxx_new.deb // 重新打包
tll
帖子: 1
注册时间: 2009-11-09 14:35

Re: 用通俗到业余水平的语言教你编译和打包

#49

帖子 tll » 2009-11-15 19:29

不错,明白了-dev的用途了,谢谢lz。
头像
bzhao
帖子: 254
注册时间: 2008-07-05 2:15
系统: XUbuntu

Re: 用通俗到业余水平的语言教你编译和打包

#50

帖子 bzhao » 2009-11-24 17:18

顶!打包入门好教材。
kevinchenwb
帖子: 6
注册时间: 2009-11-12 12:04

Re: 用通俗到业余水平的语言教你编译和打包

#51

帖子 kevinchenwb » 2009-11-24 19:33

carlos444_444 写了:居然被顶了38个帖子,好有成就感。
继续:

将二进制文件打成deb包。
大家也下载过类似于instantbird或者prism这样的Mozilla程序吧,Mozilla程序的特点就是,编译好了,直接tar压缩,而不打包。好处就是任何发行版都可以使用,不好的地方就是需要解压缩到某个地方,然后还要自己建立菜单中的快捷方式,比较麻烦。

那我们就以Mozilla instantbird为例子,将它打成deb包,全自动安装到/opt/instantbird目录,并且在菜单建立一个快捷方式。
1,建立一个打包用的总目录,并进入
mkdir ~/build
cd build
2,建立软件包文件的各结构目录
mkdir -r usr/share/applications opt DEBIAN
#~/build/usr/share/applications是我们放快捷方式的地方
#~/build/opt是我们要放程序的地方
#~/build/DEBIAN是我们打包用的文件的地方,这里只需要用到一个文件,就是control。

3,将下载下来的instantbird-0.2a1.en-US.linux-i686.tar.bz2复制到我们需要的地方:
cp instantbird-0.2a1.en-US.linux-i686.tar.bz2 ~/build/opt/
cd ~/build/opt
tar jxvf instantbird-0.2a1.en-US.linux-i686.tar.bz2
rm instantbird-0.2a1.en-US.linux-i686.tar.bz2
留下 ~/build/opt/instantbird/目录

4,进入目录进行一下小修改,instantbird的执行文件必须要求执行此文件的时候,在当前目录进行操作,所以要写一个简单的bash脚本,批处理
cd instantbird
nano instantbird.sh
#!/bin/sh
cd /opt/instantbird
./instantbird
保存退出。

5,好。编辑下instantbird.desktop
cd ~/build/usr/share/applications/
nano instantbird.desktop
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Name=Mozilla Instantbird
Exec=/opt/instantbird/instantbird.sh
Icon=/opt/instantbird/chrome/icon/instantbird.xpm
Comment=This is a mozilla IM tool
Terminal=false
Type=Application
Categories=Application;Network;InstantMessaging;
保存,退出。

6,到~/build目录输入下du,看看占了多少字节,下面有用。
cd ~/build/DEBIAN
nano control
Package: mozilla-instantbird //此行不允许用大写字母和一些特殊符号,否则打包会出错。
Version: 0.2a-b          //软件版本
Section: net //debian有专门的section约定,请大家查下相关文档,给了固定的一些分组名称。
Priority: optional          //优先级,默认即可
Architecture: all          //不太清楚,不妄言
Depends:             //依赖关系,安装此包的时候,必须安装什么包才能使其正常运行呢?把名字和版本号写在这里:{gtklib>=2.0},多个貌似用逗号隔开,记不得了,哈哈。
Recommends:           //建议的依赖关系
Installed-Size: 15108       //这里就写那个du所产生的数字,不过写错了好像也没什么,尽量写对吧
Maintainer: Carlos Love Leo <carlosloveleo@gmail.com> //维护者,你的大名,和电子邮件。
Description: Mozilla Instantbird       //软件包名称,可以大小写,空格
Mozilla Instantbird is a very cool im //写注释的时候,开头空一个空格
                       //结尾留一空行

7,开始打包。
cd ~
dpkg -b build/ mozilla-instantbird-0.2a1-i686.deb
一定要回到build目录上一层,才开始打包,否则无法读取DEBIAN目录的信息。

8,其实,大家看明白否,你需要亲自指定安装的每一个文件的具体位置。只是我们这次比较懒,绝大部分文件都放到/opt/instantbird下了,呵呵。
为何我第7步时出现错误呢?我是一步一步照着来的~~

kevin@kevin-laptop:~$ dpkg -b build/ mozilla-instantbird-0.2a1-i686.deb
dpkg-deb: 解析错误,在文件“build//DEBIAN/control”第“10”行附近,软件包“mozilla-instantbird”:
字段名“Mozilla”后必须紧跟冒号

请问该如何解决呢?
头像
maivel
帖子: 293
注册时间: 2009-05-01 7:35

Re: 用通俗到业余水平的语言教你编译和打包

#52

帖子 maivel » 2009-11-24 19:42

mark
我这个人天生愚笨,体内装进一点点东西就会往外面冒,满地都是,一不小心就成了才华横溢。
cn2010
帖子: 98
注册时间: 2006-11-07 12:47

Re: 用通俗到业余水平的语言教你编译和打包

#53

帖子 cn2010 » 2009-11-24 19:59

贴子收下了,谢谢
头像
carlos444_444
帖子: 448
注册时间: 2005-06-06 21:35
系统: Debian
来自: 四海为家
联系:

Re: 用通俗到业余水平的语言教你编译和打包

#54

帖子 carlos444_444 » 2009-11-26 8:45

回51楼的,你的control文件格式可能不符合打包规范,可以从其他的deb包提取一个control文件进行参考
有时候一个冒号,一个空行,都会引起打包错误。
kevinchenwb
帖子: 6
注册时间: 2009-11-12 12:04

Re: 用通俗到业余水平的语言教你编译和打包

#55

帖子 kevinchenwb » 2009-11-26 9:15

carlos444_444 写了:回51楼的,你的control文件格式可能不符合打包规范,可以从其他的deb包提取一个control文件进行参考
有时候一个冒号,一个空行,都会引起打包错误。
好的,谢了,我试试~~
头像
yangsos123
帖子: 331
注册时间: 2010-01-11 20:15
联系:

Re: 用通俗到业余水平的语言教你编译和打包

#56

帖子 yangsos123 » 2010-04-05 10:42

好东西。。。

代码: 全选

Art is always explosion~~
[/b][/u]
http://allenalan.wordpress.com/
====Allen Alan=====
haime
帖子: 297
注册时间: 2009-12-31 20:21
系统: Ubuntu、Windows 11
联系:

Re: 用通俗到业余水平的语言教你编译和打包

#57

帖子 haime » 2010-04-08 10:35

确实,还是不太明白!
leohsieh
帖子: 72
注册时间: 2010-02-23 10:55

Re: 用通俗到业余水平的语言教你编译和打包

#58

帖子 leohsieh » 2010-04-09 22:49

标记先
需要时再来学习
powerqwe
帖子: 21
注册时间: 2009-04-30 13:23

Re: 用通俗到业余水平的语言教你编译和打包

#59

帖子 powerqwe » 2010-04-10 21:39

最近正在学习这个呢,确实有启发~~
kepenoming
帖子: 51
注册时间: 2009-05-29 11:40

Re: 用通俗到业余水平的语言教你编译和打包

#60

帖子 kepenoming » 2010-05-03 12:01

:em01
回复