summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@codethink.co.uk>2014-06-04 11:10:43 +0000
committerRichard Maw <richard.maw@codethink.co.uk>2014-06-04 11:38:12 +0000
commitba6aa8eb7cb8bd249e810972de339b2832f7a665 (patch)
tree60276f5acbc1d027c6ff3e0944c0d0102f8448e6
parent1d9b7fa268c971f363b4139a536bb8facb8d023e (diff)
downloaddefinitions-ba6aa8eb7cb8bd249e810972de339b2832f7a665.tar.gz
Use UUID in fstab entries if provided
This makes systems use the UUID of the disk in the fstab when there is no pre-existing fstab entry for /. This happens whether the system has an initramfs or not, since it should be harmless, and by this point we're in userland, so can know what the UUIDs are. Passing the UUID to `complete_fstab_for_btrfs_layout` is optional, and defaults to the old behaviour of using /dev/sda, since it is called directly by some write extensions for doing upgrades, and upgrading systems that use an initramfs will be part of a later patch.
-rw-r--r--writeexts.py10
1 files changed, 6 insertions, 4 deletions
diff --git a/writeexts.py b/writeexts.py
index fb7261f6..d6f23e0d 100644
--- a/writeexts.py
+++ b/writeexts.py
@@ -235,7 +235,8 @@ class WriteExtension(cliapp.Application):
self.create_orig(version_root, temp_root)
system_dir = os.path.join(version_root, 'orig')
- state_dirs = self.complete_fstab_for_btrfs_layout(system_dir)
+ state_dirs = self.complete_fstab_for_btrfs_layout(system_dir,
+ disk_uuid)
for state_dir in state_dirs:
self.create_state_subvolume(system_dir, mountpoint, state_dir)
@@ -298,7 +299,7 @@ class WriteExtension(cliapp.Application):
filepath = os.path.join(existing_state_dir, filename)
cliapp.runcmd(['mv', filepath, subvolume])
- def complete_fstab_for_btrfs_layout(self, system_dir):
+ def complete_fstab_for_btrfs_layout(self, system_dir, rootfs_uuid=None):
'''Fill in /etc/fstab entries for the default Btrfs disk layout.
In the future we should move this code out of the write extension and
@@ -322,8 +323,9 @@ class WriteExtension(cliapp.Application):
if '/' in existing_mounts:
root_device = existing_mounts['/']
else:
- root_device = '/dev/sda'
- fstab.add_line('/dev/sda / btrfs defaults,rw,noatime 0 1')
+ root_device = ('/dev/sda' if rootfs_uuid is None else
+ 'UUID=%s' % rootfs_uuid)
+ fstab.add_line('%s / btrfs defaults,rw,noatime 0 1' % root_device)
state_dirs_to_create = set()
for state_dir in shared_state_dirs: