标准: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 - 我的解决方案实际上并没有按照我希望的方式工作..简而言之!
我一直在使用解析模块构造,并发现自己真的迷恋它的数据结构的声明性质.对于那些不熟悉它的人,您可以编写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)
有一些现有的用于Python的serdes模块的例子,我想起了JSON - 但它的问题在于它非常具体,并且不容易支持任意格式.你可以编码或解码JSON,基本上就是这样.有像这样构造的各种serdes,有些使用load,*dumps*方法,有些则没有.这是一个废话.
objects = json.loads('{'a': 1, 'b': 2})
Run Code Online (Sandbox Code Playgroud)
我对访问者模式并不十分熟悉,但似乎确实有一些可能适用的机制 - 这个想法(如果我理解正确的话),你设置了一个节点访问者,它就是树并应用一些转换(并返回新的对象?)..我在这里很朦胧.
是否有其他机制可能更加pythonic或已经写入?我考虑过使用ElementTree和子类化Elements - 但是我想在做一些愚蠢的事情之前咨询stackoverflow.
好的高级SSL女孩和家伙 - 我会在两天后给你增加一笔赏金,因为我认为这是一个复杂的主题,应该得到任何思想回答的人的奖励.
这里的一些假设仅仅是:假设,或更确切地说是有希望的猜测.考虑这是一个脑筋急转弯,简单地说"这是不可能的"是错过了重点.
如果你做了类似的事情,欢迎提供替代和部分解决方案,个人经验.即使我的整个计划存在缺陷,我也希望从中学到一些东西.
这是场景:
我正在开发一个嵌入式Linux系统,并希望它的Web服务器能够提供开箱即用,无需麻烦的SSL.这是我的目标设计标准:
Must Haves:
对Haves很好:
不要:
是的,我知道..
思考上限时间
我使用SSL的经验是生成由"真正的"root签名的证书/密钥,以及通过制作我自己的内部CA,在内部分发"自签名"证书来加强我的游戏.我知道你可以链接证书,但我不确定操作的顺序是什么.即浏览器"向上走"链是否看到有效的根CA并将其视为有效证书 - 或者您是否需要在每个级别进行验证?
我遇到了中间证书权限的描述,这让我想到了潜在的解决方案.我可能已经从"简单的解决方案"变为"梦魇模式",但是有可能:
疯狂的想法#1
好的,你太聪明了
最有可能的是,我错综复杂的解决方案是行不通的 - 但如果确实如此,它会很棒.你有类似的问题吗?你做了什么?有什么权衡?
我被要求使用TPM为具有TPM芯片的x86_64设备实现许可加密狗的数量.基本上所需要的是确保为设备发布的软件只能在设备本身上运行,这样如果软件迁移到虚拟机或不同的硬件,它将拒绝运行.
我不认为该解决方案可以抵抗逆向工程,而是一种典型的"加密狗"类型解决方案,它会阻碍普通用户并使企业客户保持诚实.
我已经成功构建并包含了TPM模块,以及TrouSerS和openssl-tpm-engine代码 - 我可以成功获得TPM的所有权,但除此之外,可用的文档并不完全涵盖这个用例 - 或者如果我到目前为止一直无法找到一个简单的英语解决方案.
我希望尽可能依赖TPM中存储的私钥的秘密性质,而不是利用平台组件哈希(硬盘驱动器可能会死,CPU可能会被替换等等.我宁愿犯错客户端,以便在例行硬件升级后系统不会变得不可用.
同样,理想情况下我怀疑此解决方案可以设计为在制造过程中收集每个设备的公钥并将其添加到签名钥匙串中,以便可以针对每个设备可能存储在TPM中的单个密钥对软件进行签名,而不是要求多次签署软件?我可能会在这里弄错,但必须有一些满足平台认证方法的批量方法,否则看起来很难扩展.
我一直在翻阅官方 VMWare pyvmomi API 的文档和示例,在我的一生中,我找不到一种明显的方法来从 ESXi 服务器中删除 VM。
任何人都可以提供一个例子或向我指出已经实施了这一点的人 - 似乎唯一的选择是自己推出一些可以
我认为每个部分都在那里,但我真的希望有人能指出我正确的方向。