@@ -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
7880ensure_dir_structure () {
@@ -215,7 +217,12 @@ while [ "$#" -gt 0 ]; do
215217 shift 1
216218done
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}
220227else
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
285292if [ -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
288295else
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
347354echo " >> Writing image and partition table"
348355dd 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}
351375else
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}
366381fi
367382
368383# Prepare the image and copy over the files
@@ -385,72 +400,75 @@ export device="/dev/mapper/${device}"
385400
386401partprobe
387402
388- kpartx -va $DRIVE
403+ if [ " $model " == ' rpi4' ]; then
404+ kpartx -vag $DRIVE
405+ else
406+ kpartx -va $DRIVE
407+ fi
389408
390409echo " >> Populating partitions"
391410efi=${device} p1
392411state=${device} p2
393412recovery=${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)
399424mkfs.vfat -F 32 ${efi}
400425fatlabel ${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
404432else
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
413441fi
414- mkfs.ext4 -F -L ${STATE_LABEL} $state
415- mkfs.ext4 -F -L ${PERSISTENT_LABEL} $persistent
416442
417443mkdir $WORKDIR /state
418444mkdir $WORKDIR /recovery
419445mkdir $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
426448mount $state $WORKDIR /state
427449mount $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
446465fi
447466
448467grub2-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
451470cp -rfv " ${tmpgrubconfig} " $WORKDIR /state/grubmenu
452471
453-
454472# Copy over content
455473cp -arf $EFI /* $WORKDIR /efi
456474cp -arf $RECOVERY /* $WORKDIR /recovery
@@ -459,10 +477,13 @@ cp -arf $STATEDIR/* $WORKDIR/state
459477umount $WORKDIR /recovery
460478umount $WORKDIR /state
461479umount $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
465485fi
486+
466487sync
467488
468489# Flash uboot and vendor-specific bits
@@ -473,7 +494,11 @@ sync
473494sleep 5
474495sync
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
478503umount $DRIVE || true
479504
0 commit comments