'ทำการติดตั้ง' ทำอะไร


52

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

makeสมมติว่าผมดาวน์โหลดซอร์สโค้ดกำหนดค่าและสร้างไบนารีโดยใช้ ตอนนี้มันเป็นเพียงไบนารีไม่ใช่โปรแกรมที่ใช้งานได้ จะ 'ติดตั้ง' ได้อย่างไร? โดยmake install? และคำสั่งนี้ทำอะไรกันแน่


1
คำตอบของฉันเกี่ยวกับstackoverflow.com/questions/528399/ให้ภาพรวมคร่าวๆของสิ่งต่าง ๆ ที่ทำตามmake installขั้นตอนจากมุมมองของโปรแกรมเมอร์
dmckee

คำตอบ:


44

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

เมื่อคุณทำบางสิ่งเช่น "make all" โปรแกรม make จะเรียกใช้กฎที่ชื่อว่า "all" จากไฟล์ในไดเรกทอรีปัจจุบันชื่อ "Makefile" กฎนี้มักจะเรียกคอมไพเลอร์เพื่อรวบรวมซอร์สโค้ดบางอย่างลงในไบนารี

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


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

2
@grawity ที่จริงแล้วใน Windows จำเป็นต้องมีการแก้ไขรีจิสทรีด้วยเหตุผลหลายประการเช่นการรวมเข้าด้วยกัน ใน Linux การรวมซอฟต์แวร์เข้าด้วยกันมักจะเกี่ยวข้องกับการคัดลอกไฟล์หรือเพิ่มบรรทัดเพื่อกำหนดค่าไฟล์ด้วยบางอย่างเช่นสคริปต์หลังการติดตั้ง
Camilo Martin

@sharjeel มันจะมีประโยชน์ที่จะบอกว่าฉันสามารถหากฎที่มีชื่อallในMakefileและสิ่งที่เครื่องหมายสิ้นสุดของส่วนนั้นดูเหมือนดังนั้นฉันสามารถดูที่การประมวลผลกฎสำหรับallหยุด
สำรองข้อมูล Pro

36

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

หลายโครงการใช้GNU Autotoolsเพื่อพยายามปรับปรุงความสะดวกในการพกพาของฮาร์ดแวร์และความแตกต่างของระบบปฏิบัติการ (ตัวแปร Unix ที่แตกต่างกันใช้ส่วนหัวที่แตกต่างกันเล็กน้อยสำหรับการประกาศฟังก์ชั่นที่ออกนอกเส้นทางเล็กน้อย - ยกเว้นโปรแกรมส่วนใหญ่ต้องการหนึ่งหรือรายการอื่นที่ประกาศในสถานที่ต่างกัน)

เมื่อโครงการใช้ Autotools มนต์ปกติในการติดตั้งคือ:

./configure
make
make install

โดย./configureทั่วไปแล้วอนุญาตให้คุณใช้ตัวเลือกบรรทัดคำสั่งที่--prefix /opt/apacheคล้ายกันหรือชื่ออื่นที่คล้ายกันเพื่อระบุชื่อพา ธ อื่น เป็นค่าเริ่มต้นที่พบบ่อย/usr/local/ prefixมันง่ายกว่ามากสำหรับซอฟต์แวร์ที่สร้างขึ้นภายในเครื่องเพื่ออยู่ในที่เดียวและซอฟต์แวร์ที่จัดจำหน่ายเพื่อให้อยู่ใน "ไดเรกทอรีหลัก": /usr/ /bin/และอื่น ๆ (ผู้ทำหีบห่อระมัดระวังอย่างมากที่จะไม่แตะต้องไฟล์/usr/local/- พวกเขารู้ว่ามันเป็นสิทธิพิเศษสำหรับผู้ดูแลระบบเท่านั้น)

อย่างไรก็ตาม./configure --prefix /path/to/new/prefixจะตั้งค่าตัวแปรในMakefileที่มีอยู่เมื่อรวบรวมโปรแกรมแก้ไขหน้าคู่มือเพื่อให้ชี้ไปที่ตำแหน่งที่ถูกต้องสำหรับไฟล์แก้ไขไฟล์การกำหนดค่า ฯลฯ ดังนั้นmakeจะสร้างซอฟต์แวร์เฉพาะสำหรับตำแหน่งติดตั้งที่คุณต้องการและmake installจะติดตั้งลงในตำแหน่งนั้น

โปรแกรมส่วนใหญ่สามารถทำงานได้แม้ไม่มีขั้นmake installตอนสุดท้าย- เพียงแค่./program_nameเริ่มต้นโปรแกรม นี้แน่นอนเป็นสิ่งที่ต่อโครงการ - บางอย่างเช่นpostfix, qmailฯลฯ ที่ทำขึ้นจากหลายชิ้นส่วนที่เคลื่อนไหวแตกต่างกันและพึ่งพาพวกเขาทั้งหมดทำงานร่วมกัน คนอื่น ๆ ชอบlsหรือsuอาจมีอยู่ในตัวเองเพียงพอที่จะดำเนินการปรับจากไดเรกทอรีที่พวกเขาสร้างขึ้นมา (มักจะไม่เป็นประโยชน์ - แต่บางครั้งก็มีประโยชน์มาก )

แต่ไม่ทุกโครงการใช้ Autotools - พวกเขามีขนาดใหญ่ , มีความซับซ้อนและมีความสุขในการรักษา การเขียนด้วยมือMakefileนั้นง่ายกว่ามากในการเขียนและโดยส่วนตัวแล้วฉันคิดว่าการแจกจ่ายง่าย ๆMakefileด้วยตัวแปรการกำหนดค่าที่มีอยู่นั้นง่ายขึ้นมากสำหรับนักพัฒนาและผู้ใช้ (แม้ว่า./configure ; make ; make installมนต์คือจริงๆง่ายกับผู้ใช้เมื่อมันทำงาน.)


19

make installไม่ทำอะไรเลยแล้วดำเนินการinstallฟังก์ชัน / ส่วนในของคุณMakefile


ใช่มันแค่ชอบmake cleanโดยทั่วไปมันแค่เรียกใช้งานโค้ดภายใต้ส่วน
Wulfric Lee

8

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

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

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

ในฐานะที่เป็นบันทึกเพิ่มเติมในขณะที่การแจกแจงอย่างอูบุนตูมักมีแพ็คเกจล้าสมัยอยู่เสมอ แต่ยังมีดิสทริบิวชั่นอย่าง Arch Linux ที่ทันสมัยอยู่เสมอ (แม้ว่าพวกเขาจะไม่เสนอตัวอักษรทุกตัว

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

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