1. 程式人生 > >製作linux下的.run安裝包

製作linux下的.run安裝包

前言

之前往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 安裝包製作較小的程式包是很好的選擇,但是它也有缺點,做邏輯比較複雜的安裝包,寫的安裝指令碼將會很麻煩,因此此時還是用其他的安裝包更好。