web-dev-qa-db-ja.com

Linux Distroをビルドできるように、ソースからDarwin Distroをコンパイルすることは可能ですか?

Linux From Scratch (およびBLFS)を読み、実施しましたが、このガイドに従って、xnuカーネルを置き換えてDarwin Distroを作成できますか?プロセスはLFSで概説されているものと大きく異なりますか?

私が現在理解しているのは、システムを「Linux」ではなく「Darwin」にするために必要なことはすべてカーネルの代替になるということです。これは正しいです?


編集:

キラーミストのコメントに応じて、私はこの質問を洗練させます。私はこのトピックに関する情報を一般的に探していますが、特に探しているのは、LFSが「Linuxディストリビューション作成ガイド」と同じように、「ダーウィンディストリビューション作成ガイド」のようなものです。

そのような情報は、おそらくPuredarwinOpenDarwinまたはGNU/Darwinからの人々からのみ提供されることを理解しています。 LFSのような「How-We-Made-PureDarwin-Nano-Start-To-Finish」ガイドは完璧だろうが、私はそれが多くを求めていることを知っている。

45
Ephemera

2015年4月19日更新:

2年後も、この領域への関心はまだほとんどないようです。ただし、Hackintoshコミュニティは依然として非常にアクティブです。つまり、xnu(Chameleonおよびfork)をブートできる数少ないアップル以外のオープンソースブートローダーの1つがまだ維持されており、Yosemiteをブートできます。 QEMU内でOS X Yosemiteを起動する成功事例もあります。さらに、ハンドルwinocmを使用する(現在はAppleが採用している)開発者のおかげで、 xnuカーネルのARMポート を使用できます。彼女は私がこの分野で知っている最もアクティブな開発者です。

Amit SinghのMac OS Xの内部 の続編もあります。私は通常、人々の個人的なページについて言及したくない。ただし、すべての情報が含まれるブログサーバーは少し信頼性が低いようです。そのため、 ameaijou's Twitterページの情報ボックスを参照してください。

Appleの開発ツールチェーン(セルフホストですが、「Darwin SDK」 Linuxにも移植されています )を構築できました。 Darwin OSはまだゼロから構築できる可能性があると思います。欠けている可能性があるのは、オープンソースのKextだけです。このスペースを見て、興味を引く方法を知っているなら、知らせてください! :)


この質問に対する短い回答:

技術的に:はい

実質的に:いいえ*

バイナリチートの場合:おそらく、しかし合法的ではない(テストされていない)

汎用ハードウェアのバイナリチート:上記のとおり(テストされていません)

* Apple(* Californiaの一般的な方向で喉をクリアする*)


より長い答え:

これはかなり長くなるでしょう。コーヒーをお勧めします。読むための時間/傾向がない場合は、「結論」に進んでください。

実質的に可能(いいえ):

悲しいことに、Appleは、ソースから純粋にDarwin OSのコンパイルを可能にするために、あまりにも多くの Darwinに必要なKEXTs およびバイナリのソースコードを撤回しました。可能です(自分でソースを作成して適切に修正することもできます)が、これを行うための時間、スキル、または傾向がまったくありません(そして、クラウドファンディングコミュニティは非常に興味があると思います)。

当然のことながら、重要な転換点は、xnuをx86_64ランドにもたらしたDarwin 10のリリースでした。必要なソースのほとんどはそれ以前にありましたが、x86のみでした。時間が経つにつれ、Appleの「オープンソース」の意味は「Appleのハードウェアのみのオープンソース」にシフトしたように見えます。これは、AppleのKEXTが大まかにハードウェア固有であるため、すべてを取得して、実行中(下記参照)、Appleハードウェアに限定されます。

技術的に可能(はい):

ただし、すべてが失われるわけではありません。 LFSガイドは便利で、確かに必要なセットアップはすべて、実際にDarwin OSをビルドしなくても実行できます。さらに、提示された手順は、カーネル、KEXT、およびブートローダーを除いた、先のパスのほぼ正確なロードマップを提供します。でも、ブートローダーの問題はなんとか解決しました(少なくともAppleハードウェアの場合))。

