为什么在util-linux中没有nsenter?


20

我经常nsenter在Arch Linux下的主系统中出于我的目的使用命令。现在,我必须在Ubuntu上进行工作,以在其上测试我的应用程序,但是nsenterutil-linux中没有。也许是一个单独的包裹?

UPD。好的,我检查util-linux了Ubuntu 中的版本是否仍远低于2.23。如何在Ubuntu上安装新版本的软件包而不会出现任何问题?


如果您碰巧希望它与Docker一起使用,则只需遵循此处的指南github.com/jpetazzo/nsenter
Pithikos 2014年

@Sylvain我没有看到添加14.04作为标记的意义​​,因为删除了13.xy。
muru

@muru,实际上nsenter是在14.10可用的(见包列表utils-linux)。因此,该问题的标记为14.04。
Sylvain Pineau,2015年

也许是@SylvainPineau,但是将标签添加到一个半岁的问题是否有意义?为什么不12.04那么呢?
muru

@muru我没有检查是否按照我的原始答案中的建议编译2.24在12.04上有效。因此,我更倾向于将此问题的范围限制为14.04。保持最新状态的观点显然是,从14.10开始不需要此解决方案
Sylvain Pineau

Answers:


19

更新

从14.10开始,会util-linux提供nsenter命令。以下解决方案已通过14.04测试。


正如您所说,Debian / Ubuntu版本已经很老了,即使在Trusty中也是如此。

有一个已打开的错误,到目前为止,没有任何进展。

您可以尝试从源代码构建它:

wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.1.tar.gz -qO - | tar -xz -C ~/Downloads

确保安装以下构建依赖项:

sudo apt-get install libncurses5-dev libslang2-dev gettext zlib1g-dev libselinux1-dev debhelper lsb-release pkg-config po-debconf autoconf automake autopoint libtool

只需在源目录(~/Downloads/util-linux-2.24.1)中运行:

./autogen.sh

./configure && make

重要

难道不是 sudo make install这个软件包在Ubuntu 14.04 LTS,直到它正式投入使用,因为它绝对需要的可用版本libmount,打破你的启动。(如果这样做,请尽可能重新安装mount软件包,然后再重新引导计算机。)

鸣谢:Trevor Alexander评论


最终,您将获得:

sylvain@sylvain-ThinkPad-T430s:~/Downloads/util-linux-2.24.1$ ./nsenter -V
nsenter from util-linux 2.24.1

注意:由于nsenter在ubuntu util-linux版本中不可用,因此您可以仅在/ usr / bin(或sbin)中安装此文件:

sudo cp ./nsenter /usr/bin

我尝试了您的解决方案,但./configure由于出现了错误消息,因为没有这样的文件。我正在Could not locate the pkg-config autoconf macros.尝试使用configure.ac文件。
zerospiel 2014年

1
请尝试使用压缩包。请确保您有两个pkg-configautoconf安装过于
西尔万·皮诺

2
重要信息:sudo make install在正式可用之前,请不要在Ubuntu 14.04 LTS上使用此软件包,因为它肯定需要的不可用版本,无法libmount启动。(如果可以,请重新安装mount软件包,然后再重新引导计算机。)
璀璨之星

1
将nsenter放入/ usr / bin并不会破坏任何东西,但通常的做法是将其保留从apt软件包安装的内容,并在/ usr / local / bin中安装其他内容。它主要是使您更容易查看已设置的自定义内容。
mc0e 2015年

1
utils-linux错别字util-linux吗?(没有足够的信心来编辑答案,但据我所知是。)
DreadPirateShawn

11

如果使用docker,则可以将nsenter安装在容器中,然后将nsenter命令复制到主机。

从我的主旨中:https : //gist.github.com/mbn18/0d6ff5cb217c36419661

# Ubuntu 14.04 don't have nsenter - the straight forward way required me to install build tools and etc.
# I preferred to keep the system clean and install nsenter in a container and then copy the command to the host
# Note - its also possible to run nsenter from a container (didn't tried) https://github.com/jpetazzo/nsenter

# start a container
docker run --name nsenter -it ubuntu:14.04 bash

## in the docker
apt-get update
apt-get install git build-essential libncurses5-dev libslang2-dev gettext zlib1g-dev libselinux1-dev debhelper lsb-release pkg-config po-debconf autoconf automake autopoint libtool

git clone git://git.kernel.org/pub/scm/utils/util-linux/util-linux.git util-linux
cd util-linux/

./autogen.sh
./configure --without-python --disable-all-programs --enable-nsenter
make

## from different shell - on the host
docker cp nsenter:/util-linux/nsenter /usr/local/bin/
docker cp nsenter:/util-linux/bash-completion/nsenter /etc/bash_completion.d/nsenter

“保持主机系统干净”的意思是消除了上面命令build-essential中的安装需求和其他库apt-get,对吗?如果是的话,那真的很有趣,不知道docker cp。这对于将各种事物构建为二进制文件而不污染主机非常有用。
Aditya MP

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.