มีวิธีใดที่จะทำให้ APT ติดตั้งแพ็คเกจไปที่โฮมไดเร็กตอรี่ของฉัน?


42

มีวิธีใดที่จะทำให้APTติดตั้งแพ็คเกจไปที่โฮมไดเร็กตอรี่ของฉัน?

ฉันไม่ต้องการเปลี่ยนแปลงระบบให้กว้าง

อีกวิธีหนึ่งมีผู้จัดการแพคเกจลินุกซ์ไดเรกทอรีบ้าน?


ดูเพิ่มเติมผู้จัดการไม่ใช่รากแพคเกจ
imz - Ivan Zakharyaschev

คำตอบ:


17

Dpkg ไม่มีคุณสมบัติ - ย้ายที่ RPM มี ควรพิจารณาว่าแพ็คเกจ RPM จำนวนเท่าใดที่สนับสนุนคุณสมบัตินั้น โดยทั่วไปไม่สามารถทำได้

สิ่งที่คุณสามารถทำได้คือใช้ chroot หากคุณต้องการทดสอบบางอย่างก่อนที่จะติดตั้งแบบโกลบอลบนระบบ ในการทำเช่นนี้คุณต้องสามารถเข้าถึงรูทได้ สิ่งแรกที่ต้องทำคือการสร้าง chroot ขั้นพื้นฐาน:

# debootstrap lenny lenny-chroot

สิ่งนี้จะสร้าง Lenny chroot ภายในlenny-chrootไดเรกทอรี

ตอนนี้เราสามารถป้อน chroot:

# chroot lenny-chroot

ตอนนี้เราสามารถทำสิ่งที่เราต้องการและติดตั้งทุกอย่างโดยไม่ทำให้ส่วนที่เหลือของระบบยุ่ง เมื่อเสร็จแล้วให้พิมพ์ exit หรือกด ctrl-D


8

Linuxbrewเป็นตัวจัดการแพ็กเกจอื่นที่ไม่ใช่รูทสำหรับ Linux (ขึ้นอยู่กับระบบการจัดการแพ็กเกจ Homebrew ยอดนิยมสำหรับ OS X) ที่รวบรวมจากแหล่งที่มาและเก็บไบนารีไว้ในโฮมไดเร็กตอรี่ของคุณ

อ้างถึงเอกสารคุณสมบัติ Linuxbrew คือ:

  • สามารถติดตั้งซอฟต์แวร์ลงในโฮมไดเร็กตอรี่ได้ดังนั้นจึงไม่จำเป็นต้องใช้ sudo
  • ติดตั้งซอฟต์แวร์ที่ไม่ได้จัดทำแพคเกจโดยการกระจายทั่วไป
  • ติดตั้งซอฟต์แวร์เวอร์ชันล่าสุดเมื่อการแจกจ่ายดั้งเดิมนั้นเก่า
  • ใช้ตัวจัดการแพ็คเกจเดียวกันเพื่อจัดการทั้งเครื่อง Mac และ Linux ของคุณ

7

คำนำหน้าของ Gentoo ทำสิ่งที่คุณต้องการอย่างแน่นอน

มันจะติดตั้งแพคเกจทั้งหมดลงในไดเรกทอรีที่ระบุ ไม่จำเป็นต้องเข้าถึงรูท หากคุณต้องการกำจัดมันเพียงลบไดเรกทอรีฐาน

PS: สิ่งนี้ไม่ทำงานบน Ubuntu> = 11.04 หรืออนุพันธ์ Debian อื่น ๆ ที่มี Multiarch


1
Gentoo สร้างจากแหล่งที่มาดูเหมือนว่าโปสเตอร์ต้องการติดตั้งผ่านแพคเกจไปยังไดเรกทอรีที่เฉพาะเจาะจง นั่นไม่ใช่สิ่งเดียวกัน
Andrew Case

1
@AndrewCase Gentoo มีแพ็คเกจเหมือนกันฉันเชื่อว่า ความจริงที่ว่าพวกเขาไม่ใช่ไบนารีนั้นไม่เกี่ยวข้องสำหรับการติดตั้งครั้งสุดท้าย
jiggunjer

4

