ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

二进制源码打出符合UOS商店规范的deb包

2021-01-15 17:32:51  阅读:358  来源: 互联网

标签:UOS clion 2019.3 源码 deb com debian jetbrains


本文主要演示从带二进制源码打出符合UOS商店规范的deb包

商店打包规范请参考uos官网文档

第一步,配置好环境变量值

环境变量值 在家目录下的.bashrc(如果你使用的bash shell)文件中加入如下三行,根据个人信息替换

我使用的zsh 所以在.zshrc文件下配置

➜  ~ head -n 3 .zshrc
DEBFULLNAME="liuyong"
DEBEMAIL="liuyong@deepin.com"
export DEBFULLNAME DEBEMAIL

构建deb包可分为从源码编译构建和从二进制包直接构建,二进制包已有编译好的二进制程序,可直接运行,无需再编译,直接构建成deb包即可,本文讲从二进制包构建deb包

本文的实例包为jetbrains公司的IDEClion Clion下载地址

下载完后,接下来我们来将他构建为一个deb包

  1. 首先创建一个用来构建deb包的目录,目录要以 包名-版本号 的格式

    ➜  ~ mkdir -p clion/com.jetbrains.clion-2019.3.5
    
  2. 接下来构建一个规范的软件目录,用来按规则放其他的文件,完整的目录结构为:

    ➜  ~ cd clion/com.jetbrains.clion-2019.3.5
    ➜  com.jetbrains.clion-2019.3.5 tree com.jetbrains.clion
    com.jetbrains.clion		#此目录以包名命名
    ├── entries				#此目录必须有
    │   ├── applications	#放desktop文件,gui界面应用必须要有此目录和desktop文件
    │   ├── autostart		#放自启动入口文件
    │   ├── GConf			#gseetings文件
    │   ├── glib-2.0		#schame文件
    │   ├── icons			#应用的图标文件,根据大小放进不同的目录下的apps/目录下,支持的分辨率包括:16/24/32/48/128/256/512,svg格式的放在scalable/apps/目录下,gui界面应用必须要有
    │   │   └── hicolor
    │   │       ├── 16x16
    │   │       │   └── apps
    │   │       ├── 24x24
    │   │       │   └── apps
    │   │       ├── 32x32
    │   │       │   └── apps
    │   │       ├── 48x48
    │   │       │   └── apps
    │   │       ├── 128x128
    │   │       │   └── apps
    │   │       ├── 256x256
    │   │       │   └── apps
    │   │       ├── 512x512
    │   │       │   └── apps
    │   │       └── scalable
    │   │           └── apps
    │   ├── locale			#语言包目录
    │   ├── plugins			#插件目录
    │   └── services		#dbus服务目录
    │   └── help			#各种语言的帮助文档
    ├── files				#放其他文件	此目录必须有
    └── info				#json格式的应用信息,info文件必须有
    
    23 directories, 1 file
    

    将二进制包解压,并将对应的文件放入相应的位置

    ➜  com.jetbrains.clion tar -xvzf ~/Downloads/CLion-2019.3.5.tar.gz
    ➜  com.jetbrains.clion ls
    clion-2019.3.5  entries  files  info
    ➜  com.jetbrains.clion cp clion-2019.3.5/bin/clion.svg 	entries/icons/hicolor/scalable/apps #svg图标按照规则放这个目录
    ➜  com.jetbrains.clion cp clion-2019.3.5/bin/clion.png entries/icons/hicolor/128x128/apps  #png格式按照尺寸放
    ➜  com.jetbrains.clion mv clion-2019.3.5/* files   #其他文件放files目录
    ➜  com.jetbrains.clion rmdir clion-2019.3.5 
    ➜  com.jetbrains.clion ls files 
    bin  build.txt  help  Install-Linux-tar.txt  jbr  lib  license  plugins  product-info.json
    
  3. 写一个规范的info文件

    info文件是应用的描述文件,使用json格式,完整的info文件格式如下:

    {
        "appid": "com.deepin.demo",
        "name": "Demo",
        "version": "5.0.0.0",
        "arch": ["amd64", "mips64"],
        "permissions": {
            "autostart": false,
            "notification": false,
            "trayicon": false,
            "clipboard": false,
            "account": false,
            "bluetooth": false,
            "camera": false,
            "audio_record": false,
            "installed_apps": false
        },
        "support-plugins": [
            "plugin/demo"
     ],
        "plugins": [
            "plugin/webbrowser",
            "plugin/office"
        ]
    }
    

    info文件中各个字段的说明如下:

    appid:应用标识

    name:应用名称

    version:应用版本,格式为 {MAJOR}.{MINOR}.{PATCH}.{BUILD},所有版本号均为纯数字

    arch:应用支持架构,当前商店支持如下CPU架构

     - amd64:x86架构CPU
     
     - mips64:龙芯系列CPU
     
     - arm64:ARM64位CPU
     
     - sw_64:申威CPU
    

    permissions:应用权限描述。

     - autostart:是否允许自启动
     
     - notification:是否允许使用通知
     
     - trayicon:是否运行显示托盘图标
     
     - clipboard:是否允许使用剪切板
     
     - account:是否允许读取登录用户信息
     
     - bluetooth:是否允许使用蓝牙设备
     
     - camera:是否允许使用视频设备
     
     - audio_record:是否允许进行录音
     
     - installed_apps:是否允许读取安装软件列表
    

    support-plugins: 支持的插件类型

    plugins:实现的的插件类型,在对应的plugins目录下,按照实现的插件类型放置文件。

    在安装时,系统会将插件链接到对应的应用目录。

    本软件info内容参考如下:

    ➜  com.jetbrains.clion cat info 
    {
     "appid": "com.jetbrains.clion",
     "name": "CLion",
     "version": "2019.3.5",
     "arch": ["amd64"],
     "permissions": {
         "autostart": false,
         "notification": false,
         "trayicon": false,
         "clipboard": false,
         "account": false,
         "bluetooth": false,
         "camera": false,
         "audio_record": false,
         "installed_apps": false
     }
    }
    
  4. 写一个desktop文件以包名.desktop为格式,本包写好的文件格式如下

    ➜  com.jetbrains.clion vim entries/applications/com.jetbrains.clion.desktop
    ➜  com.jetbrains.clion cat entries/applications/com.jetbrains.clion.desktop
    [Desktop Entry]
    Name=CLion
    Comment=The Drive to Develop
    Exec=/opt/apps/com.jetbrains.clion/files/bin/clion.sh
    Icon=clion
    Terminal=false
    Categories=Development
    Type=Application
    
    

    desktop官方文档

    desktop语法解释

    [Desktop Entry] 文件头

    Name 应用名称

    Comment 软件描述信息

    Exec 软件的可执行文件(可以是二进制或者脚本)

    Icon 图标名

    Terminal 是否使用终端

    Type 启动器类型

    Categories 应用的类型 可用的字段参考

  5. 接下来,回到上层目录,使用 dh_make --createorig -s 命令创建debian目录,并在上层目录初始化出来源码包

    ➜  com.jetbrains.clion-2019.3.5 dh_make --createorig -s
    Maintainer Name     : liuyong
    Email-Address       : liuyong@deepin.com
    Date                : Wed, 25 Mar 2020 14:27:06 +0800
    Package Name        : com.jetbrains.clion
    Version             : 2019.3.5
    License             : blank
    Package Type        : single
    Are the details correct? [Y/n/q]
    
    

    确认信息无误输入y即可

    当前目录下会自动创建debian目录,目录下有很多打包使用的模板文件,以.ex/.EX结尾,具体用途参考 模板文件参考,对于此软件包,我们不需要这些模板文件,所以全部删掉

    ➜  com.jetbrains.clion-2019.3.5 ls
    com.jetbrains.clion  debian
    ➜  com.jetbrains.clion-2019.3.5 ls debian 
    changelog                        control          menu.ex      README.Debian
    com.jetbrains.clion.cron.d.ex    copyright        postinst.ex  README.source
    com.jetbrains.clion.doc-base.EX  manpage.1.ex     postrm.ex    rules
    com.jetbrains.clion-docs.docs    manpage.sgml.ex  preinst.ex   source
    compat                           manpage.xml.ex   prerm.ex     watch.ex
    ➜  com.jetbrains.clion-2019.3.5 rm debian/*.EX debian/*.ex
    ➜  com.jetbrains.clion-2019.3.5 ls debian                 
    changelog                      compat   copyright      README.source  source
    com.jetbrains.clion-docs.docs  control  README.Debian  rules
    

    然后修改control文件

    对各个Control文件的具体描述说明,参考Control文件说明,我们本次打包,只需修改sections字段,homepage字段,Architecture字段,Description字段,修改完后如下格式

    ➜  com.jetbrains.clion-2019.3.5 vim debian/control 
    ➜  com.jetbrains.clion-2019.3.5 cat debian/control
    Source: com.jetbrains.clion
    Section: devel
    Priority: optional
    Maintainer: liuyong <liuyong@deepin.com>
    Build-Depends: debhelper (>= 11)
    Standards-Version: 4.1.3
    Homepage: http://jetbrains.com
    #Vcs-Browser: https://salsa.debian.org/debian/com.jetbrains.clion
    #Vcs-Git: https://salsa.debian.org/debian/com.jetbrains.clion.git
    
    Package: com.jetbrains.clion
    Architecture: amd64
    Depends: ${shlibs:Depends}, ${misc:Depends}
    Description: C/C++ smart IDE
     <insert long description, indented with spaces>
    

    本次修改的几个字段解释

    sections 为软件分类,字段值参考 sections字段值参考

    homepage 软件的主页的网址

    Architecture 支持的架构,因为该二进制为64位,所以只用写amd64

    descriptions 软件的描述信息

    接下来在debian目录创建install文件,install文件可以指定各个文件的安装路径,官方文档 本包的install文件参考:

    ➜  com.jetbrains.clion-2019.3.5 vim debian/install                       
    ➜  com.jetbrains.clion-2019.3.5 cat debian/install
    com.jetbrains.clion/ /opt/apps
    

    因为是从二进制包构建的,不用编译和生成共享库等行为,所以我们可以在rules文件里覆盖掉这些指令,让他什么都不做,本包的rules文件参考如下:(出了标注出来的行,其他为默认生成) debian官方文档

    ➜  com.jetbrains.clion-2019.3.5 cat debian/rules
    #!/usr/bin/make -f
    # See debhelper(7) (uncomment to enable)
    # output every command that modifies files on the build system.
    export DH_VERBOSE = 1
    
    
    # see FEATURE AREAS in dpkg-buildflags(1)
    #export DEB_BUILD_MAINT_OPTIONS = hardening=+all
    
    # see ENVIRONMENT in dpkg-buildflags(1)
    # package maintainers to append CFLAGS
    #export DEB_CFLAGS_MAINT_APPEND  = -Wall -pedantic
    # package maintainers to append LDFLAGS
    #export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
    
    #for mutil-arch packages
    #source_tar = ../
    #source_dir = ../
    #ifneq ($(DEB_HOST_ARCH),amd64)
    #	source_tar = ../
    #	source_dir = ../
    #endif
    
    %:
    	dh $@
    
    override_dh_auto_build:				#这是加入的行
    
    override_dh_shlibdeps:				#这是加入的行
    
    override_dh_strip:					#这是加入的行
    
    
    # dh_make generated override targets
    # This is example for Cmake (See https://bugs.debian.org/641051 )
    #override_dh_auto_configure:
    #	dh_auto_configure -- #	-DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)
    
    
    

    接下来执行dpkg-source -b .dpkg-buildpackage -us -uc -nc在打出deb包

    ➜  com.jetbrains.clion-2019.3.5 dpkg-source -b .
    dpkg-source: info: using source format '3.0 (quilt)'
    dpkg-source: info: building com.jetbrains.clion using existing ./com.jetbrains.clion_2019.3.5.orig.tar.xz
    dpkg-source: info: building com.jetbrains.clion in com.jetbrains.clion_2019.3.5-1.debian.tar.xz
    dpkg-source: info: building com.jetbrains.clion in com.jetbrains.clion_2019.3.5-1.dsc
    ➜  com.jetbrains.clion-2019.3.5 dpkg-buildpackage -us -uc -nc
    ➜  com.jetbrains.clion-2019.3.5 ls ..
    com.jetbrains.clion-2019.3.5
    com.jetbrains.clion_2019.3.5-1_amd64.buildinfo
    com.jetbrains.clion_2019.3.5-1_amd64.changes
    com.jetbrains.clion_2019.3.5-1_amd64.deb
    com.jetbrains.clion_2019.3.5-1.debian.tar.xz
    com.jetbrains.clion_2019.3.5-1.dsc
    com.jetbrains.clion_2019.3.5.orig.tar.xz
    

    但在构建deb包的过程中,包的帮助手册,以及copyrightchangelogs都会在打包过程中安装到/usr/share/doc目录下,我们要把这个目录改装在entries目录下,使用fakeroot dpkg-deb -R pkg.deb a 来将名为pkg的deb包解压到 a 目录下,doc目录mv到entries目录下,然后删除空的/usr/share/目录,使用fakeroot dpkg-deb -b a pkg.deb将改好的包格式压入deb包内,可以使用dpkg-deb -c pkg.deb命令来查看deb包的安装文件目录,确定所以文件都安装在/opt/apps/包名 这个目录下即可

    ➜  clion fakeroot dpkg-deb -R com.jetbrains.clion_2019.3.5-1_amd64.deb a
    ➜  clion mv a/usr/share/doc a/opt/apps/com.jetbrains.clion/files
    ➜  clion rm -rf a/usr 
    ➜  clion fakeroot dpkg-deb -b a com.jetbrains.clion_2019.3.5-1_amd64.deb
    

    然后可以通过dpkg -i测试安装 ,看软件包是否可以在启动器显示图标,正常运行即可

标签:UOS,clion,2019.3,源码,deb,com,debian,jetbrains
来源: https://blog.csdn.net/ljm13485468232/article/details/112679655

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有