首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux基础>linux其它>正文

在Debian中打造属于自己的deb包

http://www.oklinux.cn  2005-09-03  来源: oklinux收集整理  火      会员收藏  游客收藏  【 】 
问题:如果你要在Debian系统中发布一款软件或者一个包,该如何做呢?如果你的项目中有各种二进制包,该如何维护呢?如果你自己做了一款小小的实用软件,该如何与朋友分享呢?…….



案例:假如我从网上下载了eclipse-SDK-3.1-linux-gtk.tar.gz压缩文件,我想把他安装到/opt/eclipse目录下,且菜单Apps-->Programming中有Eclipse菜单项。并且在命令终端中输入eclipse中可以运行Eclipse程序,而且还要象其他的软件包一样,可以方便的进行安装(install )和卸载(remove)。



如果你还不知道如何做,请跟我来,我将告诉你解决方案。



熟悉Debian(Linux的发行版之一)的用户,应该对他的包管理机制记忆犹新。便捷的包管理机制是Debian易用的一个主要特性。Debian包管理机制可分为两个层面:对软件包文件操作以及对包中文件的操作。apt和dselect完成前者,dpkg完成后者。



接下来,我们将借助Debian的包管理机制,打造属于自己的deb包。



首先,介绍其目录结构(为了便于理解,借用Windows下的截图)

eclipse

|----DEBIAN

       |-------control

       |-------md5sums

       |-------postinst

       |-------postrm

|----usr

      |-----bin

               |------eclipse

      |-----lib

               |-------menus

                           |-----eclipse


图一  目录结构



其中,eclipse文件夹表示待发布的软件,也是我们的工作目录。 DEBIAN文件夹下包含control和md5sums等文本文件。opt目录表示待发布的包将要安装(放置)的地方。usr/bin/目录提供了运行该程序命令的脚本。usr/lib/menu目录提供了将Eclipse加入菜单的脚本。

DEBIAN必须大写,且必须为该名。根据不同的情况,该目录将包含不同的文件,其中control和md5sums文件是最小(基本)要求。如果待发布包在安装和卸载,需要运行某些命令或脚本进行初始化和配置时,则会包含下列文件:

preinst

在Debian包文件解包之前,将会运行该脚本。许多“preinst”脚本的任务是停止作用于待升级软件包的服务,直到软件包安装或升级完成。  



postinst

该脚本的主要任务是完成安装包时的配置工作。通常,“postinst”脚本等待用户输入,或提醒用户,如果他接受当前默认值,要记得软件包安装完后返回重新配置。许多“postinst”脚本负责执行有关命令为新安装或升级的软件重启服务。


prerm

该脚本负责停止与软件包相关联的daemon服务。它在删除软件包关联文件之前执行。  


postrm

该脚本负责修改软件包链接或文件关联,或删除由它创建的文件  



因为本案例需要将Eclipse加入到菜单中,所以应该包含postinst and postrm这两个文件。

control文件内容如下:

Package: eclipse

Version: 3.1

Section: utils

Priority: optional

Architecture: i386

Depends: libc6 (>= 2.3.2.ds1-4),jdk  

Installed-Size: 14062

Maintainer: xxxxxx<[email protected]>

Description:Develop tools  



md5sums是基于md5sum命令生成的文件。

因为在安装本包时,只需要更新菜单项,所以postinst脚本只需要包含update-menus命令,卸载时也是同样的操作。其postinst脚本内容为:

程序清单一

#!/bin/sh

# filename :postinst/postrm

        if  test -x /usr/bin/update-menus; then

            update-menus

        fi   

postrm脚本内容跟postinst内容相同。如果你还要做其他的操作,则可以在这两个文件中加入其他内容。



/opt/eclipse/目录就是待发布(安装)的软件目录。对于本例只需要在/opt目录下执行该操作:$ tar  xzvf  eclipse-SDK-3.1-linux-gtk.tar.gz.



要在命令终端中输入eclipse,也能运行Eclipse。通常有三种解决方案:

1)      把/opt/eclipse/加入到PATH变量中。

2)      在/usr/bin目录建立一个指向/opt/eclipse/eclipse的链接

3)      在/usr/bin目录下新建一个脚本,在脚本中运行该程序



综合考虑,第一种方案不可行。第二种方案比较好,但失败了。因为eclipse在运行时,需要starup.jar文件,并且是相对路径下的starup.jar文件,当你在其他任何路径下运行eclipse时,都将会失败。只有采用第三种方案,建立一个脚本。只需要在该脚本中写入:exec /opt/eclipse/eclipse。

程序清单二:

#!/bin/sh

# filename :eclipse

exec  /opt/eclipse/eclipse   



接下来,解决最后一个问题,如何把eclipse加入到Apps-->Programming的菜单中去?基本上每一个Debian系统的应用程序都会有一个菜单配置文件,用以定义该程序的菜单项名称、位置和命令行选项等参数。该配置文件一般位于/usr/lib/menus、/etc/menu或~/.menu目录下。

我们新建一个文件eclipse ,程序安装后,将置于/usr/lib/menu/路径下

该eclipse配置文件格式示例如下:

?package(eclipse):                       #定义软件包名

       needs="X11"                               #定义该菜单项需在X11环境中使用

       section="Apps/Programming"       #定义菜单项的路径位置

       title="Eclipse"                               #定义菜单项的标题

       command="/usr/bin/eclipse"          #定义命令和选项

       hints="Eclipse"                              #定义一些提示信息

       icon="/opt/eclipse/icon.xpm"         #定义菜单项的图标



