制作簡單的安裝包的時候可以簡單的用cat命令連接兩個文件,然后頭部是腳本文件,執行的時候把下面的文件分解出來就行了。一般這個后部分的文件是個壓縮包,那樣,就能夠打包很多文件了,在腳本中解壓出來即可。這就是Linux那些bin啊run啊等安裝腳本的簡單制作了。下面來看看兩個簡單的例子:

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=7      #這個值是指這個腳本的行數加1,這個腳本共有6行

tail +$lines $0 >/tmp/helloworld.tar.gz # $0表示腳本本身,這個命令用來把從$lines開始的內容寫入一個/tmp目錄的helloworld.tar.gz文件里。

tar jxvf /tmp/hellowrold.tar.gz

cp helloworld /bin

exit 0

然后使用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行的exit0腳本就退出了,所以不會去運行第7行以下的二進制數據(即helloworld.tar.bz2文件),而我們用了tail巧妙地把第7行以下的數據重新生成了一個helloworld.tar.gz文件。再執行安裝。

run安裝包制作較小的程序包是很好的選擇,但是它也有缺點,做邏輯比較復雜的安裝包,寫的安裝腳本將會很麻煩。因此此時還是用其他的安裝包更好。

linux 下制作二進制 .bin  的文件

制做方法是使用cat 命令將執行腳本和打包文件同事放到一個.bin的文件里

這樣安裝的時候只要使用一個包,直接執行該包即可安裝完畢,簡單方便。

例:制作安裝apache、mysql的安裝腳本包

1.將源碼包先打包

#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz

2.編寫腳本如下:

# cat install.sh

#!/bin/bash

dir_tmp=/root/installapache

mkdir $dir_tmp

sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null

cd $dir_tmp

tar zxf packages.tar.gz

tar jxf httpd-2.0.63.tar.bz2

cd  httpd-2.0.63

./configure –prefix=/tmp/apache2

make

make install

cd $dir_tmp

tar zxf mysql-5.0.33.tar.gz

cd mysql-5.0.33

./configure –with-charset=gbk–with-extra-charsets=binary,latin1,gb2312–localstatedir=/home/db –with-mysqld-ldflags=-all-static-enable-assembler –with-innodb –prefix=/tmp/mysql5

make

make install

exit 0

#cat install.sh packages.tar.gz >install.bin

這樣就生成install.bin的安裝文件,改文件是由shell腳本和二進制合成的。前半部分是腳本后半部分是二進制文件,用strings等二進制查看命令可以看到

最主要的是下面這句,是將二進制文件從.bin文件里分離出來

sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null

安裝的時候直接執行

sh install.bin

安裝這個方法可以將我們平時常使用的安裝腳本化,然后打包。以后使用就方便了。

上面兩個例子,其實不管是bin也好run也好,其實Linux下一切皆文件,而且是不管什么文件,都是一樣的看法。所以這些后綴沒有什么意義。上面兩個不同的地方是分離,一個是用了tail命令,一個是用了sed來實現。總之,這只是一種思路,不管用什么辦法,只要能合起來然后又分開就行。

另外,有人寫出了一個腳本來實現這樣的功能,感興趣的可以自己看一下:

