小编syn*_*tel的帖子

GNU Makefile相当于shell'TRAP'命令,用于在退出时简明地识别构建失败

标准:Makefile是一个GNU Make Makefile - 我对makepp,qmake,cmake等不感兴趣.他们都很好(特别是cmake),但这是为了工作和工作,我们使用GNU Make.最佳解决方案是纯Makefile解决方案,而不是解析为您制作的shell脚本.

我也不想做一个"继续失败"的解决方案 - 如果它被破坏了,它就会被打破,需要修复.

情况就是这样,我有一个并行构建多个目录的makefile - 如果其中一个失败,当然整个构建失败,但直到所有运行都运行完成(或失败).这意味着make实际失败的原因被埋没在make的输出结尾任意远的地方.

这是我所拥有的一个例子:

all: $(SUBDIRS)

SUBDIRS = \
  apple \
  orange \
  banana \
  pineapple \
  lemon \
  watermelon \
  grapefruit

$(SUBDIRS):
  cd $@ && $(MAKE) $(MFLAGS) 2>&1 | sed -e "s/^/$(notdir $(@)): /g"
Run Code Online (Sandbox Code Playgroud)

如果我运行'make -j 5'并且'orange'碰巧失败了 - 我想在make过程结束时看到这样的表

  apple     - passed
  orange    - FAILED
  banana    - passed
  pineapple - passed
  lemon     - passed
Run Code Online (Sandbox Code Playgroud)

我考虑过&& echo"传递"> .result || echo"FAILED"> .result,但仍需要某种TRAP或__onexit()清理命令在退出时打印它们.

任何Makefile ninjas都有一个pure-makefile解决方案吗?

un-edit - 我的解决方案实际上并没有按照我希望的方式工作..简而言之!

gnu makefile gnu-make

10
推荐指数
1
解决办法
2715
查看次数

Python对象转换的模式(编码,解码,反序列化,序列化)

我一直在使用解析模块构造,并发现自己真的迷恋它的数据结构的声明性质.对于那些不熟悉它的人,您可以编写Python代码,这些代码基本上就像您在实例化时通过嵌套对象尝试解析的内容.

例:

ethernet = Struct("ethernet_header",
   Bytes("destination", 6),
   Bytes("source", 6),
   Enum(UBInt16("type"),
       IPv4 = 0x0800,
       ARP = 0x0806,
       RARP = 0x8035,
       X25 = 0x0805,
       IPX = 0x8137,
       IPv6 = 0x86DD,
   ),
)
Run Code Online (Sandbox Code Playgroud)

虽然构造实际上不支持在此结构中存储值(您可以将抽象Container解析为字节流或将字节流解析为抽象容器),但我希望扩展框架,以便解析器也可以在解析时存储值可以用点符号ethernet.type访问它们.

但是在这样做时,认为这里最好的解决方案是编写编码/解码机制的通用方法,这样您就可以注册编码/解码机制,并能够从抽象数据结构中生成各种输出(解析器本身) ),以及解析器的输出.

举个例子,默认情况下,当您运行通过解析器打包的以太网时,最终会得到类似dict的内容:

Container(name='ethernet_header', 
    destination='\x01\x02\x03\x04\x05\x06', 
    source='\x01\x02\x03\x04\x05\x06', 
    type=IPX
)
Run Code Online (Sandbox Code Playgroud)

我不想两次解析东西 - 理想情况下我希望解析器以可配置的方式生成'target'对象/字符串/字节.

这个想法的根源在于你可以为消费或处理结构注册各种"插件",这样你就可以以编程方式生成XML或Graphviz图,以及能够从字节转换为Python dicts.任务的关键是,走一个节点树并基于编码器/解码器,转换并返回转换后的对象.

所以问题基本上是 - 哪种模式最适合这个目的?


编解码器风格:

我查看了编解码器模块,它相当优雅,因为您创建了编码机制,注册您的类可以编码的东西,您可以指定您想要的特定编码.

'blah blah'.encode('utf8')
Run Code Online (Sandbox Code Playgroud)


serdes(序列化器,解串器):

有一些现有的用于Python的serdes模块的例子,我想起了JSON - 但它的问题在于它非常具体,并且不容易支持任意格式.你可以编码或解码JSON,基本上就是这样.有像这样构造的各种serdes,有些使用load,*dumps*方法,有些则没有.这是一个废话.

