Bläddra i källkod

V0.1打包脚本

Apple 4 veckor sedan
incheckning
7d473c80a4
3 ändrade filer med 841 tillägg och 0 borttagningar
  1. 513 0
      createDeb.sh
  2. 296 0
      package_SBC.py
  3. 32 0
      start.sh

+ 513 - 0
createDeb.sh

@@ -0,0 +1,513 @@
+#!/bin/bash
+
+#创建Deb包的脚本,需要先设置好变量位置,传入的第一个参数是可执行程序的名称
+
+
+#帮助字符串
+helpStr="
+deb打包脚本
+第一个参数是动作类型
+第二个参数是可执行程序的名称
+此脚本支持的动作类型有:\n 
+    -b|build:构建deb包\n 
+    -c|clean:清理\n 
+    -cd:拷贝依赖库\n
+    -d|dir:创建目录\n
+    -db|dirbuild:创建目录并构建deb包\n
+    -h|help:帮助 "
+
+
+#检查参数是否正确
+case $1 in
+    -b|build)
+        #检查是否提供了可执行程序的名称
+        if [ -z $2 ]; then
+            echo "未提供可执行程序的名称"
+            exit 1
+        fi
+        ;;
+    -c|clean)
+        echo "清理文件夹"
+        ;;
+    -cd)
+        echo "拷贝依赖库"
+    ;;
+    -d|dir)
+        #检查是否提供了可执行程序的名称
+        if [ -z $2 ]; then
+            echo "未提供可执行程序的名称"
+            exit 1
+        fi
+        ;;
+    -db|dirbuild)
+        #检查是否提供了可执行程序的名称
+        # if [ -z $2 ]; then
+        #     echo "未提供可执行程序的名称"
+        #     exit 1
+        # fi
+        ;;
+    -h|-help)
+        echo "$helpStr"
+        exit 0
+        ;;
+    *)
+        echo "参数错误,请输入 ./createDeb.sh -h 查看帮助"
+        exit 1
+        ;;
+esac
+
+
+#=========================================================================
+# ************************    自定义的一些变量    *************************
+#=========================================================================
+
+#可执行程序的名称
+AppName=$2
+#安装包名,转换成全小写
+PackageName=$(echo $AppName | awk '{print tolower($0)}')
+#版本信息
+Version=1.0.1.1
+#安装路径,绝对路径
+installPath=/opt/$AppName
+#软件描述
+AppComment="This is $AppName Application"
+#安装包大小
+InstalledSize=158900
+#作者信息
+Maintainer=HZLH
+#安装包的描述
+Description="ESM8C Upper Computer Program for ESM8C. ESM8C is a software for the upper computer of ESM8C."
+
+
+#设置临时环境变量,后面拷贝可执行程序依赖库的时候需要这些临时变量,就是Qt的安装位置
+#PATH=/home/Apple/Programes/Qt/Qt5.15.2/5.15.2/gcc_64/bin:$PATH
+#LD_LIBRARY_PATH=/home/Apple/Programes/Qt/Qt5.15.2/5.15.2/gcc_64/lib:$LD_LIBRARY_PATH
+#QT_PLUGIN_PATH=/home/Apple/Programes/Qt/Qt5.15.2/5.15.2/gcc_64/plugins:$QT_PLUGIN_PATH
+#QML2_IMPORT_PATH=/home/Apple/Programes/Qt/Qt5.15.2/5.15.2/gcc_64/qml:$QML2_IMPORT_PATH
+
+PATH=/home/Apple/Programes/Qt/Qt5.12.12/5.12.12/gcc_64/bin:$PATH
+LD_LIBRARY_PATH=/home/Apple/Programes/Qt/Qt5.12.12/5.12.12/gcc_64/lib:$LD_LIBRARY_PATH
+QT_PLUGIN_PATH=/home/Apple/Programes/Qt/Qt5.12.12/5.12.12/gcc_64/plugins:$QT_PLUGIN_PATH
+QML2_IMPORT_PATH=/home/Apple/Programes/Qt/Qt5.12.12/5.12.12/gcc_64/qml:$QML2_IMPORT_PATH
+
+#添加自定义的库位置,这个是自己编译的第三方库
+#注意,因为是库文件,要设置成这个变量才行
+LD_LIBRARY_PATH=/home/Apple/Libs/Standard_Library/Libraries/linux_gcc8.3/lib:$LD_LIBRARY_PATH
+LD_LIBRARY_PATH=/home/Apple/Libs/Standard_Library/Libraries/sm_dll/libs/linux/x64:$LD_LIBRARY_PATH
+LD_LIBRARY_PATH=/home/Apple/Libs/Linux_Standard_Libs/ffmpeg4.4.5/lib:$LD_LIBRARY_PATH
+LD_LIBRARY_PATH=/data/home/Apple/Work/3-HK_Camera/LHEQM_Camera/libs/hk_sdk:$LD_LIBRARY_PATH
+LD_LIBRARY_PATH=/data/home/Apple/Work/3-HK_Camera/LHEQM_Camera/libs/hk_sdk/HCNetSDKCom:$LD_LIBRARY_PATH
+
+#============================================================================
+#拷贝依赖库
+func_copyDepend()
+{
+
+#先获取sudo权限
+sudo echo "获取sudo权限"
+
+#检测是否安装了linuxdeployqt
+if command -v "$linuxdeployqt" > /dev/null 2>&1; then
+    echo "未安装linuxdeployqt"
+    exit 1
+fi
+
+#=========================================================================
+# ************************    拷贝程序依赖库    *************************
+#=========================================================================
+
+echo "**********    开始拷贝Qt依赖库   **********"
+
+mkdir libs
+cd libs
+cp ../$AppName .
+
+#导出环境变量
+export PATH
+export LD_LIBRARY_PATH
+export QT_PLUGIN_PATH
+export QML2_IMPORT_PATH
+
+#查看qt版本
+echo "***** qmake Version:" $(qmake -v)
+echo "***** PATH:" $PATH
+echo "***** LD_LIBRARY_PATH:" $LD_LIBRARY_PATH
+echo "***** QT_PLUGIN_PATH:" $QT_PLUGIN_PATH
+echo "***** QML2_IMPORT_PATH:" $QML2_IMPORT_PATH
+
+
+#拷贝依赖库
+linuxdeployqt $AppName -appimage
+
+cd ..
+
+echo "**********    拷贝完成   **********"
+
+}
+
+#============================================================================
+
+#构建函数
+func_create()
+{
+
+#先获取sudo权限
+sudo echo "获取sudo权限"
+
+#检测可执行程序和图标是否存在
+if [ ! -e $AppName ]; then
+    echo "可执行程序不存在"
+    exit 1
+fi
+
+if [ ! -e $AppName.png ]; then
+    echo "图标“$AppName.png”不存在"
+    exit 1
+fi
+
+#检测是否安装了linuxdeployqt
+if command -v "$linuxdeployqt" > /dev/null 2>&1; then
+    echo "未安装linuxdeployqt"
+    exit 1
+fi
+
+echo "***** 开始创建相关目录 *****"
+echo "构建的程序名称:$AppName"
+
+echo "***** 创建目录 *****"
+mkdir -p output
+mkdir -p source/DEBIAN
+mkdir -p source$installPath
+
+#拷贝可执行文件,拷贝依赖库
+echo "***** 拷贝可执行文件 *****"
+cp $AppName source$installPath
+cp $AppName.png source$installPath
+
+#=========================================================================
+# ************************    拷贝程序依赖库    *************************
+#=========================================================================
+
+echo "**********    开始拷贝Qt依赖库   **********"
+
+#导出环境变量
+export PATH
+export LD_LIBRARY_PATH
+export QT_PLUGIN_PATH
+export QML2_IMPORT_PATH
+
+#查看qt版本
+echo "***** qmake Version:" $(qmake -v)
+echo "***** PATH:" $PATH
+echo "***** LD_LIBRARY_PATH:" $LD_LIBRARY_PATH
+echo "***** QT_PLUGIN_PATH:" $QT_PLUGIN_PATH
+echo "***** QML2_IMPORT_PATH:" $QML2_IMPORT_PATH
+
+#拷贝依赖库,先保存现在的路径
+srcPath=$(pwd)
+cd source$installPath
+echo "***** cd $(pwd)"
+
+#检测是否提供默认的.desktop文件
+if [ ! -e $srcPath/$AppName.desktop ]; then
+    #检测当前文件夹是否存在.desktop文件,如果有就删除
+    if [ -e $AppName.desktop ]; then
+        rm $AppName.desktop
+    fi
+    echo "***** 未提供默认的$AppName.desktop文件,使用默认生成的 *****"
+    echo "[Desktop Entry]" >> $AppName.desktop
+    echo "Type=Application" >> $AppName.desktop
+    echo "Name=$AppName" >> $AppName.desktop
+    echo "Exec=$installPath/$AppName" >> $AppName.desktop
+    echo "Icon=$installPath/$AppName.png" >> $AppName.desktop
+    echo "Comment=This is $AppName Application" >> $AppName.desktop
+    echo "Terminal=false" >> $AppName.desktop
+fi
+#赋予可执行权限,不然就是个普通文件
+chmod +x $AppName.desktop
+#拷贝依赖库
+linuxdeployqt $AppName -appimage
+
+
+cd $srcPath
+echo "***** cd $(pwd)"
+echo "**********    拷贝完成   **********"
+
+
+#=========================================================================
+# *******************    添加安装和卸载时运行的脚本    ********************
+#=========================================================================
+
+echo "***** 添加安装和卸载脚本 *****"
+
+cd source/DEBIAN
+echo "***** cd $(pwd)"
+
+#生成control文件,这个是Deb包的描述文件
+if [ ! -e $srcPath/control ]; then
+    echo "***** 未提供默认的control文件,生成默认的 *****"
+    #检查有没有默认生成的文件
+    if [ -e control ]; then
+        rm control
+    fi
+
+cat > control << EOF
+Package: $PackageName
+Version: $Version
+Section: utils
+Priority: optional
+Architecture: amd64
+Depends:
+Installed-Size: $InstalledSize
+Maintainer: $Maintainer
+Description: $Description
+EOF
+
+
+else
+    echo "***** 已提供control文件 *****"
+    cp $srcPath/control .
+
+fi
+
+#添加preinst文件,这个是安装程序之前运行的脚本
+if [ ! -e $srcPath/preinst ]; then
+    echo "***** 未提供默认的preinst文件,生成默认的 *****"
+    #检查有没有默认生成的文件
+    if [ -e preinst ]; then
+        rm preinst
+    fi
+
+cat > preinst << EOF
+#!/bin/bash
+
+echo "***** run preinst *****"
+echo "安装$AppName,先关闭 $AppName..."
+echo "当前用户是:\$whoami"
+echo "安装用户是:\$SUDO_USER"
+
+echo "***** end preinst *****"
+EOF
+
+else
+    echo "***** 已提供preinst文件 *****"
+    cp $srcPath/preinst .
+fi
+
+#添加postinst文件,这个是安装程序之后运行的脚本,主要是拷贝快捷方式
+if [ ! -e $srcPath/postinst ]; then
+    echo "***** 未提供默认的postinst文件,生成默认的 *****"
+    #检查有没有默认生成的文件
+    if [ -e postinst ]; then
+        rm postinst
+    fi
+
+
+cat > postinst << EOF
+#!/bin/bash
+
+echo "***** run postinst *****"
+chmod 777 $installPath/$AppName.desktop
+#拷贝至菜单文件夹
+cp $installPath/$AppName.desktop /usr/share/applications/
+
+#添加桌面文件,只添加当前用户
+if [ -d /home/\$SUDO_USER/Desktop ]
+then
+    #这一句用来添加桌面快捷方式,$SUDO_USER是执行sudo的用户,使用安装器安装的可能不会有桌面图标
+    cp $installPath/$AppName.desktop /home/\$SUDO_USER/Desktop/
+fi
+
+echo "***** end postinst *****"
+EOF
+
+else
+    echo "***** 已提供postinst文件 *****"
+    cp $srcPath/postinst .
+
+fi
+
+#添加prerm文件,这个是卸载程序之前运行的脚本
+if [ ! -e $srcPath/prerm ]; then
+    echo "***** 未提供默认的prerm文件,生成默认的 *****"
+    #检查有没有默认生成的文件
+    if [ -e prerm ]; then
+        rm prerm
+    fi
+
+
+cat > prerm << EOF
+#!/bin/bash
+
+echo "***** run prerm *****"
+echo "卸载$AppName,先关闭 $AppName..."
+#关闭前需要先判断有没有运行
+A=\$(ps -ef | grep $AppName | grep -v grep | awk '{print \$2}')
+echo "$AppName 的进程ID是:\$A"
+echo "删除$AppName,正在关闭 $AppName..."
+# kill -9 \$A
+echo "$AppName 已关闭"
+
+echo "***** end prerm *****"
+EOF
+
+
+else
+    echo "***** 已提供prerm文件 *****"
+    cp $srcPath/prerm .
+fi
+
+#添加postrm文件,这个是卸载程序之后运行的脚本
+if [ ! -e $srcPath/postrm ]; then
+    echo "***** 未提供默认的postrm文件,生成默认的 *****"
+    #检查有没有默认生成的文件
+    if [ -e postrm ]; then
+        rm postrm
+    fi
+
+
+cat > postrm << EOF
+#!/bin/bash
+
+echo "***** run postrm *****"
+echo "正在删除 $AppName..."
+#检查文件是否存在
+echo "检查$AppName.desktop是否存在"
+if [ -f /usr/share/applications/$AppName.desktop ]; then
+    echo "删除/usr/share/applications/$AppName.desktop"
+    rm /usr/share/applications/$AppName.desktop
+else
+    echo "/usr/share/applications/$AppName.desktop不存在"
+fi
+
+#删除桌面快捷方式
+echo "检查/home/*/Desktop/$AppName.desktop是否存在"
+for username in \`ls /home\`
+do
+    #文件存在则删除
+    if [ -e /home/\$username/Desktop/$AppName.desktop ]; then
+        echo "删除/home/\$username/Desktop/$AppName.desktop"
+        rm /home/\$username/Desktop/$AppName.desktop
+    else
+        echo "/home/$username/Desktop/$AppName.desktop 不存在"
+    fi
+done
+
+#删除$installPath
+echo "检查$installPath 是否存在"
+if [ -d $installPath ]; then
+    echo "删除$installPath"
+    rm -rf $installPath
+else
+    echo "$installPath 不存在"
+fi
+
+echo "$AppName 已删除"
+
+echo "***** end postrm *****"
+EOF
+
+else
+    echo "***** 已提供postrm文件 *****"
+    cp $srcPath/postrm .
+
+fi
+
+#给四个问价赋予可执行权限
+chmod 775 preinst
+chmod 775 postinst
+chmod 775 prerm
+chmod 775 postrm
+
+cd $srcPath
+echo "***** cd $(pwd)"
+
+echo "***** 目录和文件创建完成,输入 ./createDeb.h -b 构建Deb包 *****"
+
+}
+#end func_create
+
+#=========================================================================
+# **************************    打包成Deb包    ***************************
+#=========================================================================
+
+func_build()
+{
+
+#检查文件夹目录是否正确
+if [ ! -d source ]; then
+    echo "source文件夹不存在"
+    exit 1
+fi
+if [ ! -d output ]; then
+    echo "output文件夹不存在"
+    exit 1
+fi
+
+#检查可执行程序是否存在
+if [ ! -e source$installPath/$AppName ]; then
+    echo "可执行程序不存在"
+    exit 1
+fi
+
+
+echo "***** 开始生成Deb包 *****"
+debName="$AppName"_amd64_"$Version".deb
+
+#检查有没有生成的Deb包
+if [ -e output/$debName ]; then
+    rm output/$debName
+fi
+
+#打包
+sudo dpkg -b source output/$debName
+
+echo "***** Deb包生成完成:output/$debName *****"
+
+}
+#end func_build
+
+#=========================================================================
+# ***************************    清理函数    ****************************
+#=========================================================================
+
+func_clean()
+{
+    echo "***** 开始清理 *****"
+    rm -rf source
+    rm -rf output/*
+    echo "***** 清理完成 *****"
+}
+
+
+#=========================================================================
+# ***************************    执行函数    ****************************
+#=========================================================================
+
+
+case $1 in
+    -b|build)
+        # func_create
+        func_build
+        ;;
+    -c|clean)
+        func_clean
+        ;;
+    -cd)
+        func_copyDepend
+        ;;
+    -d|dir)
+        func_create
+        ;;
+    -db|dirbuild)
+        func_create
+        func_build
+        ;;
+    -h|-help)
+        echo "$helpStr"
+        ;;
+    *)
+        echo "参数错误,请输入 ./createDeb.sh -h 查看帮助"
+        ;;
+esac
+

+ 296 - 0
package_SBC.py

@@ -0,0 +1,296 @@
+# This script is used to build the uos app package
+# Usage: 
+# Just modify the app_name, app_version, app_description, app_author, app_email etc.
+# Rename this file to package_your_app.py (optional)
+# Open command and input 'python3 package_your_app.py'
+# Then the deb file will create in ./bin directory
+# Warning:
+# Your computer should installed 'dh_make', 'python3' and 'linuxdeployqt'
+# If your app_path have directory lib, it won't exec linuxdeployqt~
+# Datetime: 2024/10/17
+
+import os
+import json
+import shutil
+import glob
+
+# define your app information
+class App(object):
+    app_name = 'SafeBroadClient'
+    app_chn_name = 'EQM安播客户端'
+    app_id = 'com.hzlh.cas-sbc' # not support upper,just lowwer and digit!
+    app_version = '1.0.1.0'
+    app_description = '联汇国产化智慧播控系统(EQM)'
+    app_author = 'wangfang'
+    app_email = 'wangfang@hzlh.com'
+    icon_size = '200x200' # support 16/24/32/48/128/256/512
+    icon_name = 'logo.ico' # should put it in 'app_path/bin'
+    app_path = '/SRC/' # your application path should be 'app_path/bin'!!!
+    home_page = 'https://www.hzlh.com'
+    depend_lib_path = '' # if needed, it'll add to Environment Path
+
+# global var
+ROOT_DIR = os.getcwd()
+CURRENT_USER = os.getenv("USER") or os.getenv("LOGNAME")
+#HOME_PATH = os.path.expanduser('~')
+
+def add_depend_libs_path():
+    if App.depend_lib_path != '':
+        os.system('export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:' + App.depend_lib_path)
+
+# switch to directory
+def switch_to_dir(dir_name):
+    if not os.path.exists(dir_name):
+        os.makedirs(dir_name)
+    os.chdir(dir_name)
+
+# create target directory
+def create_target_dir(dir_name):
+    target_dir = dir_name
+    if not os.path.exists(target_dir):
+        os.makedirs(target_dir)
+    return target_dir
+
+# create a file
+def create_file(file_name):
+    with open(file_name, 'w') as f:
+        f.write('')
+
+# create your_app_id-6.0.0 directory
+# it always like ./bin/your_app_id-6.0.0
+def create_app_dir():
+    app_dir = os.path.join(ROOT_DIR, 'bin', App.app_id + '-' + App.app_version)
+    return create_target_dir(app_dir)
+
+# create a file nemed info
+def create_info_file():
+    data = {
+        "appid": App.app_id,
+        "name": App.app_name,
+        "version": App.app_version,
+        "arch": ["amd64"],
+        "permissions": {
+            "autostart": False,
+            "notification": False,
+            "trayicon": False,
+            "clipboard": True,
+            "account": False,
+            "bluetooth": False,
+            "camera": False,
+            "audio_record": False,
+            "installed_apps": False
+        }
+    }
+
+    with open('info', 'w') as json_file:
+        json.dump(data, json_file, indent=4)
+    
+# create a file named your_app_id.desktop
+# Icon=/opt/apps/{App.app_id}/files/bin/{App.app_name}.png
+def create_desktop_entry_file(file_name):
+    content = f"""[Desktop Entry]
+Name={App.app_name}
+Name[zh_CN]={App.app_chn_name}
+Comment={App.app_description}
+Exec=/opt/apps/{App.app_id}/files/AppRun
+Icon=/opt/apps/{App.app_id}/files/bin/{App.icon_name}
+Terminal=false
+Categories=Utility
+Type=Application
+"""
+    
+    with open(file_name, 'w') as file:
+        file.write(content)
+
+def create_apprun_file():
+    content = f"""#!/bin/bash
+SELF=$(readlink -f "$0")
+HERE=${{SELF%/*}}
+ARCH="x86_64-linux-gnu"
+#ARCH="aarch64-linux-gnu"
+
+export PATH="${{HERE}}/bin:${{PATH:+:$PATH}}:$PATH"
+export LD_LIBRARY_PATH="${{HERE}}/lib"
+export XDG_DATA_DIRS="${{HERE}}/share:/usr/share"
+exec {App.app_name} $*
+"""
+    with open('AppRun', 'w') as file:
+        file.write(content)
+    os.system('chmod 755 AppRun')
+
+def get_desktop_path():
+    user_dirs_path = os.path.expanduser('~/.config/user-dirs.dirs')
+    desktop_path = os.path.expanduser('~/Desktop') # default
+    if os.path.exists(user_dirs_path):
+        with open(user_dirs_path) as f:
+            for line in f:
+                if "XDG_DESKTOP_DIR" in line:
+                    desktop_path = line.split("=")[1].strip().strip('"')
+                    desktop_path = desktop_path.replace('$HOME', os.path.expanduser('~'))
+                    break
+    return desktop_path
+
+def create_install_file():
+    desktop_path = get_desktop_path()
+    print('This user home path is ' + desktop_path)
+    with open('install', 'w') as f:
+        f.write(f'{App.app_id}/ /opt/apps\n')
+        f.write(f'{App.app_id}/entries/applications/{App.app_id}.desktop /usr/share/applications\n')
+        #f.write(f'{App.app_id}/entries/applications/{App.app_id}.desktop {desktop_path}\n')
+        #f.write(f'{App.app_id}/files/lib/* /usr/lib\n')
+
+def modify_rules_file():
+    # append "xxx" to the rules file
+    with open('rules', 'a') as f:
+        f.write("""
+override_dh_auto_build:
+ 
+override_dh_shlibdeps:
+    --dpkg-shlibdeps-params=--ignore-missing-info
+ 
+override_dh_strip:""")
+
+def modify_control_file():
+    with open('control', 'r+') as f:
+        data = f.read()
+        start_pos = data.find('Description:')
+        if start_pos != -1:
+            insert_pos = start_pos + len('Description:')
+            new_text = data[:insert_pos] + App.app_description + '\n'
+        else:
+            new_text = data
+        line_datas = new_text.split('\n')
+        new_datas = []
+        for line in line_datas:
+            if line.startswith('Maintainer:'):
+                new_datas.append(f'Maintainer:{App.app_author} {App.app_email}')
+            elif line.startswith('Homepage:'):
+                new_datas.append(f'Homepage:{App.home_page}')
+            else:
+                new_datas.append(line)
+
+        f.seek(0)
+        f.truncate()
+        f.write('\n'.join(new_datas))
+
+def create_postinst_file():
+    with open('postinst', 'w') as f:
+        f.write(f'''
+#!/bin/bash
+set -e
+#chown -R {CURRENT_USER}:{CURRENT_USER} /opt/apps/{App.app_id}/files/bin || true
+chmod -R 777 /opt/apps/{App.app_id}/files/bin
+exit 0''')
+    os.system('chmod 755 postinst')
+
+def is_bin_exists():
+    if not os.path.exists('bin'):
+        return False
+    return True
+
+# copy ./bin/your_app to ./your_app 
+def copy_file_to_target_dir(src_path, target_path):
+    shutil.copy(src_path, target_path)
+
+def circulate_copy_to_target_dir(src_path, target_path):
+    for file in glob.glob(src_path):
+        des = target_path + '/' + file.split('/')[-1]
+        shutil.copy(file, des)
+
+# remove all files below this directory
+def remove_files_in_current_dir(current_dir):
+    for item in os.listdir(current_dir):  # 遍历当前目录下的所有文件和目录
+        item_path = os.path.join(current_dir, item)  # 获取完整路径
+        if os.path.isfile(item_path):  # 如果是文件
+            os.remove(item_path)  # 删除文件
+
+def is_packaged():
+    if os.path.exists('lib'):
+        return True
+    else:
+        return False
+
+def package_app():
+    command = f"linuxdeployqt ./bin/{App.app_name} -appimage"
+    os.system(command)
+
+if __name__ == '__main__':
+    print('Start to build uos app package...')
+    add_depend_libs_path()
+    app_bin_dir = ROOT_DIR + App.app_path
+    switch_to_dir(app_bin_dir)
+    if not is_bin_exists():
+        print('The bin directory is not exists!')
+        exit(1)
+
+    if not is_packaged():
+        package_app()
+    switch_to_dir(ROOT_DIR)
+    app_dir = create_app_dir()
+    switch_to_dir(app_dir) 
+    create_target_dir(App.app_id)
+    data_dir = app_dir + '/' + App.app_id
+    switch_to_dir(data_dir)
+    # create entries and files directory
+    create_target_dir('entries')
+    create_target_dir('files')
+    # create a file named info
+    create_info_file()
+    entries_dir = data_dir + '/entries'
+    switch_to_dir(entries_dir)
+    create_target_dir('applications')
+    app_desktop_file = 'applications/' + App.app_id + '.desktop'
+    create_file(app_desktop_file)
+    create_desktop_entry_file(app_desktop_file)
+    # create icons directory
+    icon_path = 'icons/hicolor/' + App.icon_size + '/apps'
+    create_target_dir(icon_path)
+    # copy the icon file to the icons directory
+    app_path = ROOT_DIR + App.app_path
+    icon_file = app_path + 'bin/' + App.icon_name
+    os.system(f'cp {icon_file} {icon_path}/{App.app_id}.png')
+    
+    files_dir = data_dir + '/files'
+    # copy the app directory to the files directory
+    os.system(f'cp -r {app_path}/* {files_dir}')
+
+    switch_to_dir(files_dir)
+    create_apprun_file()
+
+    switch_to_dir(app_dir)
+    # make debian directory,just exec 'dh_make --createorig -s' or 'apt install dh-make' first
+    # if command'dh_make' not found 
+    
+    os.system('dh_make --createorig -s -y')
+    # if command dh_make not found, you can exec 'apt install dh-make' to install it
+
+    # create install file, just like 'touch install':
+    # install file format
+    # com.hzlh.cas10m/ /opt/apps
+    # com.hzlh.cas10m/entries/applications/cas10m.desktop /usr/share/applications
+    # //com.hzlh.cas10m/files/lib/ /usr/lib
+    debian_dir = app_dir + '/debian'
+    switch_to_dir(debian_dir)
+    create_install_file()
+    # just for log and config file
+    create_postinst_file()
+    # modify the control file, like depends, description, etc.
+    modify_control_file()
+
+    # modify changelog file, read all data then replace 'app_version-1' to 'app_version'
+    with open('changelog', 'r+') as f:
+        data = f.read()
+        data = data.replace(App.app_version + '-1', App.app_version)
+        f.seek(0)
+        f.truncate()
+        f.write(data)
+
+    # remove ex or EX files, just exec 'rm *.ex *.EX'
+    os.system('rm *.ex *.EX')
+
+    # modify the rules file
+    modify_rules_file()
+
+    switch_to_dir(app_dir)
+    # make deb package, just exec 'dpkg-buildpackage -tc -uc -us -b -d'
+    os.system('dpkg-buildpackage -tc -uc -us -b -d')

+ 32 - 0
start.sh

@@ -0,0 +1,32 @@
+#!/bin/bash
+
+#======================================================================================
+# 设置临时环境变量,后面拷贝可执行程序依赖库的时候需要这些临时变量
+#======================================================================================
+
+#这这个是Qt的安装地址
+PATH=$PATH:/home/Apple/Programes/Qt/Qt5.12.12/5.12.12/gcc_64/bin
+LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/Apple/Programes/Qt/Qt5.12.12/5.12.12/gcc_64/lib
+QT_PLUGIN_PATH=$QT_PLUGIN_PATH:/home/Apple/Programes/Qt/Qt5.12.12/5.12.12/gcc_64/plugins
+QML2_IMPORT_PATH=$QML2_IMPORT_PATH:/home/Apple/Programes/Qt/Qt5.12.12/5.12.12/gcc_64/qml
+
+
+#这个是第三方库的地址,比如程序可能调用的curl,有多少个动态库文件夹就添加多少条
+LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/Apple/Libs/Standard_Library/Libraries/linux_gcc8.3/lib
+#LD_LIBRARY_PATH=/home/Apple/Libs/Standard_Library/Libraries/sm_dll/libs/linux/x64:$LD_LIBRARY_PATH
+
+#导出环境变量
+export PATH
+export LD_LIBRARY_PATH
+export QT_PLUGIN_PATH
+export QML2_IMPORT_PATH
+
+#查看qt版本
+echo "***** qmake Version:" $(qmake -v)
+echo "***** PATH:" $PATH
+echo "***** QT_PLUGIN_PATH:" $QT_PLUGIN_PATH
+echo "***** QML2_IMPORT_PATH:" $QML2_IMPORT_PATH
+echo "***** LD_LIBRARY_PATH:" $LD_LIBRARY_PATH
+
+#调用Python脚本拷贝依赖库以及打包程序
+python3 package_SBC.py