打包关于spec文件的宏:%suse_install_update_script

#1

最近在学打包, 学习netease-cloud-music与sogou的spec文件发现%suse_install_update_script %{S:0}宏,后来找资料发现就是把那个脚本文件netease-cloud-music.sh.in复制到/var/adm/update-scripts目录中.
但哪里都找不到关于这个脚本的执行时机,网上搜不到这些资料,所以不得不小题大做,发个帖子提问,小白不太懂,大家轻喷…

(xzhao) #2

应该是放在%posttrans里面的吧,不过我不太懂,得请专业的 @maguariteSu

#3

通过rpm --eval %suse_install_update_script这个命令可以找到对应命令:
install -D -m 644 %1 %buildroot/var/adm/update-scripts/%{name}-%{version}-%{release}-%(basename %1).txt
这条命令在安装时会把netease-cloud-music.sh.in文件复制到/var/adm/update-scripts/下
我想知道什么时候执行netease-cloud-music.sh.in脚本,由谁调用的?

(xzhao) #4

应该是包更新的时候由zypper调用

(marguerite) #5

@Dayu521

这个不是 rpm 的机制是 zypper 的机制。所以用 sudo rpm -ivh 装 rpm 不起作用,而 sudo zypper install 可以。类似一个钩子,发现该 rpm 含有属于那几个文件夹的东西就运行脚本或显示文本内容。

主要是企业发行版用的,SUSE/openSUSE 特有的。 update-scripts 想要做成通用的也简单,就是直接在 specfile 的 %post (安装后) %preun (卸载前) 里写。但是你会发现那里面的内容绝大部分都是一样的,可能这就是当初整出这个东西的目的。至于 update-messages,是在 zypper/yast 装完之后在 YaST 的图形界面或 zypper 的 CLI 环境下显示文本内容,这个类似于你安装 Nvidia 显卡或其他商业软件时候弹出的那个提示,rpm 本身好像除了在 %post 里 echo,没有别的办法,但是 echo 不能用于 YaST 图形界面。

特别注意:update-scripts 的脚本,必须可以多次运行。每次的结果都相同。

至于宏变量本身没什么好说的。