用makeself.sh脚本来制作一键发布文件(.run)

-----------------------------------------------------------
author: hjjdebug
date  : 2023年 12月 25日 星期一 15:59:06 CST
description: 用makeself.sh脚本来制作一键发布文件(.run)
----------------------------------------------------------
我看到nvidia 发布驱动或cuda既可以用rpm或deb包, 也可以用.run来发布安装.
.run 文件是用makeself 脚本来生成的.
makeself.sh 是一个脚本, 当然你可以从github上或网络上获取源码, 参照说明进行安装.
但那不是重点, 我们这里采用最简单的办法来安装. ubuntu 下用apt 来安装.

先查询一下包名:
1. $apt-cache search makeself
完成安装
2. $apt-get install makeself

查询一下文件列表
3. $dpkg -L makeself
/usr
/usr/bin
/usr/bin/makeself
/usr/share
/usr/share/doc
/usr/share/doc/makeself
/usr/share/doc/makeself/README.md.gz
/usr/share/doc/makeself/changelog.Debian.gz
/usr/share/doc/makeself/copyright
/usr/share/makeself
/usr/share/makeself/makeself-header.sh
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/makeself.1.gz

标准的文档组织方式, 用man makeself, 显示了标准的帮助文档.
我敢保证,比你直接看源码帮助文档方便了很多, 看源码的帮助文档会让你一时摸不到头脑.
linux 下这种标准的包是多么的亲切!

$ makeself --help
Usage: /bin/makeself [params] archive_dir file_name label startup_script [args]
...
[params] 有很多选项, 咱先不用管.
给出了使用帮助信息.

下面我们先来个简单例子,看看如何使用.
它不是要有一个archive_dir, 文档目录吗, 是啊,我们每个工程都有自己的工程目录.现在我们就
建一个工作目录:, 内容如下示:
~/work_dir$ ls
COPYRIGHT  main*  main.c  Makefile  VERSION

~/work_dir$ ls
COPYRIGHT  main*  main.c  Makefile  VERSION


下面解释一下各个文件. VERSION,COPYRIGHT 是装饰品,main.c是源码,main是执行文件,具体如下

hjj@hjj-u7090:~/work_dir$ cat VERSION 
1.0.0
hjj@hjj-u7090:~/work_dir$ cat COPYRIGHT 
copyright hjj
hjj@hjj-u7090:~/work_dir$ cat main.c 
#include <stdio.h>
int main()
{
    printf("hello world\n");
    return 0;
}
hjj@hjj-u7090:~/work_dir$ cat Makefile 
main:main.c
    gcc -o main main.c
main 文件是用gcc 生成的运行文件,执行它会有如下输出:
$ ./main 
hello world

文件都准备好了, 现在要把我的工程发布, 执行如下命令:
先进入/tmp 目录, 测试嘛,找个临时目录就可以了.
$makeself ~/work_dir work_dir.run "this is makeself test program" ./main

这样就把!/work_dir 目录打包成一个work_dir.run 文件, 至于后面两个参数,一个提示信息,一个是我们解开文件后要执行的命令,这根据需要写就行了,也可以忽略.
这样就生成了我们的运行文件 work_dir.run

现在可以运行work_dir.run 文件, 它就是一个标准的sh文件
$ ./work_dir.run 
Verifying archive integrity...  100%   All good.
Uncompressing this is makeself test program  100%  
hello world

如果想保留解开的目录,执行 $ ./work_dir.run --keep

既然是sh script 文件,我们可以详细研究一下它的代码.(懂shell脚本编程的人露出了微笑!)
查看一下它的help 输出.

