Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 1 | # Extract UUID from ${ROOTFS}, which must have been built |
| 2 | # by the time that this function gets called. Only works |
| 3 | # on ext file systems and depends on tune2fs. |
| 4 | def get_rootfs_uuid(d): |
| 5 | import subprocess |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 6 | rootfs = d.getVar('ROOTFS') |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 7 | output = subprocess.check_output(['tune2fs', '-l', rootfs]) |
| 8 | for line in output.split('\n'): |
| 9 | if line.startswith('Filesystem UUID:'): |
| 10 | uuid = line.split()[-1] |
| 11 | bb.note('UUID of %s: %s' % (rootfs, uuid)) |
| 12 | return uuid |
| 13 | bb.fatal('Could not determine filesystem UUID of %s' % rootfs) |
| 14 | |
| 15 | # Replace the special <<uuid-of-rootfs>> inside a string (like the |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 16 | # root= APPEND string in a syslinux.cfg or systemd-boot entry) with the |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 17 | # actual UUID of the rootfs. Does nothing if the special string |
| 18 | # is not used. |
| 19 | def replace_rootfs_uuid(d, string): |
| 20 | UUID_PLACEHOLDER = '<<uuid-of-rootfs>>' |
| 21 | if UUID_PLACEHOLDER in string: |
| 22 | uuid = get_rootfs_uuid(d) |
| 23 | string = string.replace(UUID_PLACEHOLDER, uuid) |
| 24 | return string |