เช่นเดียวกับการเพิ่มตัวเลือกเล็กน้อยในการรวบรวมมันมีตัวเลือกครึ่งทางในการรวบรวมเป็นแพ็คเกจที่มีตัวเลือกคำนำหน้าที่แตกต่างกันในเวลารวบรวม (ด้วย "checkinstall" หรืออาจเป็นวิธีอื่น) ข้อได้เปรียบคือแพคเกจจะปรากฏในผู้จัดการแพคเกจเช่นความถนัดหรือ synaptic

นอกจากนี้ฉันคิดว่ามันอาจเป็นไปได้ในบางกรณีที่จะดาวน์โหลด. deb จริงและบังคับใช้คำนำหน้าที่แตกต่างกันผ่านการติดตั้ง dpkg แต่ฉันคิดว่ามันไม่ใช่สิ่งที่สามารถทำได้ด้วยแพ็คเกจแบบสุ่มใด ๆ แต่พวกเขาก็ต้องรวบรวม ตัวแปรบางตัวสำหรับที่ตั้งของพวกเขา (แทนที่จะเป็นคำนำหน้าอย่างชัดเจนตามตัวอักษร) ที่คุณจะส่งออกก่อนติดตั้ง ฉันไม่รู้อะไรเกี่ยวกับกระบวนการแม้ว่า google สำหรับ "คำนำหน้า dpkg instdir"



1

Rootless GoboLinux สามารถทำสิ่งที่คุณต้องการได้อย่างแน่นอน: ตัวจัดการแพคเกจที่ไม่มีสิทธิ์สูงในโฮมไดเร็กตอรี่ของคุณเอง หวังว่าคุณคงรู้ว่ากำลังทำอะไรอยู่ รูตไม่ได้เป็นโหมดการติดตั้งที่บำรุงรักษาอย่างดีที่สุดของ Gobo และเมื่อฉันเคยใช้เมื่อไม่กี่ปีที่ผ่านมาต้องใช้การปรับแต่งเล็กน้อยเนื่องจากสคริปต์การติดตั้งค่อนข้างล้าสมัยเมื่อเทียบกับการเปลี่ยนแปลง Gobo อื่น ๆ

นอกจากนี้ยังมี klik ที่ repackages ค่อนข้างน้อย.debสามารถติดตั้งแพ็คเกจไปยังโฮมไดเร็กตอรี่ของคุณและไม่ต้องใช้สิทธิ์รูทในการใช้งาน ... แต่การตั้งค่าเริ่มต้นจำเป็นต้องใช้รูท


1

ฉันมักจะได้รับแหล่งที่มาและตรวจสอบไฟล์เช่น "ติดตั้ง" ./configure --prefix=somedirมักจะมีคำแนะนำในการทำ จากนั้นคุณต้องเพิ่มsomedir/binเส้นทางของคุณ


มันอาจเป็นเรื่องยากที่จะได้รับรวบรวมและปรับปรุงการอ้างอิง
เปาโล

นี่คือถอยหลัง คำถามคือเกี่ยวกับวิธีทำให้ผู้จัดการแพ็คเกจ (ซึ่งเป็นที่นิยมมาตั้งแต่ทศวรรษ 1990) ทำตัวในลักษณะนี้
การแข่งขัน Lightness กับโมนิก้า

1

ไม่ฉันไม่คิดว่าคุณจะทำได้

สิ่งที่ดีที่สุดที่ฉันคิดได้ในตอนนี้คือการใช้apt-get sourceและรวบรวมแพ็คเกจของคุณ บางทีคุณอาจปรับแต่งขั้นตอน (ซึ่งอาจเป็นอัตโนมัติมากกว่าหรือน้อยกว่า) ในการติดตั้งแพ็คเกจในบ้านของคุณ

อีกหนึ่งคือการใช้dpkg -Xเพื่อแยกมันในไดเรกทอรีที่คุณเลือก


0

มีบางกรณีที่คุณจะต้องติดตั้งแพ็คเกจลงในโฟลเดอร์บ้านของคุณ

อย่างไรก็ตามคุณสามารถรวบรวมและติดตั้งซอฟต์แวร์ลงในเครื่องของคุณ เพียงเปิดเครื่องรูดแล้วกำหนดค่าด้วย./configure --prefix=$HOME/localหรือไดเรกทอรีอื่น คุณสามารถmakeและmake installตามปกติ สิ่งนี้จะรวบรวมและติดตั้งโปรแกรม~/local/นั้นเช่นโปรแกรมที่คุณดำเนินการจะอยู่ใน~/local/bin/programmnameนั้น


