ผู้จัดการแพ็กเกจที่ไม่ใช่รูท


51

/จากการวิจัยของฉันฉันดูเหมือนจะสังเกตเห็นว่าผู้จัดการแพคเกจทั้งหมดยืนยันในการถูกนำมาใช้เป็นผู้ใช้สิทธิพิเศษและจะต้องติดตั้งลงใน

โดยทั่วไปสิ่งที่ฉันต้องการทำคือสร้างบัญชีการอนุญาตทิ้งรวบรวมซอฟต์แวร์และติดตั้ง$HOMEสำหรับบัญชีนั้น ฉันสามารถลองการตั้งค่าที่หลากหลายและเมื่อฉันทำเสร็จก็แค่ทำลายบัญชี

อย่างไรก็ตามการรวบรวมซอฟต์แวร์กลายเป็นเรื่องน่าเบื่อ

ประสบการณ์ของฉันถูก จำกัด เพียงyumแต่ฉันไม่เข้าใจว่าทำไมฉันไม่สามารถวางไฟล์ repo ลงในนั้น~/etc/yum.repos.dและให้ yum ติดตั้งทุกอย่างลงในบัญชีที่บ้าน

มีเหตุผลใดที่ผู้จัดการแพคเกจจะต้องใช้เป็นผู้ใช้ที่มีสิทธิ์ติดตั้งซอฟต์แวร์?

คำตอบ:


35

/แพคเกจไบนารีรวบรวมกับสมมติฐานที่ว่าพวกเขาจะได้รับการติดตั้งไปยังสถานที่ที่ระบุใน สิ่งนี้ไม่ได้เปลี่ยนแปลงได้ง่ายเสมอไปและต้องใช้ความพยายามในการควบคุมคุณภาพเพิ่มเติม (ซึ่งเป็นเรื่องยากพอในตอนแรก!) เพื่อพิจารณาว่าไบนารีที่เฉพาะเจาะจงนั้นมีอยู่หรือไม่สามารถเปลี่ยนตำแหน่งได้

คุณสามารถใช้สิ่งต่าง ๆ เช่นfakechrootเพื่อสร้างระบบทั้งหมดในไดเรกทอรีย่อยในฐานะผู้ใช้ที่ไม่ใช่รูท แต่สิ่งนี้น่าเบื่อและเปราะบาง

คุณจะมีโชคที่ดีขึ้นด้วยแพ็คเกจที่มา คำนำหน้า GentooและRootless GoboLinuxเป็นทั้งผู้จัดการแพคเกจที่สามารถติดตั้งไปยัง/ที่ตั้งไม่ได้และอาจใช้งานได้โดยrootผู้ใช้ที่ไม่ใช่ผู้ใช้


3
ฉันต้องการเพิ่มว่ามีการเปลี่ยนตำแหน่งได้ 2 ประเภท แพคเกจอาจจะคิดว่ามันอยู่ในสถานที่บางอย่างเสมอหรือสิ่งอื่น ๆ อยู่ในบางสถานที่ (เช่น/bin) หรืออาจคิดว่ามันถูกติดตั้งในสถานที่ที่ระบุโดย - คำนำหน้า ในขณะที่โครงการเหล่านี้อาจใช้งานได้ในอดีต แต่ก็ต้องมีการแก้ไขในซอร์สโค้ด
Maciej Piechotka

อีกตัวเลือกหนึ่งลา Gentoo คำนำหน้า, รากและห้ามเป็นpkgsrc มันมาจาก NetBSD แต่ทำงานบนแพลตฟอร์มที่หลากหลาย
Michael Ekstrand

2
แพคเกจไบนารีถูกรวบรวมกับข้อสันนิษฐานว่าพวกเขาจะถูกติดตั้งไปยังสถานที่เฉพาะใน/นี้ดูเหมือนว่าต้องการซึ่งอาจเป็นธรรมอาจ 30 ปีที่ผ่านมา แต่ไม่ใช่ตอนนี้ ตัวอย่างเช่นenvโปรแกรมที่ใช้แก้ไขปัญหาแบบนี้ไม่ใช่หรือ ถ้าไม่ใช่มันง่ายที่จะออกมาพร้อมกับรูปแบบการกำหนดค่าไบนารีใด ๆ เพื่อค้นหาไบนารีอื่น ๆ ในสถานที่เฉพาะ
Piotr Dobrogost

1
@PiotrDobrogost เพื่อขยายบางใช่เพื่อขยายหมายเลข ยกตัวอย่างเช่นไม่มีตัวแปรสภาพแวดล้อมสำหรับการ/etcหรือ (ตามความรู้ของฉัน) หรือ/usr/lib/<packagename>/ สามารถเปลี่ยนแปลงได้โดยตัวแปร XDG ซึ่งเผยแพร่ในบางครั้งในศตวรรษนี้และไม่จำเป็นต้องใช้กับโปรแกรมรุ่นเก่า /usr/libexec/<packagename>//usr/share
Maciej Piechotka

