Patrick Williams | 92b42cb | 2022-09-03 06:53:57 -0500 | [diff] [blame] | 1 | # |
| 2 | # Copyright OpenEmbedded Contributors |
| 3 | # |
| 4 | # SPDX-License-Identifier: MIT |
| 5 | # |
| 6 | |
| 7 | # Extract UUID from ${ROOTFS}, which must have been built |
| 8 | # by the time that this function gets called. Only works |
| 9 | # on ext file systems and depends on tune2fs. |
| 10 | def get_rootfs_uuid(d): |
| 11 | import subprocess |
| 12 | rootfs = d.getVar('ROOTFS') |
Andrew Geissler | c5535c9 | 2023-01-27 16:10:19 -0600 | [diff] [blame] | 13 | output = subprocess.check_output(['tune2fs', '-l', rootfs], text=True) |
Patrick Williams | 92b42cb | 2022-09-03 06:53:57 -0500 | [diff] [blame] | 14 | for line in output.split('\n'): |
| 15 | if line.startswith('Filesystem UUID:'): |
| 16 | uuid = line.split()[-1] |
| 17 | bb.note('UUID of %s: %s' % (rootfs, uuid)) |
| 18 | return uuid |
| 19 | bb.fatal('Could not determine filesystem UUID of %s' % rootfs) |
| 20 | |
| 21 | # Replace the special <<uuid-of-rootfs>> inside a string (like the |
| 22 | # root= APPEND string in a syslinux.cfg or systemd-boot entry) with the |
| 23 | # actual UUID of the rootfs. Does nothing if the special string |
| 24 | # is not used. |
| 25 | def replace_rootfs_uuid(d, string): |
| 26 | UUID_PLACEHOLDER = '<<uuid-of-rootfs>>' |
| 27 | if UUID_PLACEHOLDER in string: |
| 28 | uuid = get_rootfs_uuid(d) |
| 29 | string = string.replace(UUID_PLACEHOLDER, uuid) |
| 30 | return string |