linux打包工具AppImageKit

2019-07-13 06:31发布

linux打包工具AppImageKit

  1. 概述 这个工具的作用就是,通过构建一个内核加载文件系统,打包app的,这样的好处就是linux内核通用型好,因为打包文件系统,在嵌入式linux中是一个非常常用手段,弄一个文件系统(通常是只读的),放到磁盘上,然后读取,后加载到内核执行,如果要写入的话,就写入到另一个存储区域,这样就可以保证系统的安全性. 我们使用,内核文件系统构建工具进行打包,打包工具下载地址 :https://github.com/AppImage/AppImageKit 使用git clone –recursive 下载,里面有对squashfs的引用.
  2. AppImageKit的准备,下载后,运行 ./build.sh 进行编译,这个过程中需要root权限,需要安装一些必要的东东,编译完成后生成在build目录,里面有如下文件 : appimaged appimagetool AppRun digest mksquashfs runtime validata 其中:appimagetool 是打包应用的主要工具. appimaged 是制作daemon程序的:这里的daemon指的是监视文件系统的变化,如果想让需要跑的程序成为系统daemon程序,只需把打包好的程序做成服务即可,或者使用nohup跑, AppRun 是生成的appimage进入执行的入口文件,这个文件解析 xxx.desktop文件,xxx.desktop文件是我们填写的,在里面指定我们的启动文件就可以了.
  3. 打包 参考: https://github.com/AppImage/AppImageKit , https://www.linuxgame.cn/appimage-doc-3 过程如下,:
    1. 建立一个文件夹 {app_package_dir}. 并建立 {app_package_dir}/usr/bin, {app_package_dir}/usr/lib 等
    2. 在 {app_package_dir} 下建立一个文件,名字任意,要以 .desktop结尾.这个文件作为打包的配置文件.内容如下: [Desktop Entry] Type=Application Name={你应用的名字,这个决定生成的image包的名字} Exec={这个最重要了,因为在执行打包后的文件时,会执行usr/bin下的同名文件} Comment={注释} Icon={指定一个app_package_dir文件下的png,svg文件作为图标} Categories={Development,Game,等等} Terminal=true|false,{是否在显示运行终端} 配置指定的文件们,比如exec文件,测试的话,写一个简单的shell文件就行的,二进制的话,拷贝库文件到 usr/lib目录下.配置完以后,在这个目录下执行 ./AppRun ,测试是不是可以用,不通过解决依赖问题和文件路径问题.
    3. 在{app_package_dir}的同级目录下,执行 appimagetools {app_package_dir} ,进行打包操作,会生成一个name指定的名字{package_name} + .AppImage的文件,可执行 ,就可以用了.
    4. 上一步执行完后,会生成一个{package_name}.AppImage文件,如果,在和这个文件的同一级文件下,建立一个 {package_name}.AppImage.home 目录,那麽,再次执行这个文件的时候,这个文件的执行环境中,$HOME,将重定义到{package_name},AppImage.home目录下, 这样,就可以 携带数据了 非常方便,对应需要修改本地文件(
      指和应用程序文件夹中的文件)的时候,需要使用连接符号,等手段连接出去的appimagetool 打包后的程序,是通过只读挂载的,不能修改内部的数据的. 其他目录参考给出的官网数据.
  4. 使用技巧 如果一个程序不修改home目录,而是修改二进制程序所在目录的话,可以利用二级连接把对应修改的文件目录连接到../../../ 下的一个目录下,然后,在启动脚本中重新连接一个 $HOME 下的目录到 /tmp 目录下的一个文件即可.../../../ 的解释:在挂载的文件系统中,这个相对路径就是实际目录的 /tmp 目录, AppImage 会把自己的文件系统挂载到 /tmp/.mount-xxxxxxx 下