diff options
Diffstat (limited to 'scripts/lib/mic/imager/fs.py')
| -rw-r--r-- | scripts/lib/mic/imager/fs.py | 99 |
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 @@ | |||
| 1 | #!/usr/bin/python -tt | ||
| 2 | # | ||
| 3 | # Copyright (c) 2011 Intel, Inc. | ||
| 4 | # | ||
| 5 | # This program is free software; you can redistribute it and/or modify it | ||
| 6 | # under the terms of the GNU General Public License as published by the Free | ||
| 7 | # Software Foundation; version 2 of the License | ||
| 8 | # | ||
| 9 | # This program is distributed in the hope that it will be useful, but | ||
| 10 | # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | ||
| 11 | # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
| 12 | # for more details. | ||
| 13 | # | ||
| 14 | # You should have received a copy of the GNU General Public License along | ||
| 15 | # with this program; if not, write to the Free Software Foundation, Inc., 59 | ||
| 16 | # Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
| 17 | |||
| 18 | import os | ||
| 19 | |||
| 20 | from mic import msger | ||
| 21 | from mic.utils import runner, misc | ||
| 22 | from mic.utils.errors import CreatorError | ||
| 23 | from mic.utils.fs_related import find_binary_path | ||
| 24 | from mic.imager.baseimager import BaseImageCreator | ||
| 25 | |||
| 26 | class FsImageCreator(BaseImageCreator): | ||
| 27 | def __init__(self, cfgmgr = None, pkgmgr = None): | ||
| 28 | self.zips = { | ||
| 29 | "tar.bz2" : "" | ||
| 30 | } | ||
| 31 | BaseImageCreator.__init__(self, cfgmgr, pkgmgr) | ||
| 32 | self._fstype = None | ||
| 33 | self._fsopts = None | ||
| 34 | self._include_src = False | ||
| 35 | |||
| 36 | def package(self, destdir = "."): | ||
| 37 | |||
| 38 | ignores = ["/dev/fd", | ||
| 39 | "/dev/stdin", | ||
| 40 | "/dev/stdout", | ||
| 41 | "/dev/stderr", | ||
| 42 | "/etc/mtab"] | ||
| 43 | |||
| 44 | if not os.path.exists(destdir): | ||
| 45 | os.makedirs(destdir) | ||
| 46 | |||
| 47 | if self._recording_pkgs: | ||
| 48 | self._save_recording_pkgs(destdir) | ||
| 49 | |||
| 50 | if not self.pack_to: | ||
| 51 | fsdir = os.path.join(destdir, self.name) | ||
| 52 | |||
| 53 | misc.check_space_pre_cp(self._instroot, destdir) | ||
| 54 | msger.info("Copying %s to %s ..." % (self._instroot, fsdir)) | ||
| 55 | runner.show(['cp', "-af", self._instroot, fsdir]) | ||
| 56 | |||
| 57 | for exclude in ignores: | ||
| 58 | if os.path.exists(fsdir + exclude): | ||
| 59 | os.unlink(fsdir + exclude) | ||
| 60 | |||
| 61 | self.outimage.append(fsdir) | ||
| 62 | |||
| 63 | else: | ||
| 64 | (tar, comp) = os.path.splitext(self.pack_to) | ||
| 65 | try: | ||
| 66 | tarcreat = {'.tar': '-cf', | ||
| 67 | '.gz': '-czf', | ||
| 68 | '.bz2': '-cjf', | ||
| 69 | '.tgz': '-czf', | ||
| 70 | '.tbz': '-cjf'}[comp] | ||
| 71 | except KeyError: | ||
| 72 | raise CreatorError("Unsupported comression for this image type:" | ||
| 73 | " '%s', try '.tar', '.tar.gz', etc" % comp) | ||
| 74 | |||
| 75 | dst = os.path.join(destdir, self.pack_to) | ||
| 76 | msger.info("Pack rootfs to %s. Please wait..." % dst) | ||
| 77 | |||
| 78 | tar = find_binary_path('tar') | ||
| 79 | tar_cmdline = [tar, "--numeric-owner", | ||
| 80 | "--preserve-permissions", | ||
| 81 | "--preserve-order", | ||
| 82 | "--one-file-system", | ||
| 83 | "--directory", | ||
| 84 | self._instroot] | ||
| 85 | for ignore_entry in ignores: | ||
| 86 | if ignore_entry.startswith('/'): | ||
| 87 | ignore_entry = ignore_entry[1:] | ||
| 88 | |||
| 89 | tar_cmdline.append("--exclude=%s" % (ignore_entry)) | ||
| 90 | |||
| 91 | tar_cmdline.extend([tarcreat, dst, "."]) | ||
| 92 | |||
| 93 | rc = runner.show(tar_cmdline) | ||
| 94 | if rc: | ||
| 95 | raise CreatorError("Failed compress image with tar.bz2. " | ||
| 96 | "Cmdline: %s" % (" ".join(tar_cmdline))) | ||
| 97 | |||
| 98 | self.outimage.append(dst) | ||
| 99 | |||
