Có thể biên dịch Darwin Distro từ nguồn, giống như bạn có thể xây dựng Linux Distro không?


42

Tôi đã đọc qua và thực hiện Linux From Scratch (và BLFS) và tôi đã tự hỏi, liệu tôi có thể làm theo hướng dẫn này để tạo Darwin Distro bằng cách thay thế xnukernel không? Liệu quy trình có khác nhiều so với quy trình được nêu trong LFS không?

Sự hiểu biết hiện tại của tôi là tất cả những gì sẽ được yêu cầu để làm cho hệ thống "Darwin" chứ không phải "Linux" sẽ là sự thay thế hạt nhân. Điều này có đúng không?


BIÊN TẬP:

Đáp lại bình luận của killermist, tôi sẽ tinh chỉnh câu hỏi này. Mặc dù tôi đang tìm kiếm thông tin về chủ đề này nói chung, nhưng điều tôi đặc biệt tìm kiếm là một cái gì đó giống như " Hướng dẫn sáng tạo phân tán Darwin " giống như LFS là " Hướng dẫn tạo phân phối Linux ".

Tôi đánh giá cao những thông tin như vậy có lẽ sẽ chỉ đến từ những người đến từ Puredarwin , OpenDarwin hoặc GNU / Darwin vì vậy đây là một lời kêu gọi họ giúp đỡ. Hướng dẫn " How-We-Made-PureDarwin-Nano-Start-To-Finish " như LFS sẽ rất hoàn hảo, nhưng tôi biết điều đó đang hỏi rất nhiều.


3
Có lẽ đáng để nhìn vào puredarwin để xem điều gì sẽ xảy ra khi xây dựng một bản phân phối dựa trên darwin (và những vấn đề mà họ và opWikiwin phải đối mặt trong việc này)
Journeyman Geek

1
Đối với người dùng thông thường, cả hai nhân trông rất giống nhau, nhưng phần mềm được sử dụng để quản lý kernel và phần mềm liên quan mật thiết với nó (bao gồm cả libc) thì hoàn toàn khác nhau. Tài liệu LFS sẽ không giúp ích nhiều trong các bước đầu tiên quan trọng này. Có lẽ bắt đầu từ (hoặc ít nhất là nghiên cứu) nhánh Debian của kFreeBSD có liên quan hơn.
vonbrand

1
Gợi ý: Nếu bạn thực sự đặt câu hỏi về những gì bạn đang cố gắng thực hiện, cả hai bạn đều tăng cơ hội tìm thấy câu trả lời trong các câu hỏi đã có, nhưng cũng tăng khả năng nó sẽ thu hút nhiều người hơn với ý tưởng về cách trả lời câu hỏi . Trái ngược với việc bị nhầm lẫn câu hỏi thực sự là gì. Chỉ là một ý nghĩ.
sát thủ

1
Darwin có phần dựa trên BSD, khác với Linux. Cách làm của BSD khác với nhiều thứ hơn là chỉ nhân (tùy chọn hệ thống tệp, cấu trúc thư mục, chính sách nâng cấp, v.v.).
vesperto

2
Tương thích nhị phân không phải là điều tương tự, tôi sợ. @Vesperto đã đúng, Darwin liên quan mật thiết đến gia đình BSD hơn là Linux; mặc dù với một kernel quyết định khác với các BSD khác. Tôi nghĩ rằng bạn sẽ có may mắn hơn khi tìm kiếm một hướng dẫn loại BFS hơn là hướng dẫn dựa trên LFS. Cẩm nang BSD sẽ là một nguồn tham khảo tốt khác. Bạn vẫn sẽ cần sử dụng tài liệu tham khảo Darwin của bạn cho thông tin liên quan.
Jerry W Jackson

Câu trả lời:


32

Cập nhật ngày 19 tháng 4 năm 2015:

Sau hai năm vẫn xuất hiện rất ít sự quan tâm đến lĩnh vực này. Tuy nhiên, cộng đồng Hackffy vẫn hoạt động mạnh mẽ, có nghĩa là một trong số ít các bộ tải khởi động không phải của Apple có khả năng khởi động xnu (Chameleon và dĩa) vẫn được duy trì và có thể khởi động Yosemite. Cũng có những câu chuyện thành công khi khởi động OS X Yosemite trong QEMU. Hơn nữa, nhờ một nhà phát triển (hiện đang làm việc cho Apple), người điều khiển winocm , chúng tôi có một cổng ARM của hạt nhân xnu . Cô ấy là nhà phát triển tích cực nhất mà tôi biết trong lĩnh vực này.

