ทำไมซอฟต์แวร์จึงติดตั้งเองใน / usr / lib


11

ฉันใช้เซิร์ฟเวอร์ Linux มาหลายปีแล้วและฉันก็ยังสับสนกับมาตรฐานระบบแฟ้มของลำดับชั้น โดยปกติแล้วฉันสามารถอยู่กับความสับสน แต่ตอนนี้ฉันพัฒนาซอฟต์แวร์ของตัวเองสำหรับ Linux ฉันต้องเข้าใจว่ามันควรจะติดตั้งโดยผู้จัดการแพคเกจ

ฉันค่อนข้างมั่นใจว่า / opt เป็นตำแหน่งที่สมบูรณ์แบบสำหรับใบสมัครของฉัน แต่หลังจากตรวจสอบระบบไฟล์ Debian ของฉันฉันไม่แน่ใจอีกต่อไป: มีซอฟต์แวร์จำนวนมากติดตั้งอยู่ใน / usr / lib! เพื่อชื่อไม่กี่: MySQL, MySQLWorkbench, Nautilus, Rythmbox ...

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

มีซอฟแวร์จำนวนมากที่อยู่ใน / usr / lib ของเดเบียนเซิร์ฟเวอร์ของฉันไม่ใช่ไลบรารี่หรือไบนารี่ภายใน

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

ขอบคุณล่วงหน้าสำหรับคำแนะนำของคุณ

เอริค


2
การตรวจสอบเฉพาะจุดจากสิ่งที่ฉันสามารถบอกได้ว่า MySQLWorkbench ติดตั้งเฉพาะไลบรารีภายใต้ / usr / lib อะไรทำให้คุณคิดว่ามี "ซอฟต์แวร์ที่ปฏิบัติการได้ของผู้ใช้ที่เต็มเปี่ยม" ใน / usr / lib?
Mark Wagner

ทางลัดจริงที่อยู่ในเมนูแอปพลิเคชันชี้ไปที่ไบนารีที่อยู่ใน / usr / lib หากฉันจำได้อย่างถูกต้อง
Eric MORAND

ดูเหมือนว่าคุณสับสนเกี่ยวกับซอฟต์แวร์ที่คุณติดตั้งไว้ นี่คือลิงค์ไปยังรายชื่อหากไฟล์สำหรับ MySQL และ Nautilus โปรดสังเกตว่าไฟล์ถูกแบ่งระหว่าง / etc, / usr / bin, / usr / lib เป็นต้นเช่นเดียวกับ FHS บอกว่าควรจะเป็น packages.debian.org/wheezy/i386/mysql-server-5.5/filelist packages.debian.org/wheezy/i386/nautilus/filelist
sciurus

คำตอบ:


6

กุญแจสำคัญในการทำความเข้าใจกับมาตรฐานระบบแฟ้มคือการรู้ว่ามันถูกออกแบบโดยคำนึงถึงระบบไฟล์เครือข่าย

สำหรับทุกเครื่องที่มีระบบปฏิบัติการรีลีสและสถาปัตยกรรมเดียวกันคุณสามารถแชร์ / usr ผ่าน NFS และติดตั้ง
/ usr ถูกติดตั้งอีกครั้งหลังจากที่เริ่มต้นสแต็กเครือข่าย

/var <-- local, r/w optimized
/usr <-- can be mounted over network, possibly even read-only!
/opt <-- local, read mostly
/etc <-- local, read mostly
/srv <-- local, r/w optimized

/home <-- either/or

คุณจะให้ลิงค์สำหรับมาตรฐานท้องถิ่น / ระยะไกลและ r - r / w หรือไม่?
Captain Giraffe

นี่หมายความว่าเราสามารถมีที่เก็บเดียว / usr "repository" สำหรับทุกเซิร์ฟเวอร์ Linux หรือเวิร์กสเตชันในเครือข่ายหรือไม่?
Eric MORAND

1
ต้องใช้งานบ้าง แต่ใช่คุณทำได้ ย้อนกลับไปเมื่อฮาร์ดไดรฟ์ที่มีราคาแพงนี่เป็นบรรทัดฐานสำหรับการเปิดตัวครั้งใหญ่
Dan Garthwaite

@ eric-morand จาก FHS: "/ usr เป็นส่วนสำคัญที่สองของระบบไฟล์. / usr เป็นข้อมูลที่อ่านได้อย่างเดียวเท่านั้นที่ใช้ร่วมกันได้นั่นหมายความว่า / usr ควรจะใช้ร่วมกันระหว่างโฮสต์ที่เข้ากันได้กับ FHS และต้องไม่เขียน ข้อมูลใด ๆ ที่เกี่ยวข้องกับโฮสต์หรือแตกต่างกันไปตามเวลาจะถูกเก็บไว้ที่อื่น " pathname.com/fhs/pub/fhs-2.3.html#THEUSRHIERARCHY
Dan Garthwaite

อ๊ะ ความคิดเห็นข้างต้นมีไว้สำหรับ @CaptainGiraffe
Dan Garthwaite

12

ความแตกต่างก็คือว่า/usrจะหมายถึงการแพคเกจติดตั้งถือเป็นส่วนหนึ่งของระบบ แพ็คเกจที่คุณได้รับจากที่เก็บ Debian / Ubuntu, PPAs ฯลฯ ไปที่นี่ แม้ว่า/optจะมีความหมายสำหรับแอปพลิเคชันบุคคลที่สามที่ไม่ได้รวมทุนซึ่งไม่ได้แจกจ่ายผ่านกระบวนการกระจายแพ็คเกจ

