Linux bin文件的制作

Linux bin文件的制作

在某些场景下,我们希望将一系列安装的动作打包在一个 .bin文件里面,在新的环境安装部署时,直接使用 .bin 文件来无脑部署。这时候就可以将安装所需要的步骤和文件打包成一个 .bin 文件,在新服务器上执行 ./xxx.bin 来进行无脑安装。

要做到将一些列的文件合并到一个文件中,第一想到的就是 tar 命令,要使得 ./bin 能运行,那么就要用到脚本文件了。将脚本内容放到文件的顶部。后面的文件放工程文件,bin 的时候,头部脚本将工程文件脱落,脱落之后,运行工程文件中的第一个程序,让这个程序来控制工程文件的部署。

文件结构如下图:

要制作这样的 bin 文件,我们先要有个 package.sh 脚本,来将这样的头部文件和工程文件合并。假如工程文件目录为 project.

header.sh

project

package.sh 文件内容如下:

#!/bin/bash

tar zcvf project.tar.gz project

cat header.sh project.tar.gz >>  result.bin

chmod a+x result.bin

./package.sh 之后,得到 result.bin 文件

header.sh 被放在了 result.bin 文件的头部

现在就是要实现 header.sh 的逻辑了。

header.sh 的逻辑,第一要将 project.tar.gz 从 result.bin 中进行分离出来。

第二,解压 project.tar.gz

第三,运行 project 中的第一个脚本

后面两简单。

关键第一步,怎么知道要从 result.bin 中取多少字节出来呢,很简单就是在 tar project 完计算大小,写入到 header.sh 中。

所以,我们再改下 package.sh 脚本。

#!/bin/bash

tar zcvf project.tar.gz project

filesize=$(wc -c < project.tar.gz)

cp header.sh header-bak.sh
                   
sed -i  "s/TAR_SIZE/${filesize}/g"  header-bak.sh


cat header-bak.sh project.tar.gz >  result.bin

chmod a+x result.bin

filesize=$(wc -c < project.tar.gz)

sed -i “s/TAR_SIZE/${filesize}/g” header-bak.sh

这两行,第一行是获取工程目录打包后的文件大小,第二行就是将这个文件的大小写入到 bin 包的头部,我们固定的一个变量名中。

我们来看下 header.sh 脚本的内容。

#!/bin/bash

tarsize=TAR_SIZE

workdir="www.jesson32.cn"

tail -c ${tarsize} $0  > ${workdir}.tar.gz

mkdir "${workdir}"
tar zxvf tmp.tar.gz -C "${workdir}"
cd "${workdir}"/project


chmod u+x first.sh
./first.sh

exit

这里的 TAR_SIZE 就是在 package.sh 的时候就进行了替换,后续就是从当前 bin 包中获取到 $TAR_SIZE 大小的内容生成一个 tar.gz , 后面就是解开这个 tar.gz 然后运行里面预设好的 first.sh 脚本了。

he@ubuntu:~/jesson/TestPackage$ ll project
总用量 12
drwxrwxr-x 2 he he 4096 3月   3 09:14 ./
drwxrwxr-x 3 he he 4096 3月   3 09:19 ../
-rw-rw-r-- 1 he he   30 3月   3 09:14 first.sh
-rw-rw-r-- 1 he he    0 3月   3 09:14 test.txt

这里为了测试 first.sh 的逻辑很简单,就是将 test.txt 拷贝到 ~ 目录,这里 first.sh 就是用户的逻辑脚本了,后面要做的内容,就可以很随意了。

#!/bin/bash

cp ./test.txt ~/

后续:

后面各种的自定义行为,都可以在 first.sh 中做,比如增加各种安装选项。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注