วิธีการคอมไพล์และติดตั้งโปรแกรมจากแหล่งที่มา


39

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

เทียบกับ Windows ได้ง่าย คุณจำเป็นต้องใช้แอพพลิเคชั่นตัวติดตั้งซึ่งทำงานทั้งหมดในตัวช่วยสร้าง ด้วย Linux ... ไม่มาก

ดังนั้นคุณมีเคล็ดลับหรือคำแนะนำเกี่ยวกับเรื่องนี้หรือมีเว็บไซต์ใด ๆ ที่อธิบายอย่างชัดเจนว่าทำไมติดตั้งโปรแกรม Linux จากแหล่งที่มาได้อย่างไร


7
"เทียบกับ Windows ได้ง่ายคุณต้องใช้แอพพลิเคชั่นติดตั้งที่ทำงานทั้งหมดในตัวช่วยสร้างด้วย Linux (ไม่มาก)" มีจุดอ่อนในคำถาม ด้วย Windows คุณจะไม่ได้รับซอร์สโค้ดดังนั้นคุณอยู่ในความเมตตาของผู้ที่สร้างแพ็คเกจ หากคุณคิดเกี่ยวกับสิ่งนี้มันไม่แตกต่างจากการพูดว่า "ไม่มีแพ็คเกจ Linux ดังนั้นฉันต้องสร้างจากแหล่งที่มา" เช่น ไม่มีวิธีที่จะเริ่มต้นด้วย การสร้างจากแหล่งข้อมูลมักเป็นทางเลือกสุดท้ายใน * nix-land แต่ไม่ค่อยมีตัวเลือกใน Windows-ville
Avery Payne

2
ที่ถูกกล่าวว่า ... +1 bump สำหรับถามคำถามทั่วไปที่ควรได้รับคำตอบสำหรับผู้ใช้ใหม่ในระบบ * nix :) การสร้างจากแหล่งที่มาบางครั้งหมายถึงความแตกต่างระหว่างการแก้ไขข้อผิดพลาดที่น่ารังเกียจและเพิ่งทุกข์ทรมานจนถึงการเปิดตัวซอฟต์แวร์ต่อไป มันไม่ได้แย่ขนาดนั้นและหลาย ๆ คนที่นี่ได้ชี้ให้เห็นเมื่อคุณรู้ว่าต้องหาอะไรและทำอย่างไร
Avery Payne

คำตอบ:


22

โดยปกติโครงการจะมีเว็บไซต์พร้อมคำแนะนำวิธีการสร้างและติดตั้ง Google สำหรับที่แรก

ส่วนใหญ่คุณจะทำอย่างใดอย่างหนึ่ง:

  1. ดาวน์โหลด tarball (ไฟล์ tar.gz หรือ tar.bz2) ซึ่งเป็นรุ่นของรหัสที่มาเฉพาะ
  2. แตก tarball ด้วยคำสั่งเช่นtar zxvf myapp.tar.gztarball gzipped หรือtar jxvf myapp.tar.bz2tarball bzipped
  3. cd ในไดเรกทอรีที่สร้างขึ้นด้านบน
  4. วิ่ง ./configure && make && sudo make install

หรือ:

  1. ใช้ git หรือ svn หรืออะไรก็ตามเพื่อดึงซอร์สโค้ดล่าสุดจากแหล่งเก็บข้อมูลอย่างเป็นทางการ
  2. cd ในไดเรกทอรีที่สร้างขึ้นด้านบน
  3. วิ่ง ./autogen.sh && make && sudo make install

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


เหตุใดจึงใช้ autogen.sh เมื่อรับรุ่นล่าสุด แต่ใช้กำหนดค่า / ทำเพื่อการวางจำหน่ายอย่างเป็นทางการ
Louis Salin

1
โดยทั่วไปผู้ที่ต้องการซอฟต์แวร์ "bleeding edge" จะดึงการเปิดตัวจากซอฟต์แวร์ควบคุมเวอร์ชัน (เช่น git, subversion หรือ CVS) นี่คือ "การตกเลือด" เพราะอาจไม่ได้ทดสอบซึ่งแตกต่างจาก tarball ที่วางจำหน่ายซึ่งได้รับการรับรองว่าใช้งานได้ (อย่างน้อยส่วนใหญ่) ทำให้รู้สึก?
แมตต์ซิมมอนส์

2
@ Matt แน่ใจว่าเหมาะสม แต่ฉันคิดว่าความคิดเห็นนั้นพุ่งตรงไปที่ข้อเท็จจริงที่ว่า Sandy ตอนนี้ทำให้ดูเหมือนว่ามี autogen.sh ในทุก ๆ git'd / svn'd trunk
reiche

