GitHub action to decompress & expand a Raspberry Pi SD card image
This action is the inverse of ethanjli/pishrink-action.
- name: Download an example image
run: wget https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-03-15/2024-03-15-raspios-bookworm-arm64-lite.img.xz
- name: Grow the image
uses: ethanjli/pigrow-action@v0.1.1
with:
image: 2024-03-15-raspios-bookworm-arm64-lite.img.xz
destination: 2024-03-15-raspios-bookworm-arm64-lite.img
mode: to
size: 8G
- name: Upload the image to Job Artifacts
uses: actions/upload-artifact@v4
with:
name: grown-image
path: 2024-03-15-raspios-bookworm-arm64-lite.img
if-no-files-found: error
overwrite: true
- name: Download an example image
run: wget https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-03-15/2024-03-15-raspios-bookworm-arm64-lite.img.xz
- name: Grow the image
uses: ethanjli/pigrow-action@v0.1.1
with:
image: 2024-03-15-raspios-bookworm-arm64-lite.img.xz
destination: 2024-03-15-raspios-bookworm-arm64-lite.img
mode: by
size: 1G
- name: Upload the image to Job Artifacts
uses: actions/upload-artifact@v4
with:
name: grown-image
path: 2024-03-15-raspios-bookworm-arm64-lite.img
if-no-files-found: error
overwrite: true
- name: Download an example image
run: wget https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-03-15/2024-03-15-raspios-bookworm-arm64-lite.img.xz
- name: Extract the image
uses: ethanjli/pigrow-action@v0.1.1
with:
image: 2024-03-15-raspios-bookworm-arm64-lite.img.xz
destination: 2024-03-15-raspios-bookworm-arm64-lite.img
- name: Upload the image to Job Artifacts
uses: actions/upload-artifact@v4
with:
name: extracted-image
path: 2024-03-15-raspios-bookworm-arm64-lite.img
if-no-files-found: error
overwrite: true
This example job grows the image before running commands in a lightweight namespace container
(using systemd-nspawn
) to generate a custom image, then shrinks it before uploading as an artifact
on the GitHub Actions job:
jobs:
build:
name: Build image
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download a base image
run: wget https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-03-15/2024-03-15-raspios-bookworm-arm64-lite.img.xz
- name: Grow the image
uses: ethanjli/pigrow-action@v0.1.1
with:
image: 2024-03-15-raspios-bookworm-arm64-lite.img.xz
destination: cowsay-image.img
mode: to
size: 8G
- name: Build the image
uses: ethanjli/pinspawn-action@v0.1.1
with:
image: cowsay-image.img
run: |
apt-get update
apt-get install -y cowsay
/usr/games/cowsay 'I am running in a light-weight namespace container!'
- name: Shrink the image
uses: ethanjli/pishrink-action@v0.1.1
with:
image: cowsay-image.img
compress: gzip
compress-parallel: true
- name: Upload the image to Job Artifacts
uses: actions/upload-artifact@v4
with:
name: rpi-cowsay-arm64-latest
path: cowsay-image.img.gz
if-no-files-found: error
retention-days: 0
compression-level: 0
overwrite: true
Inputs:
Input | Allowed values | Required? | Description |
---|---|---|---|
image |
file path | yes | Path of the image to grow. |
destination |
file path | no (default random tempfile) | Path to write the grown image to. |
mode |
none , by , to |
no (default none ) |
Grow the image by the size (by ) or to at least the size (to ). |
size |
size | no (default 0 ) |
Size adjustment. |
-
The
size
input may be an integer, a unit, or an integer followed by a unit (with no space separating them):- Allowed units are: KB (kilobyte), K (kibibyte), MB (megabyte), M (mebibyte), G (gigabyte), GB (gibibyte), and so on for T, P, E, Z, Y
- For example,
1024
,K
, and1K
all represent a size of 1024 bytes and are interchangeable. - For example,
GB
and1GB
both represent a size of 1 gigabyte and are interchangeable.
Outputs:
destination
is the path of the grown image. If no destination path was specified in the input to this action, a random path will be generated in/tmp
as the path of the grown image.
This repository includes a modified copy of code snippets from the from_remote.sh
module script of
Nature40/pimod, published under the GPL-3.0 License; as a
result, this repository is also released under GPL-3.0-only. Here is the citation for the pimod
project's scientific paper:
@inproceedings{hoechst2020pimod,
author = {{Höchst}, Jonas and Penning, Alvar and Lampe, Patrick and Freisleben, Bernd},
title = {{PIMOD: A Tool for Configuring Single-Board Computer Operating System Images}},
booktitle = {{2020 IEEE Global Humanitarian Technology Conference (GHTC 2020)}},
address = {Seattle, USA},
days = {29},
month = oct,
year = {2020},
keywords = {Single-Board Computer; Operating System Image; System Provisioning},
}