设为首页 收藏本站
查看: 666|回复: 0

[经验分享] 在Debian中打造属于自己的deb包[转]

[复制链接]

尚未签到

发表于 2018-5-16 06:50:03 | 显示全部楼层 |阅读模式
在Debian中打造属于自己的deb包                                                                                                                                                                                                                                                                                                在Debian中打造属于自己的deb包
                                    http://blog.chinaunix.net/u/24390/showart_180700.html
                                    
                                    发布于2005-09-07 被读2250次  【字体:  】  
                                    作者:normalnotebook
                                    问题:如果你要在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包。  
                                    
                                    首先,介绍其目录结构(超级郁闷,放进来的图都变了,所以只好这样描述)
                                    在任何一个目录下新建一个eclipse目录
                                    eclipse/DEBIAN
                                    eclipse/DEBIAN/control
                                    eclipse/DEBIAN/md5sums
                                    eclipse/DEBIAN/postinst
                                    eclipse/DEBIAN/postrm
                                    eclipse/opt
                                    eclipse/opt/eclipse  (是eclipse的安装文件目录)
                                    eclipse/usr
                                    eclipse/usr/bin
                                    eclipse/usr/bin/eclipse(是命令脚本)
                                    eclipse/lib
                                    eclipse/lib/menu
                                    eclipse/lib/menu/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<>
                                    
                                    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目录下执行该操作:&#8194;$ 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=&quot;X11&quot; \ #定义该菜单项需在X11环境中使用
                                    section=&quot;Apps/Programming&quot;\  #定义菜单项的路径位置
                                    title=&quot;Eclipse&quot; \ #定义菜单项的标题
                                    command=&quot;/usr/bin/eclipse&quot; \  #定义命令和选项
                                    hints=&quot;Eclipse&quot; \ #定义一些提示信息
                                    icon=&quot;/opt/eclipse/icon.xpm&quot;  #定义菜单项的图标
                                    
                                    
                                    目录结构框架介绍完毕后,就开始打地基,准备文件吧,需要准备的文件有:
                                    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=&#8194;$PWD
                                    ECLIPSE=&#8194;$ROOT/eclipse-SDK-3.1-linux-gtk.tar.gz
                                    CONTROL=&#8194;$ROOT/control
                                    POST=&#8194;$ROOT/postinst
                                    BINECP=&#8194;$ROOT/eclipse.sh
                                    MENUS=&#8194;$ROOT/eclipse.menu
                                    if  [ -w &quot;&#8194;$ROOT&quot; ];then
                                    mkdir eclipse
                                    cd eclipse
                                    mkdir DEBIAN opt usr  usr/bin usr/lib usr/lib/menu
                                    cd opt
                                    if [ -e &quot;&#8194;$ECLIPSE&quot; ];then
                                    tar xzvf  &#8194;$ECLIPSE
                                    fi
                                    
                                    cd ..
                                    if [ -e &quot;&#8194;$CONTROL&quot; ];then
                                    cp &#8194;$CONTROL  DEBIAN/
                                    fi
                                    
                                    if [ -e &quot;&#8194;$POST&quot; ];then
                                    cp &#8194;$POST  DEBIAN/postrm
                                    fi
                                    
                                    if [ -e &quot;&#8194;$BINECP&quot; ];then
                                    cp &#8194;$BINECP  usr/bin/eclipse
                                    fi
                                    
                                    if [ -e &quot;&#8194;$MENUS&quot; ];then
                                    cp &#8194;$MENUS  usr/lib/menu/eclipse
                                    fi
                                    
                                    rm -f DEBIAN/md5sums
                                    find opt usr -type f  -exec md5sum {} \;>>DEBIAN/md5sums
                                    fi  
                                    
                                    现在已经万事俱备,只欠东风。那现在就草船借东风――借Debian的dpkg包这股东风,来成就我们的事业吧。
                                    制作deb包,在当前ROOT目录运行如下命令:&#8194;$dpkg  -b eclipse eclipse_3.1_i386.deb
                                    也可以在mkeclipse脚本的最后一个fi前加入
                                    cd  &#8194;$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包,以上的问题和疑虑就迎刃而解。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-460729-1-1.html 上篇帖子: debian软件包管理详解[转] 下篇帖子: David的Debian笔记(随时更新)[转]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表