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


42

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

私の現在の理解では、システムを「Linux」ではなく「Darwin」にするために必要なものはすべてカーネルの置き換えになります。これは正しいです?


編集:

キラーミストのコメントに応えて、私はこの質問を改善します。一般的にこのトピックに関する情報を探していますが、私が特に探しているのは、LFSが「Linux Distro Creation Guide」であるのと同様に、「Darwin Distro Creation Guide」のようなものです。

そのような情報はおそらくPuredarwinOpenDarwin、またはGNU / Darwinの人々からしか得られないので、これは助けを求める呼びかけのようなものです。LFSのような「How-We-Made-PureDarwin-Nano-Start-To-Finish」ガイドは完璧ですが、私はそれが多くを求めていることを知っています。


3
おそらくダーウィンベースのディストリビューションを構築するために何が起こるかを見るために、ピュアダーウィンを見る価値があります(そして、彼らとopendarwinがこれで直面した問題)
ジャーニーマンオタク

1
通常のユーザーランドでは、両方のカーネルは非常に似ていますが、カーネルを管理するために使用されるソフトウェアと、それに密接に関係するソフトウェア(libcを含む)はまったく異なります。この重要な最初のステップでは、LFSのドキュメントはあまり役に立ちません。おそらく、DebianのkFreeBSDブランチから開始する(または少なくとも勉強する)方が適切です。
フォンブランド

1
ヒント:実際に何をしようとしているのかを質問すると、既存の質問でヒットを見つける可能性が高くなりますが、質問に答える方法についてのアイデアでより多くの人を引き付ける可能性も高くなります。質問が実際に何であるか混乱しているのとは対照的に。ちょっとした考え。
キラーミスト

1
DarwinはBSDをベースにしており、Linuxとは異なります。BSDの物事のやり方は、カーネル(ファイルシステムの設定、ディレクトリ構造、アップグレードポリシーなど)だけではありません。
-vesperto

2
とバイナリ互換であることは同じことではありません、私は恐れています。@Vespertoは正しい、DarwinはLinuxよりもBSDファミリーに密接に関連しています。ただし、他のBSDとは明らかに異なるカーネルを使用しています。LFSベースのガイドよりもBFSタイプガイドを探す方が幸運だと思います。BSDハンドブックは、別の優れた参照ソースです。関連する情報のために、ダーウィンのリファレンスを使用する必要があります。
ジェリーWジャクソン

回答:


32

2015年4月19日更新:

2年後も、この分野への関心は非常に低いようです。ただし、Hackintoshコミュニティは依然として非常に活発です。つまり、xnu(Chameleonとfork)を起動できる数少ないオープンソースのApple製以外のブートローダーの1つが引き続き維持され、Yosemiteを起動できます。QEMU内でOS X Yosemiteを起動するサクセスストーリーもあります。さらに、ハンドルで行く(今のApple-採用)開発者のおかげwinocmは、我々が持っているXNUカーネルのARMポートを。彼女は私がこの分野で知っている最も活発な開発者でした。

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

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


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

技術的に:はい

実際:いいえ*

Binary Cheatsを使用:おそらく、しかし合法ではない(テストされていない)

汎用ハードウェア用のバイナリのチートを使用:上記(未テスト)

* Appleで働いている場合を除き(*カリフォルニアの一般的な方向で喉をきれいにする*)


より長い答え:

これはかなり長くなるでしょう。コーヒーをお勧めします。すべてを読む時間/傾向がない場合は、「結論」にスキップできます。

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

悲しいことに、アップルは、ダーウィンの純粋なソースからのコンパイルを可能にするために、ダーウィンに必要なKEXTとバイナリ多くのソースコードを撤回しました。技術的にはまだ可能です(適切に修正するためにソースを自分で書くことができます)が、私はこれを行う時間、スキル、または傾向がありません(そして、群衆の資金調達コミュニティは非常に興味があるとは思いません)。

当然のことながら、重要な転換点は、xnuをx86_64-landにもたらしたDarwin 10のリリースでした。必要なソースのほとんどはそれ以前のものでしたが、x86のみでした。時間が経つにつれて、Appleの「オープンソース」の意味は「Appleのハードウェアのみのオープンソース」にシフトしているように見えます。実行(下記参照)しても、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 -
    
  • 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
    
  • 必要なすべてのパッケージのソースをダウンロードします。もちろん、ここで行き詰まります。必要なものはすべてありません。(ちなみに、binutilsとにかくGNUの方が好きです。)

実際に必要なものをすべてダウンロードできると仮定して、押し続けましょう。

  • 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で新しいユーザーのhomedirを手動で作成する必要があることに注意してください。

    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。LLVMプロジェクトのlibcxxページで詳細を確認できます。コンパイルしたら、に入れることができます/usr/lib。xnuカーネルをコンパイルしてインストールする必要があり(その方法についてはWebの周りにいくつかのチュートリアルがあります)、次にKEXTをインストールします。必要なすべてのKEXTが利用可能であったとしても、それらを手動で.kextパッケージに入れる必要があります。繰り返しになりますが、コマンドラインでKEXTを手作りする方法のチュートリアルがあります

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

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

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

いずれにせよ、カーネルとKEXTが適切な場所にあり、、などの適切なコピーがありdyld、正常に動作していると仮定すると、システムは動作して起動可能になります!launchdboot.efi

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

それは-あなたのような場合には、再度、すべての手段によって、のkextとバイナリを自分で書きであることは技術的には可能。終わったら電話してください。


Binary Cheatsを使用:おそらく、しかし合法ではない(テストされていない)

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

汎用ハードウェア用のバイナリのチートを使用:上記(未テスト)

これはかなりある OSx86プロジェクト。繰り返しますが、すぐに法的問題に遭遇します。これらの最後の2つの方法が間違いなく可能であることは間違いありません。一般的なハードウェア上でMountain Lionを実行できるという事実は、その証拠です。


サイドノート

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

おわりに

結局のところ、人々はダーウィンのためにMacを買うのではなく、アクアのためにMacを買うのだと思います。その結果、スタンドアロンのオープンソース製品としてのダーウィンのサポートは徐々に減少し、実際にはオープンソースコミュニティへの単なるトークンジェスチャになっています。もう少し皮肉な事実は、これについて多くを学ぶためには、OSX86プロジェクトに直接ジャンプする必要があるということです。それでも、それほど多くの情報はありません。PureDarwinは開始するのに最適な場所であり、Jonathan Levinの本はすべてのxnuの貴重な参考資料です。

これは非常に教育的な年でしたが、実際にやっているのと同じように、それを行う方法を知ってとても幸せです。しかし、私はいくつかの段階で作業を停止する必要がありますが、今がその時です。Appleに対する最後の無益な叫びとして、Mavericksをリリースするときにダーウィンをもう1つだけビルドするように要求するのは多すぎるでしょうか?


1

明らかに、LFSはLinux向けであり、Darwinは適用されるLinux LFSとは大きく異なることを認識しているため、LFSをDarwinシステムに適用するのは1人の努力を超えて簡単です。

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

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

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

実際には、すべてあなたがする必要がPureDarwinプロジェクトで100%を堅持することで、次のスクリプトを呼び出す:Googleのコード-ピュアダーウィンスイッチカーネルをあなたが作ったカスタムカーネルイメージでは、罰金になります。

しかし、適切に機能するDarwinカーネルを構築する方法については、それは新しい質問になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.