太长不看版
在 tauri.conf.json 的同级目录下创建一个 DEBIAN 文件夹,在文件夹中放入要添加的脚本文件,
编辑 tauri.conf.json 中的 tauri.bundle.deb.files 配置项
{
"tauri":{
...
"bundle":{
"deb": {
"files": {
"../control/": "./DEBIAN/"
}
}
}
}
}
详细分析过程
什么是deb包的脚本文件
根据 debian官网介绍:
deb包可以提供脚本作为软件包的一部分,当软件包被安装、升级或删除时,软件包管理系统将为你运行这些脚本。这些脚本就是软件包元数据文件 preinst、postinst、prerm 和 postrm。
Tauri 如何添加此类文件
脚本文件一般是被存放在工作目录的 DEBIAN 文件夹下的,然后,使用 dpkg-deb 命令将这个工作目录打包成一个 .deb 文件。文件将会被打包到deb文件中的 control.tar.gz 中。
但是,Tauri使用了cargo-bundle 进行编译,在 Tauri 编译过程中,我们无法自行在编译目录下创建 DEBIAN 文件,这就导致我们无法在编译的过程中将脚本文件打包到 control.tar.gz 中。
那有什么办法能让我们介入编译过程呢,官方提供了 自定义文件 的方法。
查看结构
首先我们来看一下 Tauri 在编译完成后产出了什么
tree my-app/src-tauri/target/release/bundle/deb/my-app_0.0.1_amd64
./
├── control
│ ├── control
│ └── md5sums
├── control.tar.gz
├── data
│ └── usr
│ ├── bin
│ │ └── my-app
│ ├── lib
│ │ └── my-app
│ └── share
│ ├── applications
│ │ └── my-app.desktop
│ └── icons
│ └── hicolor
│ ├── 129x129
│ │ └── apps
│ │ └── my-app.png
│ ├── 257x257@2
│ │ └── apps
│ │ └── my-app.png
│ └── 33x33
│ └── apps
│ └── my-app.png
├── data.tar.gz
└── debian-binary
可以看到这和官方文档中的路径 /usr/share/README.md 是吻合的,而生成的 control 文件夹就对应生成了 control.tar.gz。
那可以这样考虑:把 Custom File 的配置路径使用相对路径的方式保存到 control 文件夹中是否可行。
添加文件
在 tauri.conf.json 的同级目录下创建一个 DEBIAN 文件夹(只是为了跟随工程习惯,路径找得到就行),在文件夹中放入要添加的脚本文件,此处加入 postinst 文件
#!/bin/bash
# 创建桌面图标
cat > /usr/share/applications/my-app.desktop << EOF
[Desktop Entry]
Type=Application
Exec=/usr/bin/my-app
Icon=/usr/share/icons/hicolor/129x129/apps/my-app.png
Name=my-app
Categories=Productivity;
EOF
# 更新桌面图标缓存
if hash gtk-update-icon-cache 2>/dev/null; then
gtk-update-icon-cache -f -t /usr/share/icons/hicolor
fi
# 获取当前的图形会话用户
user=$(who | grep '(:0)' | awk '{print $1}')
# 检查桌面目录的名称并创建桌面图标
if su -c "[ -d ~/桌面 ]" $user ; then
su -c "ln -sf /usr/share/applications/my-app.desktop ~/桌面/" $user
else
su -c " ln -sf /usr/share/applications/my-app.desktop ~/Desktop/" $user
fi
在 tauri.conf.json 文件中配置引入位置
{
"tauri":{
...
"bundle":{
"deb": {
"files": {
"../control/": "./DEBIAN/"
}
}
}
}
}
检查编译结果
control 文件夹内结果:
deb 包内 control.tar.gz 结果:
可以发现,脚本文件被成功放入了 deb 打包文件中,并且安装deb文件的过程能够成功运行脚本。