28

มีโครงการจัดการแพ็กเกจ- ระวัง - ด้วยแนวคิดพื้นฐานที่น่าสนใจ ( ผู้จัดการ pkg " ใช้งานได้ ") ซึ่งรองรับการทำงานต่อผู้ใช้:

การสนับสนุนผู้ใช้หลายคน

เริ่มต้นที่รุ่น 0.11 ห้ามมีการสนับสนุนผู้ใช้หลายคน ซึ่งหมายความว่าผู้ใช้ที่ไม่มีสิทธิพิเศษสามารถติดตั้งซอฟต์แวร์ได้อย่างปลอดภัย ผู้ใช้แต่ละคนสามารถมีโปรไฟล์ที่แตกต่างกันซึ่งเป็นชุดของแพ็กเกจในที่เก็บ Nix ที่ปรากฏใน PATH ของผู้ใช้ หากผู้ใช้ติดตั้งแพคเกจที่ผู้ใช้รายอื่นติดตั้งไว้ก่อนหน้านี้แพคเกจจะไม่ถูกสร้างหรือดาวน์โหลดเป็นครั้งที่สอง ในเวลาเดียวกันไม่สามารถให้ผู้ใช้รายหนึ่งฉีดม้าโทรจันเข้าไปในแพ็คเกจที่อาจถูกใช้โดยผู้ใช้รายอื่น

หมายเหตุฉันต้องการเพิ่ม: Nixควรใช้งานได้ในระบบ Unix ที่คุณเลือก (เช่น Linux distro)

นอกจากนี้ยังมีคอลเลกชันขนาดใหญ่ที่เกี่ยวข้องของแพคเกจที่สามารถติดตั้งได้ด้วยตัวจัดการแพ็คเกจNix-- Nixpkgs - สร้างขึ้นสำหรับแพลตฟอร์มจำนวนหนึ่ง :

  • GNU / Linux บน x86 แบบ 32 บิตและ 64 บิต (i686-linux และ x86_64-linux)
  • Mac OS X (i686-darwin และ x86_64-darwin)
  • FreeBSD (i686-freebsd และ x86_64-freebsd)
  • OpenBSD (i686-openbsd)
  • Windows / Cygwin (i686-cygwin)

และ distro ที่เกี่ยวข้อง - NixOS :

NixOS เป็นการกระจาย Linux ตาม Nix มันใช้ระวังไม่เพียง แต่สำหรับการจัดการแพคเกจ แต่ยังเพื่อจัดการการกำหนดค่าระบบ (เช่นเพื่อสร้างไฟล์การกำหนดค่าใน / etc) สิ่งนี้หมายความว่าเป็นไปได้ที่จะย้อนกลับการกำหนดค่าทั้งหมดของระบบไปเป็นสถานะก่อนหน้าได้อย่างง่ายดาย นอกจากนี้ผู้ใช้สามารถติดตั้งซอฟต์แวร์โดยไม่มีสิทธิ์รูท อ่านเพิ่มเติม…

และที่เกี่ยวข้อง "อย่างต่อเนื่อง" สร้าง system-- ไฮดรา


4
สรุปที่ดี เมื่อเร็ว ๆ นี้ GNU Guix ประกาศ ตัวจัดการแพคเกจ GNU ขึ้นอยู่กับระวัง savannah.gnu.org/forum/forum.php?forum_id=7436
Davorak

2
@Davorak ความแตกต่างระหว่างnixและguixคืออะไร ตอนนี้ฉันใช้nixงานของฉันจริง ๆฉันอยากรู้ว่าฉันสามารถguixนำมาใช้เป็นเครื่องมืออื่นที่ฉันต้องการได้หรือไม่ ฉันสามารถอ่านสรุปความแตกต่างที่ไหนสักแห่งได้หรือไม่? บางทีคุณอาจจะเขียนคำตอบพร้อมกับสรุปได้ที่นี่เพื่อประกาศทางเลือกเพิ่มเติมอีกทางหนึ่ง?
imz - Ivan Zakharyaschev

6

ประการแรกมันเป็นเพราะการพึ่งพา แพคเกจบางอย่างอาจไม่ได้รับการติดตั้งโดยผู้ใช้ - เช่น PolicyKit ดังนั้นจึงต้องใช้ภาระเพิ่มเติมเกี่ยวกับตัวทำแพ็กเกจที่บริจาคเวลาว่างของพวกเขาและโดยปกติการติดตั้งโปรแกรมนั้นง่ายเหมือนการพิมพ์sudo(สถานีผู้ใช้คนเดียว) หรือผู้ดูแลระบบที่จู้จี้

