Skip to content

Commit 80c53e0

Browse files
authored
Merge pull request #85 from Itxaka/rpi3_rpi4
Support rpi3 and rpi 4 boards
2 parents 7143238 + 0019c9c commit 80c53e0

File tree

4 files changed

+120
-55
lines changed

4 files changed

+120
-55
lines changed

tools-image/Dockerfile

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,33 @@ RUN luet install --config /tmp/luet-arm64.yaml -y static/grub-efi --system-targe
6161
RUN luet install --config /tmp/luet-arm64.yaml -y static/grub-config --system-target /arm/raw/grubconfig
6262
RUN luet install --config /tmp/luet-arm64.yaml -y static/grub-artifacts --system-target /arm/raw/grubartifacts
6363

64+
# kairos-agent so we can use the pull-image
65+
RUN luet install -y system/kairos-agent
66+
6467
# remove luet tmp files. Side effect of setting the system-target is that it treats it as a root fs
6568
# so temporal files are stored in each dir
6669
RUN rm -Rf /grub2/var/tmp
70+
RUN rm -Rf /grub2/var/cache
6771
RUN rm -Rf /efi/var/tmp
72+
RUN rm -Rf /efi/var/cache
6873
RUN rm -Rf /rpi/var/tmp
74+
RUN rm -Rf /rpi/var/cache
6975
RUN rm -Rf /pinebookpro/u-boot/var/tmp
76+
RUN rm -Rf /pinebookpro/u-boot/var/cache
77+
RUN rm -Rf /firmware/odroid-c2/var/tmp
78+
RUN rm -Rf /firmware/odroid-c2/var/cache
7079
RUN rm -Rf /raw/grub/var/tmp
80+
RUN rm -Rf /raw/grub/var/cache
7181
RUN rm -Rf /raw/grubconfig/var/tmp
82+
RUN rm -Rf /raw/grubconfig/var/cache
7283
RUN rm -Rf /raw/grubartifacts/var/tmp
84+
RUN rm -Rf /raw/grubartifacts/var/cache
85+
RUN rm -Rf /arm/raw/grubefi/var/tmp
86+
RUN rm -Rf /arm/raw/grubefi/var/cache
87+
RUN rm -Rf /arm/raw/grubconfig/var/tmp
88+
RUN rm -Rf /arm/raw/grubconfig/var/cache
89+
RUN rm -Rf /arm/raw/grubartifacts/var/tmp
90+
RUN rm -Rf /arm/raw/grubartifacts/var/cache
7391

7492
RUN mkdir /config
7593

File renamed without changes.

tools-image/arm/boards/rpi4.sh

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/bin/bash
2+
3+
partprobe
4+
5+
kpartx -va $DRIVE
6+
7+
image=$1
8+
9+
if [ -z "$image" ]; then
10+
echo "No image specified"
11+
exit 1
12+
fi
13+
14+
set -ax
15+
TEMPDIR="$(mktemp -d)"
16+
echo $TEMPDIR
17+
mount "${device}p1" "${TEMPDIR}"
18+
19+
# Copy all rpi files
20+
cp -rfv /rpi/* $TEMPDIR
21+
22+
umount "${TEMPDIR}"

tools-image/build-arm-image.sh

Lines changed: 80 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ cleanup() {
7373
fi
7474

7575
losetup -D "${LOOP}" || true;
76+
dmsetup remove KairosVG-oem || true;
77+
dmsetup remove KairosVG-recovery || true;
7678
}
7779

7880
ensure_dir_structure() {
@@ -215,7 +217,12 @@ while [ "$#" -gt 0 ]; do
215217
shift 1
216218
done
217219

218-
if [ "$model" == "rpi64" ]; then
220+
if [ "$model" == "rpi64" ];then
221+
echo "rpi64 model not supported anymore, please select either rpi3 or rpi4"
222+
exit 1
223+
fi
224+
225+
if [ "$model" == "rpi3" ] || [ "$model" == "rpi4" ]; then
219226
container_image=${CONTAINER_IMAGE:-quay.io/costoolkit/examples:rpi-latest}
220227
else
221228
# Odroid C2 image contains kernel-default-extra, might have broader support
@@ -284,7 +291,7 @@ ensure_dir_structure $TARGET
284291
# Download the container image
285292
if [ -z "$directory" ]; then
286293
echo ">>> Downloading container image"
287-
elemental pull-image $( (( local_build == 'true')) && printf %s '--local' ) $container_image $TARGET
294+
kairos-agent pull-image $container_image $TARGET
288295
else
289296
echo ">>> Copying files from $directory"
290297
rsync -axq --exclude='host' --exclude='mnt' --exclude='proc' --exclude='sys' --exclude='dev' --exclude='tmp' ${directory}/ $TARGET
@@ -346,23 +353,31 @@ partprobe
346353

347354
echo ">> Writing image and partition table"
348355
dd if=/dev/zero of="${output_image}" bs=1024000 count="${size}" || exit 1
349-
if [ "$model" == "rpi64" ]; then
356+
357+
# Image partitions
358+
# only rpi4 supports gpt
359+
if [ "$model" == "rpi3" ]; then
350360
sgdisk -n 1:8192:+96M -c 1:EFI -t 1:0c00 ${output_image}
361+
sgdisk -n 2:0:+${state_size}M -c 2:state -t 2:8300 ${output_image}
362+
sgdisk -n 3:0:+$(( recovery_size + oem_size ))M -c 3:lvm -t 3:8e00 ${output_image}
363+
sgdisk -n 4:0:+64M -c 4:persistent -t 4:8300 ${output_image}
364+
sgdisk -m 1:2:3:4 ${output_image}
365+
sfdisk --part-type ${output_image} 1 c
366+
elif [ "$model" == "rpi4" ]; then
367+
echo "label: gpt" | sfdisk "${output_image}"
368+
sgdisk -n 1:8192:+96M -c 1:EFI -t 1:0c00 ${output_image}
369+
sgdisk -n 2:0:+${state_size}M -c 2:state -t 2:8300 ${output_image}
370+
sgdisk -n 3:0:+${recovery_size}M -c 3:recovery -t 3:8300 ${output_image}
371+
sgdisk -n 4:0:+${oem_size}M -c 4:oem -t 4:8300 ${output_image}
372+
sgdisk -n 5:0:+64M -c 5:persistent -t 5:8300 ${output_image}
373+
sgdisk -g ${output_image}
374+
sgdisk -m 1:2:3:4:5 ${output_image}
351375
else
352376
sgdisk -n 1:8192:+16M -c 1:EFI -t 1:0700 ${output_image}
353-
fi
354-
sgdisk -n 2:0:+${state_size}M -c 2:state -t 2:8300 ${output_image}
355-
if [ "$disable_lvm" == 'true' ]; then
356-
sgdisk -n 3:0:+${recovery_size}M -c 3:recovery -t 3:8300 ${output_image}
357-
else
358-
sgdisk -n 3:0:+$(( recovery_size + oem_size ))M -c 3:lvm -t 3:8e00 ${output_image}
359-
fi
360-
sgdisk -n 4:0:+64M -c 4:persistent -t 4:8300 ${output_image}
361-
362-
sgdisk -m 1:2:3:4 ${output_image}
363-
364-
if [ "$model" == "rpi64" ]; then
365-
sfdisk --part-type ${output_image} 1 c
377+
sgdisk -n 2:0:+${state_size}M -c 2:state -t 2:8300 ${output_image}
378+
sgdisk -n 3:0:+$(( recovery_size + oem_size ))M -c 3:lvm -t 3:8e00 ${output_image}
379+
sgdisk -n 4:0:+64M -c 4:persistent -t 4:8300 ${output_image}
380+
sgdisk -m 1:2:3:4 ${output_image}
366381
fi
367382

368383
# Prepare the image and copy over the files
@@ -385,72 +400,75 @@ export device="/dev/mapper/${device}"
385400

386401
partprobe
387402

388-
kpartx -va $DRIVE
403+
if [ "$model" == 'rpi4' ]; then
404+
kpartx -vag $DRIVE
405+
else
406+
kpartx -va $DRIVE
407+
fi
389408

390409
echo ">> Populating partitions"
391410
efi=${device}p1
392411
state=${device}p2
393412
recovery=${device}p3
394-
persistent=${device}p4
395-
oem_lv=/dev/mapper/KairosVG-oem
396-
recovery_lv=/dev/mapper/KairosVG-recovery
413+
414+
if [ "$model" == 'rpi4' ]; then
415+
oem=${device}p4
416+
persistent=${device}p5
417+
else
418+
persistent=${device}p4
419+
oem_lv=/dev/mapper/KairosVG-oem
420+
recovery_lv=/dev/mapper/KairosVG-recovery
421+
fi
397422

398423
# Create partitions (RECOVERY, STATE, COS_PERSISTENT)
399424
mkfs.vfat -F 32 ${efi}
400425
fatlabel ${efi} COS_GRUB
426+
mkfs.ext4 -F -L ${STATE_LABEL} $state
427+
mkfs.ext4 -F -L ${PERSISTENT_LABEL} $persistent
401428

402-
if [ "$disable_lvm" == 'true' ]; then
403-
mkfs.ext4 -F -L ${RECOVERY_LABEL} $recovery
429+
if [ "$model" == 'rpi4' ]; then
430+
mkfs.ext4 -F -L ${RECOVERY_LABEL} $recovery
431+
mkfs.ext4 -F -L ${OEM_LABEL} $oem
404432
else
405-
pvcreate $recovery
406-
vgcreate KairosVG $recovery
407-
lvcreate -Z n -n oem -L ${oem_size} KairosVG
408-
lvcreate -Z n -n recovery -l 100%FREE KairosVG
409-
vgchange -ay
410-
vgmknodes
411-
mkfs.ext4 -F -L ${OEM_LABEL} $oem_lv
412-
mkfs.ext4 -F -L ${RECOVERY_LABEL} $recovery_lv
433+
pvcreate $recovery
434+
vgcreate KairosVG $recovery
435+
lvcreate -Z n -n oem -L ${oem_size} KairosVG
436+
lvcreate -Z n -n recovery -l 100%FREE KairosVG
437+
vgchange -ay
438+
vgmknodes
439+
mkfs.ext4 -F -L ${OEM_LABEL} $oem_lv
440+
mkfs.ext4 -F -L ${RECOVERY_LABEL} $recovery_lv
413441
fi
414-
mkfs.ext4 -F -L ${STATE_LABEL} $state
415-
mkfs.ext4 -F -L ${PERSISTENT_LABEL} $persistent
416442

417443
mkdir $WORKDIR/state
418444
mkdir $WORKDIR/recovery
419445
mkdir $WORKDIR/efi
446+
mkdir $WORKDIR/oem
420447

421-
if [ "$disable_lvm" == 'true' ]; then
422-
mount $recovery $WORKDIR/recovery
423-
else
424-
mount $recovery_lv $WORKDIR/recovery
425-
fi
426448
mount $state $WORKDIR/state
427449
mount $efi $WORKDIR/efi
428450

429-
430-
if [ "$disable_lvm" == "false" ]; then
431-
mkdir $WORKDIR/oem
451+
if [ "$model" == 'rpi4' ]; then
452+
mount $recovery $WORKDIR/recovery
453+
mount $oem $WORKDIR/oem
454+
else
455+
mount $recovery_lv $WORKDIR/recovery
432456
mount $oem_lv $WORKDIR/oem
457+
fi
433458

434-
cp -rfv /defaults.yaml $WORKDIR/oem/01_defaults.yaml
435-
436-
# Set a OEM config file if specified
437-
if [ -n "$config" ]; then
438-
echo ">> Copying $config OEM config file"
439-
get_url $config $WORKDIR/oem/99_custom.yaml
440-
fi
459+
cp -rfv /defaults.yaml $WORKDIR/oem/01_defaults.yaml
441460

442-
umount $WORKDIR/oem
443-
else
444-
echo "LVM disabled: Not adding default config with default user/pass and custom config file"
445-
echo "Enable LVM to copy those files into /oem"
461+
# Set a OEM config file if specified
462+
if [ -n "$config" ]; then
463+
echo ">> Copying $config OEM config file"
464+
get_url $config $WORKDIR/oem/99_custom.yaml
446465
fi
447466

448467
grub2-editenv $WORKDIR/state/grub_oem_env set "default_menu_entry=$menu_entry"
449468

450469
# We copy the file we saved earier to the STATE partition
451470
cp -rfv "${tmpgrubconfig}" $WORKDIR/state/grubmenu
452471

453-
454472
# Copy over content
455473
cp -arf $EFI/* $WORKDIR/efi
456474
cp -arf $RECOVERY/* $WORKDIR/recovery
@@ -459,10 +477,13 @@ cp -arf $STATEDIR/* $WORKDIR/state
459477
umount $WORKDIR/recovery
460478
umount $WORKDIR/state
461479
umount $WORKDIR/efi
480+
umount $WORKDIR/oem
462481

463-
if [ "$disable_lvm" == 'false' ]; then
464-
vgchange -an
482+
483+
if [ "$model" != 'rpi4' ]; then
484+
vgchange -an
465485
fi
486+
466487
sync
467488

468489
# Flash uboot and vendor-specific bits
@@ -473,7 +494,11 @@ sync
473494
sleep 5
474495
sync
475496

476-
kpartx -dv $DRIVE || true
497+
if [ "$model" == 'rpi4' ]; then
498+
kpartx -dvg $DRIVE
499+
else
500+
kpartx -dv $DRIVE || true
501+
fi
477502

478503
umount $DRIVE || true
479504

0 commit comments

Comments
 (0)