在RPM软件包安装/升级之前,我必须对目标系统执行多次精心的“完整性”检查。我希望在脚本(bash / python / php或其他)中包含该过程以及其他附件文件(例如 SQL 脚本),这些文件不会与其他文件一起安装但仅在pre期间使用(安装|。升级)
我在哪里为rpmbuild放置这些文件,如何在%pre 部分和主脚本内部调用/引用它们(路径等)?如何引用即将安装的数据文件(所谓的 SQL 脚本)?
感谢您的帮助。
答案 0 :(得分:3)
RPM没有此功能。在我看来,你有两个选择:
对文件进行定位,将其编码为文本格式(例如uuencode),然后在%pre中解码并解压缩它们。丑陋,但可能。
有一个单独的RPM,比如sql-dependencies,提供这些文件。然后在现有RPM中添加以下内容:
需要(pre):sql-dependencies。
答案 1 :(得分:1)
如果您将脚本放在自解压存档中,并将其设置为rpm脚本,则可以执行此操作。这可以通过Makeself(direct link to download)来实现。
使用 footest 作为示例名称,运行:
makeself.sh --base64 /path/to/footest \
/path/to/rpm/sources/footest.sh "My foo test" ./run.sh
/path/to/footest
是一个运行脚本的目录,./run.sh
是footest目录中的脚本,在提取时运行。
在.spec
文件中,添加footest.sh
作为来源,并将其作为脚本添加:
%pre -f footest.sh
当你在rpm中查询脚本时,它会显示footest.sh
的内容,这是一个makeself,后跟运行的测试套件的base64编码。
注意:为了使其正常工作,您必须应用补丁才能使自己使用base64编码(当前版本没有此功能),并且rpm不喜欢二进制脚本中的数据:
<强> makeself-2.1.5-base64.patch:强>
diff -ruNp makeself-2.1.5/makeself.sh makeself-2.1.5-base64/makeself.sh
--- makeself-2.1.5/makeself.sh 2008-01-04 16:53:49.000000000 -0700
+++ makeself-2.1.5-base64/makeself.sh 2012-01-17 06:01:42.000000000 -0700
@@ -91,6 +91,7 @@ MS_Usage()
echo " --gzip : Compress using gzip (default if detected)"
echo " --bzip2 : Compress using bzip2 instead of gzip"
echo " --compress : Compress using the UNIX 'compress' command"
+ echo " --base64 : Instead of compressing, encode the data using base64"
echo " --nocomp : Do not compress the data"
echo " --notemp : The archive will create archive_dir in the"
echo " current directory and uncompress in ./archive_dir"
@@ -150,6 +151,10 @@ do
COMPRESS=Unix
shift
;;
+ --base64)
+ COMPRESS=base64
+ shift
+ ;;
--encrypt)
COMPRESS=gpg
shift
@@ -278,6 +283,10 @@ bzip2)
GZIP_CMD="bzip2 -9"
GUNZIP_CMD="bzip2 -d"
;;
+base64)
+ GZIP_CMD="base64"
+ GUNZIP_CMD="base64 -d -i"
+ ;;
gpg)
GZIP_CMD="gpg -ac -z9"
GUNZIP_CMD="gpg -d"