|
| 1 | +name: "multistrap install" |
| 2 | +description: "Install a system root using multistrap" |
| 3 | +inputs: |
| 4 | + arch: |
| 5 | + description: "Target arch" |
| 6 | + required: true |
| 7 | + packages: |
| 8 | + description: "Extra packages to install" |
| 9 | + required: false |
| 10 | + default: "" |
| 11 | +runs: |
| 12 | + using: "composite" |
| 13 | + steps: |
| 14 | + - id: install_multistrap |
| 15 | + run: | |
| 16 | + sudo apt-get update -y |
| 17 | + sudo apt-get install -y --no-install-recommends multistrap qemu-user-static |
| 18 | + shell: bash |
| 19 | + - id: create_chroot |
| 20 | + run: | |
| 21 | + set -xe |
| 22 | +
|
| 23 | + multistrap_conf="" |
| 24 | + if [ "${{ inputs.arch }}" = "armv7" ]; then |
| 25 | + multistrap_conf=multistrap_raspbian_buster.conf |
| 26 | + wget http://archive.raspbian.org/raspbian/pool/main/r/raspbian-archive-keyring/raspbian-archive-keyring_20120528.2_all.deb && sudo dpkg -i raspbian-archive-keyring_20120528.2_all.deb |
| 27 | + fi |
| 28 | + if [ "${{ inputs.arch }}" = "aarch64" ]; then |
| 29 | + multistrap_conf=multistrap_armbian64_buster.conf |
| 30 | + fi |
| 31 | +
|
| 32 | + multistrap -d ${{ env.SYSTEM_RASPBIAN }} -f ${{ github.workspace }}/native_client/${multistrap_conf} |
| 33 | +
|
| 34 | + if [ ! -z "${{ inputs.packages }}" ]; then |
| 35 | + TO_MOUNT=${{ github.workspace }} |
| 36 | + # Prepare target directory to bind-mount the github tree |
| 37 | + mkdir -p ${{ env.SYSTEM_RASPBIAN }}/${{ github.workspace }} |
| 38 | +
|
| 39 | + # Bind-mount so that we have the same tree inside the chroot |
| 40 | + for dev in ${TO_MOUNT}; |
| 41 | + do |
| 42 | + sudo mount -o bind ${dev} ${{ env.SYSTEM_RASPBIAN }}${dev} |
| 43 | + done; |
| 44 | +
|
| 45 | + # Copy some host data: |
| 46 | + # resolv.conf: for getting DNS working |
| 47 | + # passwd, group, shadow: to have user accounts and apt-get install working |
| 48 | + for ff in resolv.conf passwd group shadow; |
| 49 | + do |
| 50 | + sudo cp /etc/${ff} ${{ env.SYSTEM_RASPBIAN }}/etc/ |
| 51 | + done; |
| 52 | +
|
| 53 | + # Perform apt steps. |
| 54 | + # Preserving the env is required |
| 55 | + sudo --preserve-env chroot ${{ env.SYSTEM_RASPBIAN }}/ apt-get update -y |
| 56 | + sudo --preserve-env chroot ${{ env.SYSTEM_RASPBIAN }}/ apt-get install -y --no-install-recommends ${{ inputs.packages }} |
| 57 | +
|
| 58 | + # Cleanup apt info to save space |
| 59 | + sudo --preserve-env chroot ${{ env.SYSTEM_RASPBIAN }}/ rm -fr /var/cache/apt/* /var/lib/apt/lists/* |
| 60 | +
|
| 61 | + # Unmount what has been mounted |
| 62 | + for dev in ${TO_MOUNT}; |
| 63 | + do |
| 64 | + sudo umount ${{ env.SYSTEM_RASPBIAN }}${dev} |
| 65 | + done; |
| 66 | + fi |
| 67 | + shell: bash |
0 commit comments