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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM