mirror of
https://github.com/kairos-io/osbuilder.git
synced 2025-06-28 16:07:12 +00:00
Merge pull request #85 from Itxaka/rpi3_rpi4
Support rpi3 and rpi 4 boards
This commit is contained in:
commit
80c53e0d7f
@ -61,15 +61,33 @@ RUN luet install --config /tmp/luet-arm64.yaml -y static/grub-efi --system-targe
|
|||||||
RUN luet install --config /tmp/luet-arm64.yaml -y static/grub-config --system-target /arm/raw/grubconfig
|
RUN luet install --config /tmp/luet-arm64.yaml -y static/grub-config --system-target /arm/raw/grubconfig
|
||||||
RUN luet install --config /tmp/luet-arm64.yaml -y static/grub-artifacts --system-target /arm/raw/grubartifacts
|
RUN luet install --config /tmp/luet-arm64.yaml -y static/grub-artifacts --system-target /arm/raw/grubartifacts
|
||||||
|
|
||||||
|
# kairos-agent so we can use the pull-image
|
||||||
|
RUN luet install -y system/kairos-agent
|
||||||
|
|
||||||
# remove luet tmp files. Side effect of setting the system-target is that it treats it as a root fs
|
# remove luet tmp files. Side effect of setting the system-target is that it treats it as a root fs
|
||||||
# so temporal files are stored in each dir
|
# so temporal files are stored in each dir
|
||||||
RUN rm -Rf /grub2/var/tmp
|
RUN rm -Rf /grub2/var/tmp
|
||||||
|
RUN rm -Rf /grub2/var/cache
|
||||||
RUN rm -Rf /efi/var/tmp
|
RUN rm -Rf /efi/var/tmp
|
||||||
|
RUN rm -Rf /efi/var/cache
|
||||||
RUN rm -Rf /rpi/var/tmp
|
RUN rm -Rf /rpi/var/tmp
|
||||||
|
RUN rm -Rf /rpi/var/cache
|
||||||
RUN rm -Rf /pinebookpro/u-boot/var/tmp
|
RUN rm -Rf /pinebookpro/u-boot/var/tmp
|
||||||
|
RUN rm -Rf /pinebookpro/u-boot/var/cache
|
||||||
|
RUN rm -Rf /firmware/odroid-c2/var/tmp
|
||||||
|
RUN rm -Rf /firmware/odroid-c2/var/cache
|
||||||
RUN rm -Rf /raw/grub/var/tmp
|
RUN rm -Rf /raw/grub/var/tmp
|
||||||
|
RUN rm -Rf /raw/grub/var/cache
|
||||||
RUN rm -Rf /raw/grubconfig/var/tmp
|
RUN rm -Rf /raw/grubconfig/var/tmp
|
||||||
|
RUN rm -Rf /raw/grubconfig/var/cache
|
||||||
RUN rm -Rf /raw/grubartifacts/var/tmp
|
RUN rm -Rf /raw/grubartifacts/var/tmp
|
||||||
|
RUN rm -Rf /raw/grubartifacts/var/cache
|
||||||
|
RUN rm -Rf /arm/raw/grubefi/var/tmp
|
||||||
|
RUN rm -Rf /arm/raw/grubefi/var/cache
|
||||||
|
RUN rm -Rf /arm/raw/grubconfig/var/tmp
|
||||||
|
RUN rm -Rf /arm/raw/grubconfig/var/cache
|
||||||
|
RUN rm -Rf /arm/raw/grubartifacts/var/tmp
|
||||||
|
RUN rm -Rf /arm/raw/grubartifacts/var/cache
|
||||||
|
|
||||||
RUN mkdir /config
|
RUN mkdir /config
|
||||||
|
|
||||||
|
22
tools-image/arm/boards/rpi4.sh
Executable file
22
tools-image/arm/boards/rpi4.sh
Executable file
@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
partprobe
|
||||||
|
|
||||||
|
kpartx -va $DRIVE
|
||||||
|
|
||||||
|
image=$1
|
||||||
|
|
||||||
|
if [ -z "$image" ]; then
|
||||||
|
echo "No image specified"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
set -ax
|
||||||
|
TEMPDIR="$(mktemp -d)"
|
||||||
|
echo $TEMPDIR
|
||||||
|
mount "${device}p1" "${TEMPDIR}"
|
||||||
|
|
||||||
|
# Copy all rpi files
|
||||||
|
cp -rfv /rpi/* $TEMPDIR
|
||||||
|
|
||||||
|
umount "${TEMPDIR}"
|
@ -73,6 +73,8 @@ cleanup() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
losetup -D "${LOOP}" || true;
|
losetup -D "${LOOP}" || true;
|
||||||
|
dmsetup remove KairosVG-oem || true;
|
||||||
|
dmsetup remove KairosVG-recovery || true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ensure_dir_structure() {
|
ensure_dir_structure() {
|
||||||
@ -215,7 +217,12 @@ while [ "$#" -gt 0 ]; do
|
|||||||
shift 1
|
shift 1
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ "$model" == "rpi64" ]; then
|
if [ "$model" == "rpi64" ];then
|
||||||
|
echo "rpi64 model not supported anymore, please select either rpi3 or rpi4"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$model" == "rpi3" ] || [ "$model" == "rpi4" ]; then
|
||||||
container_image=${CONTAINER_IMAGE:-quay.io/costoolkit/examples:rpi-latest}
|
container_image=${CONTAINER_IMAGE:-quay.io/costoolkit/examples:rpi-latest}
|
||||||
else
|
else
|
||||||
# Odroid C2 image contains kernel-default-extra, might have broader support
|
# Odroid C2 image contains kernel-default-extra, might have broader support
|
||||||
@ -284,7 +291,7 @@ ensure_dir_structure $TARGET
|
|||||||
# Download the container image
|
# Download the container image
|
||||||
if [ -z "$directory" ]; then
|
if [ -z "$directory" ]; then
|
||||||
echo ">>> Downloading container image"
|
echo ">>> Downloading container image"
|
||||||
elemental pull-image $( (( local_build == 'true')) && printf %s '--local' ) $container_image $TARGET
|
kairos-agent pull-image $container_image $TARGET
|
||||||
else
|
else
|
||||||
echo ">>> Copying files from $directory"
|
echo ">>> Copying files from $directory"
|
||||||
rsync -axq --exclude='host' --exclude='mnt' --exclude='proc' --exclude='sys' --exclude='dev' --exclude='tmp' ${directory}/ $TARGET
|
rsync -axq --exclude='host' --exclude='mnt' --exclude='proc' --exclude='sys' --exclude='dev' --exclude='tmp' ${directory}/ $TARGET
|
||||||
@ -346,23 +353,31 @@ partprobe
|
|||||||
|
|
||||||
echo ">> Writing image and partition table"
|
echo ">> Writing image and partition table"
|
||||||
dd if=/dev/zero of="${output_image}" bs=1024000 count="${size}" || exit 1
|
dd if=/dev/zero of="${output_image}" bs=1024000 count="${size}" || exit 1
|
||||||
if [ "$model" == "rpi64" ]; then
|
|
||||||
|
# Image partitions
|
||||||
|
# only rpi4 supports gpt
|
||||||
|
if [ "$model" == "rpi3" ]; then
|
||||||
sgdisk -n 1:8192:+96M -c 1:EFI -t 1:0c00 ${output_image}
|
sgdisk -n 1:8192:+96M -c 1:EFI -t 1:0c00 ${output_image}
|
||||||
|
sgdisk -n 2:0:+${state_size}M -c 2:state -t 2:8300 ${output_image}
|
||||||
|
sgdisk -n 3:0:+$(( recovery_size + oem_size ))M -c 3:lvm -t 3:8e00 ${output_image}
|
||||||
|
sgdisk -n 4:0:+64M -c 4:persistent -t 4:8300 ${output_image}
|
||||||
|
sgdisk -m 1:2:3:4 ${output_image}
|
||||||
|
sfdisk --part-type ${output_image} 1 c
|
||||||
|
elif [ "$model" == "rpi4" ]; then
|
||||||
|
echo "label: gpt" | sfdisk "${output_image}"
|
||||||
|
sgdisk -n 1:8192:+96M -c 1:EFI -t 1:0c00 ${output_image}
|
||||||
|
sgdisk -n 2:0:+${state_size}M -c 2:state -t 2:8300 ${output_image}
|
||||||
|
sgdisk -n 3:0:+${recovery_size}M -c 3:recovery -t 3:8300 ${output_image}
|
||||||
|
sgdisk -n 4:0:+${oem_size}M -c 4:oem -t 4:8300 ${output_image}
|
||||||
|
sgdisk -n 5:0:+64M -c 5:persistent -t 5:8300 ${output_image}
|
||||||
|
sgdisk -g ${output_image}
|
||||||
|
sgdisk -m 1:2:3:4:5 ${output_image}
|
||||||
else
|
else
|
||||||
sgdisk -n 1:8192:+16M -c 1:EFI -t 1:0700 ${output_image}
|
sgdisk -n 1:8192:+16M -c 1:EFI -t 1:0700 ${output_image}
|
||||||
fi
|
sgdisk -n 2:0:+${state_size}M -c 2:state -t 2:8300 ${output_image}
|
||||||
sgdisk -n 2:0:+${state_size}M -c 2:state -t 2:8300 ${output_image}
|
sgdisk -n 3:0:+$(( recovery_size + oem_size ))M -c 3:lvm -t 3:8e00 ${output_image}
|
||||||
if [ "$disable_lvm" == 'true' ]; then
|
sgdisk -n 4:0:+64M -c 4:persistent -t 4:8300 ${output_image}
|
||||||
sgdisk -n 3:0:+${recovery_size}M -c 3:recovery -t 3:8300 ${output_image}
|
sgdisk -m 1:2:3:4 ${output_image}
|
||||||
else
|
|
||||||
sgdisk -n 3:0:+$(( recovery_size + oem_size ))M -c 3:lvm -t 3:8e00 ${output_image}
|
|
||||||
fi
|
|
||||||
sgdisk -n 4:0:+64M -c 4:persistent -t 4:8300 ${output_image}
|
|
||||||
|
|
||||||
sgdisk -m 1:2:3:4 ${output_image}
|
|
||||||
|
|
||||||
if [ "$model" == "rpi64" ]; then
|
|
||||||
sfdisk --part-type ${output_image} 1 c
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Prepare the image and copy over the files
|
# Prepare the image and copy over the files
|
||||||
@ -385,64 +400,68 @@ export device="/dev/mapper/${device}"
|
|||||||
|
|
||||||
partprobe
|
partprobe
|
||||||
|
|
||||||
kpartx -va $DRIVE
|
if [ "$model" == 'rpi4' ]; then
|
||||||
|
kpartx -vag $DRIVE
|
||||||
|
else
|
||||||
|
kpartx -va $DRIVE
|
||||||
|
fi
|
||||||
|
|
||||||
echo ">> Populating partitions"
|
echo ">> Populating partitions"
|
||||||
efi=${device}p1
|
efi=${device}p1
|
||||||
state=${device}p2
|
state=${device}p2
|
||||||
recovery=${device}p3
|
recovery=${device}p3
|
||||||
persistent=${device}p4
|
|
||||||
oem_lv=/dev/mapper/KairosVG-oem
|
if [ "$model" == 'rpi4' ]; then
|
||||||
recovery_lv=/dev/mapper/KairosVG-recovery
|
oem=${device}p4
|
||||||
|
persistent=${device}p5
|
||||||
|
else
|
||||||
|
persistent=${device}p4
|
||||||
|
oem_lv=/dev/mapper/KairosVG-oem
|
||||||
|
recovery_lv=/dev/mapper/KairosVG-recovery
|
||||||
|
fi
|
||||||
|
|
||||||
# Create partitions (RECOVERY, STATE, COS_PERSISTENT)
|
# Create partitions (RECOVERY, STATE, COS_PERSISTENT)
|
||||||
mkfs.vfat -F 32 ${efi}
|
mkfs.vfat -F 32 ${efi}
|
||||||
fatlabel ${efi} COS_GRUB
|
fatlabel ${efi} COS_GRUB
|
||||||
|
|
||||||
if [ "$disable_lvm" == 'true' ]; then
|
|
||||||
mkfs.ext4 -F -L ${RECOVERY_LABEL} $recovery
|
|
||||||
else
|
|
||||||
pvcreate $recovery
|
|
||||||
vgcreate KairosVG $recovery
|
|
||||||
lvcreate -Z n -n oem -L ${oem_size} KairosVG
|
|
||||||
lvcreate -Z n -n recovery -l 100%FREE KairosVG
|
|
||||||
vgchange -ay
|
|
||||||
vgmknodes
|
|
||||||
mkfs.ext4 -F -L ${OEM_LABEL} $oem_lv
|
|
||||||
mkfs.ext4 -F -L ${RECOVERY_LABEL} $recovery_lv
|
|
||||||
fi
|
|
||||||
mkfs.ext4 -F -L ${STATE_LABEL} $state
|
mkfs.ext4 -F -L ${STATE_LABEL} $state
|
||||||
mkfs.ext4 -F -L ${PERSISTENT_LABEL} $persistent
|
mkfs.ext4 -F -L ${PERSISTENT_LABEL} $persistent
|
||||||
|
|
||||||
|
if [ "$model" == 'rpi4' ]; then
|
||||||
|
mkfs.ext4 -F -L ${RECOVERY_LABEL} $recovery
|
||||||
|
mkfs.ext4 -F -L ${OEM_LABEL} $oem
|
||||||
|
else
|
||||||
|
pvcreate $recovery
|
||||||
|
vgcreate KairosVG $recovery
|
||||||
|
lvcreate -Z n -n oem -L ${oem_size} KairosVG
|
||||||
|
lvcreate -Z n -n recovery -l 100%FREE KairosVG
|
||||||
|
vgchange -ay
|
||||||
|
vgmknodes
|
||||||
|
mkfs.ext4 -F -L ${OEM_LABEL} $oem_lv
|
||||||
|
mkfs.ext4 -F -L ${RECOVERY_LABEL} $recovery_lv
|
||||||
|
fi
|
||||||
|
|
||||||
mkdir $WORKDIR/state
|
mkdir $WORKDIR/state
|
||||||
mkdir $WORKDIR/recovery
|
mkdir $WORKDIR/recovery
|
||||||
mkdir $WORKDIR/efi
|
mkdir $WORKDIR/efi
|
||||||
|
mkdir $WORKDIR/oem
|
||||||
|
|
||||||
if [ "$disable_lvm" == 'true' ]; then
|
|
||||||
mount $recovery $WORKDIR/recovery
|
|
||||||
else
|
|
||||||
mount $recovery_lv $WORKDIR/recovery
|
|
||||||
fi
|
|
||||||
mount $state $WORKDIR/state
|
mount $state $WORKDIR/state
|
||||||
mount $efi $WORKDIR/efi
|
mount $efi $WORKDIR/efi
|
||||||
|
|
||||||
|
if [ "$model" == 'rpi4' ]; then
|
||||||
if [ "$disable_lvm" == "false" ]; then
|
mount $recovery $WORKDIR/recovery
|
||||||
mkdir $WORKDIR/oem
|
mount $oem $WORKDIR/oem
|
||||||
|
else
|
||||||
|
mount $recovery_lv $WORKDIR/recovery
|
||||||
mount $oem_lv $WORKDIR/oem
|
mount $oem_lv $WORKDIR/oem
|
||||||
|
fi
|
||||||
|
|
||||||
cp -rfv /defaults.yaml $WORKDIR/oem/01_defaults.yaml
|
cp -rfv /defaults.yaml $WORKDIR/oem/01_defaults.yaml
|
||||||
|
|
||||||
# Set a OEM config file if specified
|
# Set a OEM config file if specified
|
||||||
if [ -n "$config" ]; then
|
if [ -n "$config" ]; then
|
||||||
echo ">> Copying $config OEM config file"
|
echo ">> Copying $config OEM config file"
|
||||||
get_url $config $WORKDIR/oem/99_custom.yaml
|
get_url $config $WORKDIR/oem/99_custom.yaml
|
||||||
fi
|
|
||||||
|
|
||||||
umount $WORKDIR/oem
|
|
||||||
else
|
|
||||||
echo "LVM disabled: Not adding default config with default user/pass and custom config file"
|
|
||||||
echo "Enable LVM to copy those files into /oem"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
grub2-editenv $WORKDIR/state/grub_oem_env set "default_menu_entry=$menu_entry"
|
grub2-editenv $WORKDIR/state/grub_oem_env set "default_menu_entry=$menu_entry"
|
||||||
@ -450,7 +469,6 @@ grub2-editenv $WORKDIR/state/grub_oem_env set "default_menu_entry=$menu_entry"
|
|||||||
# We copy the file we saved earier to the STATE partition
|
# We copy the file we saved earier to the STATE partition
|
||||||
cp -rfv "${tmpgrubconfig}" $WORKDIR/state/grubmenu
|
cp -rfv "${tmpgrubconfig}" $WORKDIR/state/grubmenu
|
||||||
|
|
||||||
|
|
||||||
# Copy over content
|
# Copy over content
|
||||||
cp -arf $EFI/* $WORKDIR/efi
|
cp -arf $EFI/* $WORKDIR/efi
|
||||||
cp -arf $RECOVERY/* $WORKDIR/recovery
|
cp -arf $RECOVERY/* $WORKDIR/recovery
|
||||||
@ -459,10 +477,13 @@ cp -arf $STATEDIR/* $WORKDIR/state
|
|||||||
umount $WORKDIR/recovery
|
umount $WORKDIR/recovery
|
||||||
umount $WORKDIR/state
|
umount $WORKDIR/state
|
||||||
umount $WORKDIR/efi
|
umount $WORKDIR/efi
|
||||||
|
umount $WORKDIR/oem
|
||||||
|
|
||||||
if [ "$disable_lvm" == 'false' ]; then
|
|
||||||
vgchange -an
|
if [ "$model" != 'rpi4' ]; then
|
||||||
|
vgchange -an
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sync
|
sync
|
||||||
|
|
||||||
# Flash uboot and vendor-specific bits
|
# Flash uboot and vendor-specific bits
|
||||||
@ -473,7 +494,11 @@ sync
|
|||||||
sleep 5
|
sleep 5
|
||||||
sync
|
sync
|
||||||
|
|
||||||
kpartx -dv $DRIVE || true
|
if [ "$model" == 'rpi4' ]; then
|
||||||
|
kpartx -dvg $DRIVE
|
||||||
|
else
|
||||||
|
kpartx -dv $DRIVE || true
|
||||||
|
fi
|
||||||
|
|
||||||
umount $DRIVE || true
|
umount $DRIVE || true
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user