首先开始我的唠叨几句,网上有很多.run包的制作,那为什么我还要写呢?原因很简单,他们的执行不了啊,各种错误,今天我给大家讲一个能执行的,一步一步手把手教你们。
先给大家讲讲思路:
编程前需要有的东西:install.sh文件 hello.c文件(这些文件我都放在hello文件夹,没要求,大家随意)
目标:hello_install.run文件
步骤:
1.将hello.c编写成可应用程序hello,再将hello打包为hello.tar.gz
2.编写install.sh文件
3.执行命令cat install.sh hello.tar.gz > myinstall.sh
4.运行myinstall.sh文件,只需执行命令sh myinstall.sh
ok,现在开始实现:
第一步是比较简单的,简单过过
1.#include<stdio.h>
int main()
{
printf("hello");
return 0;
}
linux命令:
gcc -c hello.c
gcc -o hello hello.o
此时生成hello应用程序,
对hello 进行打包:
tar -zcvf hello.tar.gz hello
2.编写install.sh文件
代码如下:
1>#!/bin/bash
2>lines=7
3>tail -n +$lines "$0" > /tmp/hello_tmp.tar.gz
4>tar -xvzf /tmp/hello_tmp.tar.gz -C /tmp
5.>cp /tmp/hello /usr/bin
6>exit
第三行的目的是让程序从本脚本的第7行执行,将执行的结果放到hello_tmp.tar.gz,好多人就说了第7行后面没东西啊,怎么执行,问的很好,那我现在要问问你我们执行最终要执行的是什么文件?我们要执行的是myinstall.run文件对吧,那我们将这些语句放到myinstall.run包中就清楚了,一会说
3.cat install.sh hello.tar.gz > myinstall.run
//我们都知道这是数据流,将install.sh文件读入到myinstall.run中,读完后,hello.tar.gz接着读入,我们可以用vim工具对myinstall.run文件进行查看,回答现他大概是这样的:
myinstall.run内容:
#!/bin/bash
lines=7
tail -n +$lines "$0" > /tmp/hello_tmp.tar.gz
tar -xvzf /tmp/hello_tmp.tar.gz -C /tmp
cp /tmp/hello /usr/bin
exit
........乱码
...................
很明显他的结构是这样的,上面是install.sh文件,下面是乱码,很多朋友这时就郁闷了我靠,这些乱码是什么东西,当然是hello.tar.gz的文件形式了,大家知道linux的功能实现都是通过文件实现的,其实hello.tar.gz也是文件。
接着我为大家解释下上面留着下面说的问题,myinstall.run的第三行(也就是之前的install.sh的第三行)将乱码的所有都打包到/tmp/hello_tmp.tar.gz中,我们知道乱码实际上就是hello.tar.gz,这时我们好像明白了什么,这不类似拷贝嘛,对啊,拷贝过去解压,将应用程序拷贝到/usr/bin下,这就安装成功了。
是啊,我们只能装成功了,细心的网友可能又要说我靠了,咱把hello.tar.gz文件像类似拷贝的拷到hello_tmp.targz中,解压,安装,那我直接对hello.tar.gz进行解压,安装不就行了,绕那么大圈干嘛,闲的没事干,好的,这个其实就是本文做.run包的关键。我们回顾一下,我们是用数据流将install.sh和hello.tar.gz读入到文件myinstall.run中的,读完后的myinstall.run已经包含了hello.tar.gz这个文件数据,那么我们只需要在以后只要myinstall.run文件就可以对hello就行安装了,不再用任何其他文件,是不是省事多了。
写了这么多,有些地方有些啰嗦,可我明白编程中很多时间都耗在了下问题上,可能一些别人看着不起眼的地方,有些人会花费很长的时间,希望我的文章能够对特别需要它的人们起到很大的帮助。大家多多评论,互相交流,互相进步。