{"id":17175940,"url":"https://github.com/muntashirakon/chrome-os-multiboot","last_synced_at":"2025-04-13T16:31:16.974Z","repository":{"id":102802742,"uuid":"174958723","full_name":"MuntashirAkon/Chrome-OS-Multiboot","owner":"MuntashirAkon","description":"My approach to multiboot Chrome/Chromium OS on regular PCs","archived":false,"fork":false,"pushed_at":"2020-04-10T10:54:30.000Z","size":170,"stargazers_count":44,"open_issues_count":2,"forks_count":7,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-12T03:29:37.557Z","etag":null,"topics":["chromeos","chromiumos","dualboot","multiboot"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MuntashirAkon.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-03-11T08:39:44.000Z","updated_at":"2025-03-17T07:44:01.000Z","dependencies_parsed_at":null,"dependency_job_id":"bd13e9b2-36e0-4cb5-a20e-6b6b7a069d53","html_url":"https://github.com/MuntashirAkon/Chrome-OS-Multiboot","commit_stats":{"total_commits":62,"total_committers":1,"mean_commits":62.0,"dds":0.0,"last_synced_commit":"a83e6879f72ac94217e7b2856ca25c819dd5e6ea"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MuntashirAkon%2FChrome-OS-Multiboot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MuntashirAkon%2FChrome-OS-Multiboot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MuntashirAkon%2FChrome-OS-Multiboot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MuntashirAkon%2FChrome-OS-Multiboot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MuntashirAkon","download_url":"https://codeload.github.com/MuntashirAkon/Chrome-OS-Multiboot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248743766,"owners_count":21154735,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chromeos","chromiumos","dualboot","multiboot"],"created_at":"2024-10-14T23:58:27.163Z","updated_at":"2025-04-13T16:31:16.708Z","avatar_url":"https://github.com/MuntashirAkon.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Chrome OS Multiboot\n\nMy approach to multiboot Chrome OS or Chromium OS on regular machines.\n\n\u003e If you're looking for updating your Chrome OS installation, the project is move [here](https://github.com/MuntashirAkon/chrome_os_updater).\n\n\u003cdetails\u003e\n \u003csummary\u003eIndex\u003c/summary\u003e\n \n- [Multiboot guide](#multiboot-guide)\n  * [Prerequisites](#prerequisites)\n  * [Process](#process)\n    - [Creating partitions](#creating-partitions)\n    - [Converting Chromium OS to Chrome OS](#converting-chromium-os-to-chrome-os)\n    - [Installing on HDD](#installing-on-hdd)\n- [Updating Chrome OS](#updating-chrome-os)\n    - [Want to update natively?](#want-to-update-natively)\n- [Mounting internal partitions](#mounting-internal-partitions)\n- [References](#references)\n\u003c/details\u003e\n\n## Multiboot guide\n\n### Prerequisites\n1. A Linux distro e.g. Ubuntu, Mint, etc. (may need installing since the files to be downloaded need a lot of space)\n2. [chromefy.h](https://github.com/imperador/chromefy/releases)\n3. [swtpm.tar](https://github.com/imperador/chromefy/raw/master/swtpm.tar) - To solve TPM related problem on modern PCs\n4. @arnoldthebat's [Chromium OS Special build](https://chromium.arnoldthebat.co.uk/index.php?dir=special\u0026order=modified\u0026sort=desc) (R74 or later)\n5. [Eve or similar recovery file](https://cros-updates-serving.appspot.com) matching your hardware specifications\n  (check [here](https://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices) for more info)\n6. [install_chromium.sh](https://raw.githubusercontent.com/MuntashirAkon/Chrome-OS-Multiboot/master/install_chromium.sh)\n\nIf you're going to install Chromium OS (not Chrome OS), you don't need 2, 3, and 5 prerequisites.\n\n### Process\n\n#### Creating partitions\n\nYou'll need to create 3/4 partitions in GPT mode:\n1. **EFI-SYSTEM**: Type `FAT16` (32 MB) [assume, the device id is `sda4`]\n2. **ROOT-A**: Type `EXT2` (at least 4 GB) [assume `sda5`]\n3. **ROOT-B**: Type `EXT2` (at least 4 GB) [assume `sda7`] (Optional if you don't want to update Chrome OS natively)\n4. **STATE**: Type `EXT4` (this is where user files will be kept, so the size of the partition depends on you;\n   20 GB recommended) [assume `sda6`]\n\n#### Converting Chromium OS to Chrome OS\n\n_[Skip this step if you are not going to install Chrome OS, just Chromium OS]_\n\n- Download the prequisites at `~/Downloads/ChromeOS` and extract them there as well.\n  Don't delete the zipped files yet (as something might be broken). The file structure should look something like this:\n  ```\n  Camd64OS_R72-11316.B-Special.7z\n  chromefy.sh\n  install_chromium.sh\n  chromeos_11316.165.0_eve_recovery_stable-channel_mp.bin\n  chromeos_11316.165.0_eve_recovery_stable-channel_mp.bin.zip\n  chromiumos_image.img\n  swtpm.tar\n  ```\n- Now, run the following command to convert Chromium OS to Chrome OS:\n  ```bash\n  cd ~/Downloads/ChromeOS/ \u0026\u0026 sudo bash chromefy.sh chromiumos_image.img chromeos_11151.113.1_eve_recovery_stable-channel_mp.bin swtpm.tar\n  ```\n  \n  At some point, the script might prompt you to know if you want to set **SELINUX** to *permissive*, just press `n` and enter.\n\n#### Installing on HDD\n\n- Run the following command to install chromium on HDD:\n  ```bash\n  cd ~/Downloads/ChromeOS/ \u0026\u0026 sudo bash install_chromium.sh chromiumos_image.img sda4 sda5 sda6\n  ```\n  Before running the above command, replace `chromiumos_image.img` with the chromium image (should be unchanged if you're following the guide), `sda4` with **EFI-SYSTEM**\n  partition's id, `sda5` with **ROOT-A** partition's id and `sda6` with **STATE** partition's id.\n\nNow you can safely boot into the newly installed OS.\n\n## Updating Chrome OS\n\n_[Applied for Chrome OS only, if you're looking for updating @ArnoldTheBat's Chromium build, contact him instead]_\n\n**\u003cspan color=\"red\"\u003e! Warning !\u003c/span\u003e** This process is experimental, be sure to issue a report if you stumble upon something.\n\nYou can use the **update_chromium.sh** script located in this repo to update Chrome OS to the latest version (should work with regular installation as well). To do this you'll need to download the latest recovery update for your platform (e.g. eve) which can be downloaded from [here](https://cros-updates-serving.appspot.com). If you needed **swtpm.tar**, download the latest file from [here](https://github.com/imperador/chromefy/raw/master/swtpm.tar).\n\nCurrently, `update_chromium.sh` takes three arguments (last is optional): the first argument is the recovery.bin file, the second argument is the device id of the **ROOT-A** partition (`sda5` if you're following this guide and `sda3` for regular installation) and the third argument is the optional **swtpm.tar**. For example:\n```\nupdate_chromium.sh ~/Downloads/chromeos_11647.104.3_eve_recovery_stable-channel_mp.bin sda5 swtpm.tar\n```\n\nYou can use Ubuntu Live (ie. without installing a Linux distro) to update Chrome OS.\n\n### Want to update natively?\n\nMove to another repo as the project appears to be more complex than I imagined. Refer [here](https://github.com/MuntashirAkon/chrome_os_updater).\n\n## Mounting internal partitions\n\nAs you may have noticed, internal partitions are not mounted by default (since Chrome OS is never meant to be used this way).\nSo, in order to mount the internal partitions, you'll need to edit `/etc/fstab` **_after_ you have created an user account in the Chrome OS.** The idea is to mount them inside the **~/Downloads** folder so that you can access these partitions from there.\n\nConsidering the fact that we may frequently need to change the partitions in the `fstab`, instead of editing `/etc/fstab`, we will be creating `/usr/local/fstab` which can be edited in Chrome OS later on.\n\n#### Editing `/usr/local/fstab`\n\n- First, you need to determine which partition(s) should be mounted on startup. You can get the device ids using various\n  methods. For instance, in Chrome OS, you can get a list of mountable partitions using the following command:\n  ```bash\n  sudo /sbin/blkid -o full | grep -E \"^/dev/sd.*TYPE\" | grep -vE \"EFI|STATE|ROOT-A\"\n  ```\n  (Here **EFI**, **STATE** and **ROOT-A** partitions are ignored)\n  \n  You'll see something like this:\n  ```\n  /dev/sda2: UUID=\"97867245-0528-320d-94c1-c166b79375d9\" LABEL=\"Ocean\" TYPE=\"hfsplus\" PARTUUID=\"864b7c8d-499e-11e7-8dc3-806e6f6e6963\"\n  /dev/sda3: UUID=\"f567c6b2-df56-37c2-b9f3-412a02695d30\" LABEL=\"Shore\" TYPE=\"hfsplus\" PARTUUID=\"222c8fbe-9c8c-4ccc-a2d3-148c89b375ab\"\n  /dev/sda6: LABEL=\"WindowsOS\" UUID=\"1EA06E1DA06DFC21\" TYPE=\"ntfs\" PARTLABEL=\"Basic data partition\" PARTUUID=\"2ef2d893-6135-49f5-8792-a06e9eb40ef8\"\n  /dev/sda7: UUID=\"565E0E935E0E6C55\" TYPE=\"ntfs\" PARTUUID=\"5386f571-f91d-4c4b-b5b9-6599b2e64a5b\"\n  /dev/sda8: UUID=\"6ff85824-b561-3ffa-a1c2-171e142a9797\" LABEL=\"macOSHighSierra\" TYPE=\"hfsplus\" PARTLABEL=\"Basic data partition\" PARTUUID=\"5230f7de-347a-4091-963b-ae5cfbe9e37d\"\n  /dev/sda9: UUID=\"5e657717-36a7-3ff3-9f3b-7075104742bb\" LABEL=\"Recovery HD\" TYPE=\"hfsplus\" PARTUUID=\"9b6e2c8a-bb3c-48e3-8a8b-56a26d86c5cd\"\n  /dev/sda12: UUID=\"f2d6d289-1c60-4d94-82f5-fa9132246a47\" TYPE=\"ext4\" PARTUUID=\"a61af699-38f7-47c3-bb97-10cbdf2dbedf\"\n  ```\n  Note the device ids which are to be mounted on startup. (Suppose `sda2`, `sda3`, `sda6`, `sda8`, `sda12`)\n- Open crosh and run the following:\n  ```sh\n  echo /home/$USER/u-$CROS_USER_ID_HASH/MyFiles/Downloads\n  ```\n  Or, if you're running Chrome OS 73 or less:\n  ```sh\n  echo /home/$USER/u-$CROS_USER_ID_HASH/Downloads\n  ```\n  You'll get a path which is accessible from **Files** app. Let call it Files path. (Suppose Files path is `/home/chronos/u-910450b5b86edd74333ce14f446ec9c7a44301e0/MyFiles/Downloads`)\n- For each of the partitions that you've noted earlier, assign a directory name after the Files path. For instance, for `sda2`, I can assign `Ocean`, thus the whole directory becomes `/home/chronos/u-910450b5b86edd74333ce14f446ec9c7a44301e0/MyFiles/Downloads/Ocean`\n- Create `/usr/local/fstab` using vim:\n  ```\n  sudo vim /usr/local/fstab\n  ```\n  Add the partition ids along with the mount points like this:\n  ```\n  /dev/sda2   /home/chronos/u-910450b5b86edd74333ce14f446ec9c7a44301e0/MyFiles/Downloads/Ocean            auto    defaults   0      0\n  /dev/sda3   /home/chronos/u-910450b5b86edd74333ce14f446ec9c7a44301e0/MyFiles/Downloads/Shore            auto    defaults   0      0\n  /dev/sda6   /home/chronos/u-910450b5b86edd74333ce14f446ec9c7a44301e0/MyFiles/Downloads/WindowsOS        auto    defaults   0      0\n  /dev/sda8   /home/chronos/u-910450b5b86edd74333ce14f446ec9c7a44301e0/MyFiles/Downloads/macOSHighSierra  auto    defaults   0      0\n  /dev/sda12  /home/chronos/u-910450b5b86edd74333ce14f446ec9c7a44301e0/MyFiles/Downloads/Ubuntu           auto    defaults   0      0\n  ```\n  Now save the file.\n  \n  (If you don't know the `fstab` format, see the third reference bellow.)\n\n#### Copying startup script\n- Download this file ([mount-internals.conf](https://raw.githubusercontent.com/MuntashirAkon/Chrome-OS-Multiboot/master/mount-internals.conf)) at `~/Downloads` directory.\n- Mount root partition for writing\n  ```sh\n  sudo mount -o rw,remount /\n  ```\n- Copy **mount-internals.conf** at `/etc/init/`:\n  ```\n  sudo cp ~/Downloads/mount-internals.conf /etc/init/\n  ```\nNow, you can safely reboot. This method should work on multiple user environment as well. But beware that the `CROS_USER_ID_HASH` different for each user and you've to configure each of them separately in the fstab file.\n\n**NOTE:** Mounted partitions don't show up on Android, further study needed.\n\n## References\n1. https://github.com/imperador/chromefy\n2. https://docs.google.com/document/d/1uBU4IObDI8IFhSjeCMvKw46O4vKCnfeZTGF7Jx8Brno/edit\n3. https://wiki.debian.org/fstab\n4. https://www.chromium.org/chromium-os/chromiumos-design-docs/disk-format\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuntashirakon%2Fchrome-os-multiboot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmuntashirakon%2Fchrome-os-multiboot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuntashirakon%2Fchrome-os-multiboot/lists"}