aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/lib/mic/imager/fs.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/lib/mic/imager/fs.py')
-rw-r--r--scripts/lib/mic/imager/fs.py99
1 files changed, 99 insertions, 0 deletions
diff --git a/scripts/lib/mic/imager/fs.py b/scripts/lib/mic/imager/fs.py
new file mode 100644
index 0000000000..d53b29cb47
--- /dev/null
+++ b/scripts/lib/mic/imager/fs.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python -tt
+#
+# Copyright (c) 2011 Intel, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the Free
+# Software Foundation; version 2 of the License
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc., 59
+# Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+import os
+
+from mic import msger
+from mic.utils import runner, misc
+from mic.utils.errors import CreatorError
+from mic.utils.fs_related import find_binary_path
+from mic.imager.baseimager import BaseImageCreator
+
+class FsImageCreator(BaseImageCreator):
+ def __init__(self, cfgmgr = None, pkgmgr = None):
+ self.zips = {
+ "tar.bz2" : ""
+ }
+ BaseImageCreator.__init__(self, cfgmgr, pkgmgr)
+ self._fstype = None
+ self._fsopts = None
+ self._include_src = False
+
+ def package(self, destdir = "."):
+
+ ignores = ["/dev/fd",
+ "/dev/stdin",
+ "/dev/stdout",
+ "/dev/stderr",
+ "/etc/mtab"]
+
+ if not os.path.exists(destdir):
+ os.makedirs(destdir)
+
+ if self._recording_pkgs:
+ self._save_recording_pkgs(destdir)
+
+ if not self.pack_to:
+ fsdir = os.path.join(destdir, self.name)
+
+ misc.check_space_pre_cp(self._instroot, destdir)
+ msger.info("Copying %s to %s ..." % (self._instroot, fsdir))
+ runner.show(['cp', "-af", self._instroot, fsdir])
+
+ for exclude in ignores:
+ if os.path.exists(fsdir + exclude):
+ os.unlink(fsdir + exclude)
+
+ self.outimage.append(fsdir)
+
+ else:
+ (tar, comp) = os.path.splitext(self.pack_to)
+ try:
+ tarcreat = {'.tar': '-cf',
+ '.gz': '-czf',
+ '.bz2': '-cjf',
+ '.tgz': '-czf',
+ '.tbz': '-cjf'}[comp]
+ except KeyError:
+ raise CreatorError("Unsupported comression for this image type:"
+ " '%s', try '.tar', '.tar.gz', etc" % comp)
+
+ dst = os.path.join(destdir, self.pack_to)
+ msger.info("Pack rootfs to %s. Please wait..." % dst)
+
+ tar = find_binary_path('tar')
+ tar_cmdline = [tar, "--numeric-owner",
+ "--preserve-permissions",
+ "--preserve-order",
+ "--one-file-system",
+ "--directory",
+ self._instroot]
+ for ignore_entry in ignores:
+ if ignore_entry.startswith('/'):
+ ignore_entry = ignore_entry[1:]
+
+ tar_cmdline.append("--exclude=%s" % (ignore_entry))
+
+ tar_cmdline.extend([tarcreat, dst, "."])
+
+ rc = runner.show(tar_cmdline)
+ if rc:
+ raise CreatorError("Failed compress image with tar.bz2. "
+ "Cmdline: %s" % (" ".join(tar_cmdline)))
+
+ self.outimage.append(dst)
+