cosboot: support bzip2 compression

XZ turned out to be much worse than gzip more tests in CI,
even though it was better in a few local runs. Trying out bzip2 now.

BUG=b/465210631

Change-Id: I2293e3689b586b1cb5fd6cbc1532994d032d9b02
Reviewed-on: https://cos-review.googlesource.com/c/cos/tools/+/146143
Reviewed-by: Miri Amarilio <mirilio@google.com>
Cloud-Build: 228075978874@cloudbuild.gserviceaccount.com <228075978874@cloudbuild.gserviceaccount.com>
Tested-by: Robert Kolchmeyer <rkolchmeyer@google.com>
Reviewed-by: He Gao <hegao@google.com>
diff --git a/src/cmd/oem_preloader/Dockerfile b/src/cmd/oem_preloader/Dockerfile
index c5a0d48..3c21e6c 100644
--- a/src/cmd/oem_preloader/Dockerfile
+++ b/src/cmd/oem_preloader/Dockerfile
@@ -13,6 +13,6 @@
 
 # Install minimal tools needed.
 RUN apt-get update && \
-    apt-get install -y --no-install-recommends sudo util-linux fdisk cryptsetup e2fsprogs mtools sed gzip xz-utils
+    apt-get install -y --no-install-recommends sudo util-linux fdisk cryptsetup e2fsprogs mtools sed gzip xz-utils bzip2
 
 ENTRYPOINT ["/oem-preloader"]
diff --git a/src/pkg/cosboot/bzimage.go b/src/pkg/cosboot/bzimage.go
index b39016c..993b3bd 100644
--- a/src/pkg/cosboot/bzimage.go
+++ b/src/pkg/cosboot/bzimage.go
@@ -59,6 +59,14 @@
 		zipCmd:    "xz",
 		zipArgs:   []string{"-c", "--check=crc32", "--threads=1", "--x86", "--lzma2=,dict=128MiB"},
 	},
+	{
+		name:      "bzip2",
+		magic:     []byte{0x42, 0x5a, 0x68},
+		unzipCmd:  "bunzip2",
+		unzipArgs: []string{"-c"},
+		zipCmd:    "bzip2",
+		zipArgs:   []string{"-c", "-9"},
+	},
 }
 
 func elfFromBZImageWithOffset(img []byte) ([]byte, int, compression, error) {