在旧的好的Solaris 10上,我使用这个脚本为 openssh 创建一个完全自动化的包(我更喜欢自己更新 sshd,个性化它,等等。)这个脚本在我的家乡运行良好(可能会造成一些麻烦并进行改进,但有效,当然测试它需要您自担风险! )。在 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
然后解压、配置、make..并安装在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 脚本?
答案1
找到解决方案。我的文件 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 在安装前未终止时才会失败)。