เป็นไปได้ไหมที่จะรวบรวม Darwin Distro จากแหล่งข้อมูลเช่นคุณสามารถสร้าง Linux Distro ได้หรือไม่?


42

ฉันได้อ่านและดำเนินการLinux ตั้งแต่เริ่มต้น (และ BLFS) แล้วและฉันสงสัยว่าฉันสามารถทำตามคำแนะนำนี้เพื่อสร้าง Darwin Distro โดยการแทนที่xnuเคอร์เนลหรือไม่ กระบวนการจะแตกต่างอย่างมากกับที่ระบุไว้ใน LFS หรือไม่

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


แก้ไข:

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

ฉันขอขอบคุณที่ข้อมูลดังกล่าวอาจมาจากคนที่มาจากPuredarwin , OpenDarwinหรือGNU / Darwinเท่านั้นดังนั้นนี่คือสิ่งที่พวกเขาขอความช่วยเหลือ คู่มือ " How-We-Made-PureDarwin-Nano-Start-To-Finish " เช่น LFS จะสมบูรณ์แบบ แต่ฉันรู้ว่ามันขอมาก


3
มันคงคุ้มค่าที่จะดู puredarwin เพื่อดูว่าจะเกิดอะไรขึ้นกับการสร้าง distar based ดาร์วิน (และปัญหาที่พวกเขาและ opendarwin เผชิญในเรื่องนี้)
Journeyman Geek

1
สำหรับผู้ใช้ปกติเมล็ดทั้งสองมีลักษณะคล้ายกันมาก แต่ซอฟต์แวร์ที่ใช้ในการจัดการเคอร์เนลและซอฟต์แวร์ที่เกี่ยวข้องอย่างใกล้ชิด (รวมถึง libc) นั้นแตกต่างกันมาก เอกสาร LFS จะไม่ได้รับความช่วยเหลือมากนักในขั้นตอนแรกที่สำคัญนี้ อาจเริ่มจาก (หรืออย่างน้อยเรียน) สาขา kFreeBSD ของ Debian นั้นมีความเกี่ยวข้องมากกว่า
vonbrand

1
คำแนะนำ: หากคุณตั้งคำถามกับสิ่งที่คุณพยายามทำจริง ๆ คุณจะเพิ่มโอกาสในการค้นหาคำถามที่มีอยู่แล้ว แต่ยังเพิ่มโอกาสที่จะดึงดูดผู้คนมากขึ้นด้วยแนวคิดในการตอบคำถาม . เมื่อเทียบกับการสับสนว่าคำถามคืออะไร แค่ความคิด
killermist

1
ดาร์วินมีพื้นฐานมาจาก BSD ซึ่งแตกต่างจาก Linux วิธีการทำสิ่งต่าง ๆ ของ BSD นั้นมีความแตกต่างในสิ่งต่าง ๆ มากกว่าเพียงแค่เคอร์เนล (การตั้งค่าระบบไฟล์โครงสร้างไดเรกทอรีนโยบายการอัพเกรด ฯลฯ )
vesperto

2
การเป็นไบนารีเข้ากันได้กับมันไม่เหมือนกันฉันกลัว @Vesperto ถูกต้องดาร์วินมีความสัมพันธ์ใกล้ชิดกับตระกูล BSD มากกว่า Linux แม้ว่าจะมีเคอร์เนลที่แตกต่างอย่างแน่นอนกว่า BSD อื่น ๆ ฉันคิดว่าคุณน่าจะโชคดีกว่าที่กำลังมองหาคู่มือประเภท BFS มากกว่าคู่มือ LFS BSD Handbook จะเป็นแหล่งอ้างอิงที่ดีอีกแหล่งหนึ่ง คุณยังคงต้องใช้การอ้างอิงของดาร์วินเนื่องจากเป็นข้อมูลที่เกี่ยวข้อง
Jerry W Jackson

คำตอบ:


32

อัปเดต 19 เมษายน 2558:

หลังจากสองปีที่ผ่านมาดูเหมือนว่าจะมีความสนใจน้อยมากในทรงกลมนี้ อย่างไรก็ตามชุมชน Hackintosh ยังคงใช้งานได้ดีซึ่งหมายความว่าหนึ่งในไม่กี่ bootloaders โอเพนซอร์สที่ไม่ใช่แอปเปิ้ลที่สามารถบูต xnu (Chameleon และส้อม) ยังคงได้รับการบำรุงรักษาและสามารถบูตโยเซมิตี นอกจากนี้ยังมีเรื่องราวความสำเร็จในการบู๊ต OS X Yosemite ภายใน QEMU นอกจากนี้ต้องขอบคุณ (ตอนนี้แอปเปิ้ลจ้าง) นักพัฒนาที่ไปด้วยจับwinocmเรามีพอร์ต ARM ของเคอร์เนล เธอเป็นนักพัฒนาที่กระตือรือร้นที่สุดที่ฉันรู้จักในเรื่องนี้