0

จากประสบการณ์ของฉันเองไม่มีวิธีง่ายๆในการใช้แพ็คเกจ DEB ที่มีอยู่เพื่อติดตั้งในไดเรกทอรีอื่นที่ไม่ใช่สภาพแวดล้อมchroot เครื่องมือติดตั้ง Debian / Ubuntu dpkg / aptitude / dselectทั้งหมดต้องการสิทธิ์รูทเพื่อให้ทำงานได้อย่างถูกต้อง

ตอนนี้ให้แหล่ง DEB คุณสามารถแก้ไขไฟล์ Debian / rules เพื่อให้แพ็คเกจสร้างและติดตั้งลงในแผนผังไดเรกทอรีที่แตกต่างกัน แต่จากนั้นคุณไม่ได้ใช้แพ็คเกจไบนารีที่มีอยู่แล้ว

ตามที่คนอื่นพูดถึงคุณสามารถใช้debootstrapและสร้างสภาพแวดล้อม chroot ได้อย่างง่ายดายซึ่งที่ผ่านมาฉันมีสภาพแวดล้อมแบบ 32 บิตบนโฮสต์ 64 บิต แต่สิ่งนี้ต้องติดตั้ง chroot อย่างน้อยที่สุดก็ทำซ้ำแพ็คเกจพื้นฐาน หากคุณมีพื้นที่ว่างและนี่เป็นโซลูชันที่ใช้งานได้คุณสามารถจับคู่กับdchrootหรือดีกว่าschrootเพื่อให้สามารถดำเนินการแอปพลิเคชันที่ติดตั้งภายในสภาพแวดล้อม chroot ได้อย่างง่ายดาย


0

ฉันมีปัญหาในการจินตนาการว่ามันจะทำงานอย่างไรกับที่เก็บอย่างเป็นทางการจากการกระจาย ควรแก้ไขการพึ่งพาได้อย่างไร จากระบบหรือจากโฮมไดเร็กตอรี่ของคุณ? จะทำอย่างไรถ้าพบว่ามีเวอร์ชั่นต่างกันทั้งคู่

สิ่งที่ดีที่สุดที่ฉันนึกได้ก็คือสภาพแวดล้อมแบบ chroot เช่นที่ผู้คนทำกับแอพพลิเคชั่น 32- บิตบนระบบ 64- บิต มันมีค่าใช้จ่ายมากกว่าที่คุณจะเรียก debootstrap ใน chroot แต่ด้วยsymlinking , shell wrapper script สนุกสนานมันอาจทำในสิ่งที่คุณต้องการ


0

ฉันยังคงทำงานกับปัญหาอยู่ แต่โดยปกติแล้ว debootstrap สิ่งที่คุณต้องการและควรทำงานกับ fakeroot debootstrap เป็นเพียงเชลล์สคริปต์จำนวนหนึ่งดังนั้นฉันจึงดึงมันออกจากกันเพื่อดูว่าอะไรทำให้เห็บ ส่วนที่ยากจะอยู่ในการถอนการติดตั้งไฟล์เมื่อติดตั้งแล้ว


ฉัน (และผู้ใช้รายอื่นนับพัน) จะกระตุ้นให้เกิดสิ่งนี้อย่างเต็มที่ บางสิ่งที่เปลี่ยนเป็นฐานข้อมูล rpm ทั่วทั้งระบบ (หรือ apt ทางเลือก) ที่มีอยู่แล้วรวมถึงฐานข้อมูล rpm ที่ผู้ใช้จัดหาและติดตั้ง rpms ที่ผู้ใช้กำหนด มันจะน่าทึ่ง สิ่งนี้สามารถรวมเข้ากับการฉีดได้ ก่อนหน้านี้มีการทำวิจัยเรื่องนี้บ้างไหม?
Andrew Case

0

น่าเสียดายที่ฉันไม่เคยได้ยินเรื่อง distro ใด ๆ ที่นำเสนอสิ่งนี้ (แม้ว่าฉันจะแน่ใจว่ามันจะได้รับความนิยมสูงสุด) คุณอาจเลียนแบบ distro ที่ใช้ rpm แต่ ... ฉันยังไม่ได้ลอง แต่คุณสามารถสร้างฐานข้อมูล rpm สำหรับผู้ใช้แล้วติดตั้ง rpm ในฐานข้อมูลผู้ใช้

