GNU/Linux >> Linux の 問題 >  >> Linux

Linux ディストリビューションをビルドできるように、Darwin ディストリビューションをソースからコンパイルすることはできますか?

2015 年 4 月 19 日更新:

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

Amit Singh の Mac OS X Internals の続編も近日公開予定です。私は通常、人々の個人的なページについて言及するのは好きではありません。ただし、すべての情報を含むブログ サーバーは少し信頼性が低いようです。ameaijou の Twitter ページの情報ボックスを参照してください。

Apple の開発ツールチェーンを構築することができました (自己ホストですが、「Darwin SDK」も Linux に移植されています)。 Darwin OS をゼロから構築することはまだ可能であると私は信じています。不足している可能性があるのは、いくつかのオープンソースの Kext だけです。このスペースを見て、関心を高める方法を知っている場合はお知らせください。 :)

この質問に対する簡単な回答:

技術的に: はい

実際には: いいえ*

バイナリ チート: おそらくですが、合法ではありません (テストされていません)

一般的なハードウェアのバイナリ チート: 上記のとおり (未テスト)

*Apple で働いている場合を除きます (*California の一般的な方向で喉をすっきりさせます*)

より長い答え:

これはかなり長くなります。私はコーヒーを提案します。すべてを読む時間/傾向がない場合は、「結びの言葉」にスキップできます。

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

悲しいことに、Apple は Darwin に必要な KEXT とバイナリの多くのソース コードを撤回して、純粋にソースから Darwin OS をコンパイルできるようにしました。技術的にはまだ可能ですが (ソースを自分で書いて適切にパッチを当てることもできます)、私にはこれを行う時間、スキル、または意欲がありません (そして、クラウドファンディング コミュニティが非常に興味を持っているとは思えません)。 /P>

当然のことながら、重要な転換点は、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 最後に 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
    
  • 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 非常に柔軟です。 *- を grep してみてください パターン、または単に gcc -v を実行します ホスト マシンがどのように構成されているかを確認し、それをコピーします。

  • lfs ユーザーからログアウトし、再度ログインします。これで、クリーンな環境ができたはずです。
  • 今後はすべて lfs ユーザー内で行われます。 「LFS」シンボルの半分だけを「DFS」シンボルに変換するのが少し面倒だったことに気付くでしょう。申し訳ありませんが、お分かりいただけたでしょうか。

では仮説のセクションに移りましょう。

ここから先は、標準的な LFS の手順 (ソースの抽出、ビルド、インストール、テスト、ソースの削除) となるでしょう。 binutils、GCC、および Glibc の 2 つのパスは引き続き必要ですが、libc++.1.dylib の作業コピーも必要です。 – そして、これも 2 回のパスで行う必要があります。詳細については、LLVM プロジェクトの libcxx ページを参照してください。コンパイルしたら、 /usr/lib に入れることができます . xnuカーネルをコンパイルしてインストールする必要があります(その方法については、ウェブ上にいくつかのチュートリアルがあります)。次に、KEXTをインストールします。必要なすべての KEXT が利用可能であったとしても、手動でそれらを .kext パッケージに入れる必要があります。ここでも、コマンド ラインで KEXT を手作りする方法のチュートリアルがあります。

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

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

実際、祝福する場所はそれほど違いはありません。そのフォルダは Apple 標準です。

いずれにせよ、カーネルと KEXT が適切な場所にあると仮定すると、dyld の適切なコピーが作成されました。 、 launchd などの場所と boot.efi 正常に動作していました。システムは動作し、起動できるはずです!

本当にしたい場合は、faux-launchd を実行できることに注意してください これは単なる bash プロンプトを実行するためのスクリプトです。それが PureDarwin Nano の機能です。

繰り返しになりますが、必要に応じて KEXT とバイナリを自分で作成してください。 技術的に可能です。終わったら電話してね。

バイナリ チートあり:おそらく、合法ではありません (未テスト)

では、Mountain Lion からバイナリ、KEXT、および必要なファイルをリッピングして、ボリュームをブレスして実行できないのはなぜですか?まあ、あなたはおそらくできるでしょう。ただし、これを行うにはライセンスも必要です。また、これを行うと、基本的には Mountain Lion のコピーを作成したことになります。そんなのは的外れじゃないですか?

一般的なハードウェアのバイナリ チートを使用:上記のとおり (未テスト)

これはほぼ OSx86 プロジェクト。繰り返しになりますが、ほとんどの場合、法的な問題にすぐに遭遇します。これら最後の 2 つの方法が確実に可能であることは間違いありません。一般的なハードウェアで Mountain Lion を実行できるという事実がその証拠です。しかし、これの要点は、独自の Darwin OS をソースから合法的にコンパイルできることでした。

補足

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

結びの言葉

結局のところ、人々は Darwin のために Mac を買うのではなく、Aqua のために Mac を買うのだと思います。その結果、スタンドアローンのオープンソース製品としての Darwin のサポートは徐々に低下し、オープンソース コミュニティへのトークン ジェスチャーに過ぎなくなりました。もう 1 つの少し皮肉な事実は、これについて多くのことを学ぶためには、OSx86 プロジェクトに飛び込まなければならないということです。それでも、周りには多くの情報がありません。 PureDarwin は出発点として最適であり、Jonathan Levin の本は xnu に関するすべての貴重なリファレンスです。

今年は非常に教育的な仕事の年であり、実際にそれを行うのと同じくらい、その方法を知っていることを嬉しく思います.ある段階で作業を停止する必要がありますが、今がその時です。 Apple への最後の無益な叫びとして、Mavericks をリリースするときに Darwin のビルドをもう 1 つだけ要求するのは多すぎますか?


Linux
  1. Linux で Xcode を実行できますか?

  2. ソースから独自の glibc C 標準ライブラリをコンパイルして使用するにはどうすればよいですか?

  3. VHD から Linux を起動できますか?

  1. Linux にソースから Apache 2 をインストールする

  2. glibc の代わりに libc を使用して Linux ディストリビューションを構築できますか?

  3. RPM と .deb パッケージの両方をサポートする Linux ディストリビューションを構築することはできますか?

  1. あなたはそれを作ることができますか? Make コマンドを使用して Linux で C プログラムをコンパイルする

  2. Linux でソース コードからソフトウェアをコンパイルしてインストールする方法

  3. ソースからコンパイルする方法を学ぶ (Unix/Linux/OSX)