นอกจากนี้ยังมีภาคต่อของ Mac OS X Internals ของ Amit Singh ในเร็ว ๆ นี้ ฉันมักจะไม่ชอบพูดถึงหน้าส่วนตัวของผู้คน อย่างไรก็ตามเซิร์ฟเวอร์บล็อกที่มีข้อมูลทั้งหมดดูเหมือนจะไม่น่าเชื่อถือเล็กน้อยดังนั้นโปรดดูกล่องข้อมูลในหน้า Twitter ของ ameaijou

ฉันจัดการเพื่อสร้าง toolchain สำหรับการพัฒนาของ Apple (โฮสต์ด้วยตัวเองอย่างไรก็ตาม "Darwin SDK" ก็ถูกส่งไปยัง Linux ด้วย ) ฉันเชื่อว่าระบบปฏิบัติการของดาร์วินอาจเป็นไปได้ที่จะสร้างตั้งแต่เริ่มต้น - เกี่ยวกับสิ่งที่เราอาจขาดหายไปคือ Kexts โอเพนซอร์สบางตัว ดูพื้นที่นี้และถ้าคุณรู้วิธีที่จะเพิ่มความสนใจให้ฉันรู้! :)


คำตอบสั้น ๆ สำหรับคำถามนี้:

ในทางเทคนิค:ใช่

จวน:ไม่มี *

ด้วย Binary Cheats:อาจเป็นไปได้ แต่ยังไม่ถูกกฎหมาย (ยังไม่ทดลอง)

ด้วย Binary Cheats สำหรับฮาร์ดแวร์ทั่วไป: ดังกล่าวข้างต้น (ยังไม่ทดลอง)

* ยกเว้นว่าคุณทำงานที่ Apple (* ล้างคอในทิศทางทั่วไปของ California *)


คำตอบอีกต่อไป:

นี่จะค่อนข้างยาว ฉันแนะนำกาแฟ หากคุณไม่มีเวลา / ความชอบในการอ่านทั้งหมดคุณสามารถข้ามไปที่ "การสรุปข้อสังเกต"

เป็นไปได้จริง (ไม่):

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

จุดเปลี่ยนที่สำคัญที่น่าประหลาดใจคือการเปิดตัว Darwin 10 ซึ่งนำ xnu มาสู่ x86_64-land แหล่งข้อมูลที่จำเป็นส่วนใหญ่อยู่ในช่วงก่อนหน้านั้น แต่เป็น x86 เท่านั้น เมื่อเวลาผ่านไปความหมายของ "โอเพ่นซอร์ส" ของ Apple ดูเหมือนจะเปลี่ยนเป็น "โอเพ่นซอร์สบนฮาร์ดแวร์ของ Apple เท่านั้น" เนื่องจาก KEXT ของ Apple นั้นมีเฉพาะฮาร์ดแวร์ที่มีขนาดใหญ่ดังนั้นแม้ว่าคุณจะสามารถทำทุกอย่างได้แล้ว ใช้งาน (ดูด้านล่าง) คุณจะยังคงถูกกักขังอยู่ในฮาร์ดแวร์ของ Apple

เป็นไปได้ทางเทคนิค (ใช่):

อย่างไรก็ตามทั้งหมดจะไม่สูญหาย คู่มือ LFS มีประโยชน์และแน่นอนว่าการตั้งค่าที่จำเป็นทั้งหมดสามารถทำได้โดยไม่ต้องสร้างระบบปฏิบัติการของดาร์วิน นอกจากนี้ขั้นตอนที่นำเสนอยังช่วยให้คุณมีโรดแมพใกล้เคียงกับลบเคอร์นัล KEXT และ bootloader ฉันจัดการเพื่อแก้ไขปัญหา bootloader แต่ (อย่างน้อยสำหรับฮาร์ดแวร์ Apple)