มีตัวเลือกสำหรับการติดตั้งใน $ HOME

  • ภาษาดั้งเดิม 'ผู้จัดการแพ็กเกจ' มักจะรองรับมันออกจากกล่อง (เช่นอัญมณีสำหรับ Ruby หรือ cabal สำหรับ Haskell) หรือ tweaking ขนาดเล็ก (ฉันลืมชื่องูหลาม)
  • ดีมาก./configure --prefix=$HOME/sandbox --enable-cool-feature && make all install(หรือคำอธิบายเช่น jhbuild)
  • มีเป็นโปรแกรมที่จะติดตั้งที่ $ HOME ไม่กี่ปีที่ผ่านมา อย่างไรก็ตามฉันไม่พบมัน - ฉันคิดว่าเกือบจะไม่มีใครใช้มันเพราะพวกเขาติดตั้งเองหรือผู้ดูแลระบบที่จู้จี้

1
ฉันไม่เห็นจริงๆว่านี่เป็นข้อโต้แย้งที่น่าเชื่อถือ เพียงเพราะแพ็คเกจไม่ทำงานเนื่องจากไม่ได้เรียกใช้เนื่องจากรูทไม่ได้หมายความว่าความคิดนั้นไม่สามารถทำได้ เป็นที่คาดหวังว่า PolicyKit จะไม่ทำงานสำหรับสถานการณ์ประเภทนี้ มีแพ็คเกจอื่น ๆ มากมายที่สามารถติดตั้งได้โดยไม่ต้องใช้สิทธิ์รูท ฉันรู้เกี่ยวกับผู้จัดการแพคเกจซอฟต์แวร์ (Python is EasyInstall) แต่สิ่งเหล่านั้นไม่สามารถใช้ได้ทั่วโลกเพราะ yum หรือ apt-get คือ ไม่มีใครรู้ชื่อของโปรแกรมที่ Maciej อ้างถึง?
elmt

1
@elmt: อาจStowซึ่งอาจจะสนใจคุณอยู่แล้ว ( แต่มันเป็นเครื่องมือที่ไม่ได้เป็นแหล่งที่มาของแพคเกจ)
Gilles 'หยุดความชั่วร้าย'

@Gilles: ไม่ - มันมี GUI และตั้งใจที่จะ 'ง่าย' ฉันเดาว่าทิศทางปัจจุบันเป็นมากกว่า synaptic / packagekit
Maciej Piechotka

6

ฉันใช้JuJuซึ่งโดยทั่วไปจะอนุญาตให้มีการแจกจ่ายลินุกซ์เล็ก ๆ (มีเพียงผู้จัดการแพ็คเกจ) ในไดเรกทอรี $ HOME / .juju ของคุณ

อนุญาตให้มีระบบที่กำหนดเองของคุณภายในโฮมไดเร็กตอรี่เข้าถึงได้ผ่าน proot และดังนั้นคุณสามารถติดตั้งแพ็กเกจใด ๆ โดยไม่ต้องใช้สิทธิ์รูท มันจะทำงานได้อย่างถูกต้องกับการแจกแจงลินุกซ์ที่สำคัญทั้งหมดข้อ จำกัด เพียงอย่างเดียวคือ JuJu สามารถทำงานบนเคอร์เนลลินุกซ์ด้วยรุ่นที่แนะนำขั้นต่ำ 2.6.32


4

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


4

หากคุณทำได้ดีจากการคอมไพล์จากแหล่งที่มาและแก้ไขการพึ่งพาตัวเองส่วนใหญ่ต้องการให้ตัวจัดการแพคเกจจัดการกับการดำเนินการปรับใช้ / ยกเลิกการปรับใช้ / อัปเกรดคุณอาจต้องการดูGNU StowหรือXStow ที่ปรับปรุงใหม่ เมื่อติดตั้งแล้วคุณจะทำการติดตั้งไดเรกทอรีแยกต่างหาก (โดยทั่วไปอยู่ภายใต้$PREFIX/stow) จากนั้น stow จะสร้าง symlink ให้กับซอฟต์แวร์จากส่วนนำหน้าจริงของคุณ ทำให้ง่ายต่อการลบซอฟต์แวร์ออกไปอย่างสมบูรณ์ ฉันใช้เพื่อจัดการซอฟต์แวร์ที่ติดตั้งเองที่มหาวิทยาลัยของฉันได้สำเร็จ


3

ประสบการณ์ของฉัน จำกัด อยู่เพียงแค่ yum แต่ฉันไม่เข้าใจว่าทำไมฉันไม่สามารถวางไฟล์ repo ลงใน ~ / etc / yum.repos.d และให้ yum ติดตั้งทุกอย่างลงในบัญชีที่บ้าน