目录结构框架介绍完毕后,就开始打地基,准备文件吧,需要准备的文件有:

1)  control(必须要)

2)  eclipse.sh(用于终端,因为与菜单的eclispe重名,所有加了.sh后缀)

3)  eclipse.menu (用于菜单)

4)  eclipse-SDK-3.1-linux-gtk.tar.gz (下载的eclipse包)

5)  postinst  (用于安装和卸载时调用的脚本)



将上述所有文件放置一目录中,并在该目录下新建mkeclipse脚本,主要用于完成上面的工作,其内容如下:

#!/bin/sh

ROOT=$PWD

ECLIPSE=$ROOT/eclipse-SDK-3.1-linux-gtk.tar.gz

CONTROL=$ROOT/control

POST=$ROOT/postinst

BINECP=$ROOT/eclipse.sh

MENUS=$ROOT/eclipse.menu

if [ -w "$ROOT" ];then

   mkdir eclipse

   cd eclipse

   mkdir DEBIAN opt usr usr/bin usr/lib usr/lib/menu

   cd opt

   if [ -e "$ECLIPSE" ];then

       tar xzvf $ECLIPSE

   fi

   cd ..

   if [ -e "$CONTROL" ];then

      cp $CONTROL DEBIAN/

   fi

   if [ -e "$POST" ];then

      cp $POST DEBIAN/postrm

   fi

   if [ -e "$BINECP" ];then

      cp $BINECP usr/bin/eclipse

   fi

   if [ -e "$MENUS" ];then

      cp $MENUS usr/lib/menu/eclipse

   fi

   rm -f  DEBIAN/md5sums

   find opt usr  -type f -exec md5sum {} ;>>DEBIAN/md5sums

fi



现在已经万事俱备,只欠东风。那现在就草船借东风――借Debian的dpkg包这股东风,来成就我们的事业吧。

制作deb包,在当前ROOT目录运行如下命令:$dpkg -b eclipse eclipse_3.1_i386.deb

也可以在mkeclipse脚本的最后一个fi前加入

       cd $ROOT

       dpkg -b eclipse eclipse_3.1_i386.deb

来完成该功能。



好,现在就开始我们的心动之旅吧。



首先安装deb包:dpkg -i eclipse_3.1_i386.deb  下面打印的消息是不是非常熟悉。

进入图形界面,发现Apps-->Programming中已经有了Eclipse菜单项,请鼓足勇气单击一下吧,Eclipse IDE已经跃然出现在你的桌面上(当然你的jdk环境已经配置好了)。

接下来,试着卸载一下:apt-get remove eclipse。Eclipse已经从菜单中消失了,/opt/eclipse目录也已经不复存在。



现在觉得是不是很方便?当你看完本文的时候,你是否对文章开始提出的问题已经豁然开朗。其实这样做的目的就是简化劳动,同一个项目组的人在做重复的工作,比如安装eclipse,要在/usr/bin下建立文件,又要在/usr/lib/menu中建立文件,还要拷贝一些eclipse文件,不知道在拷贝的过程中是否会遗漏一些文件等等。或者你的系统出于某种原因要重装,以前的工作又的重新来一遍,很费时。如果你做成了一个deb包,以上的问题和疑虑就迎刃而解。


欢迎讨论:[email protected]


参考文献:

1.       Debian manual refrence

2.       http://www.nl.debian.org/doc/pac ... enu.html/index.html

上一篇:Suse9 专业版使用手记   下一篇:体验SuSE Linux 9.1 靓装Linux 2.6桌面


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Suse9 专业版使用手记
·体验SuSE Linux 9.1 靓装Linux 2.6桌面
·媲美:SUSE Linux 9.1多图揭秘
·linux 术语解释-给初学者
·推荐:SuSE 美化、系统设置一系列方案
·中国Linux的杰出人物
·SUSE 中文管理和用户手册
·Linux的使用
·Linux特性
·四种实时操作系统的分析比较
·debian下关于中文粗体
·XteamLinux安装注意点三则
·Debian学习笔记
·debian硬盘安装及中文化完全征服
·Debian中安装修改Grub启动时的背景图片步骤
·Debian软件包管理详解
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Fedora Linux下运行PS2模拟器
·ARM、DSP、FPGA的技术特点和区别是什么
·从我做起,10件可以帮助开源的事
·介绍Linux系统下的几个小游戏模拟器
·了解 Linux Kudzu服务的作用
·Linux操作系统上到底提供了哪些基本软
·Ubuntu下两个项目管理工具:Dia和Plann
·UNIX的分支 服务器上的FreeBSD系统
·Ubuntu下用多个Sources.list文件加速AP
·Linux下各种主要文件系统的读写性能测
·内核循环缓冲区数据结构在用户态的使用
·移植Uboot到ARMer9开发系统上
  阅读排行
·配置ubuntu上网问题
·debian Linux 下 Cedega 使用指南
·SuSE Linux安装后的初步设置
·移植Uboot到ARMer9开发系统上
·ubuntu dapper下解决依赖关系安装opera
·ubuntu中的快捷方式
·解决ubuntu 6.06不能保存DNS地址的问题
·debian Linux下制作deb包的简便方法
·GNU EMACS字体设置,基本上可以随心所
·ubuntu下安装软件的几种方法
·在ubuntu下修改网卡地址
·Linux下使用FrameBuffer直接写屏
·Linux下各种主要文件系统的读写性能测
·Kirin原创的eclipse editor配色方案
·debian Linux大全
网摘收藏: