* use caching for "debian_live" check
This commit is contained in:
parent
bf7e8cd156
commit
3953da477b
|
@ -51,6 +51,7 @@ MAJOR_DEVNUM_LOOP = 7
|
||||||
MAJOR_DEVNUM_FLOPPY = 2
|
MAJOR_DEVNUM_FLOPPY = 2
|
||||||
MAJOR_DEVNUM_RAMDISK = 1
|
MAJOR_DEVNUM_RAMDISK = 1
|
||||||
MAJOR_DEVNUM_MD_RAID = 9
|
MAJOR_DEVNUM_MD_RAID = 9
|
||||||
|
MOUNT_STATE_FILE = '/proc/mounts'
|
||||||
|
|
||||||
## cache settings
|
## cache settings
|
||||||
CACHE_ENABLED = True
|
CACHE_ENABLED = True
|
||||||
|
@ -248,47 +249,18 @@ class Blockdevice:
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def is_debian_live(self):
|
def is_debian_live(self):
|
||||||
"""is the device part of the Debian Live runtime
|
"""is the device part of the Debian Live runtime
|
||||||
"""
|
"""
|
||||||
##Debian Live ("iso" or "usb-hdd" versions) uses two block
|
|
||||||
##devices as part of its runtime system. The raw boot media
|
|
||||||
##(such as a usb key or cdrom) is mounted at /live_media,
|
|
||||||
##and the root filesystem is mounted off of the live media
|
|
||||||
##using /dev/loop0.
|
|
||||||
deb_live_devs = []
|
|
||||||
for line in file("/proc/mounts"):
|
|
||||||
try:
|
|
||||||
fields = line.split(" ")
|
|
||||||
##We are looking for, for example:
|
|
||||||
##/dev/hdc /live_media iso9660 ro 0 0
|
|
||||||
##and
|
|
||||||
##/dev/loop0 /filesystem.squashfs squashfs ro 0 0
|
|
||||||
if (fields[1] == "/live_media" and
|
|
||||||
fields[3] == "ro"):
|
|
||||||
deb_live_devs.append(fields[0])
|
|
||||||
elif (fields[1] == "/filesystem.squashfs" and
|
|
||||||
fields[3] == "ro"):
|
|
||||||
deb_live_devs.append(fields[0])
|
|
||||||
except IndexError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
##TODO:
|
|
||||||
##Since the lines in /proc/mounts that affect deb_live_devs
|
|
||||||
##don't change after startup, deb_live_devs could be cached here.
|
|
||||||
##
|
|
||||||
##Check whether any Debian Live devices refer to the
|
##Check whether any Debian Live devices refer to the
|
||||||
##block device we were passed
|
##block device we were passed
|
||||||
matched = False
|
deb_live_devs = _get_debian_live_devices()
|
||||||
for dev in deb_live_devs:
|
## check for matches in self.__get_device_nodes() and deb_live_devs
|
||||||
for node in self.__get_device_nodes():
|
matching_devices = [ devnode for devnode in self.__get_device_nodes()
|
||||||
if (node == dev):
|
if devnode in deb_live_devs ]
|
||||||
matched = True
|
## return True, if a match was found
|
||||||
|
return len(matching_devices) > 0
|
||||||
|
|
||||||
##If no nodes of the block device match the Debian Live
|
|
||||||
##devices, return False
|
|
||||||
return matched
|
|
||||||
|
|
||||||
|
|
||||||
def is_lvm_pv(self):
|
def is_lvm_pv(self):
|
||||||
|
@ -1096,9 +1068,40 @@ def _load_preferences():
|
||||||
os.chdir(os.path.dirname(config_file))
|
os.chdir(os.path.dirname(config_file))
|
||||||
return cryptobox.core.settings.CryptoBoxSettings(config_file)
|
return cryptobox.core.settings.CryptoBoxSettings(config_file)
|
||||||
else:
|
else:
|
||||||
raise CBConfigUnavailableError()
|
raise cryptobox.core.exceptions.CBConfigUnavailableError()
|
||||||
|
|
||||||
|
|
||||||
|
def _get_debian_live_devices():
|
||||||
|
##Debian Live ("iso" or "usb-hdd" versions) uses two block
|
||||||
|
##devices as part of its runtime system. The raw boot media
|
||||||
|
##(such as a usb key or cdrom) is mounted at /live_media,
|
||||||
|
##and the root filesystem is mounted off of the live media
|
||||||
|
##using /dev/loop0.
|
||||||
|
cache_link = ["debian_live_devices"]
|
||||||
|
cached = CACHE.get(cache_link)
|
||||||
|
if not cached is None:
|
||||||
|
return cached[:]
|
||||||
|
|
||||||
|
## result is not cached yet - we need to find it
|
||||||
|
deb_live_devs = []
|
||||||
|
for line in file(MOUNT_STATE_FILE):
|
||||||
|
try:
|
||||||
|
fields = line.split(" ")
|
||||||
|
##We are looking for, for example:
|
||||||
|
##/dev/hdc /live_media iso9660 ro 0 0
|
||||||
|
##and
|
||||||
|
##/dev/loop0 /filesystem.squashfs squashfs ro 0 0
|
||||||
|
if (fields[1] == "/live_media" and
|
||||||
|
fields[3] == "ro"):
|
||||||
|
deb_live_devs.append(fields[0])
|
||||||
|
elif (fields[1] == "/filesystem.squashfs" and
|
||||||
|
fields[3] == "ro"):
|
||||||
|
deb_live_devs.append(fields[0])
|
||||||
|
except IndexError:
|
||||||
|
pass
|
||||||
|
CACHE.set(cache_link, deb_live_devs)
|
||||||
|
return deb_live_devs[:]
|
||||||
|
|
||||||
|
|
||||||
## initialize cache
|
## initialize cache
|
||||||
CACHE = BlockdeviceCache()
|
CACHE = BlockdeviceCache()
|
||||||
|
|
Loading…
Reference in a new issue