ทำไม apt-get ต้องการ sudo


12

นี่อาจเป็นคำถามที่โง่ แต่เมื่อเร็ว ๆ นี้ฉันรู้ว่าฉันไม่รู้ว่าทำไมไม่มีการใช้งานแบบผู้ใช้คนเดียวที่มี apt-get

คำตอบฉันไม่ได้กำลังมองหา:

  • "เป็นเพราะ apt เขียนไปยังไดเรกทอรีระดับระบบ" นี่คือเหตุผลระดับพื้นผิว แต่ฉันกำลังมองหาระดับที่ลึกกว่า มีบางสิ่งบางอย่างในการปิดกั้นสภาพแวดล้อมแบบผู้ใช้รายเดียว (a pip + virtualenv) หรือไม่?
  • "คุณสามารถสร้างจากแหล่งที่มา" นี่เป็นวิธีแก้ปัญหา แต่ไม่ได้ตอบคำถามของฉัน ฉันไม่ต้องการแก้ไขปัญหาระยะสั้นและฉันสามารถเข้าถึงรูทบนเครื่องทั้งหมดของฉันได้

ฉันหวังว่าคุณจะรู้ว่าคุณสามารถสร้างแพ็คเกจใด ๆ จากแหล่งที่มาในไดเรกทอรีบ้านของคุณ
jobin

ใช่ แต่ฉันกำลังมองหาว่าทำไมขีด จำกัด ของ apt-get การสร้างจากแหล่งที่มาไม่ได้ตอบว่า
PattimusPrime

1
ฉันคิดว่าคำถามที่คุณถามจริงๆคือ "ทำไมไม่สามารถย้ายซอฟต์แวร์ Linux ได้มากที่สุด" มันจะเป็นไปได้อย่างสมบูรณ์แบบที่จะอนุญาตให้ apt-get ติดตั้งซอฟต์แวร์ลงในไดเรกทอรีผู้ใช้ท้องถิ่น แต่เนื่องจากซอฟต์แวร์ส่วนใหญ่ไม่รองรับสิ่งนี้จะมีจุดเล็กน้อยในการทำเช่นนั้น

คำตอบ:


10

ทำไม apt-get ต้องการ sudo

ไม่เสมอ. คุณสมบูรณ์แบบสามารถใช้งานได้โดยไม่ต้องapt-get sudoมีกรณีที่คุณไม่จำเป็นต้องเป็นsudoที่ทุกคนเช่นการใช้apt-get downloadที่ดาวน์โหลดแพคเกจไปยังไดเรกทอรีปัจจุบันของคุณ , apt-get sourceที่ดาวน์โหลดไฟล์แหล่งที่มาเดเบียนไปยังไดเรกทอรีปัจจุบันของคุณchangelogซึ่งดาวน์โหลดและพิมพ์การเปลี่ยนแปลงของแพคเกจที่กำหนดและคำสั่งใด ๆ ที่มี--simulate/ --dry-run/ --no-act(ในกรณีของinstallคุณต้องยัง--no-download)

นี่เป็นเพราะการกระทำ / คำสั่งเหล่านี้ไม่จำเป็นต้องเขียนไดเรกทอรีระบบ

ตอนนี้ทำไมapt-getต้องsudo? จริงๆแล้วมันไม่ได้ คุณสามารถทิ้ง apt-get, ดาวน์โหลดแพ็คเกจด้วยwgetและใช้dpkg --extractและแตกไฟล์ในไดเรกทอรีใดก็ได้ที่คุณต้องการ นอกจากนี้ยังมี--instdirที่ควรทำงานสำหรับแพคเกจไบนารีเท่านั้น

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

ตอนนี้คุณสามารถทำอะไรแทนได้บ้าง เพียง chroot สภาพแวดล้อมบางอย่างa la virtualenv ซึ่งคุณสามารถติดตั้งแพ็คเกจโดยไม่ต้องรูท

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


3

ข้อมูลในแพ็คเกจจะกำหนดว่าจะติดตั้งไฟล์ที่ใดดังนั้นคุณต้องsudoเขียน/และเปลี่ยนแปลงฐานข้อมูลแพ็คเกจ

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

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


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

2

มันไม่ใช่คำถามที่โง่

ระดับสิทธิ์ในระบบปฏิบัติการ

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

