diff --git a/.obs/specfile/elemental.spec b/.obs/specfile/elemental.spec index 08b1c2090..d157a584c 100644 --- a/.obs/specfile/elemental.spec +++ b/.obs/specfile/elemental.spec @@ -142,6 +142,9 @@ rm -rf %{buildroot}/usr/libexec/.placeholder %defattr(-,root,root,-) %doc README.md %license LICENSE +%dir %{_sysconfdir}/elemental +%dir %{_sysconfdir}/elemental/config.d +%config %{_sysconfdir}/elemental/config.d/snapshotter.yaml %dir %{_sysconfdir}/cos %config %{_sysconfdir}/cos/bootargs.cfg %dir %{_sysconfdir}/dracut.conf.d diff --git a/framework/files/etc/cos/bootargs.cfg b/framework/files/etc/cos/bootargs.cfg index 0f4ce9868..526339bbf 100644 --- a/framework/files/etc/cos/bootargs.cfg +++ b/framework/files/etc/cos/bootargs.cfg @@ -1,7 +1,27 @@ -set kernel=/boot/vmlinuz +# bootargs.cfg inherits from grub.cfg several context variables: +# 'img' => defines the image path to boot from. Active img is statically defined, does not require a value +# 'state_label' => label of the state partition filesystem +# 'oem_label' => label of the oem partition filesystem +# 'recovery_label' => label of the recovery partition filesystem +# 'snapshotter' => snapshotter type, assumes loopdevice type if undefined +# +# In addition bootargs.cfg is responsible of setting the following variables: +# 'kernelcmd' => essential kernel command line parameters (all elemental specific and non elemental specific) +# 'kernel' => kernel binary path within the target image +# 'initramfs' => initramfs binary path within the target image + +if [ -n "${img}" ]; then + set img_arg="elemental.image=${img}" +fi + if [ "${mode}" == "recovery" ]; then - set kernelcmd="console=tty1 root=LABEL=$recovery_label elemental.image=${img} rd.neednet=0 elemental.oemlabel=$oem_label" + set kernelcmd="console=tty1 root=LABEL=${recovery_label} ${img_arg} elemental.mode=${mode} rd.neednet=0 elemental.oemlabel=${oem_label}" else - set kernelcmd="console=tty1 root=LABEL=$state_label elemental.image=${img} panic=5 rd.neednet=0 elemental.oemlabel=$oem_label fsck.mode=force fsck.repair=yes" + if [ "${snapshotter}" == "btrfs" ]; then + set snap_arg="elemental.snapshotter=btrfs" + fi + set kernelcmd="console=tty1 root=LABEL=${state_label} ${img_arg} ${snap_arg} elemental.mode=${mode} panic=5 rd.neednet=0 elemental.oemlabel=${oem_label} fsck.mode=force fsck.repair=yes" fi + set initramfs=/boot/initrd +set kernel=/boot/vmlinuz diff --git a/framework/files/etc/elemental/config.d/snapshotter.yaml b/framework/files/etc/elemental/config.d/snapshotter.yaml new file mode 100644 index 000000000..8c4cff629 --- /dev/null +++ b/framework/files/etc/elemental/config.d/snapshotter.yaml @@ -0,0 +1,3 @@ +snapshotter: + type: btrfs + max-snaps: 4