Dlaczego w util-linux nie ma żadnego węzła pośredniczącego?

20

Często używam nsenterpolecenia do swoich celów w głównym systemie pod Arch Linux. Teraz muszę pracować na Ubuntu, aby przetestować na nim moje aplikacje, ale nie ma nsenterw nim ut-linux. Może to osobna paczka?

UPD. Ok, sprawdziłem, że wersja util-linuxUbuntu jest wciąż znacznie starsza niż 2.23. Jak mogę zainstalować nową wersję pakietu bez problemów po Ubuntu?

zerospiel
źródło
Jeśli chcesz go używać z Dockerem, po prostu postępuj zgodnie z instrukcjami tutaj github.com/jpetazzo/nsenter
Pithikos
@Sylvain Nie widzę sensu dodawania 14.04 jako tagu, ponieważ 13.xy został usunięty.
muru
@muru, faktycznie nsenterjest dostępny w 14.10 (Zobacz listę pakietów dla utils-linux). Stąd tag 14.04 do tego pytania.
Sylvain Pineau
@SylvainPineau może, ale czy warto dodać tag do pytania, które ma pół roku? Dlaczego więc nie 12.04?
muru
@muru Nie sprawdziłem, czy kompilacja 2.24, jak sugeruje moja pierwotna odpowiedź, działa 12.04. Wolałem więc ograniczyć zakres tego pytania do 14.04. Celem aktualizacji jest oczywiście to, że to rozwiązanie nie jest potrzebne od 14.10
Sylvain Pineau

Odpowiedzi:

19

Aktualizacja :

Począwszy od 14.10, util-linuxudostępnia nsenterpolecenie. Poniższe rozwiązanie zostało przetestowane z 14.04.


Wersja Debian / Ubuntu jest, jak już mówiłeś, dość stara, nawet w Trusty.

Jest otwarty błąd i jak dotąd niestety nie ma postępu.

Możesz spróbować zbudować go ze źródła:

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

Zainstaluj następujące zależności kompilacji:

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

I po prostu uruchom w katalogu źródłowym ( ~/Downloads/util-linux-2.24.1):

./autogen.sh

./configure && make

WAŻNY

NIE rób sudo make installtego pakietu na Ubuntu 14.04 LTS, dopóki oficjalnie nie będzie gotowy do użycia, ponieważ zdecydowanie wymaga niedostępnej wersji libmount, która zepsuje bootowanie. (Jeśli to zrobisz, zainstaluj ponownie mountpakiet przed ponownym uruchomieniem komputera, jeśli możesz.)

Kredyty: Trevor Alexander za komentarz .


Wreszcie otrzymasz:

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

Uwaga : ponieważ nsenter nie jest dostępny w wersji util-linux Ubuntu, możesz zainstalować tylko ten plik w / usr / bin (lub sbin):

sudo cp ./nsenter /usr/bin
Sylvain Pineau
źródło
Wypróbowałem twoje rozwiązanie, ale ./configurepojawia się błąd , ponieważ nie ma takiego pliku. Dostaję, Could not locate the pkg-config autoconf macros.jeśli próbuję użyć configure.acpliku.
zerospiel
1
Zamiast tego spróbuj użyć tarballa . Upewnij się, że zarówno pkg-configi autoconfzainstalowane zbyt
Sylvain Pineau
2
WAŻNE: NIE należy sudo make installtego pakietu na Ubuntu 14.04 LTS, dopóki nie będzie oficjalnie gotowy do użycia, ponieważ zdecydowanie wymaga niedostępnej wersji libmount, zrywając boot. (Jeśli to zrobisz, zainstaluj ponownie mountpakiet przed ponownym uruchomieniem komputera, jeśli możesz.)
bright-star
1
Nie da się niczego zepsuć, aby umieścić nsenter w / usr / bin, ale zwykłą praktyką jest pozostawienie tego dla rzeczy instalowanych z apt apt i instalowanie innych rzeczy w / usr / local / bin. W większości ułatwia to sprawdzenie, jakie niestandardowe elementy skonfigurowałeś.
mc0e,
1
Czy utils-linuxliterówka util-linux? (Nie jestem wystarczająco pewny siebie, aby edytować odpowiedź, ale o ile wiem, tak jest).
DreadPirateShawn 11.04.16
11

Jeśli używasz dokera, możesz zainstalować nsenter w kontenerze, a następnie skopiować polecenie nsenter na host.

Z mojej treści: 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
źródło
Przez „utrzymanie systemu hosta w czystości” masz na myśli uniknięcie konieczności instalacji build-essentiali innych bibliotek w apt-getpowyższym poleceniu, prawda? To jest naprawdę bardzo interesujące, jeśli tak, nie wiedziałem docker cp. Jest to świetne do budowania różnego rodzaju rzeczy jako plików binarnych bez zanieczyszczania hosta.
Aditya,
0

Począwszy od Docker 1.3, możesz użyć Docker exec, aby wejść do kontenera Docker:

docker exec -it CONTAINER_NAME /bin/bash

jak wspomniano w repozytorium dla https://github.com/jpetazzo/nsenter

Scott Stensland
źródło