Linux打包

概述

常见的Linux桌面系统有Fedora、Ubuntu,以及统信USO、Deepin等国产系统。Linux中主流的软件包有debrpm两种格式;其中deb适用于Debian、Ubuntu等,rpm适用于CentOS、Fedora、OpenSUSE等;但对于桌面级Linux系统,还可以使用AppImage格式包。


AppImage包和rpm包都无法直接双击安装,安装必须先赋予执行权限;尤其是AppImage包,其能否安装成功完全依赖于当前系统是否有相关的依赖软件;但deb包可直接双击安装;

在linux中,deb 包是为系统安装而设计的,deb 包默认都会安装到 /opt 目录下 ;因为 /opt 是一个系统目录,只有 root 用户有写权限;因此deb包安装的electron应用在运行时是无法对文件进行写或赋予执行权限的。


综上,在Linux中没有完美的打包方式,最终借鉴vs code打包成.deb.rpm;并在软件首次启动时,将需要执行或写入的文件复制到用户目录下;复制到用户目录下以后,就可以进行任意操作。electron应用默认安装在/opt等系统目录下,该目录普通用户无法写入;如果强制通过chmod命令修改/opt系统目录下的文件权限,会破坏系统安全规范,可能被系统安全策略阻止,会造成很多不稳定因素。借鉴vscode,将electron应用中需要写入和执行的文件复制到用户目录下,再进行任意操作。例如在用户目录创建文件夹 ~/.sidoc-desktop-frp/,并在该文件夹中放置所有需要写入和执行的文件;.sidoc-desktop-frp是一个隐藏目录,此举借鉴自vscode和其它应用,例如:~/.vscode/


常用问题

1>. 在Ubuntu中双击deb安装包,无法弹出安装界面时,可通过如下命令进行安装;如下命令安装时会显示安装过程中的错误,这些错误可能就是无法弹出安装界面的原因:

sudo dpkg -i /path/to/your-package.deb

2> 在Ubuntu中,.desktop启动器文件在 /usr/share/applications 目录下;

3> 关闭沙盒:为了提高软件在Linux系统中的兼容性,需要在软件的启动命令上加如下参数,以禁用沙盒和GPU;

## 如下配置项 electron-build 配置文件中;
## 如下参数会被加到软件的启动命令上
"executableArgs": ["--no-sandbox", "--disable-gpu"]


关于沙箱机制

Electron 默认启用了 Chromium 的沙箱机制,用于隔离进程以提升electron应用的安全性;以避免渲染进程直接调用 Node.js 的底层 API(如:fschild_process),导致恶意代码执行系统命令、读写文件等危险操作;如:require('child_process').exec('rm -rf /');


多数Linux不允许软件在root下以沙箱模式启动,因此对于Electron应用,任何情况下都不应该在root用户下启动;当然,在Linux系统中,所有日常应用本就应该在非root用户下运行,root仅用于执行某些高级操作。


最佳实践是在打包时对eletron应用进行配置,以便用户在安装electron应用后自动执行如下命令,以启用沙盒:

sudo chown root:root chrome-sandbox 
sudo chmod 4755 chrome-sandbox ## 设置 setuid 位

但electron应用的沙盒依赖于 setuid 机制来实现,如果linux系统环境本身禁用了 setuid 或没有安装chromium-sandbox,则无论执行什么命令都无法启用沙盒。


如下图所示,大厂开发的Electron应用基本都禁用沙盒,以提升兼容性:


综上,为了提升应用的兼容性,推荐在Linux中的eletron应用中关闭沙盒。


安装deb和rpm包

如果打包为deb和rpm格式,则可按如下方式安装,不同Linux的安装方式可能略有差异;

0.1> 在Fedora桌面系统中安装rpm包 -----------------------------------------------------------------------

## 切到root用户
sudo -i

## 增加执行权限
sudo chmod +x package.rpm

## 安装软件
sudo dnf install package.rpm

## 卸载软件
sudo rpm -e package


0.2> 在Ubuntu桌面系统中安装deb包 -----------------------------------------------------------------------
## 直接双击安装即可,但可能因为沙盒权限问题而无法启动,因此要用如下命令以临时关闭沙盒的方式启动
sidoc-frp-desktop --no-sandbox
举报

© 著作权归作者所有


1