หากคุณสนใจนี่เป็นภาพรวมทั้งหมดของสิ่งที่คุณต้องทำ:

  • ลบพาร์ติชัน (8 GB หรือใหญ่กว่า) บนไดรฟ์ (ภายในหรือภายนอก - ไม่สำคัญ) และฟอร์แมตเป็น Mac OS Extended (Journaled) (HFS +)
  • ตรวจสอบให้แน่ใจว่ามี GUID Partition Table (GPT) และเมื่อคุณมีพาร์ติชัน EFI วิธีที่ง่ายที่สุดในการทำเช่นนี้คือผ่าน Disk Utility ของ Apple แต่คุณสามารถทำได้บนบรรทัดคำสั่งหากคุณต้องการ (มีแบบฝึกหัดอื่น ๆ จุดสำคัญคือเมื่อคุณเรียกใช้distil list diskNsMข้อมูลต่อไปนี้ควรถูกต้อง:

    ประเภทพาร์ติชัน: Apple_HFS

    สามารถติดตั้งระบบปฏิบัติการได้: ใช่

    สื่อแบบอ่านอย่างเดียว: ไม่

    ปริมาณการอ่านอย่างเดียว: ไม่

  • ตอนนี้ให้ทำตามคำแนะนำ LFS (พร้อมการดัดแปลง)

  • ใส่(โดยใช้จุดเมานท์จริง, ชัดแจ้ง) ลงในและDFS=/Volumes/DarwinOS.bashrc.bash_profile

  • ทำไดเรกทอรีผู้ใช้ ( chownเป็น 0: 0 ที่สุด):

    sudo mkdir -v "$DFS"/usr
    
  • ใส่root:

    sudo su -
    
  • ทำไดเรกทอรีต้นทางและตั้งค่าบิตเหนียว:

    mkdir -v "$DFS"/sources     # Make sure you still have $DFS defined; if not, redefine it.
    chmod -v a+wt "$DFS"/sources
    
  • สร้างไดเรกทอรีเครื่องมือและสร้าง symlink ขึ้นมาเพื่อให้เราสามารถเพิ่มเข้าไปใน $ PATH ได้อย่างง่ายดายในภายหลัง (ยังอยู่ในrootทาง):

    mkdir -v "$DFS"/tools
    ln -sv "$DFS"/tools /
    logout          # Leave root
    
  • ดาวน์โหลดที่มาของแพ็คเกจทั้งหมดที่คุณต้องการ แน่นอนนี่คือสิ่งที่คุณติดอยู่ สิ่งที่จำเป็นทั้งหมดไม่ได้อยู่ที่นั่น (บังเอิญฉันชอบ GNU binutilsอยู่ดี)

สมมติว่าคุณสามารถดาวน์โหลดทุกสิ่งที่คุณต้องการได้ในทันที

  • สร้างผู้ใช้ที่ด้อยโอกาสโดยเฉพาะสำหรับ DFS (แนะนำโดย LFS):

    sudo dscl . -create /Users/lfs
    sudo dscl . -create /Users/lfs UserShell /bin/bash
    sudo dscl . -create /Users/lfs RealName "LFS DFS"
    sudo dscl . -create /Users/lfs UniqueID "2070"      # whatever you like
    sudo dscl . -create /Users/lfs PrimaryGroupID 20    # Default 'staff'
    sudo dscl . -create /Users/lfs NFSHomeDirectory /Users/lfs
    sudo dscl . -passwd /Users/lfs dfs          # Again to taste.
    
  • หมายเหตุคุณต้องสร้าง homedir ของผู้ใช้ใหม่ด้วยตนเองบน Mac:

    sudo mkdir /Users/lfs
    sudo chown -R lfs:staff /Users/lfs/
    
  • ตอนนี้ให้สิทธิ์ผู้ใช้ใหม่เข้าถึงแหล่งที่มาและเครื่องมือ

    sudo chown -v lfs $DFS/tools
    sudo chown -v lfs $DFS/sources
    
  • เข้าสู่ระบบ:

    su - lfs
    Password: dfs
    
  • รันคำสั่งต่อไปนี้เพื่อล้างสภาวะแวดล้อม (จาก LFS):

    cat > ~/.bash_profile << "EOF"
    echo "Entering clean environment…"
    exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
    EOF
    
  • ตอนนี้รันคำสั่งต่อไปนี้ (ดู LFS สำหรับสิ่งที่มันทำถ้าคุณไม่แน่ใจ):

    cat > ~/.bashrc << "EOF"
    set +h
    umask 022
    DFS=/Volumes/*DarwinOS*     # As previously
    LC_ALL=POSIX
    LFS_TGT=$(uname -m)-dfs-darwin1242  # Look inside gcc/configure for possibilities!
    PATH=/tools/bin:/bin:/usr/bin       # Note symlink from before
    export LFS LC_ALL LFS_TGT PATH
    echo ".bashrc script complete. Environment is ready."
    EOF
    
  • GCC /configureนั้นค่อนข้างยืดหยุ่น ลอง grepping *-รูปแบบหรือเพียงแค่เรียกใช้gcc -vเพื่อดูวิธีการกำหนดค่าเครื่องโฮสต์ของคุณและคัดลอกที่

  • ตอนนี้ออกจากระบบของผู้ใช้ lfs และเข้าสู่ระบบตอนนี้คุณควรมีสภาพแวดล้อมที่สะอาด
  • ทุกอย่างจะเกิดขึ้นภายในผู้ใช้ lfs คุณจะสังเกตเห็นว่าฉันขี้เกียจเล็กน้อยในการแปลงครึ่งสัญลักษณ์ 'LFS' เป็นสัญลักษณ์ 'DFS' ขออภัยเกี่ยวกับเรื่องนี้ แต่คุณได้รับแนวคิด

โอเคตอนนี้กับส่วนสมมุติ

จากที่นี่มันเป็นขั้นตอนมาตรฐาน LFS ที่ค่อนข้างดี: แยกซอร์สสร้างติดตั้งทดสอบลบแหล่งที่มา โปรดทราบว่า binutils 2 รอบ, GCC และ Glibc ยังคงมีความจำเป็น แต่คุณต้องมีสำเนาที่ใช้งานได้libc++.1.dylib- และคุณจะต้องทำเช่นนั้นใน 2 รอบ คุณสามารถดูหน้า libcxxของโครงการ LLVM สำหรับรายละเอียดเพิ่มเติมเล็กน้อย /usr/libเมื่อรวบรวมคุณสามารถวางไว้ใน คุณจะต้องรวบรวมและติดตั้งเคอร์เนล xnu (มีบทเรียนไม่กี่เว็บสำหรับวิธีการทำเช่นนั้น) แล้วติดตั้ง KEXT แม้ว่า KEXT ที่จำเป็นทั้งหมดนั้นมีอยู่คุณยังคงต้องใส่ลงในแพ็คเกจ. kext ด้วยมือ อีกครั้งมีบทช่วยสอนสำหรับวิธีฝีมือ KEXT ในบรรทัดคำสั่ง

บิตสุดท้ายคือการทำให้ระบบสามารถบูตได้ ในการทำเช่นนั้นคุณจะต้องรันคำสั่งต่อไปนี้:

 "$DFS/usr/sbin/bless" --folder "$MOUNT/System/Library/CoreServices" --bootefi --verbose

ที่จริงแล้วสถานที่ให้พรไม่ได้สร้างความแตกต่างจริงๆ โฟลเดอร์นั้นเป็นเพียงมาตรฐานของ Apple

ในกรณีใด ๆ สมมติว่าเคอร์เนลและ kexts อยู่ในสถานที่ที่เหมาะสมที่คุณมีสำเนาที่เหมาะสมของdyld, launchdฯลฯ ในสถานที่และboot.efiทำงานได้อย่างถูกต้องระบบควรจะทำงานและสามารถบูตได้!

หมายเหตุถ้าคุณต้องการให้คุณเรียกใช้มารยาทlaunchdซึ่งเป็นเพียงสคริปต์เพื่อเรียกใช้ bash prompt นั่นคือสิ่งที่PureDarwin Nanoทำ

อีกครั้งโดยทั้งหมดให้เขียน KEXTs และไบนารีด้วยตัวคุณเองหากคุณต้องการ - เป็นไปได้ในทางเทคนิค เพียงโทรหาฉันเมื่อคุณทำเสร็จแล้ว


ด้วย Binary Cheats: อาจเป็นไปได้ แต่ยังไม่ถูกกฎหมาย (ยังไม่ทดลอง)

ดังนั้นทำไมคุณไม่สามารถริปแบบไบนารี KEXT และไฟล์ที่ต้องการจาก Mountain Lion ให้พรได้ปริมาณและไป? คุณก็สามารถทำได้ แต่คุณต้องมีใบอนุญาตในการทำเช่นนี้ นอกจากนี้หากคุณทำสิ่งนี้คุณเพียงแค่สร้างสำเนาของ Mountain Lion นั่นไม่ใช่จุดที่ใช่มั้ย

ด้วย Binary Cheats สำหรับฮาร์ดแวร์ทั่วไป: ดังกล่าวข้างต้น (ยังไม่ทดลอง)

นี่เป็นโครงการ OSx86 อีกครั้งที่คุณพบเจอปัญหาทางกฎหมายในทันที ไม่ต้องสงสัยเลยว่าวิธีการสองวิธีสุดท้ายนี้เป็นไปได้อย่างแน่นอนความจริงที่ว่าคุณสามารถเรียกใช้ Mountain Lion บนฮาร์ดแวร์ทั่วไปเป็นข้อพิสูจน์ได้ - แต่ประเด็นทั้งหมดนี้ก็คือการรวบรวมระบบปฏิบัติการดาร์วินของคุณเองจากแหล่งกำเนิด


หมายเหตุด้านข้าง

คุณอาจสังเกตเห็นว่าฉันตั้งใจหลีกเลี่ยงสิ่งใด 32- บิต ในโลกที่ทุก ๆ ระบบปฏิบัติการที่สำคัญมีอยู่ใน 64- บิตมีจุดไม่มากในการรวบรวม 32- บิตหนึ่ง แอปเปิ้ลไม่จริงให้ภาพดิสก์ของดาร์วิน (จนถึงดาร์วิน 9) ที่นี่ มันทำงานได้อย่างสมบูรณ์บนกล่อง Windows ของฉัน

สรุปข้อสังเกต

ฉันเดาว่าในตอนท้ายของวันคนไม่ซื้อ Mac สำหรับดาร์วินพวกเขาซื้อ Mac สำหรับ Aqua ด้วยเหตุนี้การสนับสนุนดาร์วินในฐานะผลิตภัณฑ์โอเพ่นซอร์สแบบสแตนด์อโลนจึงค่อย ๆ ลดลงจนถึงจุดที่เป็นเพียงการแสดงสัญลักษณ์ของชุมชนโอเพ่นซอร์ส ความจริงที่น่าขันเล็กน้อยอีกประการหนึ่งคือเพื่อเรียนรู้เกี่ยวกับสิ่งนี้มากมายคุณต้องกระโดดเข้าสู่โครงการ OSx86 ซึ่งไม่ได้ถูกลงโทษอย่างแน่นอน ถึงอย่างนั้นก็ยังมีข้อมูลไม่มากนัก PureDarwinเป็นจุดเริ่มต้นที่ยอดเยี่ยมและหนังสือของ Jonathan Levin เป็นหนังสืออ้างอิงที่ทรงคุณค่าสำหรับทุกสิ่งที่ xnu

นี่เป็นปีแห่งการศึกษาที่ยิ่งใหญ่มากและฉันก็ดีใจที่รู้วิธีการทำอย่างที่ฉันอยากจะทำ ฉันจะต้องหยุดทำงานในบางช่วงแม้ว่าตอนนี้เป็นเวลานั้นแล้ว ในฐานะที่เป็นคนสุดท้ายที่ไร้ประโยชน์ตะโกนออกไปที่ Apple มันจะมากเกินไปไหมถ้าคุณขอให้ดาร์วินสร้างอีกหนึ่งครั้งเมื่อคุณปล่อย Mavericks?


1

เห็นได้ชัดว่าคุณได้รับการยอมรับว่า LFS สำหรับ Linux และดาร์วินแตกต่างจาก Linux LFS อย่างมากดังนั้นจึงเป็นเรื่องง่ายเกินกว่าความพยายามของบุคคลคนเดียวในการประยุกต์ใช้ LFS กับระบบดาร์วิน

มีชุมชนจำนวนมากพยายามที่จะแทนที่ / ปรับปรุงระบบดาร์วิน ในขณะที่โครงการ OpenDarwin ไม่ประสบความสำเร็จมากเดารหัสโดย Apple ยากเกินไปในขณะที่ยังมีอีกหนึ่งโครงการที่เหลือ
PureDarwin : PureDarwin SourceForge
PureDarwin HomePage

รับบัญชีนักพัฒนาซอฟต์แวร์อันดับแรกคว้าเครื่องมือสร้างของพวกเขาจากนั้นคุณสามารถทำตามขั้นตอนในการสร้างเคอร์เนลของคุณเอง

เคอร์เนลของดาร์วินไม่ได้มีสถาปัตยกรรมเดียวกันกับ Linux Kernel ดังนั้นจึงไม่สามารถแทนที่ด้วย Linux Kernel ได้ดังนั้นคุณต้องรวบรวม

ที่จริงแล้วสิ่งที่คุณต้องทำคือติด 100% กับโครงการ PureDarwin จากนั้นเรียกสคริปต์ต่อไปนี้: Google Code - เคอร์เนลสวิตช์ดาร์วินบริสุทธิ์ด้วยเคอร์เนลรูปภาพที่คุณกำหนดเองจะถูกปรับ

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

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