当前位置: 首页 > 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且有可执行权限

相关文章:

  • MySQL之导入导出远程备份
  • easyExcel 获取多个sheet中复杂表头的数据
  • 2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷①
  • MySQL语法及IDEA使用MySQL大全
  • SpringBoot整合Knife4j
  • Linux信号处理浅析
  • Kubernetes WebHook 入门 -- 入门案例: apiserver 接入 github
  • Flyio封装API接口(uniapp开发微信小程序)
  • linux(ubuntu)中drontab定时器命令详解
  • MySQL之导入导出远程备份(详细讲解)
  • 在VS Code中安装Copilot与安装其他扩展的方法一样,只需简单几步
  • Filter Options in Select Field
  • BERT Intro
  • 图像中部分RGB矩阵可视化
  • JavaSec基础 反射修改Final修饰的属性及绕过高版本反射限制
  • 时间复杂度分析经典问题——最大子序列和
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • [译]CSS 居中(Center)方法大合集
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • 5、React组件事件详解
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • centos安装java运行环境jdk+tomcat
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Otto开发初探——微服务依赖管理新利器
  • SOFAMosn配置模型
  • SpringBoot 实战 (三) | 配置文件详解
  • spring学习第二天
  • vue总结
  • webpack4 一点通
  • 测试开发系类之接口自动化测试
  • 二维平面内的碰撞检测【一】
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 搞机器学习要哪些技能
  • 构建工具 - 收藏集 - 掘金
  • 盘点那些不知名却常用的 Git 操作
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 区块链将重新定义世界
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 事件委托的小应用
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #define 用法
  • (3)llvm ir转换过程
  • (4) PIVOT 和 UPIVOT 的使用
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (MATLAB)第五章-矩阵运算
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)计算机毕业设计大学生兼职系统
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务