1
และไก่ในทุกหม้อ ... หรืออะไรทำนองนั้น Heck ทุกครั้งที่ฉันเจอซอฟต์แวร์ที่ไม่มีสคริปต์กำหนดค่าเช่นกัน หากมีวิธีที่ง่ายและเป็นอันหนึ่งอันเดียวกันในการทำเราจะไม่ต้องการแพ็คเกจ ;-)
Matt Simmons

แมตต์เป็นสิ่งที่ถูกต้องนี่คือเหตุผลที่ฉันพูดว่า "ส่วนใหญ่" และเป็นคนแรกที่สนับสนุนการค้นหาเว็บไซต์ของโครงการ คำแนะนำของ autogen.sh/configure จะมีไว้สำหรับโมดูล GNOME เกือบทุกตัวและโครงการอื่น ๆ อีกมากมายเช่นกัน บางโครงการไม่ได้ใช้ automake และจะมีเพียง Makefile, make && sudo make installและคุณจะทำงานเพียง โครงการ Python บางโครงการจะมี setup.py เท่านั้นซึ่งคุณจะต้องโทรหาเพื่อติดตั้ง (เนื่องจากไม่มีการตั้งค่าการคอมไพล์จริง) มีระบบ build / ติดตั้งอื่น ๆ อีกมากมายเช่นกัน หวังว่าไฟล์ README หรือติดตั้งจะอธิบายสิ่งที่ต้องทำ
Sandy

3

ฉันแค่ต้องการเพิ่มว่ามีตัวจัดการแพคเกจที่รวบรวมแพคเกจจากแหล่งและจัดการการอ้างอิงแพคเกจทั้งหมดค่าสถานะ ฯลฯ

ในระบบ BSD คือports: การใช้คอลเลกชันพอร์ต

ใน Debian apt-getผู้จัดการแพ็กเกจสามารถติดตั้งจากซอร์สได้เช่นกัน: APT HOWTO: การทำงานกับแพ็กเกจซอร์ส (เช่นเดียวกับ Ubuntu, Linux-mint และทุกอย่างอื่นตาม Debian)

การกระจาย Gentoo ใช้ตัวportageจัดการแพคเกจซึ่งรวบรวมทั้งระบบจากแหล่งข้อมูลเท่านั้น: บทนำระบบ

Slackware สามารถรวบรวมแพ็คเกจได้ แต่ฉันไม่รู้ว่ามี package manager อยู่หรือไม่ .. =)

อย่างไรก็ตามคุณสามารถคอมไพล์แพ็คเกจด้วยตนเองได้เหมือนแซนดี้ที่กล่าวถึงข้างต้น =) นอกจากนี้มันจะต้องเป็นไปได้ที่จะใช้apt-getหรือportageผู้จัดการแพ็คเกจในดิสทริบิวเตอร์อื่น ๆ ...


1
ในการพูดว่า "ตัวจัดการแพกเกจ apt-get สามารถติดตั้งจากแหล่งที่มา" ไม่ถูกต้อง ส่วนที่ยกมาอธิบายถึงวิธีการสร้างแพคเกจDebianจากแหล่งDebian ไม่ใช่แหล่งต้นน้ำโดยพลการ
Faheem Mitha

2

ฉันคิดว่าเป็นการดีที่สุดที่จะอ่านเอกสารที่มาพร้อมกับโปรแกรมหรือแอปพลิเคชันเฉพาะที่คุณต้องการติดตั้ง โดยปกติจะมี readmes / READMEs อยู่ใน tarballs (ไฟล์เก็บถาวรของแอปพลิเคชันที่คุณสามารถดาวน์โหลดได้) หรือแม้กระทั่งไฟล์ INSTALL เพื่ออ่านและเรียนรู้เกี่ยวกับวิธีการติดตั้งแอพพลิเคชันที่ต้องการ ในระยะสั้น: RTFM;)


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

1

บทสรุปสำหรับการใช้ Ports Collection ใน FreeBSD:

ค้นหาพอร์ต

พอร์ตถูกจัดระเบียบตามหมวดหมู่ดังนั้นหากคุณไม่ทราบว่ามีหมวดหมู่ใดอยู่ในพอร์ตคุณต้องค้นหาก่อน:

cd /usr/ports
make search name=myport

บางครั้งมีรายการที่มากเกินไป โดยส่วนตัวแล้วฉันชอบ:

find /usr/ports -name myport* -print -depth 2

ใช้*เมื่อค้นหาเนื่องจากมักจะมีพอร์ตหลายเวอร์ชัน อาร์กิวเมนต์เชิงลึกช่วยให้มั่นใจว่าผลตอบแทนของคุณจะไม่ยุ่งกับการจับคู่ที่คุณไม่ต้องการ

องค์ประกอบ

