当前位置: 首页 > news >正文

Mac打包Unix可执行文件为pkg

Mac打包Unix可执行文件为pkg

方式一:通过packages页面打包

1.下载packages app

  • Distribution:自定义化更高,包括修改安装页面的内容提示
    我这里主要演示Distribution模式的项目:通过unix可执行文件+postinstall.sh脚本实现通过mac的pkg安装系统服务

在这里插入图片描述

2.点击new project,创建新项目

在这里插入图片描述

3. 设置project version等信息

一个 project 可以对应多个 packages,这里我们先修改 package 信息,后面修改全局的 project 信息。
在这里插入图片描述

可以设置安装完成后,是否重启应用、退出用户

在这里插入图片描述

4. 在packages的payload里添加unix文件

在payload 添加需要安装的文件
选中 contents 里面的文件夹,然后选择下面的+ 按钮,即可添加文件到指定位置。

  • 因为我需要将unix打包到pkg文件里,所以这里点击+按钮,将我本地文件添加到对应目录
    在这里插入图片描述
    文件可以添加到这个目录树下的任意地方。
    这是我添加了之后的效果。
    在这里插入图片描述

5. 添加 pre-install 脚本、post-install 脚本

  • preinstall:针对单程序安装包(pkg),该脚本会在preflight脚本运行之后运行;针对多程序安装包(mpkg),该脚本会在用户按下Install铵钮后执行,只会在用户第一次安装该程序时执行。
  • postinstall:该脚本在程序安装完之后才运行。

因为我pkg安装包执行后会将unix文件安装到Application下,所以我这里直接在post-install脚本里以sudo方式运行即可:

postinstall.sh:

#!/bin/bash
sudo /Applications/ziyi_darwin_arm64# 记录日志到指定文件
echo "postinstall.sh executed at $(date)" >> /var/log/postinstall.logexit 0

在这里插入图片描述

6. 设置安装页面介绍文案presentation

在这里插入图片描述

在这里插入图片描述

7. build项目,打包pkg

选中Build-点击Build And Run:
在这里插入图片描述

然后就弹出了安装页面,至此大工搞成:
在这里插入图片描述

我们打包好的pkg文件默认放在了~/项目名/build目录下

在这里插入图片描述

访问服务接口,可以看到服务已经安装成功:
在这里插入图片描述

方式二:通过pkgbuild命令打包

pkgbuild的所有参数如下:-root:指定要打包的文件夹的路径。-identifier:指定包的标识符(ID)。-install-location:指定安装包的安装位置。-scripts:指定安装前后脚本文件的路径。-version:指定包的版本号。-sign:指定签名文件的路径,以进行安全签名。-keychain:指定要用于签名的钥匙链。-timestamp:指定时间戳服务器的URL,用于验证签名。-verbose:显示详细信息。-nopayload:仅创建空载荷。-filter:指定要包含或排除的文件和文件夹。-template:指定要使用的pkgproj模板文件的路径。sudo pkgbuild --root /Users/ziyi2/GolandProjects/ziyi/build --identifier com.test.pkg.project --version 1.0.1 --install-location /tmp/ziyi_pkg   --scripts /Users/ziyi2/scripts  /Users/ziyi2/Desktop/project.pkg
# --root /Users/ziyi2/GolandProjects/ziyi/build:指定要打包的文件夹
# --install-location /tmp/ziyi_pkg 指定安装包的安装位置(tmp目录,默认如果文件超过3天没人访问则被删除)
# --scripts /Users/ziyi2/scripts 指定preinstall、postintall脚本所在文件夹(在安装前、安装后执行的脚本)
#### 注意:脚本文件名必须为:preinstall、postintall且有可执行权限
http://www.lryc.cn/news/279647.html

相关文章:

  • C++ 模拟散列表 || 哈希表存储与查询,模版题(拉链法)
  • 详解Skywalking 服务Overview页面的参数含义(适合小白)
  • Android studio GridView应用设计
  • K8s 是如何完成调度和权重调整?
  • 计算机毕业设计----Springboot超市订单管理系统
  • 如何给AI下达精准的指令,哪些提示词对于AI是有效的?
  • 软件外包资源网站分享
  • 在控制理论里,单个输入变量被施加了饱和特性处理,那么后续怎么利用李雅普诺夫判据判断系统稳定性呢?
  • MySQL夯实之路-查询性能优化深入浅出
  • UniApp面试题
  • 30 树的定义
  • 程序员必备的面试技巧
  • 【NI-DAQmx入门】LabVIEW中DAQmx同步
  • FlinkRestAPI
  • Qt获取当前系统网络接口信息
  • 【C++】STL 算法 ④ ( 函数对象与谓词 | 一元函数对象 | “ 谓词 “ 概念 | 一元谓词 | find_if 查找算法 | 一元谓词示例 )
  • C++ 并发编程 | 并发世界
  • GitHub注册新账号的操作流程(详细)
  • Kali安装Xrdp结合内网穿透实现无公网ip远程访问系统桌面
  • 【WEB API自动化测试】接口文档与在线测试
  • 【深度学习每日小知识】Training Data 训练数据
  • [acm算法学习] 后缀数组SA
  • DNS解析和它的三个实验
  • [redis] redis的安装,配置与简单操作
  • C++ STL set容器
  • 专业课148,总分410+电子科技大学858信号与系统考研经验电子信息与通信
  • 密码学:一文读懂非对称加密算法 DH、RSA
  • ZooKeeper 实战(二) 命令行操作篇
  • 关于在前台应用路由调用子应用
  • Spring学习 Spring事务控制