美文网首页
linux中run文件的制作

linux中run文件的制作

作者: book_02 | 来源:发表于2020-04-13 19:08 被阅读0次

1. 说明

  1. run文件的本质是一个可执行脚本+压缩包
  2. 所以run文件内容分两部分,前一部分是可执行脚本,后一部分是压缩包
  3. 可执行脚本的作用是解压压缩包和进行文件内容的安装和配置
  4. 压缩包的内容是要安装的文件

run文件结构:

|-----------------|
| 可执行脚本 |
|-----------------|
| 程序压缩包 |
|-----------------|

2. 制作一个run文件

下面以一个简单的hello_world程序来制作run文件

2.1 生成要安装的文件

编写源文件hello.cpp


#include <iostream>

int main()
{
    std::cout << "Hello World!" << std::endl;

    return 0;
}

编译生成可执行程序 hello

g++ -c hello.cpp  
g++ -o hello hello.o  

2.2 组织目录结构并生成压缩包

制作一个hello目录,里面建立一个bin目录,把上面编译出的hello放入bin目录下

把hello目录打包:
tar -zcvf hello.tar.gz hello/

2.3 编写可执行脚本部分内容

是一个shell脚本,姑且命名为install.sh文件

#!/bin/bash

CDIR=`pwd`
INSTALLDIR=$CDIR/hello

if [ -d "$INSTALLDIR" ]; then
    rm -rf "$INSTALLDIR"
fi

ARCHIVE=`awk '/^__ARCHIVE_BOUNDARY__/ { print NR + 1; exit 0; }' $0`

tail -n +$ARCHIVE $0 > hello.tar.gz
tar -zpxf hello.tar.gz

rm hello.tar.gz

exit 0
__ARCHIVE_BOUNDARY__

脚本各行功能说明如下:

  1. 找到可执行脚本和压缩包的分界线。
    因为run文件是可执行脚本和压缩包合在一起的。安装时,首先是要把压缩包文件从整个run文件中提取出来。
    下面这个命令是找到run文件中可执行脚本和压缩包的分界线。
ARCHIVE=`awk '/^__ARCHIVE_FOLLOWS__/ { print NR + 1; exit 0; }' $0`

其原理是在可执行脚本末尾放个__ARCHIVE_BOUNDARY__标志,然后找这个标记的行号,名字可根据自己命名习惯去命名。

也有很多脚本是直接写死数字的,但是这样写更灵活,不用数行号。

  1. 提取压缩包,并解压
tail -n +$ARCHIVE $0 > hello.tar.gz
tar -zpxf hello.tar.gz
  1. 配置
    如果有其他配置,可以增加相关命令。比如增加udev配置文件、执行相关的shell文件,删除文件等。
    我们这里由于程序很简单,没有相关配置命令。
  2. 删除压缩包
    rm hello.tar.gz
    安装包解压之后,压缩包就不再有用了,可删除。
  3. 中断脚本执行
    exit 0
    这一步必须添加,防止继续执行,执行到压缩包内容去,压缩包内容不是要执行的。执行反而可能出现不可预期的错误
  4. 标志位
__ARCHIVE_BOUNDARY__

2.4 生成run文件

生成run文件就是把可执行脚本和压缩包拼在一起。可使用如下命令:
cat install.sh hello.tar.gz > hello.run
名字部分根据上面自己写的名字进行替换。

至此,run文件的制作就完成了。

2.5 运行run文件

给写权限后,直接运行即可:

chmod +x hello.run
./hello.run

这样run文件就会自动解压安装了。

3. 读取其他run文件的可执行脚本部分内容

读取 .run 文件的执行部分,即那部分文件头
直接用 gedit 去打开run文件,就能看到前面那部分

后面的压缩包内容部分,看起来是乱码。

相关文章

网友评论

      本文标题:linux中run文件的制作

      本文链接:https://www.haomeiwen.com/subject/pvwnmhtx.html