首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流处理大量的东西给OVA

流处理大量的东西给OVA
EN

Stack Overflow用户
提问于 2013-12-11 17:41:58
回答 1查看 111关注 0票数 2

因此,我们的一位开发人员需要我对一堆信息进行批次,并将其处理为OVA,以供下载。这是一个使用long方法(即编写文件系统)的简单过程,但是开发人员希望有一个更干净、更精简的解决方案,以更好地扩展。因此,他们要求我对事实证明困难的整个进程进行下去。有人能告诉我一些方向吗。以下是需要完成的步骤:

  1. 从webserver获取输入(Webserver最终会以流的形式传递这些输入。)
    • 随机密码
    • XML文件

  1. 修改文件系统上的引导脚本(即插入服务器生成的随机密码)
  2. 创建XML文件和引导脚本的ISO
  3. 计算国际标准化组织的SHA1和
  4. 在OVF目录中的清单文件中追加SHA1和
  5. 从OVF目录创建OVA

下面是一个目录结构示例(为了简单起见,我在/中对此进行了概述)

代码语言:javascript
复制
/--
  |
  |--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)

这是我到目前为止所掌握的(稍后我会解释这些问题)。是的..。有很多问题):

代码语言:javascript
复制
cat /ISO/boot.sh | sed "s%DEFAULT%RANDOM%" | mkisofs /ISO/* | echo "SHA1(boot.iso)= " && sha1sum >> manifest.mf | tar -cvf success.ova /OVF/*

注意:在boot.sh中有一个变量设置为默认设置(仅用于测试目的):

代码语言:javascript
复制
PASSWORD="DEFAULT"

注意这是清单文件中的一行应该是什么样子的:

代码语言:javascript
复制
SHA1(boot.iso)= 5fbc0d70 BLAH BLAH BLAH a91c9121bb

因此,我从来没有尝试过在一个流中编写完整的脚本。通常,我在写文件系统的时候写了很多。我看到的第一个问题是sed替换了字符串,但是它传递给mkiosfs的内容不会被用作mkiosfs,因为它只是将它在/ISO中找到的东西做了一个等号。我甚至不知道你能不能把这样的东西传给小姐。考虑管道有时是很奇怪的。

接下来,我认为mkisofs是可以的,因为我没有指定文件输出,因此它应该输出到stdout,它将被传递给sha1sum,但是下面是我看到的下一个问题。在添加SHA1和之前,我需要在文件中添加一些额外的文本,这会中断流。

最后,我看到的最后一个问题是如何将所有内容传递到OVA中,而不首先写入文件系统(写到manifest.mf)。

我应该首先提到的最后一个大问题是config.xml文件。现在我把它当作一份文件处理。开发人员也想把它作为流传递给这个脚本。我不知道该如何处理这件事。

任何帮助都将不胜感激。这些概念是我所不知道的。

谢谢!

更新12/11/13 2:11下午2:11

现在对每个部分进行单独测试。很快就会在下面报告调查结果。

更新12/11/13 2:14 13

以下工作:

代码语言:javascript
复制
cat /ISO/boot.sh | sed "s%DEFAULT%RANDOM%"

并产生以下输出:

代码语言:javascript
复制
RANDOM="RANDOM"

完全和预期的一样。

您是正确的,NeronLeVelu,我将不得不稍后回来,并更仔细地查看sed时,真正的随机密码正在生成。即。确保正确的字符被转义。不过,现在我只是在测试逻辑。我以后会担心regex和逃跑。我们甚至还没有决定随机密码。这只是暂时的,很可能是字母数字。

进入下一阶段。仍然不确定如何从sed (stdout)获取输出,并使用它将其包含在ISO创建中,而不实际创建被写入文件系统的文件。如果不写入文件系统,可能是不可能的。更多的东西即将到来

EN

回答 1

Stack Overflow用户

发布于 2013-12-11 19:17:58

代码语言:javascript
复制
# 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

将rest从此输入中处理,并进行一些测试,以验证每个步骤,如空crc值或mkisofs.input。当出现生产错误时,这将在运行时有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20526217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档