Electron集成Java服务端制作deb包
环境和源文件
-
净室环境
净室环境指的是没有任何其他配置,刚刚安装好的一个系统环境。
净室环境是为了避免一些依赖问题。
可以通过虚拟机或者实体机来获得,这里推荐使用虚拟机,实体机相对成本更高。 -
净室环境系统:
本次使用系统环境为 deepin-desktop-community-20.3-amd64
-
源文件结构树:
demo文件夹为electron:build后输出的文件夹(Linux环境下)
其中scripts、server、res文件夹为后添加到demo目录中demo ├── chrome_100_percent.pak ├── chrome_200_percent.pak ├── chrome_crashpad_handler ├── chrome-sandbox ├── demo --electron打包成的Linux可执行文件 ├── icudtl.dat ├── libEGL.so ├── libffmpeg.so ├── libGLESv2.so ├── libvk_swiftshader.so ├── libvulkan.so.1 ├── LICENSE.electron.txt ├── LICENSES.chromium.html ├── locales ├── resources ├── resources.pak ├── scripts --配置脚本和服务 │ └── demo.service --Linux服务(后续有详解) ├── server --Java服务 │ ├── demo.jar --Java服务jar包 │ └── jre --jre运行环境 ├── snapshot_blob.bin ├── swiftshader ├── res --资源文件夹 │ └── Favs.ico --图标ico文件 ├── v8_context_snapshot.bin └── vk_swiftshader_icd.json
Service服务配置
-
demo.service完整内容(使用打包到deb包中的jre执行jar包)
如果不注册成linux服务的话每次都需要执行Java -jar demo.jar 很麻烦,对使用者也十分的不友好,所以这里将jar包服务注册到linux服务中,并设置开机自启。
[Unit] Description=demo-server [Service] Type=simple ExecStart=/usr/local/demo/server/jre/bin/java -jar /usr/local/demo/server/demo.jar [Install] WantedBy=multi-user.target
-
Service 区块配置
- [Unit] 区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系。它的主要字段如下。
字段 说明 Description 简短描述 Documentation 文档地址 Requires 当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败 Wants 与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败 BindsTo 与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行 Before 如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动 After 如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动 Conflicts 这里指定的 Unit 不能与当前 Unit 同时运行 Condition... 当前 Unit 运行必须满足的条件,否则不会运行 Assert... 当前 Unit 运行必须满足的条件,否则会报启动失败 - [Install] 通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动。它的主要字段如下。
字段 说明 WantedBy 它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中 RequiredBy 它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中 Alias 当前 Unit 可用于启动的别名 Also 当前 Unit 激活(enable)时,会被同时激活的其他 Unit - [Service] 区块用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。它的主要字段如下。
字段 说明 Type 定义启动时的进程行为。它有以下几种值。 Type=simple 默认值,执行ExecStart指定的命令,启动主进程 Type=forking 以 fork 方式从父进程创建子进程,创建后父进程会立即退出 Type=oneshot 一次性进程,Systemd 会等当前服务退出,再继续往下执行 Type=dbus 当前服务通过D-Bus启动 Type=notify 当前服务启动完毕,会通知Systemd,再继续往下执行 Type=idle 若有其他任务执行完毕,当前服务才会运行 ExecStart 启动当前服务的命令 ExecStartPre 启动当前服务之前执行的命令 ExecStartPost 启动当前服务之后执行的命令 ExecReload 重启当前服务时执行的命令 ExecStop 停止当前服务时执行的命令 ExecStopPost 停止当其服务之后执行的命令 RestartSec 自动重启当前服务间隔的秒数 Restart 定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog TimeoutSec 定义 Systemd 停止当前服务之前等待的秒数 Environment 指定环境变量
Debian打包结构和配置
-
deb包结构
它具有DEBIAN和软件具体安装目录(如etc, usr, opt, tmp等)
-
打包完整目录树
pkg ├── DEBIAN │ ├── control │ ├── postinst │ ├── postrm │ ├── preinst │ └── prerm └── usr ├── local │ └── demo --此demo文件夹为上边源文件demo └── share └── applications └── demo.desktop
-
Control完整内容:
Package: demo Section: Internet Priority: extra Version: 1.0.0 Maintainer: liuCh Architecture: amd64 Depends: libappindicator3-1 Recommends: libwebkit2gtk-4.0.37,libwebkitgtk-3.0-0 Description: This is demo
-
Control:
这个文件主要描述软件包的名称(Package),版本(Version),Installed-Size(大小),Maintainer(打包人和联系方式)以及描述(Description)等,是deb包必须具备的描述性文件,以便于软件的安装管理和索引。
字段 说明 例子/备注 Package 程序名称 中间不能有空格 Version 软件版本 Description 程序说明 Section 软件类别 utils, net, mail, text, x11 Priority 软件对于系统的重要程度 required, standard, optional, extra等; Essential 是否是系统最基本的软件包 yes/no,若为yes,则不允许卸载(除非强制性卸载) Architecture 软件所支持的平台架构 i386, amd64, m68k, sparc, alpha, powerpc等 Source 软件包的源代码名称 Depends 软件所依赖的其他软件包和库文件 若依赖多个软件包和库文件,采用逗号隔开 Pre-Depends 软件安装前必须安装、 配置依赖性的软件包和库文件 常用于必须的预运行脚本需求 Recommends 推荐安装的其他软件包和库文件 Suggests 建议安装的其他软件包和库文件 -
preinst完整内容: (校验是否已存在demo文件夹和是不是root用户安装)
#!/bin/bash if [ -d "/usr/local/demo" ]; then echo "error: please uninstall demo package first." exit 1; fi if [ $(whoami) != 'root' ]; then if [ "$1" == "" ]; then echo 'demo client needs root to complete installation' else echo "$1" fi exit 1 fi
-
preinst:
在Deb包文件解包之前(即软件安装前),将会运行该脚本。可以停止作用于待升级软件包的服务,直到软件包安装或升级完成。 -
postinst完整内容:(创建日志文件夹和注册demo.service服务设置开机自启并启动)
#!/bin/bash #kill all runing demo killall demo > /dev/null 2>&1 #clear log files if [ -d '/var/log/demo' ]; then rm -rf /var/log/demo fi mkdir /var/log/demo chmod 777 /var/log/demo #echo "create init" cp /usr/local/demo/scripts/demo.service /etc/systemd/system/demo.service || echoAndExit 'can not copy init file demo.service' #设置开机自启 systemctl enable demo.service #启动服务 systemctl start demo.service #创建桌面快捷图标 cp /usr/share/applications/demo.desktop /home/$(who | awk '{print $1}')/Desktop/
-
postinst:
负责完成安装包时的配置工作。如新安装或升级的软件重启服务。软件安装完后,执行该Shell脚本,一般用来配置软件执行环境,必须以“#!/bin/sh”为首行。 -
prerm完整内容:(删除服务)
#!/bin/bash systemctl stop demo.service systemctl disable demo.service rm /etc/systemd/system/demo.service > /dev/null 2>&1
-
prerm:
该脚本负责停止与软件包相关联的daemon服务。它在删除软件包关联文件之前执行。 -
postrm完整内容:(删除创建的日志文件夹)
#!/bin/bash if [ "$1" == "purge" ]; then if [ -d "/var/log/demo" ]; then rm -rf /var/log/demo fi fi
-
postrm:
负责修改软件包链接或文件关联,或删除由它创建的文件。软件卸载后,执行该Shell脚本,一般作为清理收尾工作,必须以“#!/bin/sh”为首行 -
demo.desktop完整内容
[Desktop Entry] #StartupWMClass=demo Categories=Network;RemoteControl; Comment=This is demo Comment[zh_CN]=这是一个演示 Exec=/usr/local/demo/demo GenericName=demo GenericName[zh_CN]=演示程序 Icon=/usr/local/demo/res/Favs.ico Name=demo Name[zh_CN]=演示 StartupNotify=false Terminal=false Type=Application X-Deepin-Vendor=user-custom
-
desktop
Desktop Entry文件是Linux桌面系统中用于描述程序启动配置信息的文件,它以.desktop为后缀名,相当于Windows系统下的桌面快捷方式。通常一个二进制可执行程序是一个没有后缀没有图标的文件,不可以随意移动。
因此很多Linux发行版都提供了启动器,便于集中管理应用程序。启动器本质是一个位于/usr/share/applications/路径下的目录。启动器目录中存放着很多.desktop文件,每个.desktop文件都是一个应用程序的入口,并且.desktop文件可以显示图标,对用户更加友好。- desktop 文件结构
字段 是否必选 说明 Version 否 该数值指定了当前 Desktop Entry 文件所遵循的 Desktop Entry 文件标准版本 Name 是 应用程序名称 GenericName 否 应用程序的通用名称 Comment 否 描述 Type 是 "Type"定义了Desktop Entry文件的类型。常见的"Type"数值是"Application"和"Link"。"Type = Application"表示当前Desktop Entry文件指向了一个应用程序;而"Type = Link"表示当前Desktop Entry文件指向了一个URL (Uniform Resource Locator)。 Exec 否 "Exec"只有Type=Application才有效,"Exec"的数值定义了启动指定应用程序所要执行的命令,在此命令是可以带参数的 URL 否 "URL"只有Type=Link才有效。"URL"的数值定义了该Desktop Entry文件指向的URL Icon 否 "Icon"的数值是以绝对路径的格式给出,图标的绝对路径。 StartupNotify 否 布尔值,只有Type=Application才有效,如果为true,则已知应用程序在使用DESKTOP_STARTUP_ID环境变量集启动时将发送“remove”消息。 Terminal 否 布尔值,只有Type=Application才有效,相关应用程序(即关键字"Exec"的数值)是否需要在终端窗口中运行. Categories 否 只有Type=Application才有效,程序在菜单中显示的类别,network:网络应用;Chat:社交沟通;Audio:音乐欣赏;Video:视频播放;Graphics:图形图像;Office:办公学习;Translation:阅读翻译;Development:编程开发;Utility:系统管理; -
补充:
- 文件比较运算符
命令 说明 例子/备注 -e filename 如果 filename存在,则为真 [ -e /var/log/syslog ] -d filename 如果 filename为目录,则为真 [ -d /tmp/mydir ] -f filename 如果 filename为常规文件,则为真 [ -f /usr/bin/grep ] -L filename 如果 filename为符号链接,则为真 [ -L /usr/bin/grep ] -r filename 如果 filename可读,则为真 [ -r /var/log/syslog ] -w filename 如果 filename可写,则为真 [ -w /var/mytmp.txt ] -x filename 如果 filename可执行,则为真 [ -x /usr/bin/grep ] filename1-nt filename2 如果 filename1比 filename2新,则为真 [ /tmp/install/etc/services -nt /etc/services ] filename1-ot filename2 如果 filename1比 filename2旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
- 字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
命令 说明 例子/备注 -z string 如果 string长度为零,则为真 [ -z "$myvar" ] -n string 如果 string长度非零,则为真 [ -n "$myvar" ] string1= string2 如果 string1与 string2相同,则为真 [ "$myvar" = "one two three" ] string1!= string2 如果 string1与 string2不同,则为真 [ "$myvar" != "one two three" ]
- 算术比较运算符
命令 说明 例子/备注 num1-eq num2 等于 [ 3 -eq $mynum ] num1-ne num2 不等于 [ 3 -ne $mynum ] num1-lt num2 小于 [ 3 -lt $mynum ] num1-le num2 小于或等于 [ 3 -le $mynum ] num1-gt num2 大于 [ 3 -gt $mynum ] num1-ge num2 大于或等于 [ 3 -ge $mynum ]
dpkg命令
-
打包
dpkg -b . demo.deb
第一个参数为需要打包的目录路径("."为当前目录),第二个参数为deb包名
-
安装
dpkg -i demo.deb
-
强制安装
dpkg --force-depends -i demo.deb
强制安装可能会有依赖问题,慎用。
-
卸载
dpkg -r demo
删除包,但保留配置文件
dpkg -P|--purge my-deb
删除包和配置文件
-
解包
dpkg --unpack demo.deb
-
查看deb包是否安装/deb包的信息
dpkg -s demo
-
查看deb包文件内容
dpkg -c demo.deb
-
解压deb中所要安装的文件
dpkg -x demo.deb demo
第一个参数为所要解压的deb包,第二个参数为将deb包解压到指定的目录
-
解压deb包中DEBIAN目录下的文件(至少包含control文件)
dpkg -e demo.deb demo/DEBIAN
-
列出与该包关联的文件
dpkg -L demo
-
配置软件包
dpkg --configure demo
本文来自博客园,作者:zwbsoft,转载请注明原文链接:https://www.cnblogs.com/zwbsoft/p/15993342.html
电话微信:13514280351
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南