因此,我们的一位开发人员需要我批量处理大量信息并将其处理成OVA以供下载。这是一个使用long方法(即写入文件系统)的简单过程,但开发人员需要一个更清晰,更简化的解决方案,可以更好地扩展。因此,他们要求我对整个过程进行简化,这些过程很难实现。有人可以给我一些指示。以下是需要完成的步骤:
这是一个示例目录结构(我在/为了简单起见概述了这一点)
/--
|
|--ISO/
| |
| |--boot.sh (Where the random password gets inserted)
| |--config.xml (This is handed from the web server. Needs to stream from server)
|
|--OVF/
|
|--disk.vmdk
|--ovf.xml
|--manifest.mf (Contains SHA1 of all files in OVF directory)
|--boot.iso (This file will exist once created from ISO directory)
这是我到目前为止所做的事情(之后我会解释这些问题。是的......有很多问题):
cat /ISO/boot.sh | sed "s%DEFAULT%RANDOM%" | mkisofs /ISO/* | echo "SHA1(boot.iso)= " && sha1sum >> manifest.mf | tar -cvf success.ova /OVF/*
注意 的 在boot.sh中有一个变量设置为DEFAULT,如下所示(仅用于测试目的):
PASSWORD="DEFAULT"
注意 的 这就是清单文件中的一行应该是这样的:
SHA1(boot.iso)= 5fbc0d70 BLAH BLAH BLAH a91c9121bb
所以我以前从未尝试过在一个流中编写完整的脚本。通常我会像往常一样写文件系统。我看到的第一个问题是sed正在替换字符串,但它不会被用作mkisofs,因为mkiosf只会在/ ISO中找到它的iso。我甚至不知道你是否可以将这样的东西传递给mkisofs。管道有时候很奇怪。
接下来,我认为mkisofs是可以的,因为我没有指定文件输出,因此它应该输出到将传递给sha1sum的stdout,但是这是我看到的下一个问题。我需要在添加SHA1总和之前在文件中附加一些额外的文本,这有点会中断流。
最后,我看到的最后一个问题是如何将所有内容传递给OVA而不先写入文件系统(写入manifest.mf)。
哦,我应该首先提到的最后一个大问题是config.xml文件。现在我只是将它作为一个文件处理。开发人员也想将它作为流传递给这个脚本。我不知道如何处理它。
非常感谢任何帮助。这些概念有点超出我的知识。
谢谢!
更新12/11/13美国东部时间下午2:11
立即单独测试每个部分。将在下面报告调查结果。
更新12/11/13美国东部时间下午2:14
以下作品:
cat /ISO/boot.sh | sed "s%DEFAULT%RANDOM%"
并生成以下输出:
RANDOM="RANDOM"
完全符合预期。
你是正确的NeronLeVelu,我将不得不稍后回来并在生成真正的随机密码时更仔细地查看sed。即。确保正确的字符被转义。但是现在,我只是测试逻辑。我会担心正则表达式并在以后逃避。我们还没有决定随机密码。它只是暂时的,很可能是字母数字。
转到下一部分。仍然不确定如何从sed(stdout)获取输出并使用它包含在ISO创建中而不实际创建一个写入文件系统的文件。没有写入文件系统可能无法实现。更多内容即将推出
答案 0 :(得分:1)
# for the password if it contain & \ and separator used in your sed (default is /)
Password4Sed="`echo \"${PASSWORD} | sed \"s/[\\/&]/\\\\&/g\"`"
# no need of a cat with a sed
sed "s/DEFAULT/${Password4Sed}/"/ISO/boot.sh > /tmp/mkisofs.input
从此输入中处理休息并进行一些测试以验证每个步骤,如空crc值或mkisofs.input。这将在生成错误时在运行时提供帮助