objects = json.loads('{'a': 1, 'b': 2})
Run Code Online (Sandbox Code Playgroud)


访客模式(?):

我对访问者模式并不十分熟悉,但似乎确实有一些可能适用的机制 - 这个想法(如果我理解正确的话),你设置了一个节点访问者,它就是树并应用一些转换(并返回新的对象?)..我在这里很朦胧.


其他?:

是否有其他机制可能更加pythonic或已经写入?我考虑过使用ElementTree和子类化Elements - 但是我想在做一些愚蠢的事情之前咨询stackoverflow.

python encoding serialization construct deserialization

8
推荐指数
0
解决办法
947
查看次数

高级SSL:中间证书颁发机构和部署嵌入式框

好的高级SSL女孩和家伙 - 我会在两天后给你增加一笔赏金,因为我认为这是一个复杂的主题,应该得到任何思想回答的人的奖励.

这里的一些假设仅仅是:假设,或更确切地说是有希望的猜测.考虑这是一个脑筋急转弯,简单地说"这是不可能的"是错过了重点.

如果你做了类似的事情,欢迎提供替代和部分解决方案,个人经验.即使我的整个计划存在缺陷,我也希望从中学到一些东西.

这是场景:

我正在开发一个嵌入式Linux系统,并希望它的Web服务器能够提供开箱即用,无需麻烦的SSL.这是我的目标设计标准:

Must Haves:

  • 我不能让用户将我自己开发的CA证书添加到他们的浏览器中
  • 我不能让用户将静态生成的(在mfg时间)自签名证书添加到他们的浏览器中
  • 我无法让用户在其浏览器中添加动态生成的(在启动时)自签名证书.
  • 我无法默认使用HTTP并启用SSL启用/禁用切换.它必须是SSL.
  • 嵌入式盒子和网络浏览器客户端都可以有或没有互联网访问,因此必须假设没有互联网访问才能正常运行.我们可以依赖的唯一根CA是随操作系统或浏览器一起提供的CA. 让我们假设该列表在浏览器和操作系统中"基本上"相同 - 即如果我们依赖它们,我们将有~90%的成功率.
  • 我不能使用夜间操作,即' Fast Eddie的SSL证书清算所 - 价格这么低,我们的服务器必须被黑客攻击!"

对Haves很好:

  • 我不希望用户警告证书的主机名与浏览器中的主机名不匹配.我认为这是一个很好的,因为它可能是不可能的.

不要:

  • 我不想为每个盒子运送相同的静态密钥集."不能"列表暗示的那种,但我知道风险.

是的,我知道..

  • 我可以并且确实为用户提供了上传他们自己的证书/密钥的机制,但我认为这是"高级模式"并超出了这个问题的范围.如果用户足够先进以拥有自己的内部CA或购买密钥,那么他们很棒,我喜欢它们.

思考上限时间

我使用SSL的经验是生成由"真正的"root签名的证书/密钥,以及通过制作我自己的内部CA,在内部分发"自签名"证书来加强我的游戏.我知道你可以链接证书,但我不确定操作的顺序是什么.即浏览器"向上走"链是否看到有效的根CA并将其视为有效证书 - 或者您是否需要在每个级别进行验证?

我遇到了中间证书权限的描述,这让我想到了潜在的解决方案.我可能已经从"简单的解决方案"变为"梦魇模式",但是有可能:

疯狂的想法#1

  • 获取由"真实"CA签署的中间证书颁发机构证书.(ICA-1)
    • ROOT_CA - > ICA-1
  • 该证书将在制造时用于生成每个盒子的唯一无密码子中间证书颁发机构对.
    • ICA-1 - > ICA-2
  • 使用ICA-2生成唯一的服务器证书/密钥.需要注意的是,您是否可以为IP生成密钥/对(而不是DNS名称?)?即一个潜在的用例是用户最初通过http连接到盒子,然后使用重定向URL中的IP将客户端重定向到SSL服务(这样浏览器就不会抱怨不匹配).这可能是让房子倒塌的卡片.由于必须在任何重定向发生之前建立SSL连接,我才能看到这也是一个问题.但是,如果这一切都神奇地起作用
  • 然后我可以使用ICA-2在盒子改变IP时生成新的证书/密钥对,这样当Web服务器恢复时,它总是有一个"有效"的密钥链.
    • ICA-2 - > SP-1

好的,你太聪明了

最有可能的是,我错综复杂的解决方案是行不通的 - 但如果确实如此,它会很棒.你有类似的问题吗?你做了什么?有什么权衡?

security ssl certificate-authority ssl-certificate

7
推荐指数
1
解决办法
2396
查看次数

如何在Linux上使用TPM实现平台许可证"加密狗"?

我被要求使用TPM为具有TPM芯片的x86_64设备实现许可加密狗的数量.基本上所需要的是确保为设备发布的软件只能在设备本身上运行,这样如果软件迁移到虚拟机或不同的硬件,它将拒绝运行.

我不认为该解决方案可以抵抗逆向工程,而是一种典型的"加密狗"类型解决方案,它会阻碍普通用户并使企业客户保持诚实.

我已经成功构建并包含了TPM模块,以及TrouSerS和openssl-tpm-engine代码 - 我可以成功获得TPM的所有权,但除此之外,可用的文档并不完全涵盖这个用例 - 或者如果我到目前为止一直无法找到一个简单的英语解决方案.

我希望尽可能依赖TPM中存储的私钥的秘密性质,而不是利用平台组件哈希(硬盘驱动器可能会死,CPU可能会被替换等等.我宁愿犯错客户端,以便在例行硬件升级后系统不会变得不可用.

同样,理想情况下我怀疑此解决方案可以设计为在制造过程中收集每个设备的公钥并将其添加到签名钥匙串中,以便可以针对每个设备可能存储在TPM中的单个密钥对软件进行签名,而不是要求多次签署软件?我可能会在这里弄错,但必须有一些满足平台认证方法的批量方法,否则看起来很难扩展.

linux openssl tpm

5
推荐指数
1
解决办法
2294
查看次数

有没有办法使用 pyvmomi API 删除来宾虚拟机?

我一直在翻阅官方 VMWare pyvmomi API 的文档和示例,在我的一生中,我找不到一种明显的方法来从 ESXi 服务器中删除 VM。

任何人都可以提供一个例子或向我指出已经实施了这一点的人 - 似乎唯一的选择是自己推出一些可以

  • 关闭虚拟机
  • 取消注册
  • 删除虚拟机
  • 删除与 VM 关联的磁盘?

我认为每个部分都在那里,但我真的希望有人能指出我正确的方向。

python vmware esxi pyvmomi

5
推荐指数
1
解决办法
7090
查看次数