作为实习任务的一部分,我必须在大约 60-70 个运行 CentOS 的客户端设备上部署 OpenVPN 客户端(这些设备位于私有网络上,无法直接访问)。我对软件包管理还很陌生。我更新了已经存在的 SPEC 文件,该文件是由一位不再在这里工作的员工创建的。我向 spec 文件添加了一个子包,它生成了名为“主包—OpenVPN—版本“正在建设中。这可以正常工作。
我的问题是,当客户端设备运行“yum update mainpackage-*”(它会自动执行)时,它只会更新已安装的子包(正如预期的那样)。有什么办法可以让它选取我的新 openvpn 子包并安装它吗?由于在所有 60 台机器上运行 yum install 不切实际,我正在寻找使其与更新配合使用的方法。或者我的看法完全错误,有没有更简洁的方法来处理这个问题?
我尝试过查找实现此目的的方法,但一无所获。如果我在主包的“requires”中提及子包,则可行,但我觉得这不是正确的做法,因为它实际上不是主包的依赖项。
如果有帮助的话,我会在这里发布 SPEC 文件中的相关部分。
%post openvpn
hostname="$(/path/to/get_login.sh)"
sed -i "s/cert_here/$hostname.crt/" /etc/openvpn/client.conf
sed -i "s/key_here/$hostname.key/" /etc/openvpn/client.conf
psswd="$(mysql -Ns -u username -ppassword database -e "SELECT value FROM table
WHERE parameter='PASSWORD'")"
cd /etc/openvpn/
curl -k -o certs.tar.gz http://webservice-to-get-certificates/$hostname/$psswd
tar -xf /etc/openvpn/certs.tar.gz
rm -f certs.tar.gz
chmod 755 /etc/init.d/openvpn
chkconfig --add openvpn
systemctl start openvpn
%files openvpn
/etc/openvpn/client.conf
%attr(755, -, -) /etc/rc.d/init.d/openvpn
答案1
为什么首先要创建一个单独的子包?
- 如果您的子包应该始终在安装主包时安装,那么也许您不应该创建单独的子包。
- 如果您的子包不应该在安装主包时总是自动安装;那么安装该额外的子包就是用户的责任……