Rewriting chroot_includes in python.
authorDaniel Baumann <mail@daniel-baumann.ch>
Mon, 4 Nov 2013 16:31:41 +0000 (17:31 +0100)
committerDaniel Baumann <mail@daniel-baumann.ch>
Mon, 4 Nov 2013 16:51:36 +0000 (17:51 +0100)
components/chroot-includes [new file with mode: 0755]
scripts/build/chroot
scripts/build/chroot_includes [deleted file]

diff --git a/components/chroot-includes b/components/chroot-includes
new file mode 100755 (executable)
index 0000000..f4c5d46
--- /dev/null
@@ -0,0 +1,92 @@
+#!/usr/bin/python3
+
+## live-build(7) - Live System Build Components
+## Copyright (C) 2006-2013 Daniel Baumann <mail@daniel-baumann.ch>
+##
+## This program comes with ABSOLUTELY NO WARRANTY; for details see COPYING.
+## This is free software, and you are welcome to redistribute it
+## under certain conditions; see COPYING for details.
+
+
+import argparse
+import configparser
+import glob
+import os
+import shutil
+import subprocess
+import sys
+
+
+# TODO:
+#   * logfile output
+#   * lockfile handling
+#   * use gettext for i18n
+
+def main():
+       ## Parsing Arguments
+       arguments = argparse.ArgumentParser(
+               prog            = 'lb chroot-includes',
+               usage           = '%(prog)s [arguments]',
+               description     = '''live-build contains the components to build a live system from a configuration directory.
+                                    The chroot-includes command copies include files into the chroot stage.''',
+               epilog          = 'See \'man lb-chroot-includes\' for more information.',
+               formatter_class = argparse.ArgumentDefaultsHelpFormatter
+       )
+
+       arguments.add_argument('--version',     help='show program\'s version number and exit', action='version', version='live-build 4')
+       arguments.add_argument('--verbose',     help='set verbose option',                      action='store_true')
+
+       args = arguments.parse_args()
+
+       # --verbose
+       verbose = args.verbose
+
+       ## Copying chroot includes
+
+       # stagefile
+       if os.path.isfile('.build/chroot-includes'):
+               if verbose:
+                       print('I: chroot-includes already done - nothing to do')
+
+               sys.exit(0)
+
+       # dependencies
+       if not os.path.isfile('.build/bootstrap'):
+               print('E: bootstrap stage missing - aborting', file=sys.stderr)
+
+               if verbose:
+                       print('I: use \'lb bootstrap\' to bootstrap system')
+
+               sys.exit(1)
+
+       # includes
+       if not glob.glob('config/includes/*') and not glob.glob('config/includes/.*') and not glob.glob('config/includes.chroot/*') and not glob.glob('config/includes.chroot/.*'):
+               if verbose:
+                       print ('I: no chroot includes found at config/includes.chroot - nothing to do')
+
+               sys.exit(0)
+
+       # process includes
+       if glob.glob('config/includes/*') or glob.glob('config/includes/.*'):
+               hooks = glob.glob('config/includes/*') + glob.glob('config/includes/.*')
+
+               if verbose:
+                       print('I: Copying config/includes to')
+
+               cpio = subprocess.call('cd config/includes && find . | cpio -dmpu --no-preserve-owner ../../chroot', shell=True)
+
+       if glob.glob('config/includes.chroot/*') and not glob.glob('config/includes.chroot/.*'):
+               hooks = glob.glob('config/includes.chroot/*') + glob.glob('config/includes.chroot/.*')
+
+               if verbose:
+                       print('I: Copying config/includes.chroot to chroot')
+
+               cpio = subprocess.call('cd config/includes.chroot && find . | cpio -dmpu --no-preserve-owner ../../chroot', shell=True)
+
+       # stagefile
+       os.makedirs('.build', exist_ok=True)
+       open('.build/chroot-includes', 'w').close()
+
+
+if __name__ == '__main__':
+       main()
index ef4db87..a91118c 100755 (executable)
@@ -68,7 +68,7 @@ do
 done
 
 lb chroot_live-packages ${@}
-lb chroot_includes ${@}
+lb chroot-includes ${@}
 lb chroot-hooks ${@}
 lb chroot_hacks ${@}
 lb chroot_interactive ${@}
diff --git a/scripts/build/chroot_includes b/scripts/build/chroot_includes
deleted file mode 100755 (executable)
index c0dd75d..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/sh
-
-## live-build(7) - System Build Scripts
-## Copyright (C) 2006-2013 Daniel Baumann <mail@daniel-baumann.ch>
-##
-## This program comes with ABSOLUTELY NO WARRANTY; for details see COPYING.
-## This is free software, and you are welcome to redistribute it
-## under certain conditions; see COPYING for details.
-
-
-set -e
-
-# Including common functions
-[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh
-
-# Setting static variables
-DESCRIPTION="$(Echo 'copy files into chroot')"
-HELP=""
-USAGE="${PROGRAM} [--force]"
-
-Arguments "${@}"
-
-# Reading configuration files
-Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
-Set_defaults
-
-Echo_message "Begin copying chroot includes..."
-
-# Requiring stage file
-Require_stagefile .build/config .build/bootstrap
-
-# Checking stage file
-Check_stagefile .build/includes.chroot
-
-# Checking lock file
-Check_lockfile .lock
-
-# Creating lock file
-Create_lockfile .lock
-
-if Find_files config/includes.chroot/
-then
-       # Copying includes
-       cd config/includes.chroot
-       find . | cpio -dmpu --no-preserve-owner "${OLDPWD}"/chroot
-       cd "${OLDPWD}"
-
-       # Creating stage file
-       Create_stagefile .build/chroot_includes
-fi