เพื่อทำการปรับเปลี่ยนใด ๆ กับระบบปฏิบัติการซึ่งอาจส่งผลกระทบต่อระบบโดยรวมมากกว่าแค่ไฟล์ของผู้ใช้จำเป็นต้องมีระดับสิทธิ์ที่สูงกว่าซึ่งใน Linux จะเรียกว่าสิทธิ์ "superuser" (หรือโดยทั่วไป เรียกว่า "root") ระดับสิทธิพิเศษนี้มีการเข้าถึงระบบปฏิบัติการทั้งหมดได้อย่างอิสระทำให้สามารถแก้ไขหรือทำลายไฟล์ทั้งหมดสำหรับผู้ใช้ทั้งหมด

บทบาทของ apt-get

เมื่อคุณได้รับการติดตั้งซอฟต์แวร์ผ่าน apt-get, คุณกำลังติดตั้งซอฟแวร์ที่จะสามารถใช้ได้ทั้งระบบ นั่นคือซอฟต์แวร์จะไม่เพียงถูกวางไว้ในโฮมไดเร็กตอรี่ของผู้ใช้สำหรับการรันโดยผู้ใช้นั้นเท่านั้น แต่จะถูกติดตั้งในแอพพลิเคชั่นไดเรกทอรีทั่วทั้งระบบ (เช่นใน / usr, / etc, / var เป็นต้น ) สำหรับการทำงานโดยผู้ใช้ทั้งหมด ในการแก้ไขไดเรกทอรีเหล่านี้คุณต้องมีสิทธิ์ผู้ใช้ขั้นสูง ไม่มีผู้ใช้ที่ไม่มีสิทธิพิเศษใด ๆ สามารถแก้ไขไดเรกทอรีเหล่านี้ได้เนื่องจากซอฟต์แวร์ที่ไม่ได้รับสิทธิพิเศษอาจทำให้ระบบยุ่งเหยิงได้

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

การใช้ Linux เป็นไปได้ที่จะติดตั้งซอฟต์แวร์โดยไม่มีสิทธิ์ superuser แต่คุณต้องเขียนด้วยตัวคุณเอง (เช่นเชลล์สคริป) หรือคอมไพล์ด้วยตัวคุณเองและรันโปรแกรมที่คอมไพล์ได้โดยตรง มันง่ายกว่าที่จะติดตั้งทั้งระบบโดยใช้ apt-get (และยูทิลิตี้พื้นฐาน APT อื่น ๆ เช่นความถนัด, synaptic หรือศูนย์ซอฟต์แวร์อูบุนตู) หากคุณสามารถเข้าถึงได้


ขอบคุณสำหรับการตอบและขอบคุณสำหรับความละเอียด ฉันเข้าใจธรรมชาติของระบบฉลาด - รับ แต่สิ่งที่ฉันพยายามเข้าใจคือทำไมมันต้องเป็นอย่างนั้น
PattimusPrime

1
มันไม่จำเป็นต้องเป็นอย่างนั้น มันเกิดขึ้นเป็นวิธีที่ Ubuntu (และ Debian) ได้รับการออกแบบ จะไม่มีอะไรหยุดคนที่ออกแบบระบบปฏิบัติการซึ่งวิธีการติดตั้งซอฟต์แวร์แบบปกติต่อผู้ใช้
thomasrutter

1

ทำไม apt-get installs ไปยังไดเรกทอรี (หรือคล้ายกัน) โดยค่าเริ่มต้น?

เหตุผลง่าย ๆ สำหรับสิ่งนี้คือapt-getไม่ได้ตัดสินใจว่าจะติดตั้งซอฟต์แวร์ที่ไหน มันถูกตัดสินใจโดยนักพัฒนาและเขียนโค้ดภายในแอป

ฉันสามารถติดตั้งไปยังไดเรกทอรีอื่นได้หรือไม่

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

แต่ฉันยืนยันในการใช้ apt-get ต้องทำอะไรตอนนี้

ตกลง. ยังมีวิธีการทำเช่นนี้กับ apt-get แม้ว่ามันจะมากเกินไปสำหรับผู้ใช้ปลายทาง ทำตามขั้นตอน.

  1. รับแหล่งที่มา
  2. $HOMEเปลี่ยนไดเรกทอรีการติดตั้งเพื่อสิ่งที่ต้องการ
  3. รวบรวมและสร้าง
  4. แพคเกจให้มันกลายเป็น.debไฟล์
  5. สร้างบัญชี launchpad
  6. ลงนามในจรรยาบรรณในอูบุนตู (ฉันไม่แน่ใจว่าจำเป็นหรือไม่)
  7. สร้าง ppa สำหรับตัวคุณเอง
  8. อัปโหลดแพ็คเกจ deb ไปยัง ppa
  9. เพิ่ม ppa ไปยังแหล่งที่มาของคุณ
  10. sudo apt-get updateวิ่ง
  11. apt-get install packageวิ่ง