興味がある場合は、次の手順を実行する必要があります。

  • ドライブ(内部または外部-重要ではありません)のパーティション(できれば8 GB以上)を消去し、Mac OS拡張(ジャーナリング)(HFS +)としてフォーマットします。
  • GUIDパーティションテーブル(GPT)があり、EFIパーティションがあることを確認します。これを行う最も簡単な方法は、Appleのディスクユーティリティを使用することですが、コマンドで実行できます。必要に応じて行を追加します(これを行う方法に関するチュートリアルは他にもあります)重要な点は、distil list diskNsMを実行する場合、次の情報が正しいことです。

    パーティションタイプ:Apple_HFS

    OSはインストールできます:はい

    読み取り専用メディア:いいえ

    読み取り専用ボリューム:いいえ

  • 次に、LFSガイド(適応あり)に従います。

  • DFS=/Volumes/DarwinOSを(実際のマウントポイントを使用して).bashrcおよび.bash_profileに挿入します

  • ユーザーディレクトリを作成します(最後にchown itを0:0にします):

    Sudo mkdir -v "$DFS"/usr
    
  • rootを入力:

    Sudo su -
    
  • Sourcesディレクトリを作成し、スティッキービットを設定します。

    mkdir -v "$DFS"/sources     # Make sure you still have $DFS defined; if not, redefine it.
    chmod -v a+wt "$DFS"/sources
    
  • Toolsディレクトリを作成し、シンボリックリンクを作成して、後で簡単に$ 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.
    
  • 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、GCC、およびGlibcの2つのパスは依然として必要ですが、libc++.1.dylibの作業用コピーも必要です。また、2つのパスでそれを行う必要があります。詳細については、LLVMプロジェクトの libcxxページ を参照してください。コンパイルしたら、/usr/libに配置できます。 xnuカーネルをコンパイルしてインストールし(その方法については、Webの周りに いくつかのチュートリアル があります)、KEXTをインストールする必要があります。必要なKEXTがすべて利用可能であっても、手動で.kextパッケージに入れる必要があります。繰り返しますが、コマンドラインでKEXTを手作りする方法については、 are tutorials を参照してください。

最後のビットは、システムを起動可能にすることです。そのためには、次のコマンドを実行します。

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

実際、祝福する場所は実際には違いはありません。そのフォルダはただのアップル標準です。

いずれにせよ、カーネルとKEXTが適切な場所にあると想定すると、dyldlaunchdなどの適切なコピーが適切にあり、boot.efiが正しく機能していた場合、システムは動作し、起動可能です!

本当にしたい場合は、bashプロンプトを実行するための単なるスクリプトであるfaux -launchdを実行できます。これは PureDarwin Nano が行うことです。

ここでも、必要に応じて、KEXTとバイナリを自分で作成します。技術的にはです。終わったら電話してください。


バイナリチートの場合:おそらく、しかし合法的ではない(テストされていない)

それでは、なぜバイナリ、KEXT、および必要なファイルをMountain Lionからリッピングし、ボリュームを祝福して実行できないのでしょうか。まあ、あなたはおそらくできます。ただし、これを行うにはライセンスも必要です。また、これを行うと、基本的にマウンテンライオンのコピーが作成されます。そういう意味ではそうではないですか?

汎用ハードウェアのバイナリチート:上記のように(テストされていません)

これはOSX86プロジェクトです。繰り返しになりますが、法的問題にすぐに遭遇します。これらの最後の2つの方法が間違いなく可能であることは間違いありません。MountainLionを汎用ハードウェアで実行できるという事実はその証拠ですが、これの全体のポイントは、ソースから独自のDarwin OSを合法的にコンパイルできることでした。


サイドノート

私が32ビットのものを意図的に避けていることに気づいたかもしれません。すべての主要なOSが64ビットで利用できる世界では、32ビットのものをコンパイルしても意味がありません。 Apple実際にDarwinのディスクイメージを提供しました(Darwin 9まで) here 。それらは私のWindowsボックスで完全に動作しました。

おわりに

結局のところ、人々はダーウィン用にMacを購入するのではなく、Aqua用にMacを購入します。その結果、スタンドアロンのオープンソース製品としてのDarwinのサポートは徐々に減少し、オープンソースコミュニティにとっては単なるトークンジェスチャーに過ぎません。他のわずかに皮肉な事実は、これの多くについて学ぶために、OSx86プロジェクトに直接ジャンプする必要があるということです。それでも、周りに多くの情報はありません。 PureDarwin は優れた出発点であり、 Jonathan Levinの本 はxnuに関するすべての貴重なリファレンスです。

今年は非常に教育的な年でした。実際に行うのと同じくらい、その方法を知って幸せです。いつかは作業をやめなければならないので、今がその時です。アップルに最後の無益な叫び声をあげて、あなたがマーベリックスをリリースするときにダーウィンのビルドをもう1つだけ持つように要求するのは多すぎるでしょうか?

35
Ephemera

明らかに、LFSはLinux用であり、Darwinは適用されているLinux LFSとは大きく異なるため、LFSをDarwinシステムに適用するのは、一人でやるよりも簡単です。

ダーウィンのシステムを置き換えたり改善したりする多くのコミュニティの試みがあります。 OpenDarwinプロジェクトはあまり成功していませんが、Apple=によるコードは難しすぎますが、プロジェクトPureDarwinはまだ1つ残っています。
PureDarwin SourceForge
PureDarwin HomePage

まず開発者アカウントを取得し、ビルドツールを入手してから、独自のカスタムカーネルを作成する手順を入手します。

Darwin KernelはLinux Kernelと同じアーキテクチャを持っていないため、Linux Kernelで置き換えることはできないため、コンパイルする必要があります。

実際に行う必要があるのは、PureDarwinプロジェクトを100%固執し、次のスクリプトを呼び出すことです: Google Code-Pure Darwin Switch Kernel with custom作成したカーネルイメージは問題ありません。

しかし、適切に機能するダーウィンカーネルを構築する方法に関しては、これは新しい質問です。

1
user218473