บ่อยครั้งที่คุณจะต้องการกำหนดค่าบางอย่าง ซอฟต์แวร์เช่น Apache และ Postgres จำเป็นต้องใช้งานจริง มีสามตัวเลือกหลัก: บรรทัดคำสั่งสภาพแวดล้อมและสร้างไฟล์กำหนดค่า ในการเริ่มต้นกับบรรทัดคำสั่ง:

make showconfig

นี่จะแสดงรายการตัวเลือกการกำหนดค่าเริ่มต้น หากคุณชอบค่าเริ่มต้นคุณก็พร้อมที่จะรวบรวมและติดตั้ง ถ้าไม่,

make config

จะเปิดกล่องโต้ตอบที่คุณสามารถเลือกตัวเลือกที่คุณต้องการ (อย่าสับสนกับสิ่งนี้และmake configureกำหนดค่าพอร์ตของคุณด้วยตัวเลือกที่คุณเลือก!) ซึ่งมักจะเพียงพอ แต่สำหรับซอฟต์แวร์บางอย่างเช่น Apache มักจะมีการกำหนดค่าที่ซับซ้อนที่กล่องโต้ตอบแบบง่ายจะไม่จัดการ สำหรับสิ่งนี้คุณควรดูที่ Makefile ซึ่งบางครั้งจะให้เป้าหมายเพิ่มเติมสำหรับการสร้างที่จะให้ข้อมูลเพิ่มเติมแก่คุณ เพื่อดำเนินการต่อตัวอย่าง Apache

make show-modules
make show-options
make show-categories

จะให้ข้อมูลเกี่ยวกับการตั้งค่าโมดูลที่คุณเลือกตัวเลือกเธรดและสิ่งที่คล้ายกัน หากค่าเริ่มต้นของพอร์ตส่วนใหญ่ดีและคุณต้องการเปลี่ยนบางสิ่งคุณสามารถส่งคู่ key = value เช่นตัวแปรสภาพแวดล้อม:

make MYVBL1=MYVAL1 ... install clean

นอกจากนี้คุณสามารถตั้งค่าตัวเลือกการสลับผ่าน-Dตัวเลือก:

make -D MYVAR -D MYOTHERVAR ... install clean

สำหรับการกำหนดค่าที่ซับซ้อน แต่บรรทัดคำสั่งทำงานได้ไม่ดีและคุณดีกว่าทั้งสองวิธีแรกจะไม่มีผลบังคับใช้ ในกรณีนี้คุณสามารถสร้างไฟล์การกำหนดค่าและส่งผ่านไปยังmakeด้วยตัวแปร __MAKE_CONF FreeBSD มีไฟล์กำหนดค่าเริ่มต้น/etc/make.confซึ่งโดยปกติจะมีข้อมูลเกี่ยวกับพอร์ตที่ติดตั้งไว้ก่อนหน้านี้และการตั้งค่าระบบอื่น ๆ ในการเริ่มต้นสร้างไฟล์ด้วยตัวเลือกพอร์ตของคุณเรียกมัน~/myport.mkแล้วรวมไฟล์นั้นเข้ากับ /etc/make.conf:

cat /etc/make.conf ~/myport.mk >> ~/make.myport.conf

จากนั้นคุณสามารถตรวจสอบการกำหนดค่าของคุณอีกครั้ง:

make showconfig __MAKE_CONF=~/make.port.conf

และถ้าทุกอย่างดูดี:

make install clean __MAKE_CONF=~/make.myport.conf

ระวัง! หากคุณต้องการปรับการตั้งค่าหลังจากmake configureหรือการติดตั้งทั้งหมดหรือบางส่วนคุณจะต้องล้างการกำหนดค่าของคุณก่อน :

make rmconfig

การไม่ทำเช่นนั้นจะส่งผลให้เกิดการโต้ตอบที่ไม่คาดคิดระหว่างระบบย่อยพอร์ตmakeค่าเริ่มต้นของพอร์ตและการกำหนดค่าที่คุณต้องการ

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

การติดตั้ง

นี่เป็นส่วนที่ง่าย:

make install clean

หรือคุณสามารถ

make build
make install
make clean

ซึ่งเป็นเพียงการพิมพ์มากขึ้น

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


0

เมื่อเร็ว ๆ นี้ฉันเริ่มใช้ "Checkinstall" เมื่อติดตั้งจากแหล่งภายนอกตัวจัดการแพคเกจของฉัน มันสร้าง "แพ็คเกจ" จาก tarball บุคคลที่สามซึ่งสามารถติดตั้งและจัดการ (และถอนการติดตั้ง) ผ่านเครื่องมือจัดการแพ็คเกจของคุณ

ลองดูบทความนี้ - http://www.linuxjournal.com/content/using-checkinstall-build-packages-source

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