run程序安装包实质上是一个安装脚本加要安装的程序,如下图所示:

|-----------------|
| |
| 安装脚本 |
| |
|-----------------|
| |
| 程序 |
| |
|-----------------|
图: run安装包的结构

这样整个run安装包结构就一目了然了,实际上因为实际需要结构多少有点变动但这个无关紧要,只需要明白原理就行了。

制作run安装包以下举个实际的例子:

为了简单起见,要安装的程序就是helloworld程序,安装它的过程就是把它拷贝到/bin目录下。

$ ls
install.sh helloworld
$ cat install.sh
#!/bin/bash
cp helloworld /bin
$

现在有一个安装脚本了,名为install.sh,有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下:

$ tar jcvf helloworld.tar.bz2 helloworld

现在修改一个安装脚本install.sh

改为:

#!/bin/bash
lines= #这个值是指这个脚本的行数加1,这个脚本共有6行
tail +$lines $ >/tmp/helloworld.tar.gz # $0表示脚本本身,这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。
tar jxvf /tmp/hellowrold.tar.gz
cp helloworld /bin
exit

然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。

$ cat install.sh helloworld.tar.bz2 > myinstall.run

这样就得到了myinstall.run文件,它的结构如下:

|------------------| 第1行
| |
| install.sh |
| | 第6行
|------------------|
| | 第7行
|helloworld.tar.bz2|
| |
|------------------| 结尾
图: myinstall.run安装包的结构

运行myinstall.run时,运行到第6行的exit 0脚本就退出了,所以不会去运行第7行以下的二进制数据(即 helloworld.tar.bz2文件),而我们用了tail巧妙地把第7行以下的数据重新生成了一个helloworld.tar.gz文件。再执行安装。

run安装包制作较小的程序包是很好的选择,但是它也有缺点,做逻辑比较复杂的安装包,写的安装脚本将会很麻烦。因此此时还是用其他的安装包更好。

安装方法: 以 ***.run 为例:运行 sh ***.run

原文出自: http://www.linuxdiyf.com/viewarticle.php?id=84934

Linux的.run文件简单制作的更多相关文章

  1. linux下.run文件的安装与卸载

    linux下.run文件的安装与卸载   .run文件的安装很简单,只需要为该文件增加可执行属性,即可执行安装 以 virtualbox 的安装文件 virtualbox-3.1.6-59338-Li ...

  2. linux执行run文件显示cannot execute binary file

    感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限.错误之处在所难免,欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...

  3. Linux下run文件的直接运行

    比如realplay.run 安装方法如下 chmod +x realplay.run ./realplay.run 然后他就会执行安装了,在过程中可能会要求你输入yes或no 安装完后就可以用了 , ...

  4. Linux 下自解压文件的制作

    这个方法的灵感来自于 alipay 的安全控件安装,所以先感谢 alipay. 下面是经过我自己修改的自解压 shell 代码(嵌入式板子上是busybox提供的sh) #!/bin/sh # # T ...

  5. postgresql9.5 run 文件linux安装后配置成开机服务

    网上出现的比较多安装方法要么是源码安装,要么是yum安装,我发觉都要配置很多属性,比较麻烦,所以现在我在centos7长用 run文件来安装 http://get.enterprisedb.com/p ...

  6. Linux 永久挂载镜像文件和制作yum源

    Linux mount命令是经常会使用到的命令,它用于挂载Linux系统外的文件. 1.镜像挂载到系统指定目录下:[root@master cdrom]#  mount -t auto  /mnt/c ...

  7. Linux内核Makefile文件(翻译自内核手册)

    --译自Linux3.9.5 Kernel Makefiles(内核目录documention/kbuild/makefiles.txt) kbuild(kernel build) 内核编译器 Thi ...

  8. Linux中检索文件

    1 , Use locate command It is a fast way to find the files location, but if a file just created ,it w ...

  9. Linux系统目录结构以及简单说明

    Linux系统目录结构以及简单说明 linux目录图: / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp ...

随机推荐

  1. cat echo 打印菜单

    cat << END        =============================        1.apple        2.pear        3.banana   ...

  2. Nginx Rewrite语法详解

    重写中用到的指令 if  (条件) {}  设定条件,再进行重写 set #设置变量 return #返回状态码  return 403; break #跳出rewrite rewrite #重写 I ...

  3. Spring Cloud之Eureka环境搭建

    pom: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o ...

  4. linux挂载/卸载优盘

    linux载入优盘 查看优盘 ls /dev/ sdb1 挂载到/mnt/usb目录 mount /dev/sdb1 /mnt/usb ntfs优盘需要安装ntfs-3g mount -t ntfs- ...

  5. mvc购物车项目(2)

    为了避免数据冗余,我们可以把共同的信息,抽出建立一个单独的表,把不是共有的信息,建立一张单独表. 订单表分为两个表 create table orders( id number primary key ...

  6. hdu1556Color the ball线段树区间更新

    题目链接 线段树区间更新更新一段区间,在更新区间的过程中,区间被分成几段,每一段的左右界限刚好是一个节点的tree[node].left和tree[node].right(如果不是继续分,直到是为止) ...

  7. Android开发中高效的数据结构

    android开发中,在java2ee或者android中常用的数据结构有Map,List,Set,但android作为移动平台,有些api(很多都是效率问题)显然不够理想,本着造更好轮子的精神,an ...

  8. 利用Perlin nosie 完成(PS 滤镜—— 分成云彩)

    %%%% Cloud %%%% 利用perlin noise生成云彩 clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image ...

  9. C语言小程序(七)、石头剪刀布

    本来挺简单的一个程序,但突然想把<Friends>给糅合进去,就多花了一些心思,这是我写过最有趣的程序了. #include <stdio.h> #include <st ...

  10. POJ2891Strange Way to Express Integers (线性同余方程组)

    Elina is reading a book written by Rujia Liu, which introduces a strange way to express non-negative ...