$ ./work_dir.run -h
Makeself version 2.4.0
 1) Getting help or info about ./work_dir.run :
  ./work_dir.run --help   Print this message
  ./work_dir.run --info   Print embedded info : title, default target directory, embedded script ...
  ./work_dir.run --lsm    Print embedded lsm entry (or no LSM)
  ./work_dir.run --list   Print the list of files in the archive
  ./work_dir.run --check  Checks integrity of the archive

 2) Running ./work_dir.run :
  ./work_dir.run [options] [--] [additional arguments to embedded script]
  with following options (in that order)
  --confirm             Ask before running embedded script
  --quiet        Do not print anything except error messages
  --accept              Accept the license
  --noexec              Do not run embedded script
  --keep                Do not erase target directory after running
            the embedded script
  --noprogress          Do not show the progress during the decompression
  --nox11               Do not spawn an xterm
  --nochown             Do not give the extracted files to the current user
  --nodiskspace         Do not check for available disk space
  --target dir          Extract directly to a target directory (absolute or relative)
                        This directory may undergo recursive chown (see --nochown).
  --tar arg1 [arg2 ...] Access the contents of the archive through the tar command
  --                    Following arguments will be passed to the embedded script
  
  搞懂它的shell源码, 再有空搞懂makeself 的源码, 则makeself 就可以拿下了! 
  真的是好sh脚本, 读懂了源码,你就是专家, 若搞不懂源码可以用也够用了.
  举例是用了一个工程目录,实际上发布时可以建一个发布目录,把要发布的东西按目录存好,
  然后用makeself.sh把它打包成一个run文件, 就可以到目标机器上安装和执行了.
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/577016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用easyexcel对导出表格添加合计行

文章目录 一、背景二、实现1、写法一2、写法二 三、遇到的问题四、参考 一、背景 近期开发的一个新功能需要导出和前端展示样式一致的统计表格&#xff0c;而前端使用的elementui的table组件&#xff0c;show-summary属性选择后可以自动计算。后端导出时其他单元格与返回前端展…

华为数通方向HCIP-DataCom H12-831题库(多选题:241-249)

第241题 (NEW) 以下哪些操作可能会影响客户网络的正常运行? A、从设备上下载日志 B、软件升级 C、路由协议配置变更 D、debug核心交换机上转发的所有IP报文 答案:ABCD 解析: 第242题 对于防火墙的默认安全区 Trust 和 Untrust 的说法,正确的有 A、从 Trust 区域访问 Untr…

Vue在页面上添加水印

第一步&#xff1a;在自己的项目里创建一个js文件&#xff1b;如图所示我在在watermark文件中创建了一个名为waterMark.js文件。 waterMark.js /** 水印添加方法 */ let setWatermark (str1, str2) > {let id 1.23452384164.123412415if (document.getElementById(id) …

【MYSQL】MYSQL 的学习教程(六)之 SQL 语句执行流程

1. 一条 SQL 查询语句是如何被执行的 MySQL 的基本架构示意图如下所示&#xff1a; MYSQL 线程处理请求流程&#xff1a; SQL 接口&#xff1a;MySQL 中处理请求的线程在获取到请求以后获取 SQL 语句去交给 SQL 接口去处理查询解析器&#xff1a;解析器会将 SQL 接口传递过来…

mysql高级查询

当涉及到"高级查询"时&#xff0c;通常指的是使用SQL语言进行复杂的数据查询&#xff0c;包括多表连接、聚合函数、子查询、联合查询和条件筛选等。 多表连接查询&#xff1a; SELECT customers.customer_name, orders.order_number FROM customers JOIN orders ON…

操作系统期末复习知识点二计算与应用

1.理解银行家算法判断死锁的定理并能计算相关的参数。 2.能利用LRU、FIFO算法求缺页率。 3.纯页式管理中&#xff0c;求逻辑地址对应的物理地址&#xff0c;页号、页内地址长度&#xff0c;画出逻辑地址的格式&#xff0c;在引入块表时&#xff0c;求出有效访问时间。 4.可变分…

【Java】SpringBoot快速整合Kafka

目录 1.什么是Kafka&#xff1f; 主要特点和概念&#xff1a; 主要组成部分&#xff1a; 2.Kafka可以用来做什么&#xff1f; 3.SpringBoot整合Kafka步骤&#xff1a; 1. 添加依赖: 2. 配置 Kafka: 3. 创建 Kafka 生产者: 4. 创建 Kafka 消费者: 5. 发布消息: 6. 使…

【MySQL学习笔记007】约束

1、概述 &#xff08;1&#xff09;概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 &#xff08;2&#xff09;目的&#xff1a;保证数据库中数据的正确、有效性和完整性。 &#xff08;3&#xff09;分类 约束 描述 关键字 …

【各种**问题系列】Java 数组集合之间的相互转换

