Почему в util-linux нет nsenter?

20

Я часто использую nsenterкоманду для своих целей в моей основной системе под Arch Linux. Теперь мне нужно поработать над Ubuntu, чтобы протестировать свои приложения, но nsenterв util-linux этого нет. Может быть, это отдельный пакет?

UPD. Хорошо, я проверил, что версия util-linuxв Ubuntu все еще намного старше, чем 2.23. Как я могу без проблем установить новую версию пакета в Ubuntu?

zerospiel
источник
Если вам случится хотите его использовать его с Докерами затем просто следовать руководству здесь github.com/jpetazzo/nsenter
Pithikos
@ Silvain Я не вижу смысла добавлять 14.04 в качестве тега, учитывая, что 13.xy был удален.
Муру
@muru, на самом деле nsenterдоступен в 14.10 (см. список пакетов для utils-linux). Отсюда тег 14.04 к этому вопросу.
Сильвен Пино,
@SylvainPineau, может быть, но имеет ли смысл добавлять тег к вопросу полугодового возраста? Почему не 12.04 тогда?
Муру
@muru Я не проверял, работает ли компиляция 2.24, как предложено в моем первоначальном ответе, 12.04. Поэтому я предпочел ограничить сферу применения этого Q / A до 14.04. Смысл в том, чтобы поддерживать его в актуальном состоянии, очевидно, что это решение не требуется с 14.10
Сильвен Пино,

Ответы:

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пакет перед перезагрузкой компьютера, если можете.)

Кредиты: Тревор Александр за его комментарий .


Наконец вы получите:

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
1
Попробуйте вместо этого использовать tarball . Убедитесь , что у вас есть как pkg-configи autoconfустановлено слишком
Sylvain Пины
2
ВАЖНО: НЕ делайте sudo make installэтот пакет на Ubuntu 14.04 LTS, пока он не будет официально готов к использованию, так как он определенно требует недоступной версии libmount, нарушающей вашу загрузку. (Если вы сделаете это, переустановите mountпакет, прежде чем перезагрузить компьютер, если можете.)
bright-star
1
Ничего не сломается, чтобы положить nsenter в / usr / bin, но обычная практика - оставить это для вещей, установленных из пакетов apt, и установить другие вещи в / usr / local / bin. В основном это просто позволяет увидеть, какие пользовательские настройки вы создали.
mc0e
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
michaelbn
источник
Под «поддержанием чистоты хост-системы» вы подразумеваете избавление от необходимости установки build-essentialи других библиотек в приведенной apt-getвыше команде, верно? Это на самом деле очень интересно, если да, не знал docker cp. Это отлично подходит для создания всевозможных вещей в виде двоичных файлов без загрязнения хоста.
Адитья депутат
0

Начиная с Docker 1.3 вы можете использовать Docker exec для входа в контейнер Docker:

docker exec -it CONTAINER_NAME /bin/bash

как упоминалось в репо для https://github.com/jpetazzo/nsenter

Скотт Стенсленд
источник