diff options
author | Eduardo Otubo <otubo@redhat.com> | 2020-08-18 23:12:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-18 15:12:02 -0600 |
commit | b749548a9eb43b34cce64f8688107645411abc8c (patch) | |
tree | 9e8d5c68d9c027f4d6008cd3c755cafda913887b /cloudinit | |
parent | a4b6b96f30bdd994ab535b222cf4b4bf09f20668 (diff) | |
download | vyos-cloud-init-b749548a9eb43b34cce64f8688107645411abc8c.tar.gz vyos-cloud-init-b749548a9eb43b34cce64f8688107645411abc8c.zip |
Detect kernel version before swap file creation (#428)
According to man page `man 8 swapon', "Preallocated swap files are
supported on XFS since Linux 4.18". This patch checks for kernel version
before attepting to create swapfile, using dd for XFS only on kernel
versions <= 4.18 or btrfs.
Add new func util.kernel_version which returns a tuple of ints (major, minor)
Signed-off-by: Eduardo Otubo otubo@redhat.com
Diffstat (limited to 'cloudinit')
-rw-r--r-- | cloudinit/config/cc_mounts.py | 8 | ||||
-rw-r--r-- | cloudinit/util.py | 4 |
2 files changed, 9 insertions, 3 deletions
diff --git a/cloudinit/config/cc_mounts.py b/cloudinit/config/cc_mounts.py index 773b8285..54f2f878 100644 --- a/cloudinit/config/cc_mounts.py +++ b/cloudinit/config/cc_mounts.py @@ -65,7 +65,7 @@ swap file is created. from string import whitespace import logging -import os.path +import os import re from cloudinit import type_utils @@ -263,7 +263,8 @@ def create_swapfile(fname: str, size: str) -> None: fstype = util.get_mount_info(swap_dir)[1] - if fstype in ("xfs", "btrfs"): + if (fstype == "xfs" and + util.kernel_version() < (4, 18)) or fstype == "btrfs": create_swap(fname, size, "dd") else: try: @@ -273,7 +274,8 @@ def create_swapfile(fname: str, size: str) -> None: LOG.warning("Will attempt with dd.") create_swap(fname, size, "dd") - util.chmod(fname, 0o600) + if os.path.exists(fname): + util.chmod(fname, 0o600) try: subp.subp(['mkswap', fname]) except subp.ProcessExecutionError: diff --git a/cloudinit/util.py b/cloudinit/util.py index 624c560d..edd37039 100644 --- a/cloudinit/util.py +++ b/cloudinit/util.py @@ -68,6 +68,10 @@ CONTAINER_TESTS = (['systemd-detect-virt', '--quiet', '--container'], ['lxc-is-container']) +def kernel_version(): + return tuple(map(int, os.uname().release.split('.')[:2])) + + @lru_cache() def get_dpkg_architecture(target=None): """Return the sanitized string output by `dpkg --print-architecture`. |