ผู้จัดการแพคเกจลีนุกซ์หลัก ๆ มองว่าโลกคือระบบดูแลระบบ ... ที่ซึ่งเครื่องเป็นเอนทิตีเดียว สิ่งนี้จะช่วยให้คุณได้รับคำตอบสำหรับคำถามเช่น "สิ่งใดที่มีข้อผิดพลาดที่ยอดเยี่ยมกับระบบ X" และ "ระบบ X และระบบ Y แตกต่างกันอย่างไร" สิ่งนี้ยังอนุญาตให้ yum มี "ประวัติ" ซึ่งใช้งานได้มีรุ่น rpmdb และทำสิ่งต่าง ๆ เช่น "yum - การปรับปรุงความปลอดภัย" เป็นต้น

มีผู้จัดการแพคเกจบางอย่างเช่นไม่มีการติดตั้งซึ่งพยายามที่จะมองโลกอย่างที่ผู้ใช้ต้องการ ... เช่น สิ่งที่การใช้งานที่ทำผมที่มีสิทธิ์เข้าถึง

คุณอาจคิดว่ารุ่นต่อมาเป็นรุ่นที่ดีกว่า แต่ IMNSHO มีเหตุผลที่คุณไม่เคยได้ยินเรื่องการติดตั้งเป็นศูนย์ แต่เคยได้ยินยำ


2

มีเด็กใหม่ในบล็อก: " JuNest (ผู้ใช้ที่ถูกคุมขัง NEST) - ดิสทริบิวชันที่ทำงานบน Linux ที่ทำงานบนดิสทริบิวชัน distro ใด ๆ โดยไม่ต้องเข้าถึงรูท" @ https://github.com/fsquillace/junest Advantage คือมันไม่ได้แนะนำรูปแบบแพคเกจรูปแบบใหม่ดังนั้นหลังจากติดตั้งง่ายมาก (ขั้นต่ำ: ca. 320M) ซึ่งเป็นที่เก็บ Arch Linux ที่สมบูรณ์ (มากกว่า 13000 แพ็คเกจ ATM) อยู่แค่เพียงปลายนิ้ว


1

เครื่องมือที่ใช้โดย Slackware installpkgสามารถทำได้โดยเฉพาะ จากหน้าคน:

--root /otherroot
       Install using a location other than / (the default) as the root of the 
       filesystem to install on. In the example given, use /otherroot instead.
       Setting the ROOT environment variable does the same thing.

อย่างไรก็ตามฉันไม่ทราบว่าส่วนใดของส่วนหน้าที่ดีกว่าที่สามารถทำได้ (เช่นslapt-getเท่าที่ฉันรู้ไม่สามารถทำได้) ในทางทฤษฎีคุณควรจะสามารถไปยังนามแฝงinstallpkgไปinstallpkg --root ~/Apps- แต่ผมคิดว่าส่วนหน้าส่วนใหญ่ต้องการที่จะเรียกใช้รากซึ่งเอาชนะจุด


1

ฉันขอแนะนำhttp://linuxbrew.sh/

โดยพื้นฐานแล้วมันจะใช้สำหรับ MacOS และมีไบนารีที่คอมไพล์แล้วสำหรับการใช้งาน ...

เหมาะอย่างยิ่งสำหรับการจัดการเวอร์ชัน gcc ที่เก่ากว่า

หากคุณต้องการติดตั้งด้วยมือจริง ๆ คู่มือที่มีประโยชน์คือ http://www.linuxfromscratch.org/


0

ยำต้องเขียนไปยังฐานข้อมูลซึ่งเป็นของตัวเองโดยรูท ด้วยเหตุนี้คุณจึงไม่สามารถใช้งานได้ในฐานะผู้ใช้ปกติ

คุณสามารถลองขยายขนาดไฟล์ rpm (rpm2cpio package.rpm | cpio -idmv) ภายในไดเรกทอรีที่คุณเลือก

แต่เมื่อคุณจะรันโปรแกรมของคุณคุณจะต้องระมัดระวังในการแก้ไข LD_LIBRARY_PATH เพื่อที่จะโหลดไลบรารีที่ขึ้นต่อกัน นอกจากนี้จะไม่ดูแลการอ้างอิงใด ๆ

ตัวอย่าง:

# mkdir new_root
# cd new_root
# wget ftp://mirror.switch.ch/pool/4/mirror/centos/6.7/os/x86_64/Packages/vim-enhanced-7.4.629-5.el6.x86_64.rpm
# rpm2cpio vim-enhanced-7.4.629-5.el6.x86_64.rpm | cpio -idmv
# ./usr/bin/vim -version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jul 24 2015 02:23:23)

ด้านบนไม่มีไลบรารีที่ขึ้นต่อกันมิฉะนั้นคุณจะต้องใช้สิ่งที่ชอบ

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