กำลังติดตั้งแพคเกจลงในไดเรกทอรีท้องถิ่นหรือไม่


38

ฉันต้องการติดตั้งซอฟต์แวร์แพคเกจคล้ายกับapt-get install <foo>แต่:

  1. โดยไม่ต้องsudoและ
  2. เข้าสู่สารบบท้องถิ่น

จุดประสงค์ของแบบฝึกหัดนี้คือเพื่อแยกบิวด์อิสระในเซิร์ฟเวอร์รวมต่อเนื่องของฉัน

ฉันไม่รังเกียจที่จะรวบรวมจากแหล่งที่มาถ้านั่นคือสิ่งที่ต้องใช้ แต่เห็นได้ชัดว่าฉันต้องการแนวทางที่ง่ายที่สุดที่เป็นไปได้ ฉันพยายามapt-get source --compile <foo>ตามที่กล่าวถึงที่นี่แต่ฉันไม่สามารถทำงานกับแพ็คเกจเช่น autoconf ได้ ฉันได้รับข้อผิดพลาดต่อไปนี้:

dpkg-checkbuilddeps: Unmet build dependencies: help2man

ฉันได้รับ help2man รวบรวมในไดเรกทอรีท้องถิ่น แต่ฉันไม่ทราบวิธีการแจ้ง - รับที่ ความคิดใด ๆ

UPDATE : ฉันได้พบคำตอบว่าเกือบทำงานที่https://askubuntu.com/a/350/23678 ปัญหาchrootคือมันต้องใช้ sudo ปัญหาapt-get sourceคือฉันไม่รู้วิธีแก้ไขการพึ่งพา ฉันต้องบอกว่าchrootดูน่าสนใจมาก มีคำสั่งเทียบเท่าที่ไม่ต้องการ sudo หรือไม่


