Mengapa tidak ada nsenter di util-linux?

20

Saya sering menggunakan nsenterperintah untuk tujuan saya di sistem utama saya di bawah Arch Linux. Sekarang saya harus bekerja di Ubuntu untuk menguji aplikasi saya di dalamnya, tetapi tidak ada nsenterdi util-linux. Mungkin ini paket terpisah?

UPD. Ok, saya memeriksa bahwa versi util-linuxdi Ubuntu masih jauh lebih tua dari 2.23. Bagaimana saya bisa menginstal versi baru paket tanpa masalah di Ubuntu?

zerospiel
sumber
Jika Anda menginginkannya untuk menggunakannya dengan Docker maka cukup ikuti panduan di sini github.com/jpetazzo/nsenter
Pithikos
@ Silvain Saya tidak melihat titik menambahkan 14,04 sebagai tag mengingat 13.xy telah dihapus.
muru
@muru, sebenarnya nsentertersedia di 14.10 (Lihat daftar paket untuk utils-linux). Maka tag 14,04 untuk pertanyaan ini.
Sylvain Pineau
@SylvainPineau mungkin, tetapi apakah masuk akal menambahkan tag ke pertanyaan yang berusia setengah tahun? Kenapa tidak 12,04?
muru
@muru Saya tidak memeriksa apakah kompilasi 2.24 seperti yang disarankan dalam jawaban asli saya berfungsi pada 12.04. Jadi saya lebih suka membatasi ruang lingkup Q / A ini menjadi 14,04. Maksud dari menjaga agar selalu terbarui adalah jelas bahwa solusi ini tidak diperlukan pada jam 14.10
Sylvain Pineau

Jawaban:

19

Perbarui :

Pada 14.10, the util-linuxmenyediakan nsenterperintah. Solusi di bawah ini telah diuji dengan 14,04.


Versi Debian / Ubuntu seperti yang Anda katakan cukup lama sekarang, bahkan di Trusty.

Ada bug yang dibuka dan sayangnya sejauh ini tidak ada kemajuan.

Anda dapat mencoba membuatnya dari sumber:

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

Pastikan untuk menginstal dependensi build berikut:

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

Dan jalankan di direktori sumber ( ~/Downloads/util-linux-2.24.1):

./autogen.sh

./configure && make

PENTING

Apakah TIDAK sudo make install paket ini pada Ubuntu 14.04 LTS sampai secara resmi siap untuk digunakan, karena pasti menuntut versi tersedia dari libmount, melanggar boot. (Jika Anda melakukan ini, instal ulang mountpaket sebelum me-reboot mesin Anda, jika Anda bisa.)

Penghargaan: Trevor Alexander untuk komentarnya .


Akhirnya Anda akan mendapatkan:

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

Catatan : karena nsenter tidak tersedia di versi ubuntu util-linux, Anda dapat menginstal file ini saja di / usr / bin (atau sbin):

sudo cp ./nsenter /usr/bin
Sylvain Pineau
sumber
Saya mencoba solusi Anda, tetapi saya mendapatkan kesalahan sementara ./configure, karena tidak ada file seperti itu. Saya mengerti Could not locate the pkg-config autoconf macros.jika mencoba menggunakan configure.acfile.
zerospiel
1
Coba dengan tarball saja. Pastikan Anda memiliki kedua pkg-configdan autoconfdiinstal juga
Sylvain Pineau
2
PENTING: JANGAN sudo make installpaket ini di Ubuntu 14.04 LTS sampai secara resmi siap digunakan, karena pasti menuntut versi yang tidak tersedia libmount, menghancurkan boot Anda. (Jika Anda melakukan ini, instal ulang mountpaket sebelum me-reboot mesin Anda, jika Anda bisa.)
terang
1
Tidak akan merusak apa pun untuk meletakkan nsenter di / usr / bin, tetapi praktik yang biasa adalah meninggalkan hal-hal yang diinstal dari paket apt, dan menginstal hal-hal lain di / usr / local / bin. Sebagian besar hanya membuatnya lebih mudah untuk melihat hal-hal khusus apa yang telah Anda atur.
mc0e
1
Apakah utils-linuxsalah ketik util-linux? (Tidak cukup percaya diri untuk mengedit jawaban, tetapi sejauh yang saya tahu, itu.)
DreadPirateShawn
11

Jika Anda menggunakan buruh pelabuhan, Anda dapat menginstal nsenter dalam sebuah wadah dan kemudian menyalin perintah nsenter ke host.

Dari inti saya: 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
sumber
Dengan "menjaga sistem host bersih" yang Anda maksud menghindari kebutuhan untuk menginstal build-essentialdan perpustakaan lain dalam apt-getperintah di atas, kan? Itu sebenarnya sangat menarik jika ya, tidak tahu docker cp. Ini bagus untuk membangun segala hal sebagai binari tanpa mencemari tuan rumah.
Aditya MP
0

Mulai dari Docker 1.3 Anda dapat menggunakan Docker exec untuk memasukkan wadah Docker:

docker exec -it CONTAINER_NAME /bin/bash

seperti disebutkan dalam repo untuk https://github.com/jpetazzo/nsenter

Scott Stensland
sumber