Sắp có phần tiếp theo của Mac OS X Internals của Amit Singh sắp ra mắt. Tôi thường không muốn đề cập đến trang cá nhân của mọi người; tuy nhiên, máy chủ blog với tất cả thông tin dường như không đáng tin cậy một chút, vì vậy hãy xem hộp thông tin trên trang Twitter của ameaoman .

Tôi đã quản lý để xây dựng chuỗi công cụ phát triển của Apple (một máy chủ tự lưu trữ, tuy nhiên "SDK Darwin" cũng đã được chuyển sang Linux ). Tôi tin rằng một hệ điều hành Darwin có thể chưa thể xây dựng từ đầu - về tất cả những gì chúng ta có thể thiếu là một số Kexts nguồn mở. Xem không gian này, và nếu bạn biết làm thế nào để thu hút sự quan tâm, hãy cho tôi biết! :)


Câu trả lời ngắn cho câu hỏi này:

Về mặt kỹ thuật:

Thực tế: Không *

Với trò chơi nhị phân: Có thể, nhưng cũng không hợp pháp (chưa được kiểm tra)

Với Binary Cheats cho phần cứng chung: Như trên (chưa được kiểm tra)

* trừ khi bạn làm việc tại Apple (* hắng giọng theo hướng chung của California *)


Câu trả lời dài hơn:

Điều này sẽ khá dài. Tôi đề nghị cà phê. Nếu bạn không có thời gian / thiên hướng để đọc tất cả, bạn có thể bỏ qua phần "Nhận xét kết luận".

Thực tế có thể (Không):

Đáng buồn thay, Apple đã rút mã nguồn cho quá nhiều KEXT và nhị phân cần thiết của Darwin để làm cho việc biên dịch hệ điều hành Darwin hoàn toàn từ nguồn có thể. Về mặt kỹ thuật vẫn có thể (bạn có thể tự viết nguồn để vá nó đúng cách), nhưng tôi đơn giản là không có thời gian, kỹ năng hoặc thiên hướng để làm điều này (và tôi nghi ngờ cộng đồng tài trợ đám đông sẽ rất quan tâm).

Không có gì đáng ngạc nhiên khi điểm bùng phát quan trọng là việc phát hành Darwin 10, đã đưa xnu vào x86_64-đất. Hầu hết các nguồn cần thiết là khoảng trước đó, nhưng chỉ là x86. Khi thời gian trôi qua, ý nghĩa của "Nguồn mở" của Apple dường như đã chuyển sang "Chỉ nguồn mở trên phần cứng của Apple" vì các KEXT của Apple hiện đang đặc biệt về phần cứng, vì vậy ngay cả khi bạn có thể nhận được mọi thứ và đang chạy (xem bên dưới) bạn vẫn sẽ bị giới hạn trong phần cứng của Apple.

Về mặt kỹ thuật có thể (Có):

Tuy nhiên, tất cả là không bị mất. Hướng dẫn LFS đã có ích và chắc chắn tất cả các thiết lập cần thiết có thể được tiến hành mà không thực sự xây dựng HĐH Darwin. Hơn nữa, các bước được trình bày cung cấp cho bạn một lộ trình gần như chính xác của con đường phía trước, trừ hạt nhân, KEXT và bộ nạp khởi động. Tôi đã quản lý để giải quyết vấn đề bootloader, (ít nhất là đối với phần cứng của Apple).

Nếu bạn quan tâm, đây là tổng quan đầy đủ về những gì bạn sẽ phải làm:

  • Xóa phân vùng (tốt nhất là 8 GB hoặc lớn hơn) trên ổ đĩa (bên trong hoặc bên ngoài - không quan trọng) và định dạng nó dưới dạng Mac OS Extended (Nhật ký) (HFS +).
  • Đảm bảo nó có Bảng phân vùng GUID (GPT) và khi bạn thực hiện thì nó có phân vùng EFI. Cách dễ nhất để thực hiện việc này là thông qua Tiện ích đĩa của Apple, nhưng bạn có thể thực hiện trên dòng lệnh nếu muốn (có hướng dẫn ở nơi khác về cách thực hiện việc này). Điểm quan trọng là khi bạn chạy distil list diskNsM, thông tin sau phải chính xác:

    Loại phân vùng: Apple_HFS

    Hệ điều hành có thể được cài đặt: Có

    Phương tiện chỉ đọc: Không

    Tập chỉ đọc: Không

  • Bây giờ để làm theo hướng dẫn LFS (có thích ứng).

  • Chèn (sử dụng điểm gắn kết thực tế, rõ ràng) vào vàDFS=/Volumes/DarwinOS.bashrc.bash_profile

  • Tạo thư mục người dùng ( chowncuối cùng là 0: 0):

    sudo mkdir -v "$DFS"/usr
    
  • Nhập root:

    sudo su -
    
  • Tạo thư mục nguồn và thiết lập bit dính:

    mkdir -v "$DFS"/sources     # Make sure you still have $DFS defined; if not, redefine it.
    chmod -v a+wt "$DFS"/sources
    
  • Tạo thư mục công cụ và tạo một liên kết tượng trưng cho nó để chúng ta có thể dễ dàng thêm nó vào $ PATH sau (vẫn rootbằng cách này):

    mkdir -v "$DFS"/tools
    ln -sv "$DFS"/tools /
    logout          # Leave root
    
  • Tải về nguồn của tất cả các gói bạn muốn. Đây là, tất nhiên, nơi bạn bị mắc kẹt. Tất cả những thứ cần thiết không có ở đó. (Ngẫu nhiên, tôi thích GNU hơn binutils.)