มันง่าย / ยากเกินไปเป็นไปได้ไหมที่จะเลือกไดเรกทอรีระหว่างการติดตั้ง?

ใช่และไม่.

ใช่เพราะมันเป็นไปได้ซอฟต์แวร์บางตัวใช้วิธีนี้สิ่งเดียวที่ฉันรู้คือQt5มันมีไฟล์. runซึ่งเมื่อดำเนินการขอไดเรกทอรีติดตั้งระหว่างอินพุตอื่น ๆ

apt-getไม่ได้เพราะวิธีการนี้ไม่ได้ใช้

ฉันจะทำสิ่งนี้ได้อย่างง่ายดายด้วยสักวันapt-getไหม?

ฉันไม่คิดว่านักพัฒนาซอฟต์แวร์apt-getและ / หรือนักพัฒนาซอฟต์แวร์สนใจที่จะทำสิ่งนี้ แต่ซอฟต์แวร์บางอย่างสามารถพัฒนาได้ซึ่งจะทำแหล่งที่มาการเปลี่ยนแปลงการคอมไพล์การสร้างการติดตั้งขั้นตอนโดยอัตโนมัติโดยขอไดเรกทอรีการติดตั้งเท่านั้น

สัมผัสที่หกของฉันบอกฉันว่าคำสั่งจะเป็นเช่นนั้น

apt-dont-get install pkg1 pkg2 ...

ขอบคุณสำหรับคำตอบ - มันละเอียดและตอบคำถามของฉัน ฉันไม่เข้าใจว่าทำไมไม่มีความสนใจในการพัฒนาฟังก์ชั่นผู้ใช้คนเดียวให้เป็น apt-get อย่างไรก็ตาม ดูเหมือนว่าฟังก์ชั่นนั้นจะมีประโยชน์อย่างมากในบางกรณีการใช้งาน
PattimusPrime

ข้อมูลดี แต่มีรูปแบบคำถาม & คำตอบภายในคำถาม & คำตอบ ... ? :) Idk คุณควรแก้ไขในรูปแบบมาตรฐานหรือไม่ แค่ความคิด
chaskes

@PattimusPrime กรณีดังกล่าวส่วนใหญ่หายากเพราะในกรณีส่วนใหญ่ผู้ดูแลระบบติดตั้งซอฟต์แวร์ที่จำเป็นทั้งหมดและอื่น ๆ ไม่จำเป็นต้องติดตั้งซอฟต์แวร์ ข้อเท็จจริงที่ว่าการสร้างจากแหล่งข้อมูลนั้นง่ายมากและการใช้งานฟังก์ชั่นดังกล่าวจะไร้ประโยชน์ตราบใดที่นักพัฒนาซอฟต์แวร์ไม่ได้ใช้งานในซอฟต์แวร์ของตัวเองจะทำให้apt-getนักพัฒนาไม่สามารถทำเช่นนั้นได้ นอกจากนี้โปรแกรมที่มีอยู่จำนวนมากขึ้นอยู่กับโปรแกรมอื่น ๆ และพวกเขาค้นหาในไดเรกทอรี / usr การใช้งานฟังก์ชั่นดังกล่าวจะต้องมีการเปลี่ยนแปลงในซอฟต์แวร์ที่มีอยู่ทั้งหมดที่มีการอ้างอิง (นี้ไม่ไปในพัน)
ผู้ใช้ที่ลงทะเบียน

เป็นการละเมิดนโยบาย Debian เพื่อติดตั้งไฟล์ใน $ HOME คุณไม่ควรทำเช่นนั้น หากมีสิ่งใดให้ใช้/opt/packageและ chmod ไดเรกทอรีแทน
Braiam

@Braiam: ผมเคยเห็นคนแนะนำแพคเกจติดตั้งใน$HOME/opt/หากพวกเขาไม่จำเป็นต้องมีสิทธิพิเศษสำหรับการติดตั้งแพคเกจใน/opt/..
Aditya

-1

ทำให้มันแก้ไขไฟล์ที่ chmodded ดังนั้นคุณไม่สามารถใช้มันได้ คุณอาจจะสามารถ chmod พวกเขาดังนั้นคุณลาดเทฉันไม่แนะนำอีกครั้งว่า


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