feat: Add new autoupdates element
This patch proposes a new element which creates a mechanism for the image to have automatic updates enabled from the first boot. A custom config file, is expected during build time, which is injected into the image. Change-Id: Ib4c7513db4e00d592447fda1b1d0ed2bc649e1cf Signed-off-by: Charalampos Kominos <hkominos@gmail.com>
This commit is contained in:
parent
e89f59393a
commit
7e1bb74831
23
diskimage_builder/elements/autoupdates/README.rst
Normal file
23
diskimage_builder/elements/autoupdates/README.rst
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
===========
|
||||||
|
autoupdates
|
||||||
|
===========
|
||||||
|
|
||||||
|
This element will configure both debian family and redhat family images to have an automatic updates mechanism built into the image, for example to update automatically from the security repos.
|
||||||
|
For Debian based images it is based on unuattended-upgrades and for Redhat on dnf-automatic.
|
||||||
|
|
||||||
|
Environment Variables
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
DIB_DEB_UPDATES_CONF
|
||||||
|
:Required: Yes for the Debian Family
|
||||||
|
:Default: None
|
||||||
|
:Description: The location of a custom 50unattended-upgrades file on the builder which will be injected into the image.
|
||||||
|
:Example: ``DIB_DEB_UPDATES_CONF=/home/50unattended-upgrades``
|
||||||
|
|
||||||
|
DIB_YUM_UPDATES_CONF
|
||||||
|
:Required: Yes for the Redhat Family
|
||||||
|
:Default: None
|
||||||
|
:Description: The location of a custom automatic.conf file on the builder which will be injected into the image.
|
||||||
|
:Example: ``DIB_YUM_UPDATES_CONF=/home/automatic.conf``
|
||||||
|
|
||||||
|
.. element_deps::
|
2
diskimage_builder/elements/autoupdates/element-deps
Normal file
2
diskimage_builder/elements/autoupdates/element-deps
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
package-installs
|
||||||
|
pkg-map
|
@ -0,0 +1,2 @@
|
|||||||
|
autoupdates:
|
||||||
|
phase: install.d
|
18
diskimage_builder/elements/autoupdates/pkg-map
Normal file
18
diskimage_builder/elements/autoupdates/pkg-map
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"family":{
|
||||||
|
"redhat": {
|
||||||
|
"autoupdates": "dnf-automatic"
|
||||||
|
},
|
||||||
|
"debian":{
|
||||||
|
"autoupdates": "unattended-upgrades"
|
||||||
|
},
|
||||||
|
"suse": {
|
||||||
|
"autoupdates": ""
|
||||||
|
},
|
||||||
|
"gentoo": {
|
||||||
|
"autoupdates": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
35
diskimage_builder/elements/autoupdates/post-install.d/82-enable-autoupdate
Executable file
35
diskimage_builder/elements/autoupdates/post-install.d/82-enable-autoupdate
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright (c) 2024 ECMWF
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
# implied.
|
||||||
|
#
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
if [ "${DIB_DEBUG_TRACE:-0}" -gt 0 ]; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
set -eu
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
case "$DIB_INIT_SYSTEM" in
|
||||||
|
systemd)
|
||||||
|
if [[ $DISTRO_NAME =~ (ubuntu|debian)$ ]]; then
|
||||||
|
systemctl enable unattended-upgrades.service
|
||||||
|
elif [[ $DISTRO_NAME =~ (centos|rocky|rhel|openeuler)$ ]]; then
|
||||||
|
systemctl enable dnf-automatic.timer
|
||||||
|
else
|
||||||
|
echo "The 'autoupdates' element does not support this distribution."
|
||||||
|
echo "Exiting"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
esac
|
38
diskimage_builder/elements/autoupdates/root.d/61-create-update-config
Executable file
38
diskimage_builder/elements/autoupdates/root.d/61-create-update-config
Executable file
@ -0,0 +1,38 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright (c) 2024 ECMWF
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
# implied.
|
||||||
|
#
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
if [ "${DIB_DEBUG_TRACE:-0}" -gt 0 ]; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
set -eu
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
# Check that only one of DIB_DEB_UPDATES_CONF or DIB_YUM_UPDATES_CONF is set
|
||||||
|
|
||||||
|
if [[ -n ${DIB_DEB_UPDATES_CONF:-} && -n ${DIB_YUM_UPDATES_CONF:-} ]]; then
|
||||||
|
echo "Error: Both DIB_DEB_UPDATES_CONF and DIB_YUM_UPDATES_CONF are set. Please select only one based on the distro." >&2
|
||||||
|
exit 1
|
||||||
|
elif [[ -z ${DIB_DEB_UPDATES_CONF:-} && -z ${DIB_YUM_UPDATES_CONF:-} ]]; then
|
||||||
|
echo "Warning: Neither DIB_DEB_UPDATES_CONF nor DIB_YUM_UPDATES_CONF is set. Continuing without adding a config file." >&2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Copy the appropriate configuration file if one is set
|
||||||
|
if [[ -n ${DIB_DEB_UPDATES_CONF:-} ]]; then
|
||||||
|
sudo cp ${DIB_DEB_UPDATES_CONF} $TARGET_ROOT/etc/apt/apt.conf.d/50unattended-upgrades
|
||||||
|
elif [[ -n ${DIB_YUM_UPDATES_CONF:-} ]]; then
|
||||||
|
sudo cp ${DIB_YUM_UPDATES_CONF} $TARGET_ROOT/etc/dnf/automatic.conf
|
||||||
|
fi
|
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
A new element ``autoupdates`` is added to DIB. This element, with proper
|
||||||
|
configuration, will enable and configure cloud images to have a system that
|
||||||
|
automatically updates the image, from the upstream binaries. To this end,
|
||||||
|
``DIB_DEB_UPDATES_CONF`` or ``DIB_YUM_UPDATES_CONF`` must be set during build time.
|
||||||
|
other:
|
||||||
|
- |
|
||||||
|
The ``autoupdates`` element has only been tested in Rocky and Ubuntu images.
|
||||||
|
In addition, the element does not check the validity of the configuration files in any way.
|
Loading…
Reference in New Issue
Block a user