&#x1f4cc; 问题点&#xff1a; 在 Coding 过程中经常会遇到数组、List、Set、Map 之间的相互转换......这里记录一下转换的几种方式。&#x1f636;&#x1f636;&#x1f636; 目录 &#x1f4cc; 集合转换 1.数组 转 List&#xff1a; 2.List 转 数组&#xff1a; 3…

如何将本地websocket发布至公网并实现远程访问服务端

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

AG16KDDF256 User Manual

AGM AG16KDDF256 是由 AGM FPGA AG16K 与 DDR-SDRAM 叠封集成的芯片&#xff0c;具有 AG16K FPGA的可编程功能&#xff0c;提供更多可编程 IO&#xff0c;同时内部连接大容量 DDR-SDRAM。  FPGA 外部管脚 FBGA256 封装&#xff0c;管脚说明请见下表 Table-1&#xff1a; Tab…

YUM和编译安装

一、安装Linux 1.编译安装&#xff0c;灵活性高&#xff0c;难度较大&#xff0c;可以安装较新的版本 2.rpm安装&#xff08;redhat&#xff09; linux包安装 rpm 软件名 3.yum yum是rpm升级版本&#xff0c;解决了rpm的弊端 2和3用的都是红帽打包好的软件包&#xff0c;能…

cad安装路径显示灰色选择不了怎么办?

cad安装路径显示灰色选择不了怎么办呢&#xff1f;今天教给大家。 灰色是因为之前下载过一次&#xff0c;没有删干净&#xff0c;注册表里还有cad&#xff0c;它认为你的电脑中有cad&#xff0c;所以安装路径是灰色的&#xff0c;不能安装。先同时按下【xinR】键&#xff0c;打…

ip addr和ifconfig

ip addr可以显示更多信息&#xff0c;包括为启动的网络驱动如wlan&#xff0c;而ifocnfig只显示在线的驱动。若wlan是down的&#xff0c;则ip addr会显示信息&#xff0c;ifconfig不会显示信息。 ip addr: ifconfig:

机器学习之数据扩充

为什么要进行数据扩充 数据扩充在机器学习中扮演着重要的角色,原因如下: 1. 解决数据稀缺问题: 数据量不足: 在实际应用中,获取大量高质量标记数据可能很困难或昂贵。数据扩充能帮助充分利用有限数据集,增加训练数据数量,减少模型过拟合风险。2. 提高模型泛化能力: 增…

视频号视频怎么保存到手机相册?

在微信视频号中看到喜欢的视频&#xff0c;想要缓存下载到手机&#xff0c;却怎么也找不到办法。很多朋友会选择去录屏&#xff0c;但保存下来的视频实在是不美观&#xff0c;而且费时费力&#xff01;着实没必要&#xff01;下面给大家推荐一款亲测有效的微信视频号视频下载方…

【excel密码】Excel工作表不能复制或移动

为什么excel文件打开之后&#xff0c;工作表里是可以编辑的&#xff0c;但是想要移动工作表或者复制、重命名等操作&#xff0c;这是什么原因&#xff1f;其实这是因为设置了工作簿保护&#xff0c;设置了保护的工作簿无法对整张工作表进行操作。 想要取消这种保护&#xff0c;…

算法——哈希表

哈希表简介 **是什么&#xff1a;**存储数据的容器有什么用&#xff1a;快速查找某个元素&#xff0c;时间复杂度O(1)&#xff0c;空间复杂度O(n)**什么时候使用哈希表&#xff1a;**频繁查找某一个数&#xff08;这里不要忘了之前的二分&#xff0c;时间复杂度O(logN)&#x…

opencv入门到精通——图像平滑

目录 目标 2D卷积&#xff08;图像过滤&#xff09; 图像模糊&#xff08;图像平滑&#xff09; 1.平均 2.高斯模糊 3.中位模糊 4.双边滤波 目标 学会&#xff1a; 使用各种低通滤镜模糊图像 将定制的滤镜应用于图像&#xff08;2D卷积&#xff09; 2D卷积&#xff0…

Unity网格篇Mesh(一)

Unity网格篇Mesh&#xff08;一&#xff09; 本文的目标1.渲染仔细看下面的图你会发现&#xff0c;锯齿状 2.创建网格顶点4 x 2网格网格的顶点 3.创建网格网格只在Play模式下显示逆时针和顺时针三角形第一个三角面一个四边形由两个三角面组成第一个四边形填充剩余网格 接下一篇…