前言
之前往linux上安裝一個軟件,都是以壓縮包或者壓縮包+shell的方法,這每次安裝,都是先scp到某個目錄, 解壓,安裝......稍微厲害的,會寫個shell腳本.但是還是達不到真正的快速方便安裝.現在我們就介紹一種.run的軟件包
Run軟件包介紹
run 程序安裝包實質上是一個安裝腳本加要安裝的程序,如下所示:
|—————–——|
| |
| 安裝腳本 |
| |
|—————–——|
| |
| 程序 |
| |
|—————–——|
這樣整個 run 安裝包結構就一目了然了,實際上因為實際需要結構多少有點變動但這個無關緊要,只需要明白原理就行了。
它的結構是 shell +壓縮包(當然也可以是其它文件)的格式,制作的時候用 cat 命令命令連接兩個文件,頭部是 shell 腳本文件(shell 一定要在前面)和壓縮包同時重定向到另一個文件(Linux 中統一給后綴 run、bin 或 sh 給它,就是本文中說的 run 文件),一般這個后部分的文件是個壓縮 包,那樣就能夠打包很多文件了。運行的時候 shell 就可以用 Linux 里面的 tail 或 head 等命令很容易地把壓縮包從 run 文件切分出來,后面的操作就跟 shell+壓縮包 的操作類似了,但這其中用戶只需執行它就行,剩下的都是 shell 自己的操作了。這就是 Linux 那些 bin 、run 等安裝腳本的簡單制作了,對用戶來說自動省事了很多。
與普通腳本相比,此類腳本多了一步從合並的文件中,提取出程序文件的過程。
安裝文件的優點:
(1)只有一個包文件;
(2)可以直接運行在 Linux上,因為它是 sh(它的前半部分是sh);
(3)在 sh 中可以包含需要用戶接收的協議信息,而且提示用戶接收,如果用戶不接收,安裝退出。
制作run安裝包
假如我們有一個test.tar.gz的壓縮包, 這就是我們的安裝包, 其次我們有一個test.shell的執行腳本
test.shell的內容:
1 #!/bin/bash 2 lines=8 #這個值是指這個腳本的行數加 1,這個腳本共有 7 行 3 tail -n +$lines $0 >/tmp/test.tar.gz # $0 表示腳本本身,這個命令用來把從 $lines 開始的內容寫入一個 /tmp 目錄的 scan.tar.gz 文件里。 4 tar zxvf /tmp/test.tar.gz 5 cp test /usr/bin 6 rm test -f 7 exit 0
溫馨提示:1. lines = 8, 這個參數特別重要, 如果改腳本了, 一定要確認這個值是否正確. 2. 在腳本得最后一行一定要寫exit 0. 不然程序執行時會執行test.tar.gz,會報錯得. 3. 在腳本的最后一行, 一定要換行, 就是說exit 0 之后還有加一個空行.不然程序在鏈接得時候,會緊挨着exit 0 后面進行連接.分割時會出錯. 這里說明一下用linux
連接腳本和壓縮包
cat test.sh test.tar.gz > test.run
這樣就得到了 test.run 文件,它的結構如下:
|—————–———| 第1行
| |
| test.sh |
| | 第7行
|—————–———|
| test.tar.gz | 第8行
| |
|—————–———| 結尾
在運行 test.run 時,運行到第 7 行的 exit 0 ,腳本就會自動退出了,不會去運行第 8 行以下的二進制數據(即 test.tar.gz 文件),這樣 shell 就不會因為識別不了二進制數據而出錯了。這里我們巧妙地使用了 tail 命令,把第 7 行以下的數據重新生成了一個 test.tar.gz文件,然后再執行安裝。運行超級簡單,使用 sh test.run 或賦予可執行權限然后直接執行 ./test.run 就可以安裝了。
run 安裝包制作較小的程序包是很好的選擇,但是它也有缺點,做邏輯比較復雜的安裝包,寫的安裝腳本將會很麻煩,因此此時還是用其他的安裝包更好。