这篇文章主要介绍公网上的deb包如何转化为符合uos规范的deb包
一,获取deb包
1. 本文档使用eog包进行演示从旧规则的包改成新规则的包的过程示例.
2. 使用apt download eog或者其他方式来下载一个旧规则的eog包
uos@uos-PC:~/Desktop$ mkdir eog
uos@uos-PC:~/Desktop$ cd eog/
uos@uos-PC:~/Desktop/eog$ apt download eog
uos@uos-PC:~/Desktop/eog$ ls
eog_3.28.4-2+b1_amd64.deb
3. 使用dpkg-deb -R pkg.deb test 将包名为pkg的deb包解压到test目录下
uos@uos-PC:~/Desktop/eog$ dpkg-deb -R eog_3.28.4-2+b1_amd64.deb test
uos@uos-PC:~/Desktop/eog$ ls
eog_3.28.4-2+b1_amd64.deb test
二,改包名
1. 按照新规则,我们要使用倒置域名规则来命令包名,并且要升级一下版本号
修改test目录下的DEBIAN目录下的control文件,具体为修改Package字段和Version字段
2. 修改前:
Package: eog
Version: 3.28.4-2+b1
修改后:
Package: org.gnome.eog
Version: 3.28.4-3+b1
版本号由软件版本号和打包版本号组成,由`-`分割,左边是软件版本号,右边是打包版本号,我们升级版本号只修改打包版本号,其他的不需要改变
三,创建UOS规范包结构
1,UOS包结构基本目录 ,entries下的文件夹,只需把有的移动过来就行
└── org.gnome.eog #此目录以包名命名
├── entries
│ ├── applications #放desktop文件
│ ├── autostart #放自启动入口文件
│ ├── icons #应用的图标文件,根据大小放进不同的目录下的apps/目录下,svg格式的放在scalable/apps/目录下
│ │ └── hicolor
│ │ ├── 128x128
│ │ │ └── apps
│ │ ├── 16x16
│ │ │ └── apps
│ │ ├── 24x24
│ │ │ └── apps
│ │ ├── 256x256
│ │ │ └── apps
│ │ ├── 32x32
│ │ │ └── apps
│ │ ├── 48x48
│ │ │ └── apps
│ │ ├── 512x512
│ │ │ └── apps
│ │ ├── 64x64
│ │ │ └── apps
│ │ └── scalable
│ │ └── apps
│ ├── plugins #插件的目录
│ └── services #dbus服务目录
│ └── glib-2.0 #schema文件
│ └── GConf #gseetings文件
│ └── locale #语言包文件
├── files #其他文件
└── info #应用的一些信息
2,参考脚本,entries下的文件夹来自/usr/share/, 没有的文件夹可以注释掉。
#!/bin/bash
# 包名
pkg="org.gnome.eog"
mkdir -p $(pwd)/test/opt/apps/${pkg}/files
mkdir -p $(pwd)/test/opt/apps/${pkg}/entries
mv $(pwd)/test/usr/bin $(pwd)/test/opt/apps/${pkg}/files/
mv $(pwd)/test/usr/lib $(pwd)/test/opt/apps/${pkg}/files/
mv $(pwd)/test/usr/share/applications $(pwd)/test/opt/apps/${pkg}/entries/
mv $(pwd)/test/usr/share/icons $(pwd)/test/opt/apps/${pkg}/entries/
mv $(pwd)/test/usr/share/GConf $(pwd)/test/opt/apps/${pkg}/entries/
mv $(pwd)/test/usr/share/glib-2.0 $(pwd)/test/opt/apps/${pkg}/entries/
mv $(pwd)/test/usr/share/locale $(pwd)/test/opt/apps/${pkg}/entries/
mv $(pwd)/test/usr/share $(pwd)/test/opt/apps/${pkg}/files/
rm -r $(pwd)/test/usr
3,将脚本放到与test同级的目录,执行脚本
uos@uos-PC:~/Desktop/eog$ ls
chdir.sh eog_3.28.4-2+b1_amd64.deb test
uos@uos-PC:~/Desktop/eog$ chmod +x chdir.sh
uos@uos-PC:~/Desktop/eog$ ./chdir.sh
uos@uos-PC:~/Desktop/eog$ ls
chdir.sh eog_3.28.4-2+b1_amd64.deb test
uos@uos-PC:~/Desktop/eog$ cd test/
uos@uos-PC:~/Desktop/eog/test$ ls
DEBIAN opt
uos@uos-PC:~/Desktop/eog/test$
四,编辑info文件
1,info文件是应用的描述文件,使用json格式,info文件内容如下:
{
"appid": "org.gnome.eog", # 包名
"name": "eog", # 程序名
"version": "3.28.4", # 程序版本号
"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
}
}
2,将编辑好的文件放到 与files文件的同级目录
uos@uos-PC:~/Desktop/eog/test/opt/apps/org.gnome.eog$ ls
entries files info
uos@uos-PC:~/Desktop/eog/test/opt/apps/org.gnome.eog$
五,创建启动脚本用来导入依赖库路径
1,某些包带有自己的运行依赖库,旧规则都是安装在/usr/lib/
目录下,在系统启动时可以找到需要的运行库,新规则不允许安装在/usr/lib/
下,所以我们写一个启动脚本,先使用LD_LIBRARY_PATH
环境变量来导出运行依赖库的路径,再去执行可执行文件
2,files文件夹下有lib文件夹的需要导库脚本,没有的可以直接执行可执行文件,导库脚本如下:
- 脚本中的路径都需要是绝对路径
- c/c++导入库路径脚本参考
#!/bin/sh
export LD_LIBRARY_PATH="/opt/apps/org.gnome.eog/files/lib/x86_64-linux-gnu/eog:LD_LIBRARY_PATH"
/opt/apps/org.gnome.eog/files/bin/eog
- python导入库路径脚本参考
#!/bin/bash
export PYTHONPATH="/opt/apps/io.readthedocs.quodlibet/files/lib/python3.7/site-packages":$PYTHONPATH
python3 /opt/apps/io.readthedocs.quodlibet/files/bin/quodlibet
- perl导入库路径脚本参考
#!/bin/bash
export PERL5LIB=/opt/apps/net.sourceforge.gscan2pdf/files/share/perl5:$PERL5LIB
perl /opt/apps/net.sourceforge.gscan2pdf/files/bin/gscan2pdf
3, 将写好的启动脚本放到bin目录下,新创建的脚本没有可执行权限,需要先添加可执行权限
uos@uos-PC:~/Desktop/eog/test/opt/apps/org.gnome.eog/files/bin$ chmod +x eog.sh
uos@uos-PC:~/Desktop/eog/test/opt/apps/org.gnome.eog/files/bin$ ls
eog eog.sh
uos@uos-PC:~/Desktop/eog/test/opt/apps/org.gnome.eog/files/bin$
六,编辑desktop文件
1,uos规范的deb包会将程序安装到/opt/apps/包名/的目录下,desktop文件位于entries/applications目录下
2,修改Exec字段,将Exec字段改为程序安装后可执行文件的目录/opt/apps/org.gnome.eog/files/bin/eog.sh
3,修改Icon字段,将Icon字段改为程序安装后图标的目录/opt/apps/org.gnome.eog/entries/icons/hicolor/256x256/apps/eog.png
4,修改完这两个字段就可以进行下一步了,如果出现启动器不显示,可以参考第四步,该例子中设计语言的字段太多,导致最后启动器没有显示,把一些和语言有关的字段删除后,启动器可以正常显示
[Desktop Entry]
Name=Image Viewer
Comment=Browse and rotate images
Exec=/opt/apps/org.gnome.eog/files/bin/eog.sh %U
Icon=/opt/apps/org.gnome.eog/entries/icons/hicolor/256x256/apps/eog.png
StartupNotify=true
Terminal=false
Type=Application
Categories=GNOME;GTK;Graphics;2DGraphics;RasterGraphics;Viewer;
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=EOG
X-GNOME-Bugzilla-Component=general
X-GNOME-Bugzilla-Version=3.28.4
X-GNOME-DocPath=eog/eog.xml
MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/pjpeg;image/png;image/tiff;image/x-bmp;image/x-gray;image/x-icb;image/x-ico;image/x-png;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-xbitmap;image/x-xpixmap;image/x-pcx;image/svg+xml;image/svg+xml-compressed;image/vnd.wap.wbmp;image/x-icns;
Keywords=Picture;Slideshow;Graphics;
七,删除钩子脚本
1,如果解压后的包在DEBIAN目录下有preinst, postinst, prerm, postrm文件,确定没有用的话,将其删除,不删除会导致deb包安装失败
2,之前在打包wireshark的过程中需要用到这些钩子脚本,但是极少数,大部分都是没有用的,具体可以群里交流
八,压包和安装
1,使用dpkg-deb -b test/ 输出目录 ,将按照新规则放置好的目录压入deb包内
uos@uos-PC:~/Desktop/eog$ ls
chdir.sh eog_3.28.4-2+b1_amd64.deb test
uos@uos-PC:~/Desktop/eog$ dpkg-deb -b test/ .
dpkg-deb: 正在 './org.gnome.eog_3.28.4-2+b1_amd64.deb' 中构建软件包 'org.gnome.eog'。
uos@uos-PC:~/Desktop/eog$ ls
chdir.sh eog_3.28.4-2+b1_amd64.deb org.gnome.eog_3.28.4-2+b1_amd64.deb test
uos@uos-PC:~/Desktop/eog$
2,使用dpkg -i 安装或者双击deb包安装,检查启动器是否有改程序且能正常使用和卸载,如果正常,打包完成。
3,启动器中程序名和desktop文件的Name字段对应
3,打包过程中遇到的问题,随时可以在QQ群交流。QQ群号:942418736