mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00
wic: Warn if an ext filesystem affected by the Y2038 problem is used
We are getting closer and closer to the year 2038 where the 32 bit time_t overflow will happen. While products (= embedded systems) with an expected life time of 15 years are still save the situation may change if your system has to survive the next 20 years. ext2 and ext3 filesystems are always affected by the time overflow, so let's warn the user if these filesystems are still being used. If ext4 is affected depends on the inode size chosen during filesystem creation. At least 256 bytes are necessary to be safe. As ext4 is used very often (and partitions may be created small first and extended later) this might be an issue for many users. Some filesystems created during CI runs were already affected by the Y2038 problem. By using `--mkfs-extraopts "-T default"` we tell mke2fs not to auto-detect the usage type based on the filesystem size. mke2fs will use the default values for tuning parameters instead. The inode size is one of these parameters. (From OE-Core rev: eecbe625558406680121d2a7e84917fea45ea9dc) Signed-off-by: Florian Bezdeka <florian.bezdeka@siemens.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
a7854ce174
commit
a334cbb12d
|
@ -1,3 +1,3 @@
|
|||
# This file is included into 3 canned wks files from this directory
|
||||
part /boot --source bootimg-pcbios --ondisk sda --label boot --active --align 1024
|
||||
part / --source rootfs --use-uuid --fstype=ext4 --label platform --align 1024
|
||||
part / --source rootfs --use-uuid --fstype=ext4 --mkfs-extraopts "-T default" --label platform --align 1024
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
|
||||
part /boot --source bootimg-pcbios --ondisk sda --label boot --active --align 1024
|
||||
part / --source rootfs --ondisk sda --fstype=ext4 --label platform --align 1024 --use-uuid
|
||||
part / --source rootfs --ondisk sda --fstype=ext4 --mkfs-extraopts "-T default" --label platform --align 1024 --use-uuid
|
||||
|
||||
bootloader --ptable gpt --timeout=0 --append="rootwait rootfstype=ext4 video=vesafb vga=0x318 console=tty0 console=ttyS0,115200n8"
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
part /boot --source bootimg-efi --sourceparams="loader=grub-efi" --ondisk sda --label msdos --active --align 1024
|
||||
|
||||
part / --source rootfs --ondisk sda --fstype=ext4 --label platform --align 1024 --use-uuid
|
||||
part / --source rootfs --ondisk sda --fstype=ext4 --mkfs-extraopts "-T default" --label platform --align 1024 --use-uuid
|
||||
|
||||
part swap --ondisk sda --size 44 --label swap1 --fstype=swap
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ logger = logging.getLogger('wic')
|
|||
|
||||
# executable -> recipe pairs for exec_native_cmd
|
||||
NATIVE_RECIPES = {"bmaptool": "bmap-tools",
|
||||
"dumpe2fs": "e2fsprogs",
|
||||
"grub-mkimage": "grub-efi",
|
||||
"isohybrid": "syslinux",
|
||||
"mcopy": "mtools",
|
||||
|
|
|
@ -298,6 +298,8 @@ class Partition():
|
|||
mkfs_cmd = "fsck.%s -pvfD %s" % (self.fstype, rootfs)
|
||||
exec_native_cmd(mkfs_cmd, native_sysroot, pseudo=pseudo)
|
||||
|
||||
self.check_for_Y2038_problem(rootfs, native_sysroot)
|
||||
|
||||
def prepare_rootfs_btrfs(self, rootfs, cr_workdir, oe_builddir, rootfs_dir,
|
||||
native_sysroot, pseudo):
|
||||
"""
|
||||
|
@ -388,6 +390,8 @@ class Partition():
|
|||
(self.fstype, extraopts, label_str, self.fsuuid, rootfs)
|
||||
exec_native_cmd(mkfs_cmd, native_sysroot)
|
||||
|
||||
self.check_for_Y2038_problem(rootfs, native_sysroot)
|
||||
|
||||
def prepare_empty_partition_btrfs(self, rootfs, oe_builddir,
|
||||
native_sysroot):
|
||||
"""
|
||||
|
@ -449,3 +453,37 @@ class Partition():
|
|||
|
||||
mkswap_cmd = "mkswap %s -U %s %s" % (label_str, self.fsuuid, path)
|
||||
exec_native_cmd(mkswap_cmd, native_sysroot)
|
||||
|
||||
def check_for_Y2038_problem(self, rootfs, native_sysroot):
|
||||
"""
|
||||
Check if the filesystem is affected by the Y2038 problem
|
||||
(Y2038 problem = 32 bit time_t overflow in January 2038)
|
||||
"""
|
||||
def get_err_str(part):
|
||||
err = "The {} filesystem {} has no Y2038 support."
|
||||
if part.mountpoint:
|
||||
args = [part.fstype, "mounted at %s" % part.mountpoint]
|
||||
elif part.label:
|
||||
args = [part.fstype, "labeled '%s'" % part.label]
|
||||
elif part.part_name:
|
||||
args = [part.fstype, "in partition '%s'" % part.part_name]
|
||||
else:
|
||||
args = [part.fstype, "in partition %s" % part.num]
|
||||
return err.format(*args)
|
||||
|
||||
# ext2 and ext3 are always affected by the Y2038 problem
|
||||
if self.fstype in ["ext2", "ext3"]:
|
||||
logger.warn(get_err_str(self))
|
||||
return
|
||||
|
||||
ret, out = exec_native_cmd("dumpe2fs %s" % rootfs, native_sysroot)
|
||||
|
||||
# if ext4 is affected by the Y2038 problem depends on the inode size
|
||||
for line in out.splitlines():
|
||||
if line.startswith("Inode size:"):
|
||||
size = int(line.split(":")[1].strip())
|
||||
if size < 256:
|
||||
logger.warn("%s Inodes (of size %d) are too small." %
|
||||
(get_err_str(self), size))
|
||||
break
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user