allow building unstable image in build_complete.sh and remove rsync usage
This commit is contained in:
parent
12b29ef8b2
commit
e76d04244f
37
README.md
37
README.md
|
@ -38,17 +38,17 @@ Note that rootfs partitions have to be named `shimboot_rootfs:<partname>` for th
|
||||||
Driver support depends on the device you are using shimboot on. The `patch_rootfs.sh` script attempts to copy all the firmware and drivers from the shim and recovery image into the rootfs, so expect most things to work on other boards. ARM Chromebooks are not supported at the moment.
|
Driver support depends on the device you are using shimboot on. The `patch_rootfs.sh` script attempts to copy all the firmware and drivers from the shim and recovery image into the rootfs, so expect most things to work on other boards. ARM Chromebooks are not supported at the moment.
|
||||||
|
|
||||||
### Device Compatibility Table:
|
### Device Compatibility Table:
|
||||||
| Board Name | X11 | Wi-Fi | Speakers | Backlight | Touchscreen | 3D Accel | Bluetooth | Webcam |
|
| Board Name | X11 | Wifi | Speakers | Backlight | Touchscreen | 3D Accel | Bluetooth | Webcam |
|
||||||
|----------------------------------------------------|-------------------|-------|----------|-----------|-------------|----------|-----------|----------|
|
|------------------------------------------------ |-------------------|------|----------|-----------|-------------|----------|-----------|----------|
|
||||||
| [**dedede**](https://chrome100.dev/board/dedede) | yes | yes | no | yes | yes | yes | yes | yes |
|
| [`dedede`](https://chrome100.dev/board/dedede) | yes | yes | no | yes | yes | yes | yes | yes |
|
||||||
| [**octopus**](https://chrome100.dev/board/octopus) | yes | yes | yes | yes | yes | yes | yes | yes |
|
| [`octopus`](https://chrome100.dev/board/octopus) | yes | yes | yes | yes | yes | yes | yes | yes |
|
||||||
| [**nissa**](https://chrome100.dev/board/nissa) | yes | yes | no | yes | yes | yes | yes | yes |
|
| [`nissa`](https://chrome100.dev/board/nissa) | yes | yes | no | yes | yes | yes | yes | yes |
|
||||||
| [**reks**](https://chrome100.dev/board/reks) | no <sup>[1]</sup> | yes | untested | untested | untested | no | untested | untested |
|
| [`reks`](https://chrome100.dev/board/reks) | no<sup>[1]</sup> | yes | untested | untested | untested | no | untested | untested |
|
||||||
| [**kefka**](https://chrome100.dev/board/kefka) | no <sup>[1]</sup> | yes | yes | yes | untested | no | untested | untested |
|
| [`kefka`](https://chrome100.dev/board/kefka) | no<sup>[1]</sup> | yes | yes | yes | untested | no | untested | untested |
|
||||||
| [**zork**](https://chrome100.dev/board/zork) | yes | yes | no | untested | yes | yes | yes | yes |
|
| [`zork`](https://chrome100.dev/board/zork) | yes | yes | no | untested | yes | yes | yes | yes |
|
||||||
| [**grunt**](https://chrome100.dev/board/grunt) | yes | yes | no | yes | yes | yes | yes | yes |
|
| [`grunt`](https://chrome100.dev/board/grunt) | yes | yes | no | yes | yes | yes | yes | yes |
|
||||||
| [**jacuzzi**](https://chrome100.dev/board/jacuzzi) | yes | yes | no | yes | untested | no | no | yes |
|
| [`jacuzzi`](https://chrome100.dev/board/jacuzzi) | yes | yes | no | yes | untested | no | no | yes |
|
||||||
| [**corsola**](https://chrome100.dev/board/corsola) | yes | yes | untested | untested | untested | untested | untested | untested |
|
| [`corsola`](https://chrome100.dev/board/corsola) | yes | yes | untested | untested | untested | untested | untested | untested |
|
||||||
|
|
||||||
<sup>1. The kernel is too old.</sup>
|
<sup>1. The kernel is too old.</sup>
|
||||||
|
|
||||||
|
@ -85,10 +85,12 @@ PRs and contributions are welcome to help implement these features.
|
||||||
|
|
||||||
### Build Instructions:
|
### Build Instructions:
|
||||||
1. Find the board name of your Chromebook. You can search for the model name on [chrome100.dev](https://chrome100.dev/).
|
1. Find the board name of your Chromebook. You can search for the model name on [chrome100.dev](https://chrome100.dev/).
|
||||||
1. Clone this repository and cd into it.
|
2. Clone this repository and cd into it.
|
||||||
2. Run `sudo ./build_complete.sh <board_name>` to download the required data and build the disk image. If you have an ARM-based Chromebook, pass `arch=arm64` in as an option.
|
3. Run `sudo ./build_complete.sh <board_name>` to download the required data and build the disk image.
|
||||||
|
|
||||||
Alternatively, you can run each of the steps manually:
|
Note: If you are building for an ARM Chromebook, you need the `qemu-user-static` and `binfmt-support` packages.
|
||||||
|
|
||||||
|
#### Alternatively, you can run each of the steps manually:
|
||||||
1. Grab a Chrome OS RMA Shim from somewhere. Most of them have already been leaked and aren't too difficult to find.
|
1. Grab a Chrome OS RMA Shim from somewhere. Most of them have already been leaked and aren't too difficult to find.
|
||||||
2. Download a Chrome OS [recovery image](https://chromiumdash.appspot.com/serving-builds?deviceCategory=ChromeOS) for your board.
|
2. Download a Chrome OS [recovery image](https://chromiumdash.appspot.com/serving-builds?deviceCategory=ChromeOS) for your board.
|
||||||
3. Unzip the shim and the recovery image if you have not done so already.
|
3. Unzip the shim and the recovery image if you have not done so already.
|
||||||
|
@ -113,10 +115,11 @@ Alternatively, you can run each of the steps manually:
|
||||||
#### I want to use a different Linux distribution. How can I do that?
|
#### I want to use a different Linux distribution. How can I do that?
|
||||||
Using any Linux distro is possible, provided that you apply the [proper patches](https://github.com/ading2210/chromeos-systemd) to systemd and recompile it. Most distros have some sort of bootstrapping tool that allows you to install it to a directory on your host PC. Then, you can just pass that rootfs directory into `patch_rootfs.sh` and `build.sh`.
|
Using any Linux distro is possible, provided that you apply the [proper patches](https://github.com/ading2210/chromeos-systemd) to systemd and recompile it. Most distros have some sort of bootstrapping tool that allows you to install it to a directory on your host PC. Then, you can just pass that rootfs directory into `patch_rootfs.sh` and `build.sh`.
|
||||||
|
|
||||||
Debian Sid (the rolling release version of Debian) is also supported if you just want newer packages, and you can install it by passing an argument to `build_rootfs.sh`:
|
Debian Sid (the rolling release version of Debian) is also supported if you just want newer packages, and you can install it by passing an argument to `build_complete.sh`:
|
||||||
```bash
|
```bash
|
||||||
sudo ./build_rootfs.sh data/rootfs unstable
|
sudo ./build_complete.sh dedede release=unstable
|
||||||
```
|
```
|
||||||
|
|
||||||
#### How can I install a desktop environment other than XFCE?
|
#### How can I install a desktop environment other than XFCE?
|
||||||
You can pass the `desktop` argument to the `build_complete.sh` script, like this:
|
You can pass the `desktop` argument to the `build_complete.sh` script, like this:
|
||||||
```bash
|
```bash
|
||||||
|
@ -138,7 +141,7 @@ sudo resize2fs /dev/mmcblk1p4
|
||||||
|
|
||||||
#### GPU acceleration isn't working, how can I fix this?
|
#### GPU acceleration isn't working, how can I fix this?
|
||||||
If your kernel version is too old, the standard Mesa drivers will fail to load. Instead, you must download and install the `mesa-amber` drivers. Run the following commands:
|
If your kernel version is too old, the standard Mesa drivers will fail to load. Instead, you must download and install the `mesa-amber` drivers. Run the following commands:
|
||||||
```
|
```bash
|
||||||
sudo apt install libglx-amber0 libegl-amber0
|
sudo apt install libglx-amber0 libegl-amber0
|
||||||
echo "MESA_LOADER_DRIVER_OVERRIDE=i965" | sudo tee -a /etc/environment
|
echo "MESA_LOADER_DRIVER_OVERRIDE=i965" | sudo tee -a /etc/environment
|
||||||
```
|
```
|
||||||
|
|
2
build.sh
2
build.sh
|
@ -14,7 +14,7 @@ print_help() {
|
||||||
}
|
}
|
||||||
|
|
||||||
assert_root
|
assert_root
|
||||||
assert_deps "cpio binwalk pcregrep realpath cgpt mkfs.ext4 mkfs.ext2 fdisk rsync lz4"
|
assert_deps "cpio binwalk pcregrep realpath cgpt mkfs.ext4 mkfs.ext2 fdisk lz4"
|
||||||
assert_args "$3"
|
assert_args "$3"
|
||||||
parse_args "$@"
|
parse_args "$@"
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ print_help() {
|
||||||
echo " gnome, xfce, kde, lxde, gnome-flashback, cinnamon, mate, lxqt"
|
echo " gnome, xfce, kde, lxde, gnome-flashback, cinnamon, mate, lxqt"
|
||||||
echo " data_dir - The working directory for the scripts. This defaults to ./data"
|
echo " data_dir - The working directory for the scripts. This defaults to ./data"
|
||||||
echo " arch - The CPU architecture to build the shimboot image for. Set this to 'arm64' if you have an ARM Chromebook."
|
echo " arch - The CPU architecture to build the shimboot image for. Set this to 'arm64' if you have an ARM Chromebook."
|
||||||
|
echo " release - Set this to either 'bookworm' or 'unstable' to build for Debian stable/unstable."
|
||||||
}
|
}
|
||||||
|
|
||||||
assert_root
|
assert_root
|
||||||
|
@ -28,6 +29,7 @@ quiet="${args['quiet']}"
|
||||||
desktop="${args['desktop']-'xfce'}"
|
desktop="${args['desktop']-'xfce'}"
|
||||||
data_dir="${args['data_dir']}"
|
data_dir="${args['data_dir']}"
|
||||||
arch="${args['arch']-amd64}"
|
arch="${args['arch']-amd64}"
|
||||||
|
release="${args['release']-bookworm}"
|
||||||
|
|
||||||
arm_boards="
|
arm_boards="
|
||||||
corsola hana jacuzzi kukui strongbad nyan-big kevin bob
|
corsola hana jacuzzi kukui strongbad nyan-big kevin bob
|
||||||
|
@ -39,12 +41,12 @@ if grep -q "$board" <<< "$arm_boards"; then
|
||||||
arch="arm64"
|
arch="arm64"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
needed_deps="wget python3 unzip zip git debootstrap cpio binwalk pcregrep cgpt mkfs.ext4 mkfs.ext2 fdisk rsync depmod findmnt lz4"
|
needed_deps="wget python3 unzip zip git debootstrap cpio binwalk pcregrep cgpt mkfs.ext4 mkfs.ext2 fdisk depmod findmnt lz4 pv"
|
||||||
if [ "$(check_deps "$needed_deps")" ]; then
|
if [ "$(check_deps "$needed_deps")" ]; then
|
||||||
#install deps automatically on debian and ubuntu
|
#install deps automatically on debian and ubuntu
|
||||||
if [ -f "/etc/debian_version" ]; then
|
if [ -f "/etc/debian_version" ]; then
|
||||||
echo "attempting to install build deps"
|
echo "attempting to install build deps"
|
||||||
apt-get install wget python3-all unzip zip debootstrap cpio binwalk pcregrep cgpt rsync kmod pv lz4 -y
|
apt-get install wget python3-all unzip zip debootstrap cpio binwalk pcregrep cgpt kmod pv lz4 -y
|
||||||
if [ "$arch" = "arm64" ]; then
|
if [ "$arch" = "arm64" ]; then
|
||||||
apt-get install qemu-user-static binfmt-support -y
|
apt-get install qemu-user-static binfmt-support -y
|
||||||
fi
|
fi
|
||||||
|
@ -142,7 +144,7 @@ if [ ! "$rootfs_dir" ]; then
|
||||||
mkdir -p $rootfs_dir
|
mkdir -p $rootfs_dir
|
||||||
|
|
||||||
echo "building debian rootfs"
|
echo "building debian rootfs"
|
||||||
./build_rootfs.sh $rootfs_dir bookworm \
|
./build_rootfs.sh $rootfs_dir $release \
|
||||||
custom_packages=$desktop_package \
|
custom_packages=$desktop_package \
|
||||||
hostname=shimboot-$board \
|
hostname=shimboot-$board \
|
||||||
username=user \
|
username=user \
|
||||||
|
|
|
@ -119,9 +119,9 @@ populate_partitions() {
|
||||||
local rootfs_mount=/tmp/new_rootfs
|
local rootfs_mount=/tmp/new_rootfs
|
||||||
safe_mount "${image_loop}p4" $rootfs_mount
|
safe_mount "${image_loop}p4" $rootfs_mount
|
||||||
if [ "$quiet" ]; then
|
if [ "$quiet" ]; then
|
||||||
rsync --archive --human-readable --hard-links --quiet --sparse $rootfs_dir/ $rootfs_mount/
|
cp -ar $rootfs_dir/* $rootfs_mount
|
||||||
else
|
else
|
||||||
rsync --archive --human-readable --hard-links --info=progress2 --sparse $rootfs_dir/ $rootfs_mount/
|
copy_progress $rootfs_dir $rootfs_mount
|
||||||
fi
|
fi
|
||||||
umount $rootfs_mount
|
umount $rootfs_mount
|
||||||
}
|
}
|
||||||
|
@ -155,8 +155,14 @@ clean_loops() {
|
||||||
local mountpoints="$(cat /proc/mounts | grep "$loop_device")"
|
local mountpoints="$(cat /proc/mounts | grep "$loop_device")"
|
||||||
if [ ! "$mountpoints" ]; then
|
if [ ! "$mountpoints" ]; then
|
||||||
losetup -d $loop_device
|
losetup -d $loop_device
|
||||||
else
|
|
||||||
echo "warning: not removing $loop_device because it is still mounted"
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
copy_progress() {
|
||||||
|
local source="$1"
|
||||||
|
local destination="$2"
|
||||||
|
local total_bytes="$(du -sb "$source" | cut -f1)"
|
||||||
|
mkdir -p "$destination"
|
||||||
|
tar -cf - -C "${source}" . | pv -f -s $total_bytes | tar -xf - -C "${destination}"
|
||||||
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ apt-get install -y ca-certificates
|
||||||
apt-get update
|
apt-get update
|
||||||
installed_systemd="$(dpkg-query -W -f='${binary:Package}\n' | grep "systemd")"
|
installed_systemd="$(dpkg-query -W -f='${binary:Package}\n' | grep "systemd")"
|
||||||
apt-get clean
|
apt-get clean
|
||||||
apt-get install --reinstall $installed_systemd
|
apt-get install -y --reinstall --allow-downgrades $installed_systemd
|
||||||
|
|
||||||
#enable shimboot services
|
#enable shimboot services
|
||||||
systemctl enable kill-frecon.service
|
systemctl enable kill-frecon.service
|
||||||
|
|
Loading…
Reference in New Issue