¿Por qué no hay nsenter en util-linux?

20

Con frecuencia uso el nsentercomando para mis propósitos en mi sistema principal en Arch Linux. Ahora tengo que trabajar en Ubuntu para probar mis aplicaciones, pero no hay nsenteren util-linux. Tal vez es un paquete separado?

UPD Ok, verifiqué que la versión de util-linuxUbuntu todavía es mucho más antigua que la 2.23. ¿Cómo puedo instalar una nueva versión del paquete sin problemas posteriores en Ubuntu?

zerospiel
fuente
Si lo desea para usarlo con Docker, simplemente siga la guía aquí github.com/jpetazzo/nsenter
Pithikos
@Sylvain No veo el punto de agregar 14.04 como una etiqueta dado que 13.xy fue eliminado.
muru
@muru, en realidad nsenterestá disponible en 14.10 (Ver la lista de paquetes para utils-linux). De ahí la etiqueta 14.04 a esta pregunta.
Sylvain Pineau
@SylvainPineau tal vez, pero ¿tiene sentido agregar etiquetas a una pregunta de medio año? ¿Por qué no 12.04 entonces?
muru
@muru No verifiqué si compilar 2.24 como se sugiere en mi respuesta original funciona en 12.04. Así que preferí restringir el alcance de este Q / A a 14.04. El punto de mantenerlo actualizado es obviamente que esta solución no es necesaria a partir de 14.10
Sylvain Pineau

Respuestas:

19

Actualización :

A partir de 14.10, el util-linuxproporciona el nsentercomando. La solución a continuación ha sido probada con 14.04.


La versión de Debian / Ubuntu es, como dijiste, bastante antigua ahora, incluso en Trusty.

Hay un error abierto y hasta ahora no hay progreso por desgracia.

Podrías intentar construirlo desde la fuente:

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

Asegúrese de instalar las siguientes dependencias de compilación:

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

Y simplemente ejecutar en el directorio de origen ( ~/Downloads/util-linux-2.24.1):

./autogen.sh

./configure && make

IMPORTANTE

NO haga sudo make installeste paquete en Ubuntu 14.04 LTS hasta que esté oficialmente listo para su uso, ya que definitivamente requiere una versión no disponible de libmount, rompiendo su arranque. (Si hace esto, reinstale el mountpaquete antes de reiniciar su máquina, si puede).

Créditos: Trevor Alexander por su comentario .


Finalmente obtendrás:

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

Nota : como nsenter no está disponible en la versión ubuntu util-linux, puede instalar solo este archivo en / usr / bin (o sbin):

sudo cp ./nsenter /usr/bin
Sylvain Pineau
fuente
Intenté su solución, pero recibí un error mientras ./configureno existe ese archivo. Estoy obteniendo Could not locate the pkg-config autoconf macros.si intento usar el configure.acarchivo.
zerospiel
1
Intenta con el tarball en su lugar. Asegúrate de tener ambos pkg-confige autoconfinstalados también
Sylvain Pineau
2
IMPORTANTE: NO haga sudo make installeste paquete en Ubuntu 14.04 LTS hasta que esté oficialmente listo para usar, ya que definitivamente exige una versión no disponible de libmount, rompiendo su arranque. (Si hace esto, reinstale el mountpaquete antes de reiniciar su máquina, si puede).
estrella brillante
1
No va a romper nada poner nsenter en / usr / bin, pero la práctica habitual es dejar eso para cosas instaladas desde paquetes apt e instalar otras cosas en / usr / local / bin. Principalmente hace que sea más fácil ver qué cosas personalizadas ha configurado.
mc0e
1
¿Es utils-linuxun error tipográfico de util-linux? (No tengo la confianza suficiente para editar la respuesta, pero por lo que puedo decir, lo es.)
DreadPirateShawn
11

Si usa Docker, puede instalar nsenter en un contenedor y luego copiar el comando nsenter al host.

Desde mi esencia: 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
michaelbn
fuente
Al "mantener limpio el sistema host", quiere decir obviar la necesidad de instalar build-essentialy las otras bibliotecas en el apt-getcomando anterior, ¿verdad? Eso es realmente muy interesante si sí, no lo sabía docker cp. Esto es ideal para construir todo tipo de cosas como archivos binarios sin contaminar al host.
Aditya MP
0

A partir de Docker 1.3, puede usar Docker exec para ingresar a un contenedor Docker:

docker exec -it CONTAINER_NAME /bin/bash

como se menciona en el repositorio para https://github.com/jpetazzo/nsenter

Scott Stensland
fuente