Pourquoi il n'y a pas de nsenter dans util-linux?

20

J'utilise fréquemment la nsentercommande à mes fins dans mon système principal sous Arch Linux. Maintenant, je dois travailler sur Ubuntu pour tester mes applications dessus, mais il n'y en a pas nsenterdans util-linux. C'est peut-être un package séparé?

UPD. Ok, j'ai vérifié que la version d' util-linuxUbuntu est encore beaucoup plus ancienne que la 2.23. Comment puis-je installer une nouvelle version du paquet sans aucun problème après sur Ubuntu?

zerospiel
la source
Si vous le souhaitez pour l'utiliser avec Docker, suivez simplement le guide ici github.com/jpetazzo/nsenter
Pithikos
@Sylvain Je ne vois pas l'intérêt d'ajouter 14.04 comme balise étant donné que 13.xy a été supprimé.
muru
@muru, nsenterest en fait disponible en 14.10 (Voir la liste des paquets pour utils-linux). D'où la balise 14.04 de cette question.
Sylvain Pineau
@SylvainPineau peut-être, mais est-il judicieux d'ajouter une balise à une question vieille de six ans? Pourquoi pas 12.04 alors?
muru
@muru Je n'ai pas vérifié si la compilation de 2.24 comme suggéré dans ma réponse d'origine fonctionne le 12.04. J'ai donc préféré limiter la portée de ce Q / A à 14.04. Le point de mise à jour est évidemment que cette solution n'est plus nécessaire à partir du 14.10
Sylvain Pineau

Réponses:

19

Mise à jour :

Depuis 14.10, le util-linuxfournit la nsentercommande. La solution ci-dessous a été testée avec 14.04.


La version Debian / Ubuntu est comme vous l'avez dit assez ancienne maintenant, même dans Trusty.

Il y a un bug ouvert et jusqu'à présent aucun progrès malheureusement.

Vous pouvez essayer de le construire à partir de la source:

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

Assurez-vous d'installer les dépendances de build suivantes:

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

Et lancez simplement dans le répertoire source ( ~/Downloads/util-linux-2.24.1):

./autogen.sh

./configure && make

IMPORTANT

Ne pas sudo make install ce paquet sur Ubuntu 14.04 LTS jusqu'à ce qu'il soit officiellement prêt à l' emploi, car il exige certainement une version unavailable libmount, casser votre botte. (Si vous procédez ainsi, réinstallez le mountpackage avant de redémarrer votre ordinateur, si vous le pouvez.)

Crédits: Trevor Alexander pour son commentaire .


Enfin, vous obtiendrez:

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

Remarque : comme nsenter n'est pas disponible dans la version ubuntu util-linux, vous pouvez installer uniquement ce fichier dans / usr / bin (ou sbin):

sudo cp ./nsenter /usr/bin
Sylvain Pineau
la source
J'ai essayé votre solution, mais j'obtiens une erreur pendant ./configurequ'il n'y a pas un tel fichier. Je reçois Could not locate the pkg-config autoconf macros.si j'essaie d'utiliser le configure.acfichier.
zerospiel
1
Essayez plutôt avec le tarball . Assurez-vous d'avoir les deux pkg-configet autoconfinstallés aussi
Sylvain Pineau
2
IMPORTANT: NE PAS sudo make installce paquet sur Ubuntu 14.04 LTS jusqu'à ce qu'il soit officiellement prêt à l'emploi, car il exige définitivement une version non disponible de libmount, cassant votre démarrage. (Si vous faites cela, réinstallez le mountpackage avant de redémarrer votre machine, si vous le pouvez.)
Bright-Star
1
Cela ne va rien casser pour mettre nsenter dans / usr / bin, mais la pratique habituelle est de laisser cela pour les trucs installés à partir des paquets apt, et d'installer d'autres trucs dans / usr / local / bin. Cela permet généralement de voir plus facilement les éléments personnalisés que vous avez configurés.
mc0e
1
Est utils-linuxune faute de frappe util-linux? (Pas assez confiant pour modifier la réponse, mais pour autant que je
sache
11

Si vous utilisez Docker, vous pouvez installer nsenter dans un conteneur, puis copier la commande nsenter sur l'hôte.

De mon essence: 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
la source
Par "garder le système hôte propre", vous entendez éviter la nécessité d'installer build-essentialet les autres bibliothèques dans la apt-getcommande ci-dessus, non? C'est en fait très intéressant si oui, je ne le savais pas docker cp. C'est idéal pour construire toutes sortes de choses en tant que binaires sans polluer l'hôte.
Aditya MP
0

À partir de Docker 1.3, vous pouvez utiliser Docker exec pour entrer dans un conteneur Docker:

docker exec -it CONTAINER_NAME /bin/bash

comme mentionné dans le dépôt pour https://github.com/jpetazzo/nsenter

Scott Stensland
la source