การติดตั้งจากแหล่งที่มา วิธีแก้ไขการอ้างอิงโดยไม่ทำลายตัวจัดการแพ็กเกจ


19

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

ซอฟต์แวร์ทางวิทยาศาสตร์มากมายที่ฉันต้องการไม่ได้จัดจำหน่ายเป็นแพ็คเกจ ฉันเข้าใจ "./configure" ตั้งค่าตัวแปรการรวบรวมและการตรวจสอบการอ้างอิง "ทำ" การรวบรวม "sudo make install" ทำให้ไลบรารีและถังขยะทั้งหมดอยู่ในตำแหน่งของพวกเขา อย่างไรก็ตามมันไม่ทำงาน ฉันไม่ค่อยออกจากเวที) "./configure" โดยไม่ต้องพึ่งนรกและถ้าฉันทำข) "sudo make install" อาจจะเป็นช่องของฉัน

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

b) ความเข้าใจของฉันคือ "ทำการติดตั้ง" จะแทนที่บางไลบรารีและเปลี่ยนการตั้งค่าโดยที่ผู้จัดการแพคเกจของฉันรู้เรื่องนี้ ดังนั้นบางโปรแกรมจะไม่ทำงาน แต่ไม่สามารถอัปเดตโปรแกรมอื่นได้ ดังนั้นหากฉันไม่ได้ใช้ "make install" และเพียงแค่เก็บไบนารีที่รวบรวมไว้ในไดเรกทอรีผู้ใช้ของฉันด้วยการเชื่อมโยงสัญลักษณ์ที่เพิ่มเข้าไปใน PATH ฉันจะชัดเจนไหม

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


3
คุณไม่ได้บอกว่าคุณใช้การกระจายแบบไหนนั่นเป็นข้อมูลที่น่าสนใจ หากคุณเรียกใช้ Debian derivate คุณสามารถใช้apt-get build-dep <package>เพื่อติดตั้งการพึ่งพาที่จำเป็นโดยอัตโนมัติ
Marco

ฉันใช้ CentOS 6 (เพื่อให้มีซูเปอร์กูรูในห้องแล็บของเราใช้) แต่ฉันเคยใช้ Ubuntu
เลนซ์

ยินดีต้อนรับสู่ชีวิตของผู้จัดจำหน่าย การติดตามการพึ่งพาทั้งหมดนี้ไม่ได้ยากนัก แต่มันน่าเบื่อหน่าย
Gilles 'หยุดชั่วร้าย'

ดูผู้จัดการแพคเกจที่ไม่ใช่รูทและคำถามอื่น ๆ อาจติดแท็กผู้ใช้ที่ไม่ใช่รูทที่เกี่ยวกับการติดตั้งซอฟต์แวร์และการจัดการแพ็คเกจ
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


16

แพ็คเกจส่วนใหญ่จะมี<package>-dev(สำหรับ Debian based) หรือ<package>-devel(สำหรับ Red Hat based) ซึ่งจะเป็นไลบรารีที่จำเป็นในการเชื่อมโยงกับการสร้าง

ตัวอย่างเช่นหากแหล่งข้อมูลระบุว่าจำเป็นต้องใช้libxmlในระบบที่ใช้เดเบียนคุณจะพบlibxml2และlibxml2-dev(ใช้apt-cache search <dependancy>เพื่อค้นหา)

คุณจะต้องlibxml2-devสร้างและlibxml2เรียกใช้

./configureขั้นตอนมักจะสนับสนุนธงเหมือน--with-libxml=/usr/lib/จะชี้ไปที่ห้องสมุดที่ถูกต้อง ( ./configure --helpควรรายการทั้งหมดของตัวเลือก) --prefix=$HOME/swนอกจากนี้ยังมักจะสนับสนุนการเปลี่ยนตำแหน่งการติดตั้งด้วย การใช้คำนำหน้านอกเหนือสิ่งที่ตัวจัดการแพคเกจควบคุมของคุณเป็นวิธีที่ดีที่สุดในการหลีกเลี่ยงความขัดแย้งกับซอฟต์แวร์ที่ติดตั้งตัวจัดการแพคเกจ

ใน Debian และสัญญาซื้อขายล่วงหน้าโดยใช้--prefixของ/usr/local/หรือ/opt/local/ควรจะปลอดภัย

หากไลบรารี่ (หรือเวอร์ชั่น) ที่คุณต้องการไม่สามารถใช้งานได้จากตัวจัดการแพ็กเกจเพียงแค่ดาวน์โหลดซอร์สและคอมไพล์โดยใช้ตัวเลือกที่คล้ายกัน สิ่งสำคัญที่สุดคือใช้--prefixนอกของผู้จัดการแพคเกจของคุณและเมื่อรวบรวมซอฟต์แวร์ที่คุณจริงๆ--with-<library>=/<path/to/installed/library>ต้องการใช้


5

มีเครื่องมือauto-aptที่สามารถใช้สำหรับการนี้

จากคนฉลาดอัตโนมัติ :

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

มันถูกใช้ดังนี้:

auto-apt run ./configure

อีกวิธีหนึ่งคือใช้apt-get build-dep <package>ในการแจกแจงแบบ Debian


apt-get build-dep <package>ทำงานให้ฉัน มันน่าหงุดหงิดที่ใช้./configureซ้ำแล้วซ้ำอีกเพื่อเรียนรู้แพ็คเกจที่จำเป็นอีกหนึ่งชุด!
HeatfanJohn

2

สำหรับการกระจาย RPM ตามคุณอาจจะลองมือของคุณที่สร้างแพคเกจที่เหมาะสม (มันไม่ได้เป็นที่ยาก ... )

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

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