Lisy's blog Lisy's blog
首页
后端
前端
读书
关于

新晴

做事情积极主动。积极主动不仅指行事的态度,还意味着为人一定要对自己的人生负责。个人行为取决于自身的抉择,而不是外在的环境,人类应该有营造有利的外在环境的积极性和责任感。
首页
后端
前端
读书
关于
  • Java

  • linux

    • 常用docker-compose文件
    • 利用scp上传文件
    • 使用curl命令发送POST或者GET请求
    • 将java应用打包成uos适用的deb包
      • RPM打包java应用
      • x86架构的Ubuntu20利用QEMU运行arm64环境
      • ubuntu ufw 防火墙常用
      • centos7安装最新的nginx
      • ubuntu设置公钥登录
      • 常用Dockerfile
      • docker学习
    • python

    • 其他

    • python

    • 后端
    • linux
    lisy
    2023-09-05
    目录

    将java应用打包成uos适用的deb包

    系统后台使用spring boot开发,前端使用vue开发。使用国产数据库和容器(中间件)。

    保证已经安装好了打包的软件

    sudo apt install dh-make
    sudo sudo apt-get install build-essential
    
    1
    2

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

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

    //vi .bashrc
    DEBFULLNAME="test"
    DEBEMAIL="testadmin@test.cn"
    export DEBFULLNAME DEBEMAIL
    
    
    1
    2
    3
    4
    5

    编辑完成.bashrc后执行source ~/.bashrc

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

    因为所有组件都是二进制文件,所以我们直接用二进制构建最终的包就可以了。默认情况下通用机的uos是没有jdk的,所以需要打包进去jre。

    另外,提供一个软件源 (opens new window)供下载不同架构下的jdk

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

      mkdir -p cn.lisynet.app-1.0.0/cn.lisynet.app
      
      1
    2. # 接下来构建一个规范的软件目录,用来按规则放其他的文件,完整的目录结构为:

      //cd cn.lisynet.app-1.0.0
      //tree cn.lisynet.app-1.0.0
      cn.lisynet.app		#此目录以包名命名
      ├── entries				#此目录必须有
      │   ├── applications	#放desktop文件,gui界面应用必须要有此目录和desktop文件
      │   ├── autostart		#放自启动入口文件
      │   ├── 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
      ├── files				#放其他文件	此目录必须有
      └── info				#json格式的应用信息,info文件必须有
      
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25

      将必要的文件放到files里面

    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": [
          ],
          "plugins": [
          ]
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21

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

      appid:应用标识

      name:应用名称

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

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

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

      permissions:应用权限描述。

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

      support-plugins: 支持的插件类型

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

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

      本软件info内容参考如下:

      {
          "appid": "cn.lisynet.app",
          "name": "app",
          "version": "1.0.0",
          "arch": ["amd64"],
          "permissions": {
              "autostart": true,
              "notification": false,
              "trayicon": false,
              "clipboard": false,
              "account": false,
              "bluetooth": false,
              "camera": false,
              "audio_record": false,
              "installed_apps": false
          }
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
    4. # 写一个desktop文件以包名.desktop为格式,放到application文件夹里面

      //cn.lisynet.app.desktop
      [Desktop Entry]
      Name=myapp
      GenericName=Interface Designer
      Comment=myapp
      Exec=/opt/apps/cn.lisynet.app/files/start.sh
      Icon=/opt/cn.lisynet.app/icons/app.png
      MimeType=application/x-designer;
      Terminal=false
      Type=Application
      Categories=Utility;
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11

      desktop官方文档 (opens new window)

      desktop语法解释

      [Desktop Entry] 文件头

      Name 应用名称

      Comment 软件描述信息

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

      Icon 图标名

      Terminal 是否使用终端

      Type 启动器类型

      Categories 应用的类型 可用的字段参考 (opens new window)

    5. # 写一个自动启动的脚本,放到autostart里面

    //cn.lisynet.app.service
    [Unit]
    Description=myapp
    After=network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    ExecStart=/opt/apps/cn.lisynet.app/files/start.sh
    ExecReload=/opt/apps/cn.lisynet.app/files/reload.sh
    ExecStop=/opt/apps/cn.lisynet.app/files/stop.sh
    
    [Install]
    WantedBy=multi-user.target
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //start.sh
    #!/bin/bash
    /bin/sleep 120
    cd /opt/apps/cn.lisynet.app/files/webapp/bin&&./startservernohup.sh
    
    1
    2
    3
    4
    1. # 进入cn.lisynet.app-1.0.0目录,使用 dh_make --createorig -s 命令创建debian目录,并在上层目录初始化出来源码包

      dh_make --createorig -s
      
      1

      确认信息无误输入y即可

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

      然后修改control文件

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

      Source: cn.lisynet.app
      Section: devel
      Priority: optional
      Maintainer: test<test@test.cn>
      Build-Depends: debhelper (>= 11)
      Standards-Version: 4.1.3
      Homepage: http://app.lisynet.cn
      
      
      Package: cn.lisynet.app
      Architecture: amd64
      Depends: ${shlibs:Depends}, ${misc:Depends}
      Description: 测试系统
       测试系统
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14

      本次修改的几个字段解释

      sections 为软件分类,字段值参考 sections字段值参考 (opens new window)

      homepage 软件的主页的网址

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

      descriptions 软件的描述信息

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

      cn.lisynet.app/ /opt/apps
      cn.lisynet.app/entries/applications/cn.lisynet.app.desktop /usr/share/applications
      cn.lisynet.app/entries/autostart/cn.lisynet.app.service /usr/lib/systemd/system
      
      1
      2
      3

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

      #!/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)
      
      
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39

      写一个postinst文件用来做安装后的处理

      #!/bin/bash
      chmod -R 755 /opt/apps/cn.lisynet.app/*
      cp /opt/apps/cn.lisynet.app/entries/apapplications/cn.lisynet.app.desktop /usr/share/applications
      cp /opt/apps/cn.lisynet.app/autostart/cn.lisynet.app.service /etc/systemd/system
      chmod -R 754 /opt/apps/cn.lisynet.app/autostart/cn.lisynet.app.service
      # 自启(根据需求设置)
      systemctl enable cn.lisynet.app.service
      # 启动(根据需求设置)
      systemctl start cn.lisynet.app.service
      
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10

    写一个prerm文件用来做卸载时的处理

    #!/bin/bash
    
    systemctl disable cn.lisynet.app.service
    systemctl stop cn.lisynet.app
    
    1
    2
    3
    4

    接下来在cn.lisynet.app-1.0.0目录执行在 sudo dpkg-buildpackage -tc -uc -us -b打出deb包

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

    上次更新: 2024/01/07, 07:44:52
    使用curl命令发送POST或者GET请求
    RPM打包java应用

    ← 使用curl命令发送POST或者GET请求 RPM打包java应用→

    最近更新
    01
    Anaconda conda命令速查
    01-05
    02
    奇特的一生
    06-16
    03
    docker学习
    02-16
    更多文章>
    Theme by Vdoing | Copyright © 2020-2025 lisy | 备案号:鲁ICP备18023702号-1
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式