红联Linux门户
Linux帮助

linux下的.run包的制作

发布时间:2016-03-12 10:18:45来源:linux网站作者:George_Hand

首先开始我的唠叨几句,网上有很多.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就行安装了,不再用任何其他文件,是不是省事多了。


写了这么多,有些地方有些啰嗦,可我明白编程中很多时间都耗在了下问题上,可能一些别人看着不起眼的地方,有些人会花费很长的时间,希望我的文章能够对特别需要它的人们起到很大的帮助。大家多多评论,互相交流,互相进步。


本文永久更新地址:http://www.linuxdiyf.com/linux/18849.html