这篇文章主要介绍appimage包如何转化为符合uos规范的deb包
一,获取appimage包并解压
1,本文档使用obsidian程序进行演示从appimage包改成uos的deb包的过程示例.
2,从obsidian官网下载appimage包
3,在桌面创建obsidian文件夹,将下载好的appimage包放到该目录
uos@uos-PC:~/Desktop/obsidian$ ls
Obsidian-0.12.3.AppImage
uos@uos-PC:~/Desktop/obsidian$
4,使用 --appimage-extract对appimage进行解包,解包完成的内容都放到了squashfs-root目录
uos@uos-PC:~/Desktop/obsidian$ chmod +x Obsidian-0.12.3.AppImage
uos@uos-PC:~/Desktop/obsidian$ ./Obsidian-0.12.3.AppImage --appimage-extract
uos@uos-PC:~/Desktop/obsidian$ ls
Obsidian-0.12.3.AppImage squashfs-root
uos@uos-PC:~/Desktop/obsidian$
二,制作uos规范目录
1,uos规范目录可以参考官方其他文档,这里不做过多叙述
2,使用脚本来制作符合uos规范的目录,将脚本放到obsidian文件夹下,参考脚本如下
mkdir -p test/DEBIAN/
echo "----------------------创建control文件----------------------"
touch test/DEBIAN/control
read -p "(输入Package名):" package
read -p "(输入Version名):" version
read -p "(输入Architecture名):" architecture
read -p "(输入Section名):" section
read -p "(输入Maintainer名):" maintainer
read -p "(输入Depends名):" depends
read -p "(输入Homepage名):" homepage
cat>test/DEBIAN/control<<EOF
Package: $package
Version: $version
Architecture: $architecture
Section: $section
Maintainer: $maintainer
Depends: $depends
Priority: optional
Homepage: $homepage
Description: 欢迎使用$package
EOF
echo "----------------------control文件创建完成----------------------"
mkdir -p test/opt/apps/$package/entries/applications/
mkdir -p test/opt/apps/$package/files/bin
mkdir -p test/opt/apps/$package/entries/icons
touch test/opt/apps/$package/info
echo "----------------------创建info文件----------------------"
read -p "(输入name名):" name
cat > test/opt/apps/$package/info <<EOF
{
"appid": "$package",
"name": "$name",
"version": "$version",
"arch": ["amd64","arm64","mips64el"],
"permissions": {
"autostart": false,
"notification": false,
"trayicon": false,
"clipboard": false,
"account": false,
"bluetooth": false,
"camera": false,
"audio_record": false,
"installed_apps": false
}
}
EOF
echo "----------------------info创建完成----------------------"
echo "-----------------------desktop文件创建--------------------"
touch test/opt/apps/$package/entries/applications/$package.desktop
read -p "(输入Comment):" comment
read -p "(输入Exec):" exece
read -p "(输入GenericName):" genericname
read -p "(输入Icon):" icon
read -p "(输入Name):" name
cat > test/opt/apps/$package/entries/applications/$package.desktop <<EOF
[Desktop Entry]
Categories=Utility;Calculator;
Comment=$comment
Exec=$exece
GenericName=$genericname
Icon=$icon
Name=$name
StartupNotify=true
TryExec=deepin-calculator
Type=Application
X-Deepin-ManualID=deepin-calculator
X-Deepin-Vendor=deepin
X-Deepin-TurboType=dtkwidget
EOF
3, 新建uos_standard.sh文件,将上边脚本复制到脚本文件,执行脚本,制作打包目录,按照要求的内容去填写,不确定的内容可以稍后修改,执行完成后会生成test文件夹
uos@uos-PC:~/Desktop/obsidian$ ls
Obsidian-0.12.3.AppImage squashfs-root uos_standard.sh
uos@uos-PC:~/Desktop/obsidian$ chmod +x uos_standard.sh
uos@uos-PC:~/Desktop/obsidian$ ./uos_standard.sh
----------------------创建control文件----------------------
(输入Package名):md.obsidian
(输入Version名):0.12.3
(输入Architecture名):amd64
(输入Section名):x11
(输入Maintainer名):uos uos@uniontech.com
(输入Depends名):
(输入Homepage名):https://obsidian.md/
----------------------control文件创建完成----------------------
----------------------创建info文件----------------------
(输入name名):obsidian
----------------------info创建完成----------------------
-----------------------desktop文件创建--------------------
(输入Comment):obsidian
(输入Exec):
(输入GenericName):obsidian
(输入Icon):
(输入Name):obsidian
uos@uos-PC:~/Desktop/obsidian$ ls
Obsidian-0.12.3.AppImage squashfs-root test uos_standard.sh
uos@uos-PC:~/Desktop/obsidian$
三,修改test目录
1,修改control文件
a,进入test/DEBIAN目录,因为这里不需要安装额外的依赖,所以将control文件中的Depends字段删除,不删除会影响测试。如果其他程序运行过程中发现需要依赖,可以在该字段填写。
b,修改前:
Package: md.obsidian
Version: 0.12.3
Architecture: amd64
Section: x11
Maintainer: uos uos@uniontech.com
Depends:
Priority: optional
Homepage: https://obsidian.md/
Description: 欢迎使用md.obsidian
c,修改后:
Package: md.obsidian
Version: 0.12.3
Architecture: amd64
Section: x11
Maintainer: uos uos@uniontech.com
Priority: optional
Homepage: https://obsidian.md/
Description: 欢迎使用md.obsidian
2,修改bin目录
a,将squashfs-root目录下的所有文件移动到test/opt/apps/md.obsidian/files/bin/bin目录下
uos@uos-PC:~/Desktop/obsidian$ cp -r squashfs-root/* test/opt/apps/md.obsidian/files/bin/
uos@uos-PC:~/Desktop/obsidian$ ls test/opt/apps/md.obsidian/files/bin/
AppRun libffmpeg.so locales snapshot_blob.bin
chrome_100_percent.pak libGLESv2.so obsidian swiftshader
chrome_200_percent.pak libvk_swiftshader.so obsidian.desktop usr
chrome-sandbox libvulkan.so.1 obsidian.png v8_context_snapshot.bin
icudtl.dat LICENSE.electron.txt resources vk_swiftshader_icd.json
libEGL.so LICENSES.chromium.html resources.pak
uos@uos-PC:~/Desktop/obsidian$
b,修改bin目录下chrome-sandbox的权限,先将属主和属组改为root, 再将执行权限改为4755,必须改属主,再改权限。
uos@uos-PC:~/Desktop/obsidian$ cd test/opt/apps/md.obsidian/files/bin/
uos@uos-PC:~/Desktop/obsidian/test/opt/apps/md.obsidian/files/bin$ ls -l chrome-sandbox
-rwxr-xr-x 1 uos uos 4708288 5月 30 10:47 chrome-sandbox
uos@uos-PC:~/Desktop/obsidian/test/opt/apps/md.obsidian/files/bin$ sudo chown root:root ./chrome-sandbox
uos@uos-PC:~/Desktop/obsidian/test/opt/apps/md.obsidian/files/bin$ sudo chmod 4755 ./chrome-sandbox
uos@uos-PC:~/Desktop/obsidian/test/opt/apps/md.obsidian/files/bin$ ls -l chrome-sandbox
-rwsr-xr-x 1 root root 4708288 5月 30 10:47 chrome-sandbox
uos@uos-PC:~/Desktop/obsidian/test/opt/apps/md.obsidian/files/bin$
3,修改entries/icons目录
a,找到解后的icons目录,替换entries/icons目录,本例子解包后icons在usr/share目录下
四,修改entries/applications/desktop文件
1,修改Exec字段,将Exec字段改为程序安装后可执行文件的目录/opt/apps/md.obsidian/files/bin/AppRun
2,修改Icon字段,将Icon字段改为程序安装后图标的目录/opt/apps/md.obsidian/entries/icons/hicolor/48x48/apps/obsidian.png
五,压包和安装
1,使用dpkg-deb -b test/ 输出目录 ,将按照新规则放置好的目录压入deb包内
uos@uos-PC:~/Desktop/obsidian$ ls
Obsidian-0.12.3.AppImage squashfs-root test uos_standard.sh
uos@uos-PC:~/Desktop/obsidian$ dpkg-deb -b test/ .
dpkg-deb: 正在 './md.obsidian_0.12.3_amd64.deb' 中构建软件包 'md.obsidian'。
uos@uos-PC:~/Desktop/obsidian$ ls
md.obsidian_0.12.3_amd64.deb Obsidian-0.12.3.AppImage squashfs-root test uos_standard.sh
uos@uos-PC:~/Desktop/obsidian$
2,使用dpkg -i 安装或者双击deb包安装,检查启动器是否有改程序且能正常使用和卸载,如果正常,打包完成。
3,启动器中程序名和desktop文件的Name字段对应
3,打包过程中遇到的问题,随时可以在QQ群交流。QQ群号:1162917308