หากคุณแจกจ่าย .deb หรือ .rpm /usrแพคเกจกับตาไปในที่สุดได้รับซอฟต์แวร์ของคุณรวมอยู่ในที่เก็บอย่างเป็นทางการคุณควรติดตั้งไป /optมิฉะนั้นจะติดตั้ง ไม่ว่ากรณีใดก็ตามแอปพลิเคชันของคุณควรสามารถรวบรวมให้ทำงานในตำแหน่งใดก็ได้ (เช่นด้วยความช่วยเหลือของเครื่องมืออัตโนมัติ GNU)


ขอบคุณ ตอนนี้ฉันไม่มีแผนที่จะรวมแอพของฉันไว้ในที่เก็บอย่างเป็นทางการ
Eric MORAND

แล้ว / usr / local แล้วล่ะ? หรือว่าไม่ต่อเนื่อง
Aaron Copley

@AaronCopley /usr/localไม่ได้อยู่ในขอบเขตสำหรับคำถามนี้ แต่มันมีความหมายสำหรับซอฟต์แวร์บุคคลที่สามที่ผู้ดูแลระบบในพื้นที่รวบรวมและติดตั้ง
Michael Hampton

นั่นคือเหตุผลที่ฉันถามว่ามันจะพิจารณาแยก
Aaron Copley

2

คุณติดตั้งไลบรารีของคุณใน<prefix>/libไบนารี<prefix>/binของคุณในไฟล์ส่วนหัวของคุณใน<prefix>/includeหน้าคนในprefix/[share/]manไฟล์ pkgconfig ใน<prefix>/lib/pkgconfigหรือ<prefix/share/pkgconfigไฟล์ cmake .m4 ของคุณใน<prefix>/share/aclocal

จากนั้นให้ผู้จัดการแพคเกจตัดสินใจเกี่ยวกับคำนำหน้า หากคุณกำลังกระจาย rpm / deb ของตัวเอง/usrเป็นทางเลือกที่ดีสำหรับคำนำหน้า

./configure --prefix=~/.local/ ยังควรใช้งานได้ดังนั้นอย่าไป hardcoding เส้นทางของคุณทุกที่โปรด

บางไลบรารีถูกรวมไว้ในเครื่องมืออื่น ๆ ที่ทำให้พวกมันสามารถใช้งานได้และใช้งานได้เหมือนห้องสมุด แต่มันก็ยังเป็นไลบรารี่และไม่ใช่ $ PATH ของคุณดังนั้นมันก็โอเคที่จะใส่ไว้ใน / lib ฉันเดา


1

ฉันขอแนะนำให้หลีกเลี่ยงการติดตั้งแอพของคุณภายใต้ / opt เหตุผลที่ 1: distros บางตัวไม่มี / opt ตามค่าเริ่มต้นเหตุผลที่ 2: / usr / lib เป็นพา ธ มาตรฐานสำหรับไลบรารี {หากแอปพลิเคชันอื่นจำเป็นต้องใช้ไลบรารีของคุณคุณต้องเพิ่มเส้นทางไลบรารีของคุณไปที่ / etc / ldconfig} / opt สะดวกยิ่งขึ้นเมื่อคุณมีแอพแบบสแตนด์อโลนที่คุณติดตั้งด้วยตนเองและคุณต้องการที่จะรู้ว่าพวกเขาอยู่ที่ไหน

หนึ่งในเหตุผลที่ปฏิบัติการเต็มตัวนั้นอยู่ภายใต้ / usr / lib อาจเป็นเพราะพวกเขาจะใช้จากสคริปต์อื่น ๆ {ตัวอย่างเช่นสคริปต์ทุบตีไม่สามารถใช้ API ได้โดยตรง ด้วยเหตุนี้กลอุบายทั่วไปก็คือการสร้าง "wrapper" รอบ api นี้และพารามิเตอร์ push เป็นอาร์กิวเมนต์ของสคริปต์}


2
ฉันไม่เห็นด้วย. หากเขาต้องการที่จะติดตั้งใน / opt ผู้จัดการแพ็กเกจจะสร้างไดเรกทอรีดังนั้นจึงไม่ใช่ปัญหา นอกจากนี้ไบนารีที่ติดตั้งใน / usr / lib ก็เป็นแนวคิดที่ไม่ดีเช่นกัน
วอลเตอร์

ขอบคุณ @Nikolaidis Fotis แต่ในกรณีของฉันแอพของฉันไม่มีห้องสมุดสาธารณะและแอปพลิเคชันอื่นจะไม่ถูกใช้งาน
Eric MORAND

0

กรุณาติดตั้งใน / เลือก

วิธีที่หลาย ๆ แอพพลิเคชั่นลีนุกซ์ทำเช่นเดียวกันกับที่นักพัฒนา Windows ทำในยุค 90

ให้ติดตั้งสิ่งของของเราใน C: \ windows เพื่อให้ง่ายและหาง่าย (และเร็วกว่าเล็กน้อย) จากนั้นมา 15 ปีของ DLL นรกเพราะแพคเกจซอฟต์แวร์ที่แตกต่างกันต้องการไลบรารี่รุ่นเดียวกัน (ซึ่งในวินโดวส์ไม่มีเวอร์ชั่นของไลบรารี่)

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


4
นี่ไม่ใช่ Windows เรามีผู้จัดการแพคเกจที่ใช้งานได้และสิ่งนี้ไม่เป็นปัญหามากนัก
Michael Hampton

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