linux程序打包安装,制作Linux下程序安裝包——使用腳本打包bin、run等安裝包
制作簡單的安裝包的時候可以簡單的用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等安裝包相关推荐
- linux制作电脑启动盘,Linux启动盘的制作Linux -电脑资料
Linux的启动软盘有boot盘和boot/root盘之分,所谓的boot盘只能用来启动已经安装在硬盘上的 Linux系统 ,而boot/root盘本身就是一个 迷你Linux系统, Linux的启动 ...
- mint linux更新内核,如何在Ubuntu/Linux Mint中安装最新Linux 5.2.5内核
原标题:如何在Ubuntu/Linux Mint中安装最新Linux 5.2.5内核 Linux 5.2的Ubuntu主线内核包最终可以在32位和64位操作系统中下载和安装. 由于构建失败,Linux ...
- Linux中如何安装和运行应用程序(以tar.gz为例)
一.linux中应用程序的安装方法 这里我们以安装并运行pycharm为例: 首先给出linux版本的pycharm下载地址:https://www.jetbrains.com/pycharm/dow ...
- linux crossover教程,CrossOver Linux版如何安装已知应用程序?CrossOver Linux版安装已知应用程序教程...
CrossOver Linux版是一款让您可以在Linux 系统上运行 Windows 应用的软件,不必购买 Windows 授权,不必重启系统,不必使用虚拟机.CrossOver 可以让您在 Ubu ...
- Linux服务器傻瓜安装(图解下)(4)
2.在Linux下利用TCPDump进行网络管理 对于网络管理员来说,要保证整个网络的正常运行,就必须随时了解网络中存在的异常流量.网络阻塞等现象.打个比方,一部电话的窃听装置,可以用来窃听双方通话的 ...
- linux nvidia驱动安装rpm,Fedora 下安装NVIDIA显卡驱动
rpmfusion安装法: 相对于ATi,在Linux下安装NVIDIA就简单得多.只需要一个命令即可完成驱动的安装: 首先要确保你已经添加rpmfusion的源,如果你不能确认你可以安装输入此命令添 ...
- linux nginx rpm 安装配置,Centos下安装nginx rpm包
1 在nginx官方网站下载一个rpm包,下载地址是:http://nginx.org/en/download.html wget http://nginx.org/packages/centos/6 ...
- linux系统 ns3安装,ubuntu系统下ns3实验基础指令
ubuntu系统下ns3实验基础指令 ubuntu系统下ns3实验基础指令 ubuntu系统下ns3实验基础指令 针对使用ns3进行信息网络建模与仿真相关实验,这篇博客提供了一些基本操作的建议与命令介 ...
- linux输入法软件安装目录,Linux下的文件管理与汉语输入法的安装
#1.文件管理命令 **touch **:新建文件,修改文件时间戳 命令 用处 touch file file1 file2- 创建file file1 file2等空文件 touch file 将文 ...
最新文章
- 气温上升影响数据中心节能
- 企业网络推广之下滴滴造车野心不减,“造车时代”想入局恐需技术先行
- BZOJ4196: [Noi2015]软件包管理器 (好题
- java开关用法_如何在Java中使用带开关盒的枚举?
- android让文件按顺序列表,Java/Android 获取文件夹的文件列表(file.listFiles())并按名称排序,中文优先...
- python画蜡烛致敬烈士_「」matplotlib 股票-用python绘制蜡烛线型k线图是用代码还是绘图工具-TOP金融网...
- 相对熵与交叉熵_详解机器学习中的熵、条件熵、相对熵、交叉熵
- JAVA开发血泪之路:一步步搭建spring框架
- 小技巧 ----- Java算法题中的输入输出
- 1603错误_iPhone恢复iTunes未知错误怎么办【解决方法】
- 基于WinForm的多语言开发之界面加载
- 电子时钟课程设计报告
- java导出文件名乱码
- [ACL2016]Pointing the Unknown Words
- c语言多态性编码图形,C和C++经典著作 C专家编程Expert C Programming Deep C Secrets pdf...
- 2021第一学期学习笔记01
- powerdesigner中把用例关系线设置成直线
- 产学交流 | 重庆理工大学计算机科学与工程学院信息管理系一行到访芝诺数据...
- 世界十大最美历史遗迹
- 单目标多目标优化算法的测试函数与解
热门文章
- $.countdown is not a function
- SAP CRM WebClient UI的cross component navigation跳转
- Testing on block size in R3AC1
- Document Builder: 如何将structure level的field加入到word document的table中
- 如何快速找到settype被assign的product category
- Java Spring研究之MavenSandBox - noHandlerfound debug
- SAP CRM Fiori 应用 My Opportunity应用点击Edit后出现time out的错误分析
- 深入理解Java的整型类型:如何实现2+2=5?
- Hybris ECP里Customer对应的数据库表
- Hybris UI的Route(路由)实现