在solaris製作package安裝包

http://blog.csdn.net/Borenbao/archive/2007/02/05/1502780.aspx

這篇文章主要是說明如何作在 Solaris 2.5,2.6 及 7 上面, 能夠使用 pkgadd 來讀取, 並安裝的 package程
式. 在 AnswerBook 2 裏有詳細的討論作 package 的過程. 以下將會一步一步
說明如何作 package.
注意: 在以下某些步驟中, 需要在你的機器上有 root 的權利才能使用.
** 選擇你的軟體
找尋軟體的原始程式碼, 將它下載. 讀取所有和安裝有關的文件. 並注意所有的設
定檔, 當然也包含檢查 Makefile. 解可執行檔案及它們的 link 情況.
** 讀取 manuals 和 man page
雖然許多人都不太願意去讀這些 man page, 或許你會覺得看 man pgae 是很累的事
但是最好還是看一下, 下面這些指令的 man page.
pkgadd, pkginfo,pkgmk,pkgparam,pkgproto,pkgtrans,pkgrm
這裏有許多的 option 還有詳細的說明, 你必需解, 以方便以下的說明.
** 設定目錄結構
通常, 我慣建立一個目錄, 如 /opt/SoftWare . 一般而言, 大部份的軟體都會安裝
在 /usr/local 下, 建立 /opt/SoftWare 是要存放將要做成 package 的軟體, 而
避免和原來 /usr/local 下的檔案混在一起. 在下一個步驟將會說明如何使用它.
** 編譯並安裝軟體在 /usr/local 或其它地方
改變目錄至你存放軟體原始程式的位置, 並且讀取相關的指令使用. 大部份的軟體都
會有詳細的安裝指令, 這些指令通常以 README INSTALL 等方式的檔名出現. 仔細的
讀取, 並將你的軟體編譯成可執行檔. 當你的軟體編譯完成, 你會執行如 "make install"
之類的指令, 用以安裝你的程式到 /usr/local 或其它地方. 在執行 "make install"
之前, 你需要做以下的動作:
% su
% cd /usr
% mv local local.full
% ln -s local /opt/SoftWare
然後再執行 "make install" , 這樣一來, 雖然是裝在 /usr/local , 但實際上是
放在 /opt/SoftWare 裏面.
** 建立 prototype 和 pkginfo 這兩個檔
改變目錄至 /usr/local ...
% cd /usr/local
執行以下的指令 ...
% find . -print | pkgproto > prototype
這行指令會建立一個 prototype 檔在 /usr/local
接下來, 使用你的文字編輯器 (如 vi), 來編輯 prototype 這個檔, 加入下面那行
i pkginfo=./pkginfo
並將 user 和 group 均改成 bin. 以下是一個修改完的例子...
i pkginfo=./pkginfo
d none bin 0755 bin bin
f none bin/prog 0755 bin bin
d none doc 0755 bin bin
f none doc/doc1 0644 bin bin
d none lib 0755 bin bin
f none lib/lib1 0644 bin bin
d none man 0755 bin bin
f none man/man1 0644 bin bin
將 user 和 group 均改成 bin 是非常重要的, 如果 user 和 group 不是 bin 時 
 在使用 pkgadd 安裝時, 將無法正常執行.
編輯安裝腳本
在製作package時,也可以編輯一系列腳本,以便於安裝package時執行該腳本。
這些腳本主要有如下幾類:
copyright:定義發佈軟件包時的版權聲明
depend:定義安裝該package之前所需安裝的package
checkinstall:在安裝package前對環境變量及package是否已安裝進行確認
request:定義在安裝時需要輸入的變量
preinstall:定義在package將文件安裝至系統前所需執行的命令
postinstall:定義在package將文件安裝至系統之後所需執行的命令
preremove:定義在刪除package的文件之前所需執行的命令
postremove:定義在刪除package的文件之後所需執行的命令

在製作package時可以不必完全包括以上這些文件。這可以在prototype的文件中進行定義。
在製作OWLdap的package時,我定義了以下幾個文件:
copyright,request,checkinstll,postinstall,preremove
爲防止有灌水的嫌疑,我這兒就不把具體腳本的內容貼出來了。其實跟寫shell腳本差不多的:)
同樣的,需要在prototype文件中增加這些文件的引用:
i pkginfo=./pkginfo
i copyright=./copyright
i request=./request
i checkinstall=./checkinstall
i postinstall=./postinstall
i preremove=./preremove
d none bin 0755 bin bin
f none bin/ldapadd 0755 root other
f none bin/ldapdelete 0755 root other
f none bin/ldapmodrdn 0755 root other
f none bin/ldappasswd 0755 root other
f none bin/ldapsearch 0755 root other
f none bin/ud 0755 root other
l none bin/ldapmodify=ldapadd
……

再來, 在 /usr/local 下建立 pkginfo 這個檔案, 格式如下 :
PKG="SCprog"
NAME="prog"
ARCH="sparc"
VERSION="1.00"
CATEGORY="application"
VENDOR="Computer Science of Chun-Hua University"
EMAIL="[email protected]"
PSTAMP="PodsCat Kuo"
BASEDIR="/usr/local"
CLASSES="none"
這些參數說明如下:
PKG= 你所選擇 package 的目錄名稱
NAME= 程式名稱
ARCH= 作業系統的版本
VERSION= 程式的版本編號
CATEGORY= 這個程式是一個 application
VENDOR= 寫這個程式的公司
EMAIL= e-mail 的內容
PSTAMP= 是誰作這個軟體
BASEDIR= /usr/local 是檔案安裝的地方
CLASSES= 只要寫 none 就好了
** 執行 pkgmk
在 /usr/local 內執行以下的指令...
% pkgmk -r `pwd`
執行這個指令之後, 會在 /var/spool/pkg 建立一個 package 的目錄(以上面的例子,
會建立一個 SCprog 的目錄), 裏面則存放你做好的 package.
基本上, package 已經可以算做完成, 你可以把這個 SCprog 用 tar 和 gzip 壓起
來就可以了. 安裝時, 只需要把它解開成 SCprog 的目錄型式, 然後執行
% pkagdd -d .
這樣就可以了...
** 執行 pkgtrans
使用 pkgtrans 可以將你的 package 由檔案系統(file system)的格式, 轉成datastream
的格式. 使用方法如下 :
%cd /var/spool/pkg
%pkgtrans -s `pwd` /tmp/prog-1.00
執行這個指令之後, 會在 /tmp 下產生 prog-1.00 這個 datastream 格式的package
如果要用這個檔來安裝 package , 可用下列的指令來安裝.
% pkagdd -d prog-1.00
以上就是整個 package 做的方法, 希望對大家有所幫助.
接下來是真對 pkgtrans 加以說明.......
所謂的 file system 格式, 就是我們一般的格案格式, 如果同時有好幾個 package 在
該目錄下, 使用 "pkgadd -d ." 即會列出所有的 package.
而 datastream 的格式, 則是將整個 file system 做成一個檔案, 有點類似 tar
的做用. 使用 datastream 格式的 package 來安裝時, 必需指定檔名, 而不能用 "."
來指定, 而且每次只能安裝一個 package. 但好處是只需要一個檔而已.
要把 file system 的格式轉成 datastream 的格式, 可用以下的指令
% pkgtrans source dest.
要把 datastream 的格式轉成 file system 的格式, 可用以下的指令
% pkgtrans -s `pwd` dest. 
發佈了38 篇原創文章 · 獲贊 2 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章