Solaris

Solaris11 和 ips,如何設置或替換舊的 checkinstall 腳本?

  • January 7, 2021

在舊的好solaris 10上,我使用這個腳本為openssh創建了一個完全自動化的包(我更喜歡自己更新sshd,個性化它等等。)這個腳本在我的homelan上執行良好(可以製造一些麻煩和改進但是工作,當然測試它需要您自擔風險!)。在 Solaris 11 上,他們使用 ips 的全新過程 所以我做了這些步驟 首先創建必要的目錄

mkdir -p $HOME/user/openssh/{src,binary}

進入 src 目錄

cd $HOME/openssh/src

下載最新的openssh並檢查gpg

wget https://ftp2.eu.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.4p1.tar.gz
wget https://ftp2.eu.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.4p1.tar.gz.asc
gpg -v *asc

然後提取,配置,製作..並安裝在bindir中

gtar -xvf *tar.gz
cd openssh-8.4p1
./configure --prefix=/opt/gm --sysconfdir=/etc/opt/gm/ssh --with-kerberos5=/usr --with-libedit=/usr --with-pam --with-solaris-contracts --with-solaris-projects --with-solaris-privs
gmake -j4
gmake install DESTDIR=$HOME/openssh/binary

然後我開始為 ips 創建包(我已經建立了一個個人儲存庫來安裝我的包)。

pkg contents -r -m ssh > openssh.mog

我編輯 mog 文件,刪除所有不需要的二進製文件和部分(稍後我將使用其他命令完成),我還更改了一些名稱(network/ssh 變為 network/gmopenssh 以避免與 ssh 官方包衝突)。

vim openssh.mog

然後我生成二進制列表

pkgsend generate binary |pkgfmt > openssh.p5m.1

添加元數據…

pkgmogrify -DARCH=`uname -p` openssh.p5m.1 openssh.mog |pkgfmt > openssh.p5m.2

一代代..

pkgdepend generate -md binary openssh.p5m.2 |pkgfmt > openssh.p5m.3
pkgdepend resolve -m openssh.p5m.3

現在我們檢查是否有問題(權限、所有者等)

pkglint -c ./lint-cache -r http://pkg.oracle.com/solaris/release openssh.p5m.3.res

幾分鐘後更正 openssh.p5m.3.res 中的錯誤並重做 pkglint

 vim openssh.p5m.3.res
 pkglint -c ./lint-cache -r http://pkg.oracle.com/solaris/release openssh.p5m.3.res

如果最終沒有返回警告,我們可以上傳包,正如我首先所說的,我已經配置了一個儲存庫。

pkgsend publish -s http://localhost:9001 -d binary openssh.p5m.3.res

重建回購..

pkgrepo rebuild -s http://localhost:9001

最後安裝它

pkg install gmopenssh

現在,問題是:在舊的 Solaris 10 上,當我安裝軟體包時,checkinstall 腳本會導入我的清單和方法(當然,即使在 Solaris 11 軟體包上也可以在正確的目錄中添加和修改)。安裝後我的包工作正常,但我必須導入清單並啟動服務..手動(原文如此!)。如何在 ips 配置中替換舊的 checkinstall 腳本?

找到解決方案。我的文件 openssh.p5m.3.res 包含位於錯誤位置的清單(非標準),因此 Solaris 拒絕導入並啟動它。

舊配置

dir  path=var/opt/gm/lib/svc/manifest owner=root group=sys mode=0755
dir  path=var/opt/gm/lib/svc/manifestnetwork owner=root group=sys mode=0755
file var/opt/gm/lib/svc/manifest/network/gmopenssh.xml \
   path=var/opt/gm/lib/svc/manifest/network/gmopenssh.xml owner=root group=sys \
   mode=0444 restart_fmri=svc:/system/manifest-import:default

新配置

dir  path=lib/svc/manifest owner=root group=sys mode=0755
dir  path=lib/svc/manifest/network owner=root group=sys mode=0755
file lib/svc/manifest/network/gmopenssh.xml \
   path=lib/svc/manifest/network/gmopenssh.xml owner=root group=sys \
   mode=0444 restart_fmri=svc:/system/manifest-import:default

restart_fmri=svc:/system/manifest-import:default

做的伎倆。

再次上傳並執行 pkg update 服務已創建並處於活動狀態(僅當安裝前未殺死 sshd 時才會失敗)。

引用自:https://unix.stackexchange.com/questions/627934