เหตุใดจึงไม่มี nsenter ใน util-linux


20

ฉันมักใช้nsenterคำสั่งเพื่อจุดประสงค์ในระบบหลักของฉันภายใต้ Arch Linux ตอนนี้ฉันต้องทำงานกับ Ubuntu เพื่อทดสอบแอพของฉันบนมัน แต่ไม่มีnsenterใน util-linux อาจจะเป็นแพ็คเกจแยกต่างหาก

UPD ตกลงฉันตรวจสอบว่าเวอร์ชันของutil-linuxUbuntu ยังเก่ากว่า 2.23 อยู่มาก ฉันจะติดตั้งแพคเกจเวอร์ชั่นใหม่โดยไม่มีปัญหาหลังจากใช้งาน Ubuntu ได้อย่างไร


หากคุณต้องการให้มันใช้กับ Docker ให้ทำตามคำแนะนำที่นี่github.com/jpetazzo/nsenter
Pithikos

@Sylvain ฉันไม่เห็นจุดเพิ่ม 14.04 เป็นแท็กที่ระบุว่า 13.xy ถูกลบออก
muru

@muru nsenterพร้อมใช้งานจริงใน 14.10 (ดูรายการแพคเกจสำหรับutils-linux) ดังนั้นแท็ก 14.04 สำหรับคำถามนี้
Sylvain Pineau

@SylvainPineau บางที แต่มันสมเหตุสมผลหรือไม่ที่จะเพิ่มแท็กให้กับคำถามที่มีอายุเพียงครึ่งปี? ทำไมไม่ลอง 12.04 ล่ะ?
muru

@muru ฉันไม่ได้ตรวจสอบว่าได้รวบรวม 2.24 ตามที่แนะนำในคำตอบดั้งเดิมของฉันแล้วหรือยัง ดังนั้นฉันต้องการ จำกัด ขอบเขตของ Q / A นี้เป็น 14.04 จุดที่ทำให้มันเป็นที่ชัดเจนว่าไม่จำเป็นต้องแก้ปัญหา ณ วันที่ 14.10
Sylvain Pineau

คำตอบ:


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 Pineau

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

หากคุณใช้นักเทียบท่าคุณสามารถติดตั้ง 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

ด้วยการ "ทำให้ระบบโฮสต์สะอาด" คุณหมายถึงการยกเลิกความต้องการในการติดตั้งbuild-essentialและไลบรารีอื่น ๆ ในapt-getคำสั่งด้านบนใช่ไหม docker cpที่จริงที่น่าสนใจมากถ้าใช่ไม่ทราบของ นี่เป็นสิ่งที่ยอดเยี่ยมสำหรับการสร้างสิ่งต่าง ๆ ในฐานะไบนารีโดยไม่ทำให้โฮสต์สกปรก
Aditya MP

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.