ลองตั้งค่า distro ใหม่ตามผู้ใช้ด้วย:

rpm --initdb --dbpath DIRECTORY

จากนั้นมีหลายตัวเลือกที่อาจช่วย:

  • --prefix
  • --relocate

0

ฉันมีวิธีแก้ไขปัญหาฉันใช้ติดตั้งชุดซอฟต์แวร์ความร่วมมือขนาดใหญ่บนเซิร์ฟเวอร์ Debian ของโรงเรียนได้สำเร็จซึ่งฉันไม่สามารถเข้าถึงรูทได้เลย มันไม่ได้ใช้deboostrapหรือผู้จัดการแพ็คเกจใด ๆ

วิธีนี้เป็นคู่มือบางส่วน แต่ฉันพยายามทำให้ดีที่สุดเพื่อความสะดวก

มันใช้สคริปต์นี้ฉันได้เรียกinstall(อย่าลืมchmod +xมัน):

#!/bin/bash

# PREFIX is the installation root, i.e. a directory you have write access to
PREFIX=$HOME

# unpack the archive to $PREFIX
ar p "$1" data.tar.xz | tar xJ -C $PREFIX

# go through all unpacked text files and search for occurences of /usr/...
# we're gonna replace some of them with $PREFIX/usr
files=$(dpkg --contents $1 | grep '^-' | awk '{print $6}' | sed 's/^..//' | sort | uniq)
for f in $files; do
    file="${PREFIX}${f}"
    if grep -Iq . "$file"; then
        if grep -q '/usr' "$file"; then
            # interactively ask for each occurence, if it should be replaced
            vim -c '%s#/usr#'$PREFIX'/usr#gc' -c 'wq' "$file"
        fi
    else
        echo "Leaving binary file $file unmodified"
    fi
done

ดังนั้นมักจะครั้งแรกที่ผมดาวน์โหลดไฟล์ deb apt-get download package_nameใช้ จากนั้นฉันเรียกใช้./install package_name_blabla.debและตัดสินใจด้วยตนเองเกี่ยวกับการเกิดขึ้นของแต่ละ/usrไฟล์ในไฟล์ที่ไม่ได้แพคถ้ามันควรถูกแทนที่ด้วย$PREFIX/usrหรือไม่

การตัดสินใจนี้ขึ้นอยู่กับแพคเกจที่ติดตั้งระบบและติดตั้งโดยใช้วิธีนี้ โดยปกติแล้วเช่นไฟล์ pkg-config จำเป็นต้องมีการทดแทนนี้ในขณะที่เส้น shebang #!/usr/bin/perlไม่ชอบ กฏทั่วไปของหัวแม่มือคือพา ธ ผลลัพธ์ควรชี้ไปยังไฟล์ที่มีอยู่

เมื่อติดตั้งแพคเกจด้วยวิธีนี้คุณจะต้องบอกโปรแกรมอื่น ๆ นี้สามารถทำได้โดยการผนวกค่าที่ถูกต้องเพื่อLD_LIBRARY_PATH, PATH, PYTHONPATH, PKG_CONFIG_PATH, CMAKE_MODULES_PATH, CMAKE_PREFIX_PATHฯลฯ

มีข้อแม้ในวิธีนี้คือการพึ่งพาไม่ได้ดาวน์โหลด / ติดตั้งโดยอัตโนมัติ; คุณต้องติดตามด้วยตนเอง

นอกจากนี้ APT ยังไม่รู้แน่ชัดเกี่ยวกับแพ็คเกจเหล่านี้ดังนั้นมันจะแสดงให้พวกเขาเห็นว่าหายไปตลอดกาล แต่นั่นสมเหตุสมผล - ใครต้องการติดตั้งแอพทั้งระบบขึ้นอยู่กับการติดตั้งของผู้ใช้

หากคุณต้องการที่จะถอนการติดตั้งโปรแกรมที่คุณสามารถแสดงรายการเนื้อหาของ deb เก็บถาวรที่ใช้แล้วลบไฟล์เหล่านี้ทั้งหมดออกจากar p "$1" data.tar.xz | tar tJPREFIX

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