Merge pull request #487 from mwhudson/slash-boot-anywhere

allow /boot to be on any kind of device
This commit is contained in:
Michael Hudson-Doyle 2019-05-22 14:27:13 +12:00 committed by GitHub
commit 34b91eb1c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 7 additions and 29 deletions

View File

@ -1229,20 +1229,9 @@ class FilesystemModel(object):
def is_root_mounted(self): def is_root_mounted(self):
return self._mount_for_path('/') is not None return self._mount_for_path('/') is not None
def is_slash_boot_on_local_disk(self):
for path in '/boot', '/':
mount = self._mount_for_path(path)
if mount is not None:
dev = mount.device.volume
return (
isinstance(dev, Partition)
and isinstance(dev.device, Disk))
return False
def can_install(self): def can_install(self):
return (self.is_root_mounted() return (self.is_root_mounted()
and not self.needs_bootloader_partition() and not self.needs_bootloader_partition())
and self.is_slash_boot_on_local_disk())
def _should_add_swapfile(self): def _should_add_swapfile(self):
mount = self._mount_for_path('/') mount = self._mount_for_path('/')

View File

@ -46,13 +46,11 @@ LEAVE_UNMOUNTED = object()
class MountSelector(WidgetWrap): class MountSelector(WidgetWrap):
def __init__(self, mountpoints, ok_for_slash_boot): def __init__(self, mountpoints):
opts = [] opts = []
first_opt = None first_opt = None
for i, mnt in enumerate(common_mountpoints): for i, mnt in enumerate(common_mountpoints):
if not ok_for_slash_boot and mnt == "/boot": if mnt not in mountpoints:
opts.append((mnt, False))
elif mnt not in mountpoints:
if first_opt is None: if first_opt is None:
first_opt = i first_opt = i
opts.append((mnt, True, mnt)) opts.append((mnt, True, mnt))
@ -117,4 +115,4 @@ class MountField(FormField):
takes_default_style = False takes_default_style = False
def _make_widget(self, form): def _make_widget(self, form):
return MountSelector(form.mountpoints, form.ok_for_slash_boot) return MountSelector(form.mountpoints)

View File

@ -576,10 +576,6 @@ class FilesystemView(BaseView):
elif not self.model.is_root_mounted(): elif not self.model.is_root_mounted():
self.controller.ui.set_footer( self.controller.ui.set_footer(
_("You need to mount a device at / to continue.")) _("You need to mount a device at / to continue."))
elif not self.model.is_slash_boot_on_local_disk():
self.controller.ui.set_footer(
_("You must mount a partition of a local disk at /boot to "
"continue."))
def create_raid(self, button=None): def create_raid(self, button=None):
self.show_stretchy_overlay(RaidStretchy(self)) self.show_stretchy_overlay(RaidStretchy(self))

View File

@ -128,14 +128,12 @@ LVNameField = simple_field(LVNameEditor)
class PartitionForm(Form): class PartitionForm(Form):
def __init__(self, model, max_size, initial, ok_for_slash_boot, def __init__(self, model, max_size, initial, lvm_names):
lvm_names):
self.model = model self.model = model
initial_path = initial.get('mount') initial_path = initial.get('mount')
self.mountpoints = { self.mountpoints = {
m.path: m.device.volume for m in self.model.all_mounts() m.path: m.device.volume for m in self.model.all_mounts()
if m.path != initial_path} if m.path != initial_path}
self.ok_for_slash_boot = ok_for_slash_boot
self.max_size = max_size self.max_size = max_size
if max_size is not None: if max_size is not None:
self.size_str = humanize_size(max_size) self.size_str = humanize_size(max_size)
@ -203,8 +201,6 @@ class PartitionForm(Form):
if dev is not None: if dev is not None:
return _("{} is already mounted at {}.").format( return _("{} is already mounted at {}.").format(
dev.label.title(), mount) dev.label.title(), mount)
if mount == "/boot" and not self.ok_for_slash_boot:
return _("/boot must be on a partition of a local disk.")
bios_grub_partition_description = _( bios_grub_partition_description = _(
@ -279,8 +275,7 @@ class PartitionStretchy(Stretchy):
x += 1 x += 1
initial['name'] = name initial['name'] = name
self.form = PartitionForm( self.form = PartitionForm(self.model, max_size, initial, lvm_names)
self.model, max_size, initial, isinstance(disk, Disk), lvm_names)
if not isinstance(disk, LVM_VolGroup): if not isinstance(disk, LVM_VolGroup):
self.form.remove_field('name') self.form.remove_field('name')
@ -385,7 +380,7 @@ class FormatEntireStretchy(Stretchy):
initial['mount'] = mount.path initial['mount'] = mount.path
elif not isinstance(device, Disk): elif not isinstance(device, Disk):
initial['fstype'] = 'ext4' initial['fstype'] = 'ext4'
self.form = PartitionForm(self.model, 0, initial, False, None) self.form = PartitionForm(self.model, 0, initial, None)
self.form.remove_field('size') self.form.remove_field('size')
self.form.remove_field('name') self.form.remove_field('name')