问题标签 [linux-namespaces]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 如何检查我创建的命名空间?
使用clone()
or unshare()
,我们可以创建一个网络命名空间。就像命令一样:
(见http://lxc.sourceforge.net/index.php/about/kernel-namespaces/network/configuration/)
如果我使用ns_exec
命令创建了多个网络命名空间,我在哪里可以看到它们?或者我如何计算网络命名空间的数量?
networking - 如何创建更多网络命名空间?
如何使用unshare()
,clone()
在 linux 中创建大量的网络命名空间?
c - 如何从单个流程实例创建多个网络命名空间
我正在使用以下 C 函数从单个流程实例创建多个网络命名空间:
在我的进程创建了所有命名空间并将一个tap接口添加到任何一个网络命名空间(使用ip link set tap1 netns ns1
命令)之后,我实际上在所有命名空间中都看到了这个接口(大概,这实际上是一个使用不同名称的单个命名空间)。
但是,如果我使用多个进程创建多个命名空间,那么一切正常。
这里有什么问题?我是否必须将任何其他标志传递unshare()
给 才能从单个流程实例中工作?是否存在单个流程实例不能创建多个网络命名空间的限制?还是调用有问题mount()
,因为/proc/self/ns/net
实际挂载了多次?
更新:
似乎该unshare()
函数正确地创建了多个网络命名空间,但/var/run/netns/
实际上所有挂载点都引用了该目录中挂载的第一个网络命名空间。
Update2: 似乎最好的方法是 fork() 另一个进程并从那里执行 create_namespace() 函数。无论如何,我很高兴听到一个不涉及 fork() 调用的更好的解决方案,或者至少得到一个确认,证明不可能从单个进程创建和管理多个网络命名空间。
Update3: 我可以使用以下代码使用 unshare() 创建多个命名空间:
但是在进程终止并且我执行之后ip netns exec a ifconfig -a
,ip netns exec b ifconfig -a
似乎两个命令都突然在命名空间a中执行了。所以实际的问题是存储对命名空间的引用(或以正确的方式调用 mount()。但我不确定这是否可能)。
linux - CLONE_NEWNS 和挂载传播
我目前正在寻找一些示例来理解 linux 中的 CLONE_NEWNS,所以我做了以下实验:
在 shell1 中:
如在 shell2 中:
我期望 shell2 中的输出应该是空的,因为 CLONE_NEWNS 将创建一个新的挂载命名空间,如文档所述。
首先,我认为孩子的命名空间挂载会传播到父母的,所以我在父母身上挂载,孩子也看到了挂载!
然后,我从同一个父级创建两个单独的子命名空间,安装在一个子级中也会影响另一个子级。
我很困惑。
附言。在我在 shell1 中的第一个实验中:
在 shell2 中:
显然,它们位于不同的挂载命名空间中。
c - 使用内核命名空间 PID 从全局范围杀死进程
今天在使用Linux 内核命名空间时遇到了一些困难,特别是将唯一 PID 命名空间内的 PID 与全局 PID 命名空间内的那些相关联
我需要能够执行以下操作之一:
a)使用命名空间分配的 PID 从全局范围中杀死一个进程
或者
b)将命名空间特定的 PID 转换为全局 PID,这样我就可以从全局范围内终止 PID
或者
c)启用 PID 命名空间内的进程向我报告其全局 PID,这样我就可以从全局范围内终止 PID
这里有一些关于在命名空间场景中包含 PID 信息的进程结构的讨论。我不确定如何/是否可以从用户应用程序访问这些结构,或者我是否需要通过内核 hack 添加支持。
为什么? 我有一个当前使用网络命名空间的应用程序。我正在添加对 PID 命名空间的支持。以下是它目前的工作方式:
在引入 PID 命名空间之前: 主应用程序当前在另一个网络命名空间中启动了一个 bash 控制台。然后它使用该 bash 控制台启动程序并让这些程序报告它们当前的 PID。当主应用程序想要终止该网络命名空间中的子进程时,它只是告诉操作系统终止报告的 PID。
使用 PID 命名空间(损坏状态): 主应用程序当前在另一个网络和 PID 命名空间中启动 bash 控制台。然后它使用该 bash 控制台启动程序并让这些程序报告它们当前的 PID。但是,返回的当前 PID 在全局 PID 命名空间中无效(可能是 10,当全局命名空间中的 PID 为 56000 时)。结果,主应用程序无法杀死该网络 + PID 命名空间中的子进程
一如既往,感谢任何指导
linux-kernel - KVM 和 LXC 的区别
KVM 和 Linux 容器 (LXC) 有什么区别?在我看来,如果我们同时使用内核的“命名空间”和“控制组”功能,LXC 也是在同一个内核中创建多个 VM 的一种方式。
python - 绑定到多个网络命名空间上的接口
我有一个要求,我的应用程序应该绑定到多个接口并注入数据包。问题是其中一些接口不需要在根网络命名空间上。我想知道这是否可能。如果是,请上传一个片段。首选语言是python、c。或者至少指出我正确的方向。
linux - Linux - 了解挂载命名空间和克隆 CLONE_NEWNS 标志
我正在阅读mount & clone手册页。我想澄清 CLONE_NEWNS 如何影响子进程的文件系统视图。
(文件层次结构)
让我们将此树视为目录层次结构。让我们说 5 和 6 是父进程中的挂载点。我在另一个问题中阐明了挂载点。
所以我的理解是:5 和 6 是挂载点意味着该mount
命令以前用于在 5 和 6 处“挂载”文件系统(目录层次结构)(这意味着 5 和 6 下也必须有目录树)。
从mount
手册页:
从clone
手册页:
还 :
现在,如果我使用clone()
withCLONE_NEWNS
创建一个子进程,这是否意味着子进程将获得树(5 和 6)中安装点的精确副本,并且仍然能够访问原始树的其余部分?这是否也意味着子进程可以随意挂载 5 和 6,而不会影响在其父进程的挂载命名空间中挂载在 5 或 6 的内容。
如果是,这是否也意味着子进程可以挂载/卸载不同于 5 或 6 的目录并影响父进程可见的内容?
谢谢。
linux - 在非特权命名空间沙箱中挂载 proc
我正在尝试使用 Linux 命名空间创建一个沙盒环境。我在https://github.com/swetland/mkbox找到了一个简洁的示例,大致可以满足我的要求,但我希望在沙箱中出现一个可信的 /proc。我怎样才能做到这一点?
我尝试将proc FS绑定安装在“proc”上,但是EINVAL失败了。当我尝试正常挂载“proc”时,它会产生 EPERM。
想法?
linux - Linux 内核现在完全支持命名空间吗?
我正在阅读 2008 年出版的《专业 Linux 内核架构》一书。在第 49 页,谈论进程管理和调度,
命名空间目前在标准内核中仍被标记为实验性的,使内核的所有部分完全感知命名空间的开发仍在进行中。
我的问题是:标准内核中有命名空间吗?