比如说我用风滚草,运行zypper dup
之后可能更新几百个包,其中有一些包我想做一些特别的设置,比如升级 xkeyboard-config 之后我想运行一下我 home 目录下面的一些脚本,有没有办法做到?
Arch 的话似乎有 Pacman Hook 可以做到类似的事情,但是 openSUSE 的话有办法吗?
比如说我用风滚草,运行zypper dup
之后可能更新几百个包,其中有一些包我想做一些特别的设置,比如升级 xkeyboard-config 之后我想运行一下我 home 目录下面的一些脚本,有没有办法做到?
Arch 的话似乎有 Pacman Hook 可以做到类似的事情,但是 openSUSE 的话有办法吗?
有,%post 字段就是干这个的。
那他就要把脚本打个包了吧
写一个总的脚本里判断下 VERSION_ID 决定是否执行会不会好点?然后扔.bashrc 里
@hillwood
您可能没理解我的意思。%post 字段是把安装后的脚本写在 RPM 包里面,而我这里说的情况是把脚本只保存在本地,不在 RPM 包里面。
把脚本放在本地而不是自行打包进 RPM 的好处:
不修改 rpm 无法办到。不过可以利用 systemd timer 设置一个计划任务定时检测对应的包,一旦有修改就执行对用的脚本。实时办不到。
能办到吧,在 %post 里检测两点
然后这里面就可以运行脚本了啊。不一定非要在包里啊,你运行 update-alternative 或者 gtk-icon-cache-update 什么的也没得非打包起来啊
@marguerite
但是如果包是上游的(比如 openSUSE:Factory 里面的包),我也没办法随便改人家的%post 呀
如果不一定在包里面的话,如何才能做到升级包的时候自动执行指定脚本(假定我没有办法可以修改上游包的%post,也不考虑 fork 一个到 home:)?
他的意思是不动上游的 spec。
可以,你自己打一个包,随着系统升级更新就行,dup 之前给 obs 推个版本 +0.1 的包,然后带着 home 源更新就行了,空包也不会很大
那可以写个 zypp-plugin。yum 和 dnf 有类似的:
zypp-plugin 的文档:
zypper 支持多种类型的 plugin…我感觉你可以看看那个 appdata refresh plugin 找找灵感