Giả sử trên thực tế bạn có thể tải xuống tất cả những thứ bạn cần, hãy nhấn vào.

  • Tạo một người dùng bị thiệt thòi đặc biệt cho DFS (được đề xuất bởi 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.
    
  • Lưu ý rằng bạn phải tạo homedir của người dùng mới theo cách thủ công trên máy Mac:

    sudo mkdir /Users/lfs
    sudo chown -R lfs:staff /Users/lfs/
    
  • Bây giờ cấp cho người dùng mới quyền truy cập vào các nguồn và công cụ

    sudo chown -v lfs $DFS/tools
    sudo chown -v lfs $DFS/sources
    
  • Đăng nhập:

    su - lfs
    Password: dfs
    
  • Chạy lệnh sau để làm sạch môi trường (từ LFS):

    cat > ~/.bash_profile << "EOF"
    echo "Entering clean environment…"
    exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
    EOF
    
  • Bây giờ hãy chạy lệnh sau (xem LFS để biết nó làm gì nếu bạn không chắc chắn):

    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 /configurelà khá linh hoạt. Hãy thử lấy *-mẫu hoặc chỉ chạy gcc -vđể xem cách máy chủ của bạn được cấu hình và sao chép mẫu đó.

  • Bây giờ hãy đăng xuất khỏi người dùng lfs và đăng nhập lại. Bây giờ bạn sẽ có một môi trường sạch sẽ.
  • Mọi thứ từ bây giờ diễn ra bên trong người dùng lfs. Bạn sẽ nhận thấy tôi hơi lười biếng khi chỉ chuyển đổi một nửa biểu tượng 'LFS' thành biểu tượng 'DFS'. Xin lỗi về điều đó nhưng bạn có được ý tưởng.

Được rồi bây giờ đến phần giả thuyết.

Từ đây trở đi, đây sẽ là quy trình LFS tiêu chuẩn: Trích xuất nguồn, xây dựng, cài đặt, kiểm tra, xóa nguồn. Lưu ý rằng 2 lượt binutils, GCC và Glibc vẫn cần thiết NHƯNG bạn C haveNG phải có một bản sao hoạt động libc++.1.dylib- và bạn cũng cần phải làm điều đó trong 2 lượt. Bạn có thể xem trang libcxx của dự án LLVM để biết thêm chi tiết. Sau khi biên dịch, bạn có thể đặt nó vào /usr/lib. Bạn sẽ cần phải biên dịch và cài đặt kernel xnu (có một vài hướng dẫn trên web để biết cách thực hiện) và sau đó cài đặt KEXTs. Ngay cả khi tất cả các KEXT yêu cầu đã có sẵn, bạn vẫn cần phải đặt chúng vào gói .kext bằng tay. Một lần nữa, có các hướng dẫn về cách tạo thủ công KEXT trên dòng lệnh.

Bit cuối cùng là làm cho hệ thống có khả năng khởi động. Để làm điều đó, bạn sẽ chạy lệnh sau:

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

Trên thực tế, vị trí để ban phước không thực sự tạo ra sự khác biệt. Thư mục đó chỉ là tiêu chuẩn của Apple.

Trong mọi trường hợp, giả định hạt nhân và KEXTs là ở các vị trí bên phải, bạn đã có bản sao hợp lý dyld, launchd, vv tại chỗ và boot.efiđang làm việc một cách chính xác, hệ thống sẽ làm việc và khả năng khởi động!

Lưu ý nếu bạn thực sự muốn, bạn có thể chạy giả - launchdđó chỉ là một tập lệnh để chạy dấu nhắc bash - đó là những gì PureDarwin Nano làm.

Một lần nữa, bằng mọi cách, hãy tự viết KEXT và nhị phân nếu bạn thích - về mặt kỹ thuật có thể. Chỉ cần gọi cho tôi khi bạn hoàn thành.


Với trò chơi nhị phân: Có thể, nhưng cũng không hợp pháp (chưa được kiểm tra)

Vì vậy, tại sao bạn không thể tách các tệp nhị phân, KEXT và các tệp yêu cầu ra khỏi Mountain Lion, ban phước cho âm lượng và đi? Vâng, bạn có thể có thể. Nhưng bạn cũng cần một giấy phép để làm điều này. Ngoài ra, nếu bạn làm điều này, về cơ bản bạn đã tạo một bản sao của Mountain Lion. Đó không phải là loại bên cạnh điểm?

Với Binary Cheats cho phần cứng chung: Như trên (chưa được kiểm tra)

Điều này khá nhiều dự án OSx86. Một lần nữa, bạn gặp khá nhiều vấn đề pháp lý ngay lập tức. Không có câu hỏi nào về hai phương pháp cuối cùng này chắc chắn là có thể - việc bạn có thể chạy Mountain Lion trên phần cứng chung là bằng chứng cho điều đó - nhưng toàn bộ vấn đề này là có thể biên dịch hợp pháp hệ điều hành Darwin của bạn từ nguồn.


Lưu ý bên

Bạn có thể nhận thấy tôi đã cố tình tránh bất cứ thứ gì 32-bit. Trong một thế giới nơi mọi hệ điều hành chính đều có sẵn trong 64 bit, không có nhiều điểm trong việc biên dịch một hệ điều hành 32 bit. Apple thực sự đã cung cấp hình ảnh đĩa của Darwin (cho đến Darwin 9) tại đây . Họ đã làm việc hoàn hảo trên hộp Windows của tôi.

Kết luận

Tôi đoán vào cuối ngày, mọi người không mua Mac cho Darwin, họ mua Mac cho Aqua. Kết quả là, sự hỗ trợ cho Darwin như một sản phẩm nguồn mở độc lập đã dần dần giảm xuống đến mức nó thực sự chỉ là một cử chỉ mã thông báo cho cộng đồng nguồn mở. Một sự thật hơi mỉa mai khác là để tìm hiểu về nhiều thứ này, bạn phải nhảy ngay vào dự án OSx86, vốn không bị xử phạt chính xác (để nói một cách nhạt nhẽo). Ngay cả sau đó, không có nhiều thông tin xung quanh. PureDarwin là một nơi tuyệt vời để bắt đầu, và cuốn sách của Jonathan Levin là một tài liệu tham khảo vô giá cho tất cả mọi thứ xnu.

Đây là một năm làm việc cực kỳ giáo dục và tôi gần như hạnh phúc khi biết cách làm nó như tôi sẽ thực sự làm nó. Tôi sẽ phải dừng công việc ở một số giai đoạn và bây giờ là lúc đó. Như một tiếng hét vô ích cuối cùng với Apple, sẽ là quá nhiều để yêu cầu chỉ có thêm một bản dựng của Darwin khi bạn phát hành Mavericks?


1

Rõ ràng, bạn đã nhận ra rằng LFS dành cho Linux và Darwin rất khác so với LFS Linux được áp dụng, do đó, thật đơn giản ngoài nỗ lực của một người để áp dụng LFS cho các hệ thống Darwin.

Có nhiều nỗ lực của cộng đồng để thay thế / cải thiện các hệ thống Darwin. Trong khi dự án OpenDarwin không thành công lắm, hãy đoán mã của Apple quá khó, trong khi vẫn còn một dự án PureDarwin còn lại:
PureDarwin SourceForge
PureDarwin HomePage

Trước tiên hãy lấy Tài khoản nhà phát triển, Lấy công cụ xây dựng của họ, sau đó bạn có thể thực hiện các bước để tạo Kernel tùy chỉnh của riêng mình.

Hạt nhân Darwin không có cùng kiến ​​trúc với Linux Kernel, vì vậy, nó không thể được thay thế bằng Linux Kernel, vì vậy bạn cần phải biên dịch nó.

Trên thực tế, tất cả những gì bạn cần làm là gắn bó 100% với dự án PureDarwin, sau đó gọi tập lệnh sau: Google Code - Pure Darwin Switch Kernel với các kernel Kernel tùy chỉnh bạn đã thực hiện sẽ ổn.

Nhưng liên quan đến cách xây dựng Hạt nhân Darwin hoạt động tốt, đó sẽ là một câu hỏi mới.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.