ฉันขอแนะนำว่าเป็นคำถามที่ซ้ำกัน: [ askubuntu.com/questions/147654/… [1]: askubuntu.com/questions/147654/…

7
@ Kamil ก็ไม่ได้ ฉันไม่พยายามติดตั้งหากไม่มีการเข้าถึงเครือข่าย ฉันกำลังพยายามติดตั้งโดยไม่sudoใส่ลงในไดเรกทอรีที่ไม่ใช่ระบบ
Gili

4
Guys, โปรดอย่า downvote คำถามของฉันโดยไม่ต้องอธิบายว่าทำไม ขอขอบคุณ.
Gili

หากคุณไม่ได้มีรากในระบบของคุณจะไม่สามารถที่จะแก้ปัญหาการอ้างอิงได้อย่างง่ายดาย บางครั้งมันเป็นไปได้แม้ว่า; คุณจะต้องเริ่มติดตั้งซอฟต์แวร์ในบ้านของคุณเริ่มต้นด้วยการพึ่งพาที่ต่ำที่สุดและแก้ไข LD_PATH ของคุณเพื่อให้โปรแกรมสามารถค้นหาไลบรารีของพวกเขาได้ อย่างไรก็ตามคุณจะล้มเหลวหากแพ็กเกจใด ๆ จำเป็นต้องรูท (หรือ suid) เพื่อให้ทำงานได้
มกราคม

@ มกราคมฉันพยายามรวบรวมโครงการซอฟต์แวร์ในระบบสร้างอัตโนมัติ เท่าที่ฉันรู้ไม่มีการพึ่งพา (จำเป็นต้องรวบรวม) ต้องการราก
Gili

คำตอบ:


20

โดยทั่วไปไม่สามารถทำได้เพราะคุณจะยุ่งกับระบบการพึ่งพา apt

มีสองวิธีแก้ไข:

  1. ติดตั้งแพ็กเกจซอร์สเปลี่ยนเป็นไดเร็กทอรีซอร์สกำหนดค่าและติดตั้งแพ็กเกจโดยไม่คำนึงถึงระบบแพ็กเกจด้วยตนเองเป็นไดเร็กทอรีที่คุณเลือก

    apt-get source <package>
    

    สิ่งนี้ไม่จำเป็นต้องรูทดาวน์โหลดซอร์สแพ็กเกจคลายในไดเร็กทอรีภายในไดเร็กทอรีปัจจุบัน จากนั้นคุณสามารถเปลี่ยนเป็นไดเรกทอรีนั้นทำการแก้ไขแหล่งที่มากำหนดค่าการติดตั้งไปยังเป้าหมายอื่นเป็นต้น

    การกำหนดค่าไดเรกทอรีการติดตั้งที่โปรแกรมควรไปนั้นขึ้นอยู่กับโปรแกรมนั้น ๆ หลายโปรแกรมใช้./configure --prefix localdirเพื่อกำหนดเป้าหมายการติดตั้งไปยัง localdir แต่นี่ไม่ใช่กรณีที่เกิดขึ้นเสมอไป

  2. สร้างสภาพแวดล้อม chroot ที่คุณจะติดตั้งแพ็คเกจ:

    debootstrap precise myfancyinstall
    

    ตอนนี้คุณได้สร้างการติดตั้งจำลองในไดเรกทอรี myfancyinstall /

    chroot myfancyinstall
    

    คุณสามารถใช้ apt-get install ภายใน chroot Cage เพื่อติดตั้งทุกอย่างที่คุณต้องการ


สิ่งนี้ดูมีแนวโน้ม ใช้apt-get sourceโดยไม่ได้--compileดูเหมือนว่าจะปราบปรามคำเตือนเกี่ยวกับการอ้างอิง unmet (ที่ช่วยให้ผมแก้ไขปัญหาตัวเอง)
Gili

มีวิธีรับแพ็คเกจที่ไม่มีซอร์สเช่นนี้ด้วยหรือไม่?
soandos

โซลูชัน (2) จะทำงานโดยไม่คำนึงถึง ไม่เช่นนั้นคุณเอง: อาจจะมีวิธีการติดตั้งแพ็คเกจอื่น หรือดาวน์โหลดไฟล์แพคเกจ deb และแกะด้วย ar vx mypackage.debAR: จากนั้นวิเคราะห์เนื้อหาของแพ็คเกจและค้นหาวิธีการติดตั้งด้วยตนเอง
มกราคม

14

ใช้ bash shell และรับไฟล์ "package.deb" (สมมติว่าชื่อ pack คือ "package") คุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อบรรลุสิ่งที่คุณต้องการ - ติดตั้งแพคเกจเพื่อให้โฮมไดเร็กตอรี่ของคุณเหมือนกัน "/ "จะได้รับการจัดการในการติดตั้งปกติ

นี่คือคำสั่ง:

apt-get download package; dpkg -i --force-not-root --root=$HOME package.deb

คุณอาจพบข้อผิดพลาดบางอย่างเช่น $ HOME / var / lib / dpkg / lock หายไปดังนั้นเพียงแค่สร้างไฟล์ที่หายไปทั้งหมดที่คุณจะได้รับจากข้อผิดพลาดจากนั้นการติดตั้งจะทำงานได้โดยไม่ต้อง sudo

โปรดสังเกตว่าหาก "apt-get download" ไม่ทำงานคุณสามารถลอง "apt download" หรือ "apitutde download package"

หากวิธีการใดไม่ทำงานคุณสามารถดาวน์โหลดแพ็คเกจด้วยตนเองได้จากhttp://packages.ubuntu.com/

อีกวิธีหนึ่งก็คือการเรียกใช้คำสั่ง chroot ด้วยพารามิเตอร์ $ HOME จากนั้นทำการติดตั้งแบบเดียวกับข้างบนโดยไม่มี --root = $ HOME คำสั่งนั้นจะนำคุณเข้าสู่เชลล์โดยที่ "/" เป็น $ HOME ปัจจุบันของคุณ เพื่อกลับสู่โหมดปกติอย่าลืมที่จะ "ออก"

โชคดี.


หลังจากสร้างไฟล์ที่ขาดหายไป dpkg บ่นแล้วมันเพิ่งเริ่มทำการแยกไฟล์
Matt Chambers

0

หากคุณอยู่ในเว็บโฮสต์ที่ใช้ร่วมกันซึ่งมีsshการเข้าถึง แต่apt-getไม่มีรูท ฯลฯ หรือระบบที่ถูก จำกัด อย่างเดียวกันนี้อาจทำงานให้คุณได้ มันใช้งานได้สำหรับฉันในระบบที่uname -aส่งคืนสิ่งที่ต้องการSMP Debian 4.9.65-3+deb9u2~bpo8+1 (2017-01-05) x86_64 GNU/Linux

# examples tried on a shared hoster with ssh access but no apt-get no root etc.
# http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb
# https://github.com/dvorka/hstr/releases/download/1.25/hstr_1.25-1_amd64.deb

debURL="http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb"
# get the filename only, remove all till last slash "/"
# see http://wiki.bash-hackers.org/syntax/pe#substring_removal
debFile=${debURL##*/}
# change to your desired directory for installation/unpacking; here: $HOME
cd $HOME
# get the .deb file (no dependencies checked or resolved here)
curl -OL $debURL 
# unpack only the data part from the .deb file
# see https://en.wikipedia.org/wiki/Deb_%28file_format%29
ar p $debFile data.tar.xz | tar xJv --strip-components=2 -f - 
rm -v $debFile # clean up
echo "Done unpacking $debFile into $(pwd)"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.