我正试图制作我可以逃脱的绝对最小的Docker图像,所以我已经从ubuntu作为我的基地切换到高山.
因为apt,我曾经用来--no-install-recommends最小化与我想要的软件包一起安装的"依赖项".是否有一个我需要传递的等效标志,apk或者这是这个瘦身操作系统的默认行为?
我一直在阅读 的man页面apk add,但我不完全理解如何使用该--force-broken-world标志。
我试图将 Python 2.7.6 安装到 Alpine 映像中,但出现以下错误。
$ docker run --rm -it alpine:latest apk add --no-cache python=2.7.6
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
ERROR: unsatisfiable constraints:
python2-2.7.14-r2:
breaks: world[python=2.7.6]
Run Code Online (Sandbox Code Playgroud)
但是,我可以强制安装它,但我不确定它在做什么(如果有的话)。
$ docker run --rm -it alpine:latest apk add --force-broken-world --no-cache python=2.7.6
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
OK: 4 MiB in 11 packages
Run Code Online (Sandbox Code Playgroud)
从命令行来看,一切看起来都很好。但是,当您在容器内执行此操作时,python似乎并未安装。
$ docker run --rm -it alpine:latest /bin/ash
# apk add --force-broken-world --no-cache python=2.7.6
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
OK: 4 MiB …Run Code Online (Sandbox Code Playgroud) 有大量的帖子和博客讨论这个话题,但似乎没有什么工作......
从互联网上,以下是有关安装和运行所需程序的共识gdb.
安装 gdb
brew install gdb
Run Code Online (Sandbox Code Playgroud)
Homebrew"成功"安装 gdb v8.1
协同设计 gdb
协同设计gdb由以下的代码签名程序 (如在一个单独的SO后详述).
更新 ~/.gdbinit
echo "set startup-with-shell off" >> ~/.gdbinit
Run Code Online (Sandbox Code Playgroud)在完成所有步骤之后,当我尝试调试一个简单的"hello world"程序时,我得到了SIGTRAP因抛出而导致的以下启动错误.
(gdb) start
Temporary breakpoint 1 at 0x100000e66: file test.cpp, line 5.
Starting program: /Users/zfields/Documents/Development/test/a.out
[New Thread 0x1703 of process 67971]
[New Thread 0x1903 of process 67971]
During startup program terminated with signal SIGTRAP, Trace/breakpoint trap.
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我是Java课程的学生,今天学习了一些关于Java的东西,这使得我的设备转向了.当我问老师如何以及为什么时,他不确定这种行为.谁能解释为什么以下示例有效?
class Example {
public int ex_val;
public Example (int a) {
this.ex_val = a;
}
public int getExVal () {
return this.ex_val;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我要在另一个类的方法中创建一个"Example"实例并"返回"该对象,它可以成功地跳出它的原始范围并随后使用.
class ParentObject {
// Instance Variables
public Example a;
public ParentObject (int number) {
// Initialize instance variable object from out-of-scope instantiation
this.a = genExample(number);
// Verify scope creep
System.out.println(this.a.getExVal());
}
public Example genExample (int a) {
return new Example(a);
}
}
Run Code Online (Sandbox Code Playgroud)
这可行,但这种行为是否稳定?我可以指望这个吗?垃圾收集器可以在一个方法的return语句和调用函数的赋值语句之间跳转吗?我是否根据操作系统的JVM版本运行失败风险?如果可以依赖它,这似乎是方便的功能.
我已成功创建并上传了一个快照包(教程很棒).但是,我想知道在每个构建步骤中到底发生了什么,以及我如何利用它们.
这个过程似乎是拉 - >构建 - >阶段 - >素 - >快照.
通过我的观察,似乎"拉"放的文件parts/<part name>/src/夹"打造"放于文件parts/<part name>/build/夹,"阶段"提出的在文件stage/夹和"黄金"把文件放在prime/和parts/<part name>/install/文件夹.
作为一个新手,我会告诉你我从一个snapcraft.yaml文件开始,我打电话snapcraft,我得到了一个快照; 一步到位的过程.我知道每个"零件"有一个stage:和prime:部分,但我不知道如何或为何采取这些步骤的优势.我发现有用的唯一事情是install:沿$SNAPCRAFT_PART_INSTALL可到环境变量snapcraft.yaml文件.
这些stage:和prime:部分允许我做什么不能实现install:和$SNAPCRAFT_PART_INSTALL?
有没有更好的方法将a的内容复制std::deque到字节数组?似乎STL中应该有一些东西可以做到这一点.
// Generate byte-array to transmit
uint8_t * i2c_message = new uint8_t[_tx.size()];
if ( !i2c_message ) {
errno = ENOMEM;
::perror("ERROR: FirmataI2c::endTransmission - Failed to allocate memory!");
} else {
size_t i = 0;
// Load byte-array
for ( const auto & data_byte : _tx ) {
i2c_message[i++] = data_byte;
}
// Transmit data
_marshaller.sendSysex(firmata::I2C_REQUEST, _tx.size(), i2c_message);
_stream.flush();
delete[] i2c_message;
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找空间或速度或两者的建议......
编辑:应该指出,
_marshaller.sendSysex()不能扔.
跟进:
我认为值得重新考虑所有内容,因为评论非常有启发性(除了火焰战争).:-P
被问到的问题的答案......
使用 std::copy
更大的图景:
不是简单地增加代码的原始性能,而是值得考虑为代码库添加健壮性和长寿.
我忽略了RAII - 资源获取是初始化.通过向另一个方向发展并略微受到性能影响,我可以在弹性方面获得巨大收益(正如@PaulMcKenzie和@WhozCraig所指出的那样).事实上,我甚至可以将我的代码与依赖项中的更改隔离开来!
最终解决方案 …
$ ssh-keygen --help
ssh-keygen: unrecognized option: -
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa]
[-N new_passphrase] [-C comment] [-f output_keyfile]
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
ssh-keygen -i [-m key_format] [-f input_keyfile]
ssh-keygen -e [-m key_format] [-f input_keyfile]
ssh-keygen -y [-f input_keyfile]
ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile]
ssh-keygen -B [-f input_keyfile]
ssh-keygen -D pkcs11
ssh-keygen -F hostname [-f known_hosts_file] [-l]
ssh-keygen -H …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用docker manifest inspect <image name>,但 Docker CLI 说...
$ docker manifest inspect node
docker manifest inspect is only supported on a Docker cli with experimental cli features enabled
Run Code Online (Sandbox Code Playgroud)
考虑到 Docker 文档的丰富性,这个简单的问题出奇地难以搜索。
如何启用实验性 CLI 功能?
是否有内置的SQL函数可以屏蔽输出数据?
假设我有一个整数列,代表一个电话号码(对于任何国家/地区).是否有更好的方法来显示数字而不是将它们分开,加载哈希,破折号和点,然后将它们连接在一起?
我知道有几种语言可以简单地屏蔽数据,而不是重构数据.MySQL有类似的东西吗?
我正在尝试学习如何在C中使用pipe()命令,并尝试创建一个测试程序来复制其功能ls | grep ".c",如果我将其输入linux终端.如果我把它输入终端,我只能得到test.c结果.
我的代码如下:
#include "stdio.h"
#include "stdlib.h"
#include "unistd.h"
#include "fcntl.h"
int main(int argc, char** argv)
{
int pipefd[2];
int childpid,childpid2;
char* cmd[3]={"ls",NULL,NULL};
char* cmd2[3]={"grep",".c",NULL};
pipe(pipefd);
if(childpid=fork()){
//parent
}else{
//child
//write
close(pipefd[0]);
dup2(pipefd[1],STDOUT_FILENO);
execvp("ls", cmd);
}
if(childpid2=fork()){
}
else{
close(pipefd[1]);
dup2(pipefd[0],STDIN_FILENO);
execvp("grep",cmd2);
}
close(pipefd[0]);
close(pipefd[1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此代码返回以下结果($是终端提示符):
$a.out
$test.c
(blank line)
Run Code Online (Sandbox Code Playgroud)
该程序没有完成,但挂起,直到我退出它.我有什么问题?我怎么能模仿终端?我是C的新手,并且使用程序的预制模板,如果有明显的错误,请原谅我.