2011-10-18 72 views
1

在RPM软件包安装/升级之前,我必须在目标系统上执行多次详细的“完整性”检查。我想在脚本(bash/python/php或其他文件)以及其他附件文件(例如SQL脚本)中包含该过程,该过程不会与其他文件一起安装,而仅在预安装(安装|升级)期间使用。rpmbuild:使用%pre脚本中软件包中包含的脚本文件

我在哪里可以将这些文件放到rpmbuild中,以及如何在部分和主脚本中调用/引用它们(路径等)?我如何参考即将安装的数据文件(说SQL脚本)?

感谢您的任何帮助。

回答

1

如果将脚本放入自解压存档并将其转换为rpm脚本,则可以这样做。这可以通过Makeselfdirect 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" 
+0

这是非常详细。谢谢一堆! – rishta

3

RPM没有此功能。在我看来,你有两个选择:

  1. 焦油了文件,将它们编码成文本格式(例如UUENCODE)和解码,并在%的预解压它们。丑陋,但可能。

  2. 有一个单独的RPM,比如sql-dependencies,它提供了这些文件。然后在您的现有RPM中添加以下内容:

    需要(预):sql依赖关系。