ฉันจะติดตั้ง distcc ได้อย่างไร


10

ฉันได้อ่านวิธีการสร้าง toolchain GCC 4.7 สำหรับการคอมไพล์ข้าม? และประสบความสำเร็จในการสร้างโปรแกรมทดสอบอย่างง่ายที่ทำงานกับ RPi ของฉัน

เมื่อต้องการทำสิ่งนี้ฉันต้องเรียกใช้arm-unknown-linux-gnueabi-gcc hello.c -o helloบนเดสก์ท็อป x86 ของฉันและscpสามารถใช้งานได้กับ RPi ของฉัน นี่คือช้าและยุ่งยาก ฉันต้องการควบคุมการรวบรวมจาก RPi ของฉัน

ฉันได้อ่านdistccแล้วซึ่งสามารถใช้เพื่อแจกจ่ายการคอมไพล์จากเครื่องหนึ่งไปยังอีกเครื่องหนึ่งได้

ฉันจะติดตั้งสิ่งนี้ได้อย่างไร ฉันมีเดสก์ท็อป Debian / Ubuntu และ Arch Linux และทั้งสองระบบปฏิบัติการติดตั้งบนการ์ด SD


ฉันรอคนที่ไม่ใช่ฉันโพสต์คำถามนี้ ฉันไม่อยากทำ ทำได้ดีมาก
Jivings

export DISTCC_VERBOSE=1ขอบคุณสำหรับสิ่งนี้ ! มันคือสิ่งที่ฉันกำลังมองหาเพื่อ debbug distchain toolchain ของฉัน

คำตอบ:


12

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

การติดตั้ง

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

Debian

sudo apt-get install distcc

โค้ง

sudo pacman -S distcc

องค์ประกอบ

Slave - Debian / Ubuntu

สิ่งที่ต้องทำ: นี่เป็นสิ่งเดียวกันสำหรับ Arch หรือไม่ ถ้าไม่เราจะกำหนดค่า Arch อย่างไร

/etc/default/distccเราจำเป็นต้องปรับการตั้งค่าใน ในเครื่องมือแก้ไขที่คุณชื่นชอบเปิดเป็นรูท sudo vim /etc/default/distccฉันวิ่ง

คุณจำเป็นต้องมีการเปลี่ยนแปลงSTARTDISTCC, และALLOWEDNETS LISTENERสมมติว่าคุณมีเจ้านายและทาสของคุณอยู่ในซับเน็ตเดียวกันและซับเน็ตนั้น192.168.0.0/24ควรตั้งค่าเป็น

STARTDISTCC="true"
ALLOWEDNETS="192.168.0.0/24"
LISTENER="0.0.0.0"

นอกจากนี้คุณควรเพิ่มเส้นทางไปยังคอมไพเลอร์ของคุณ ฉันทำสิ่งนี้โดยเพิ่มบรรทัดต่อไปนี้

PATH=$PATH:/home/alex/x-tools/arm-unknown-linux-gnueabi/bin

หมายเหตุ daemon บนสลาฟจะถูกเรียกใช้ในฐานะdistccdผู้ใช้ดังนั้นตรวจสอบให้แน่ใจว่ามีการกำหนดค่าการอนุญาตที่เหมาะสมในไฟล์ปฏิบัติการของคุณ ฉันให้สิทธิ์ทุกคนในการดำเนินการ

เรียกใช้ daemon - โดยปกติจะเริ่มตอนบูท - โดยเรียกใช้

sudo service distcc start

ปรมาจารย์ - อาร์ช

สิ่งที่ต้องทำ: นี่เป็นสิ่งเดียวกันสำหรับเดเบียนไหม ถ้าไม่เราจะกำหนดค่า Debian ได้อย่างไร

เปิด~/.distcc/hostsในโปรแกรมแก้ไขข้อความที่คุณชื่นชอบและเพิ่มที่อยู่ IP ของทาส ฉันแฟ้มประกอบด้วยบรรทัดเดียวที่อ่านhosts192.168.0.22

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

ใช้

ทุกอย่างไปได้ด้วยดีคุณควรจะใช้ distcc ค่อนข้างง่าย ตัวอย่างเช่นในการรวบรวมhello.cเพื่อhello.oเรียกใช้

distcc arm-unknown-linux-gnueabi-gcc    -c -o hello.o hello.c

ตัวอย่าง: สวัสดีชาวโลก!

ฉันตั้งค่าตัวอย่างง่ายๆในโฮมไดเร็กตอรี่ซึ่งประกอบด้วย 2 ไฟล์

# file: Makefile
hello.o: hello.c
hello: hello.o

# file: hello.c
#include <stdio.h>

int main() {
  printf("Hello World!\n");
  return 0;
}

วิ่งmake helloจะรวบรวมในเครื่อง คุณควรทำสิ่งนี้เป็นแบบทดสอบด่วนก่อน ต่อไปฉันจะรอ

การรันmake hello CC="distcc arm-unknown-linux-gnueabi-gcc"จะเรียกใช้การคอมไพล์แบบกระจาย

หมายเหตุการประมวลผลล่วงหน้าและการเชื่อมโยงยังคงเกิดขึ้นใน RPi

แก้จุดบกพร่อง

ฉันใช้เวลาสักครู่เพื่อให้ทำงานได้อย่างถูกต้องและเครื่องมือดีบั๊กที่ดีที่สุดที่ฉันพบคือตัวแปรสภาพแวดล้อมแบบง่าย ถ้าคุณ

export DISTCC_VERBOSE=1

distccโหลดลูกค้าประสงค์การส่งออกของข้อมูลที่เป็นประโยชน์

นี่คือการโพสต์ยาวดังนั้นข้อเสนอแนะใด ๆ จะได้รับสุดซึ้ง ฉันหวังว่าฉันจะจำทุกขั้นตอนได้!


คำตอบที่ยอดเยี่ยม ฉันจะบุ๊คมาร์คสิ่งนี้ไว้เพื่อการพัฒนา RPi ของฉัน
Jivings

@AlexChamberlain Distcc ตอนนี้รองรับ "โหมดปั๊ม" ซึ่งช่วยให้สามารถแจกจ่ายการประมวลผลล่วงหน้าได้เช่นกัน
teraquendya

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