Easyboot
========

[Easyboot](https://gitlab.com/bztsrc/easyboot) は、オールインワンのブート *マネージャー* およびブート可能なディスク イメージ作成ツールです。
さまざまな OS カーネルと、さまざまなバイナリ形式の Multiboot2 準拠カーネル。

![Easyboot](https://gitlab.com/bztsrc/easyboot/raw/main/docs/screenshot.png)

注: 単一のカーネルのみをロードするブート *ローダー* を探している場合は、 **Easyboot** の弟分である、[Simpleboot](https://gitlab.com/bztsrc/simpleboot)。

謝辞
----

このプロジェクトは、[Free Software Foundation Hungary](https://fsf.hu/nevjegy) の支援なしでは不可能でした。 このプロジェクトは、FSF.hu の
フリーソフトウェア入札 2023 のアプライアンスで作成されました。

GRUB に対する利点
----------------

- 依存関係がなく、使いやすい、多言語インストーラー
- 肥大化していません。GRUB のサイズのわずか約 0.5% です
- 構成が簡単、構文チェッカー付き
- ユーザー提供の DSDT を使用して ACPI テーブルに簡単にパッチを適用します
- カーネルが初期段階で停止した場合にエラーの詳細を表示します
- Multiboot2: クリーンな 64 ビット エントリ ポイント (カーネルにタグや 32 ビット トランポリン コードを埋め込む必要はありません)
- Multiboot2: 上位半分のカーネルのサポート
- Multiboot2: ファームウェアに依存しない、すべてのプラットフォーム上で一貫したメモリ マップ
- Multiboot2: ファームウェアに依存しない、すべてのプラットフォーム上で一貫したフレームバッファ
- Multiboot2: モニターの EDID 情報も提供されます
- Multiboot2: 必要に応じて、すべてのプロセッサ コアでカーネルを起動します (SMP サポート)
- すべての落とし穴やバグを含む GRUB ブートをシミュレートするプラグインもあります。

サポートされているカーネル: [Multiboot1](https://www.gnu.org/software/grub/manual/multiboot/multiboot.html) (ELF32, PE/COFF, a.out;
BIOS, UEFI, RPi), [Multiboot2](docs/en/ABI.md) (ELF32, ELF64, PE32+/COFF, a.out; BIOS, UEFI, RPi),
[Linux](https://www.kernel.org/doc/html/latest/arch/x86/boot.html) (BIOS, UEFI, RPi),
[Windows](https://learn.microsoft.com/en-us/windows-hardware/drivers/bringup/boot-and-uefi) (UEFI),
[OpenBSD](https://man.openbsd.org/boot.8) (BIOS, UEFI),
[FreeBSD](https://docs.freebsd.org/en/books/handbook/boot/) (BIOS, UEFI),
[FreeDOS](https://www.freedos.org/) (BIOS), [ReactOS](https://reactos.org/) (BIOS),
[MenuetOS](https://menuetos.net/) 32 / 64 (BIOS, UEFI), [KolibriOS](https://kolibrios.org/en/) (BIOS, UEFI),
[SerenityOS](https://serenityos.org/) (BIOS, UEFI), [Haiku](https://www.haiku-os.org/) (BIOS, UEFI)

サポートされているファイルシステム: [FAT12/16/32](https://social.technet.microsoft.com/wiki/contents/articles/6771.the-fat-file-system.aspx),
[exFAT](https://learn.microsoft.com/en-us/windows/win32/fileio/exfat-specification),
[NTFS](https://github.com/libyal/libfsntfs/blob/main/documentation/New%20Technologies%20File%20System%20%28NTFS%29.asciidoc) (v3, v3.1),
[ext2/3/4](https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout),
[XFS](https://mirror.math.princeton.edu/pub/kernel/linux/utils/fs/xfs/docs/xfs_filesystem_structure.pdf) (SGI),
[UFS](https://alter.org.ua/docs/fbsd/ufs/) (v2, v4.4),
[mfs](https://gitlab.com/bztsrc/minix3fs) (Minix3),
[BeFS](https://www.haiku-os.org/legacy-docs/practical-file-system-design.pdf) (Haiku),
[AXFS](https://gitlab.com/bztsrc/alexandriafs) (OS/Z)

(カーネルがブート パーティションにある場合は、ZFS、btrfs などの任意のファイル システムをルートに使用できます。)

理論的根拠
----------

私は使いやすいブートローダーを作成しましたが、ユーザーはますます多くの機能を求めていました。 ブート ローダーをできるだけシンプルに保ちたかったのですが、FSF.hu
がサポートを提供してくれたので、代わりにそれをフォークして、要求されたすべての機能をこのブート マネージャーに追加することにしました。

これも Simpleboot と同様の [使いやすい](https://suckless.org) ツールであり、依存関係がなく、非常に使いやすいです。

1. ディレクトリを作成し、その中にブート ファイル、特にメニュー構成やオプションのプラグインを置きます。
2. `easyboot (ソースディレクトリ) (出力イメージファイル)`コマンドを実行します。
3. そして...それだけです...他にやるべきことは何もありません！ イメージ *Just Works (TM)* は、カーネルを起動します。

ブート マネージャーをインストールして、既存のデバイスまたはイメージをブート可能にすることができます。 または、ブート可能イメージを新たに作成することもできます。
あなたはできるそのイメージを VM でブートするか、 `dd` または [USBImager](https://bztsrc.gitlab.io/usbimager/) を使用してストレージに書き込んでブート
することもできますそれは実機でもです。

シンプルこそ究極の洗練！

設置
----

OS のバイナリをダウンロードするだけです。 これらはポータブルな実行可能ファイルであり、インストールや共有ライブラリ/DLL も必要ありません。

- [easyboot-x86_64-linux.tgz](https://gitlab.com/bztsrc/easyboot/-/raw/main/distrib/easyboot-x86_64-linux.tgz) Linux, \*BSD (1M)
- [easyboot-i686-win.zip](https://gitlab.com/bztsrc/easyboot/-/raw/main/distrib/easyboot-i686-win.zip) Windows (1M)

さらに、[distrib](distrib) ディレクトリでさまざまなパッケージング ソリューションを見つけることができます (用 Debian、Ubuntu、RaspiOS、Gentoo、Arch)。

イメージを作成するときは、(構成に応じて) `(ソース ディレクトリ)` にいくつかのプラグインも必要になる場合があります。 これらは、拡張子  `plg` を使用して
[src/plugins](src/plugins) ディレクトリにあります。 パッケージからインストールすると、これらは `/usr/share/easyboot` の下に配置されます。

文書化
-----

ブータブル ディスク クリエーターの使用方法とカーネルの起動方法に関する詳細な [ドキュメント](docs/en) (英語) は、docs ディレクトリにあります。

カーネルの例
----------

**Easyboot** の [簡素化された Multiboot2](docs/en/ABI.md) プロトコルを使用して、プラグインなしでロードできるカーネルを作成したい場合は、
[Simpleboot カーネルの例](https://gitlab.com/bztsrc/simpleboot/-/tree/main/example) ディレクトリ。どちらのローダーも同じブート
プロトコルを使用しており、カーネルは **Easyboot** でそのまま動作します。 アセンブリも埋め込みタグも必要ないことがわかります。それ以外の場合、
ソース コードは Multiboot2 仕様の例と 99.9% 同じです (唯一の違いは、VGA テレタイプ画面ではなくシリアル コンソールに出力されることです。後者は UEFI や
RaspberryPi マシンには存在しないためです)。

コンピレーション
-------------

オーケストレーションには GNU/make が必要です (文字通り、単に `cc easyboot.c -o easyboot` ですが)。 ツールチェーンは重要ではありません。ANSI C
コンパイラなら何でもよく、POSIX や WIN32 MINGW でも動作します。 [src](src) ディレクトリに移動して `make` を実行するだけです。 それだけです。
サイズは小さいにもかかわらず、自己完結型であり、コンパイルにはライブラリの依存関係がまったくありません。 **Easyboot** と呼ばれているのには理由がありません :-)

ローダーを再コンパイルするには、[flatassembler](https://flatassembler.net)、LLVM Clang と lld (gcc と GNU ld は機能しないと思います) が必要です。
しかし、心配しないでください。これらはすべてバイト配列として `src/data.h` に追加されているので、本当にコンパイルしたくない限り、これらをコンパイルする必要はあ
りません(そのためには、make を実行する前に data.h を削除してください)。

一方、プラグインをコンパイルするには、LLVM CLang または GNU gcc (x86_64-elf-gcc、aarch64-elf-gcc)。 リポジトリには、これらもバイナリとして含まれています。
再コンパイルを行うには、make を実行する前に `src/plugins/*.plg` ファイルを削除するだけです。

ライセンス
--------

**Easyboot** は無料のオープンソース ソフトウェアであり、GPL バージョン 3 または (ご意見によると) それ以降のバージョンの条件に基づいてライセンスされています。
詳細については、[LICENSE](LICENSE) ファイルを参照してください。

bzt