linux程序打包安装,制作Linux下程序安裝包——使用腳本打包bin、run等安裝包相关推荐

  1. linux制作电脑启动盘,Linux启动盘的制作Linux -电脑资料

    Linux的启动软盘有boot盘和boot/root盘之分,所谓的boot盘只能用来启动已经安装在硬盘上的 Linux系统 ,而boot/root盘本身就是一个 迷你Linux系统, Linux的启动 ...

  2. mint linux更新内核,如何在Ubuntu/Linux Mint中安装最新Linux 5.2.5内核

    原标题:如何在Ubuntu/Linux Mint中安装最新Linux 5.2.5内核 Linux 5.2的Ubuntu主线内核包最终可以在32位和64位操作系统中下载和安装. 由于构建失败,Linux ...

  3. Linux中如何安装和运行应用程序(以tar.gz为例)

    一.linux中应用程序的安装方法 这里我们以安装并运行pycharm为例: 首先给出linux版本的pycharm下载地址:https://www.jetbrains.com/pycharm/dow ...

  4. linux crossover教程,CrossOver Linux版如何安装已知应用程序?CrossOver Linux版安装已知应用程序教程...

    CrossOver Linux版是一款让您可以在Linux 系统上运行 Windows 应用的软件,不必购买 Windows 授权,不必重启系统,不必使用虚拟机.CrossOver 可以让您在 Ubu ...

  5. Linux服务器傻瓜安装(图解下)(4)

    2.在Linux下利用TCPDump进行网络管理 对于网络管理员来说,要保证整个网络的正常运行,就必须随时了解网络中存在的异常流量.网络阻塞等现象.打个比方,一部电话的窃听装置,可以用来窃听双方通话的 ...

  6. linux nvidia驱动安装rpm,Fedora 下安装NVIDIA显卡驱动

    rpmfusion安装法: 相对于ATi,在Linux下安装NVIDIA就简单得多.只需要一个命令即可完成驱动的安装: 首先要确保你已经添加rpmfusion的源,如果你不能确认你可以安装输入此命令添 ...

  7. linux nginx rpm 安装配置,Centos下安装nginx rpm包

    1 在nginx官方网站下载一个rpm包,下载地址是:http://nginx.org/en/download.html wget http://nginx.org/packages/centos/6 ...

  8. linux系统 ns3安装,ubuntu系统下ns3实验基础指令

    ubuntu系统下ns3实验基础指令 ubuntu系统下ns3实验基础指令 ubuntu系统下ns3实验基础指令 针对使用ns3进行信息网络建模与仿真相关实验,这篇博客提供了一些基本操作的建议与命令介 ...

  9. linux输入法软件安装目录,Linux下的文件管理与汉语输入法的安装

    #1.文件管理命令 **touch **:新建文件,修改文件时间戳 命令 用处 touch file file1 file2- 创建file file1 file2等空文件 touch file 将文 ...

最新文章

  1. 气温上升影响数据中心节能
  2. 企业网络推广之下滴滴造车野心不减,“造车时代”想入局恐需技术先行
  3. BZOJ4196: [Noi2015]软件包管理器 (好题
  4. java开关用法_如何在Java中使用带开关盒的枚举?
  5. android让文件按顺序列表,Java/Android 获取文件夹的文件列表(file.listFiles())并按名称排序,中文优先...
  6. python画蜡烛致敬烈士_「」matplotlib 股票-用python绘制蜡烛线型k线图是用代码还是绘图工具-TOP金融网...
  7. 相对熵与交叉熵_详解机器学习中的熵、条件熵、相对熵、交叉熵
  8. JAVA开发血泪之路:一步步搭建spring框架
  9. 小技巧 ----- Java算法题中的输入输出
  10. 1603错误_iPhone恢复iTunes未知错误怎么办【解决方法】
  11. 基于WinForm的多语言开发之界面加载
  12. 电子时钟课程设计报告
  13. java导出文件名乱码
  14. [ACL2016]Pointing the Unknown Words
  15. c语言多态性编码图形,C和C++经典著作 C专家编程Expert C Programming Deep C Secrets pdf...
  16. 2021第一学期学习笔记01
  17. powerdesigner中把用例关系线设置成直线
  18. 产学交流 | 重庆理工大学计算机科学与工程学院信息管理系一行到访芝诺数据...
  19. 世界十大最美历史遗迹
  20. 单目标多目标优化算法的测试函数与解

热门文章

  1. $.countdown is not a function
  2. SAP CRM WebClient UI的cross component navigation跳转
  3. Testing on block size in R3AC1
  4. Document Builder: 如何将structure level的field加入到word document的table中
  5. 如何快速找到settype被assign的product category
  6. Java Spring研究之MavenSandBox - noHandlerfound debug
  7. SAP CRM Fiori 应用 My Opportunity应用点击Edit后出现time out的错误分析
  8. 深入理解Java的整型类型:如何实现2+2=5?
  9. Hybris ECP里Customer对应的数据库表
  10. Hybris UI的Route(路由)实现