我有一个庞大的基础设施,包括几种运行Linux的服务器.例如,数据库服务器,负载平衡器,特定于应用程序的服务器.每种服务器都有许多实例,所有这些实例都需要可重现.
每种服务器基本上都是自定义分发.自定义包括对上游软件包的更改(其他上游版本,构建选项,修补程序,等等),还可能包括一些额外的自定义软件包.
例如,我需要一台运行最新OpenLDAP slapd的服务器,该服务器使用特定选项和一些补丁进行编译.这就是事情变得复杂的地方.
更新到最新的slapd还需要更新它所依赖的库,这意味着重建依赖于这些库的所有包.那是我基本上需要重建分发的重要部分.我正在寻找一种有助于自动化这一过程的解决方案.
有点模糊.我想准备构建我的自定义发行版所需的一切,给它一个名字(例如ldap-server),并在我需要重现构建时将该名称赋予自动构建系统.
我认为这是Gengoo或LFS社区应该拥有的.我也见过ALT Linux Hasher,Fedora Mock,Debian pbuilder/sbuild等项目,但从未使用过任何项目.
有任何想法吗?
提前致谢!
我想编写一个函数,根据满足给定属性的项目将列表拆分为子列表p
.我的问题是如何调用该函数.我将在Haskell中给出示例,但同样的问题会出现在F#或ML中.
split :: (a -> Bool) -> [a] -> [[a]] --- split lists into list of sublists
Run Code Online (Sandbox Code Playgroud)
连接的子列表是原始列表:
concat (split p xss) == xs
Run Code Online (Sandbox Code Playgroud)
每个子列表都满足该initial_p_only p
属性,也就是说(A)子列表以满足的元素开头p
- 因此不为空,并且(B)没有其他元素满足p
:
initial_p_only :: (a -> Bool) -> [a] -> Bool
initial_p_only p [] = False
initial_p_only p (x:xs) = p x && all (not . p) xs
Run Code Online (Sandbox Code Playgroud)
所以准确地说,
all (initial_p_only p) (split p xss)
Run Code Online (Sandbox Code Playgroud)
如果原始列表中的第一个元素不满足p
,则拆分失败.
这个函数需要调用以外的东西split
. 我该怎么称呼它?
我在Haskell sendfile
包中找到了这段代码:
-- sendfile64 gives LFS support
foreign import ccall unsafe "sendfile64" c_sendfile
:: Fd -> Fd -> Ptr (#type off64_t) -> (#type size_t) -> IO (#type ssize_t)
Run Code Online (Sandbox Code Playgroud)
1)什么#type
意思和2)为什么我会得到这个错误,
[1 of 1] Compiling Linux.Splice ( splice.hs, splice.o )
splice.hs:40:12: parse error on input `type'
Run Code Online (Sandbox Code Playgroud)
当我自己尝试使用它如下?:
ghc --make splice.hs
Run Code Online (Sandbox Code Playgroud)
splice.hs:
{-# LANGUAGE ForeignFunctionInterface #-}
module Linux.Splice where
import Data.Word
import System.Posix.Types
-- SPLICE
-- fcntl.h
-- ssize_t splice(
-- int fd_in,
-- loff_t* off_in,
-- int fd_out, …
Run Code Online (Sandbox Code Playgroud) 在下面的测试脚本中,我运行一个基本协进程echo
,在后台运行的内置协进程附加其标准输出:
#!/bin/bash
# TEST 1
coproc /bin/sleep 100
echo >&${COPROC[1]} &
Run Code Online (Sandbox Code Playgroud)
该脚本总是失败,没有明显的原因,给出输出:
./test.sh: line 4: ${COPROC[1]}: Bad file descriptor
Run Code Online (Sandbox Code Playgroud)
我想知道正确的语法是否应该是这样的(&符号在重定向之前移动):
#!/bin/bash
# TEST 2
coproc /bin/sleep 100
echo & >&${COPROC[1]}
Run Code Online (Sandbox Code Playgroud)
第二个示例似乎有效,因为它在执行过程中没有报告任何错误,但使用此语法,实际上不会执行重定向;事实上,考虑另一个测试:
#!/bin/bash
# TEST 3
/bin/echo abc & >xfile
Run Code Online (Sandbox Code Playgroud)
测试 3 创建该文件xfile
,但不向其中写入任何内容。奇怪的是,在重定向后再次尝试定位&符号可以使echo
工作正常:
#!/bin/bash
# TEST 4
/bin/echo abc >xfile &
Run Code Online (Sandbox Code Playgroud)
xfile
测试 4 创建包含字符串 的文件abc
。
了解导致coproc
重定向错误的原因或正确的语法是什么?
如果您从 Android 设备访问imgur.com,单击上传图像,然后单击Touch here to select your images
,Android 会提示您Choose file for upload
几个选项。这个选择器的好处是,即使没有相机作为选项(对于旧手机),您也可以从图库应用程序启动相机,拍照并最终从图库中选择要上传的照片。
这也适用于<input>
任何网站上的任何文件。
所以我的问题是:如何调用该文件选择器并最终获取本机 Java 应用程序中所选图像的路径?
如果可能的话,我想过滤它,这样它只会提示图像而不是音频文件,并且我不想安装任何文件管理器,因为它可以在浏览器中执行。很难相信它只适用于浏览器。
我不想实现自己的文件浏览器或在我的应用程序中列出相机的文件夹。我也刚刚开始使用 Android,因此最终获取文件路径或图像的完整示例将非常棒。
我正在努力理解Coq中关键词'fun'的含义.
有所有类型和功能forallb:
Inductive all (X : Type) (P : X -> Prop) : list X -> Prop :=
| all_nil : all X P []
| all_cons : forall (x:X) (l: list X) , P x -> all X P l -> all X P (x::l).
Fixpoint forallb {X : Type} (test : X -> bool) (l : list X) : bool :=
match l with
| [] => true
| x :: l' => andb (test x) (forallb test …
Run Code Online (Sandbox Code Playgroud) 我所看到的关于并行列表处理的大多数问题都涉及通过分块列表并将每个块彼此并行处理而实现的并行性.
我的问题不同.
关于map
s和fold
s 的序列,我有一些更简单/更愚蠢的想法:如果我们想简单地为第一个工作设置一个map
应该与第二个并行完成的工作map
怎么办?
我正在考虑的计算结构:
xs -- initial data
ys = y1 : y2 : ... : yn -- y1 = f x1, ... and so on.
-- computed in one parallel job.
zs = z1 : z2 : ... : zn -- z1 = g y1, ... and so on.
-- computed in another job (the applications of `g`), i.e., the "main" job.
Run Code Online (Sandbox Code Playgroud)
以下代码的精神会有效吗?
ys = map f xs
zs = …
Run Code Online (Sandbox Code Playgroud) 这可能最终会成为一个很长的问题,所以请耐心等待。
我在这里遇到了一个关于 git merge 决策的令人难以置信的解释:git merge 是如何工作的。我试图建立在这个解释的基础上,看看以这种方式描述 git merge 是否有任何漏洞。本质上,可以通过真值表来描述合并文件中是否出现一行的决定:
W:原始文件,A:Alice 的分支,B:Bob 的分支
基于这个真值表,很容易想出一个基于行的算法来构造 D:通过查看 A 和 B 中的相应行并根据真值表做出决策,逐行构造 D。
我的第一个问题是 case (0, 0, 1) 根据我上面发布的链接,似乎表明虽然这种情况实际上是一个冲突,但 git 通常通过删除该行来处理它。这种情况真的会导致冲突吗?
我的第二个问题是关于删除案例——(0, 1, 1) 和 (1, 0, 1)。直觉上,我觉得处理这些案例的方式可能会导致问题。假设 W 中有一个函数 foo()。这个函数实际上从未在任何代码段中调用过。假设在分支 A 中,Alice 最终决定删除 foo()。然而,在分支 B 中,Bob 最终决定使用 foo() 并编写另一个调用 foo() 的函数 bar()。凭直觉,根据真值表,似乎合并的文件最终会删除 foo() 函数并添加 bar() 并且 Bob 会想知道为什么 foo() 不再起作用了!这可能让我认为我为 3 路合并得出的真值表模型可能不完整并且缺少某些东西?
在darcs中,如果我想将其他补丁所依赖的补丁重新排序到顶部(或直接扔掉)(即更改同一文件)怎么办?
在 git 中,我只需执行 agit rebase -i <UNTOUCHED-REVISION>
并重新排序或丢弃一些更改;然后 git 会以一种愚蠢的方式尝试将旧的更改一一应用到树的新变体,并要求我解决出现的冲突。
在darcs中,我认为没有办法强制它忽略补丁之间的依赖关系。如果我obliterate
或suspend
(或unrecord
)其他补丁依赖的补丁,darcs 会拒绝这样做。(因为它想要以聪明的方式行事。)
在我的 mac OS X 机器上Darwin maci 15.6.0 Darwin Kernel Version 15.6.0
我已在以下自定义目录中安装了 libxml2 和 libxslt
/usr/local/MyLibs/libxml2-2.9.2
和 libxslt
/usr/local/MyLibs/libxslt-1.1.29
现在我想使用这些库来构建我的 CPANM 模块XML::LibXSLT。
这告诉我我可以使用--configure-args
(它仍然是实验性的)来做到这一点。所以我做了类似的事情,
cpanm http://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/XML-LibXSLT-1.94.tar.gz --configure-args="--cflags=-I/usr/local/libxslt-1.1.29/include -I/usr/include/libxml2 -I/usr/local/MyLibs/libxml2-2.9.2/include/libxml2 --libs=-L/usr/local/libxslt-1.1.29/lib -lxslt -lxml2 -lz -lpthread -licucore -lm -L/usr/local/MyLibs/libxml2-2.9.2/lib -lxml2 -lz -lpthread -liconv -lm" --force
Run Code Online (Sandbox Code Playgroud)
但是,构建日志表明它没有使用我的自定义位置中安装的库。
我是否有什么做得不正确的地方?
haskell ×3
android ×1
bash ×1
c ×1
coproc ×1
coq ×1
cpan ×1
cpanm ×1
darcs ×1
dependencies ×1
distribution ×1
f# ×1
ffi ×1
file-upload ×1
filechooser ×1
fold ×1
git ×1
git-merge ×1
github ×1
ipc ×1
lambda ×1
linux ×1
merge ×1
packaging ×1
patch ×1
perl ×1
pipe ×1
pipeline ×1
rebase ×1
sml ×1
split ×1
stream ×1
types ×1
xml-libxml ×1