summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaciej Borzecki <maciej.borzecki@open-rnd.pl>2014-07-24 14:11:50 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-07-25 16:54:27 +0100
commit30266a0be946bd0ce76d6920e7afe840c6c3bf80 (patch)
treea4eb983b2df5b093a90fc660e3f052ab0743470f
parente91c0db15db74237606fae96c9b7d21936519a86 (diff)
downloadopenembedded-core-contrib-30266a0be946bd0ce76d6920e7afe840c6c3bf80.tar.gz
openembedded-core-contrib-30266a0be946bd0ce76d6920e7afe840c6c3bf80.tar.bz2
openembedded-core-contrib-30266a0be946bd0ce76d6920e7afe840c6c3bf80.zip
wic: squashfs partition support
It is possible to instruct wic to create a squashfs partition by setting --fstype=squashfs in *.wks. For now this is only useable for rootfs partitions (note that you must have squashfs support in the kernel). An attempt to create an empty partition will produce a warning. Signed-off-by: Maciej Borzecki <maciej.borzecki@open-rnd.pl> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--scripts/lib/mic/kickstart/custom_commands/partition.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/scripts/lib/mic/kickstart/custom_commands/partition.py b/scripts/lib/mic/kickstart/custom_commands/partition.py
index 06f29a9885..3b652b399c 100644
--- a/scripts/lib/mic/kickstart/custom_commands/partition.py
+++ b/scripts/lib/mic/kickstart/custom_commands/partition.py
@@ -25,6 +25,8 @@
#
import shutil
+import os
+import tempfile
from pykickstart.commands.partition import *
from mic.utils.oe.misc import *
@@ -192,6 +194,10 @@ class Wic_PartData(Mic_PartData):
return self.prepare_rootfs_vfat(cr_workdir, oe_builddir,
rootfs_dir, native_sysroot,
pseudo)
+ elif self.fstype.startswith("squashfs"):
+ return self.prepare_rootfs_squashfs(cr_workdir, oe_builddir,
+ rootfs_dir, native_sysroot,
+ pseudo)
def prepare_rootfs_ext(self, cr_workdir, oe_builddir, rootfs_dir,
native_sysroot, pseudo):
@@ -324,6 +330,28 @@ class Wic_PartData(Mic_PartData):
self.set_size(rootfs_size)
self.set_source_file(rootfs)
+ def prepare_rootfs_squashfs(self, cr_workdir, oe_builddir, rootfs_dir,
+ native_sysroot, pseudo):
+ """
+ Prepare content for a squashfs rootfs partition.
+ """
+ image_rootfs = rootfs_dir
+ rootfs = "%s/rootfs_%s.%s" % (cr_workdir, self.label ,self.fstype)
+
+ squashfs_cmd = "mksquashfs %s %s -noappend" % \
+ (image_rootfs, rootfs)
+ rc, out = exec_native_cmd(pseudo + squashfs_cmd, native_sysroot)
+
+ # get the rootfs size in the right units for kickstart (Mb)
+ du_cmd = "du -Lbms %s" % rootfs
+ rc, out = exec_cmd(du_cmd)
+ rootfs_size = out.split()[0]
+
+ self.size = rootfs_size
+ self.source_file = rootfs
+
+ return 0
+
def prepare_empty_partition(self, cr_workdir, oe_builddir, native_sysroot):
"""
Prepare an empty partition.
@@ -337,6 +365,9 @@ class Wic_PartData(Mic_PartData):
elif self.fstype.startswith("vfat"):
return self.prepare_empty_partition_vfat(cr_workdir, oe_builddir,
native_sysroot)
+ elif self.fstype.startswith("squashfs"):
+ return self.prepare_empty_partition_squashfs(cr_workdir, oe_builddir,
+ native_sysroot)
def prepare_empty_partition_ext(self, cr_workdir, oe_builddir,
native_sysroot):
@@ -398,6 +429,36 @@ class Wic_PartData(Mic_PartData):
return 0
+ def prepare_empty_partition_squashfs(self, cr_workdir, oe_builddir,
+ native_sysroot):
+ """
+ Prepare an empty squashfs partition.
+ """
+ msger.warning("Creating of an empty squashfs %s partition was attempted. " \
+ "Proceeding as requested." % self.mountpoint)
+
+ fs = "%s/fs_%s.%s" % (cr_workdir, self.label, self.fstype)
+
+ # it is not possible to create a squashfs without source data,
+ # thus prepare an empty temp dir that is used as source
+ tmpdir = tempfile.mkdtemp()
+
+ squashfs_cmd = "mksquashfs %s %s -noappend" % \
+ (tmpdir, fs)
+ rc, out = exec_native_cmd(squashfs_cmd, native_sysroot)
+
+ os.rmdir(tmpdir)
+
+ # get the rootfs size in the right units for kickstart (Mb)
+ du_cmd = "du -Lbms %s" % fs
+ rc, out = exec_cmd(du_cmd)
+ fs_size = out.split()[0]
+
+ self.size = fs_size
+ self.source_file = fs
+
+ return 0
+
def prepare_swap_partition(self, cr_workdir, oe_builddir, native_sysroot):
"""
Prepare a swap partition.