我nsenter
在 Arch Linux 下的主系统中经常使用命令来达到我的目的。现在我必须在 Ubuntu 上工作以测试我的应用程序,但 util-linux 中没有nsenter
。也许它是一个单独的包?
UPD。好的,我检查了一下,Ubuntu 中的版本util-linux
仍然比 2.23 旧得多。我怎样才能在 Ubuntu 上安装新版本的软件包而不会出现任何问题?
答案1
更新:
自 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
在重新启动计算机之前重新安装该软件包,如果可以的话。)
最后你会得到:
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
答案2
如果您使用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
答案3
从 Docker 1.3 开始,你可以使用 Docker exec 进入 Docker 容器:
docker exec -it CONTAINER_NAME /bin/bash
正如 repo 中提到的https://github.com/jpetazzo/nsenter