应用

  • 单文件的一键安装包,通过命令行或鼠标点击执行的安装包。

单文件一键安装包的结构

  • 本质是将一个能够执行安装逻辑的脚本与待安装的文件拼接在一起。通过linux cat命令将安装文件拼接到安装脚本的后面变成一个新的组合文件。
1
2
3
4
5
6
7
8
9
10
11
```
--------------
| 安装脚本 |
| install.sh |
|--- ---|
| 安装文件 |
| so |
| tar |
| bin |
| .... |
--------------
  • 其中,为了方便对待安装文件的管理,往往将它们打包为一个整体
    1
    2
    3
    4
    5
    6
    7
    --------------
    | 安装脚本 |
    | install.sh |
    |--- ---|
    | 安装文件 |
    | tar(so bin)|
    --------------

单文件一键安装包的制作

制作安装文件

  • 将要安装的文件打包为一个tar:test.tar

制作install.sh

  • 实现调用bash:所以第一行:#!/bin/bash
  • 分离出安装文件
    • 后面会讲到把install.sh和安装文件拼接在一起的方法是用cat,因此分离安装文件的方法就是用tail
    • tail -n +$lines "$0" > /tmp/test.tar
    • 其中,变量lines是install.sh的总行数,也是安装文件tar包的起始行
  • 分离出安装文件后,就围绕安装文件进行文件的编译和拷贝了,最后清除临时文件
  • 脚本最后一条有效命令必须是exit 0;这要求bash解释器在这个命令下退出,不要执行后面的代码。因为后面的数据是不能执行的安装包的数据文件
  • 注意:install.sh的最后一行要追加一行空行,拼接过来的安装文件必须在空行的下一行开始。

将安装文件拼接到install.sh后面

  • cat install.sh test.tar > installer.run

最终产物的内容:

1
2
3
4
5
6
#!/bin/bash
lines=6 # tar包(即安装文件)起始的位置
tail -n +$lines "$0" > /tmp/test.tar # 分离出本文件后面拼接的数据包
exit 0 # 在此之前可以做其他诸如拷贝文件、编译等安装工作

[test.tar] # 安装包从这里开始。使用vim打开时,这里是乱码,是tar的数据

单文件一键安装包的工作原理

  • 通过cat拼接文件
  • 通过tail分离文件
  • 本质为bash脚本能够直接运行
  • 是一种具有bash文件头的拼接文件,利用了bash执行命令
  • install.sh通过Linux shell bash解释器执行,bash从这个一键安装包的第一行开始执行,即执行install.sh。install.sh的工作是将sh之后的文件分离出来,再将分离结果拷贝到系统的目标位置,实现安装。
    • 如何拼接文件:cat命令
    • 如何分离文件:tail命令。只要知道了安装包数据从那一行开始,那么tail就能准确地分离出数据包。