Moving partial python rewrite to separate branch, let's do it in the jessie+1 cycle rather than go with the current mixed code.

This commit is contained in:
Daniel Baumann 2014-08-27 23:14:12 +02:00
parent 5fc57865a4
commit bc50443cf0
32 changed files with 998 additions and 1401 deletions

View File

@ -49,7 +49,6 @@ install:
mkdir -p $(DESTDIR)/usr/lib/live
cp -a scripts/* $(DESTDIR)/usr/lib/live
cp -a components/* $(DESTDIR)/usr/lib/live/build
# Installing documentation
mkdir -p $(DESTDIR)/usr/share/doc/live-build

View File

@ -1,21 +0,0 @@
live-build 4.x is transitioning from shell scripts to Python scripts.
In order to ensure a smooth transition without breaks until completion,
one component at the time is being rewritten and re-documented without
interconnection between them.
Once done, the newly Python sources will be shaped into modules and
subcommands properly.
---
Some notes on coding style:
* live-build commands should be *prefixed* with the stage:
chroot-includes, not includes-chroot; -> tab-completion
* directories/files in the config directory should be *suffixed* with the stage:
includes.chroot, not chroot.includes; -> sort-order
* cli arguments should be *suffixed* with the stage:
--mirror-bootstrap, not --bootstrap-mirror; -> tab-completion

View File

@ -1,108 +0,0 @@
#!/usr/bin/python3
## live-build(7) - Live System Build Components
## Copyright (C) 2006-2014 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 binary-hooks',
usage = '%(prog)s [arguments]',
description = '''live-build contains the components to build a live system from a configuration directory.
The binary-hooks command executes hook files after the binary stage.''',
epilog = 'See \'man lb-binary-hooks\' 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
## Calling binary hooks
# stagefile
if os.path.isfile('.build/binary-hooks'):
if verbose:
print('I: binary-hooks 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)
# hooks
if not glob.glob('config/hooks/*.hook') and not glob.glob('config/hooks/*.hook.binary'):
if verbose:
print ('I: no binary hooks found at config/hooks/*.hook{,.binary} - nothing to do')
sys.exit(0)
# bind mount configuration directory
if verbose:
print('I: Mounting config to binary/live-build/config')
os.makedirs('binary/live-build/config', exist_ok=True)
mount = subprocess.check_call('mount -o bind config binary/live-build/config', shell=True)
remount = subprocess.check_call('mount -o remount,ro,bind binary/live-build/config', shell=True)
# process hooks
os.makedirs('binary/live-build', exist_ok=True)
hooks = glob.glob('config/hooks/*.hook') + glob.glob('config/hooks/*.hook.binary')
for hook in sorted(hooks):
if verbose:
print('I: Copying config/hooks/*.hook.binary to binary/live-build')
shutil.copy(hook, os.path.join('binary/live-build/' + os.path.basename(hook)), follow_symlinks=True)
if verbose:
print('I: Executing \' ' + hook + '\'')
os.chmod(hook, 0o755)
exec_hook = subprocess.check_call('cd binary && live-build/' + os.path.basename(hook), shell=True)
os.remove('binary/live-build/' + os.path.basename(hook))
# unmount coniguration directory
umount = subprocess.check_call('umount binary/live-build/config', shell=True)
os.rmdir('binary/live-build/config')
os.rmdir('binary/live-build')
## stagefile
os.makedirs('.build', exist_ok=True)
open('.build/binary-hooks', 'w').close()
if __name__ == '__main__':
main()

View File

@ -1,101 +0,0 @@
#!/usr/bin/python3
## live-build(7) - Live System Build Components
## Copyright (C) 2006-2014 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
# * derefence or remove symlinks if binary filesystem does not support them
def main():
## Parsing Arguments
arguments = argparse.ArgumentParser(
prog = 'lb binary-includes',
usage = '%(prog)s [arguments]',
description = '''live-build contains the components to build a live system from a configuration directory.
The binary-includes command copies include files into the binary stage.''',
epilog = 'See \'man lb-binary-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 binary includes
# stagefile
if os.path.isfile('.build/binary-includes'):
if verbose:
print('I: binary-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)
if not os.path.isfile('/bin/cpio'):
print('E: /bin/cpio - no such file', file=sys.stderr)
if verbose:
print('I: cpio can be obtained from:\n'
'I: http://www.gnu.org/software/cpio/\n'
'I: http://ftp.gnu.org/gnu/cpio/\n'
'I: On Debian based systems, cpio can be installed with:\n'
'I: # sudo apt-get install cpio')
sys.exit(1)
# includes
if not glob.glob('config/includes/*') and not glob.glob('config/includes/.*') and not glob.glob('config/includes.binary/*') and not glob.glob('config/includes.binary/.*'):
if verbose:
print ('I: no binary includes found at config/includes{,.binary} - nothing to do')
sys.exit(0)
# process includes
if glob.glob('config/includes/*') or glob.glob('config/includes/.*'):
if verbose:
print('I: Copying config/includes to binary')
cpio = subprocess.check_call('cd config/includes && find . | cpio -dmpu --no-preserve-owner ../../binary', shell=True)
if glob.glob('config/includes.binary/*') or glob.glob('config/includes.binary/.*'):
if verbose:
print('I: Copying config/includes.binary to binary')
cpio = subprocess.check_call('cd config/includes.binary && find . | cpio -dmpu --no-preserve-owner ../../binary', shell=True)
# stagefile
os.makedirs('.build', exist_ok=True)
open('.build/binary-includes', 'w').close()
if __name__ == '__main__':
main()

View File

@ -1,183 +0,0 @@
#!/usr/bin/python3
## live-build(7) - Live System Build Components
## Copyright (C) 2006-2014 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
# * cdebootstrap-options from config/options/cdebootstrap
# * take mirrors from config/archives/mirror.{bootstrap,chroot}
def main():
## Parsing Arguments
arguments = argparse.ArgumentParser(
prog = 'lb bootstrap-cdebootstrap',
usage = '%(prog)s [arguments]',
description = '''live-build contains the components to build a live system from a configuration directory.
The bootstrap-cdebootstrap command bootstraps the chroot system with cdebootstrap.''',
epilog = 'See \'man lb-bootstrap-cdebootstrap\' 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')
arguments.add_argument('--cdebootstrap-options', help='set cdebootstrap(1) options' )
args = arguments.parse_args()
## Parsing Configuration
if not os.path.isfile('config/build'):
print('E: config/build - no such file', file=sys.stderr)
sys.exit(1)
config = configparser.ConfigParser()
config.read('config/build')
try:
architecture = config.get('Image', 'Architecture')
distribution = config.get('Image', 'Parent-Distribution')
mirror_bootstrap = config.get('Image', 'Parent-Mirror-Bootstrap')
except:
distribution = config.get('Image', 'Distribution')
mirror_bootstrap = config.get('Image', 'Mirror-Bootstrap')
# --verbose
verbose = args.verbose
# --cdebootstrap-options
cdebootstrap_options_late = distribution + ' chroot ' + mirror_bootstrap
cdebootstrap_options_early = ''
if (architecture) and (not architecture == 'auto'):
cdebootstrap_options_early = cdebootstrap_options_early + ' --arch=' + architecture
if args.cdebootstrap_options:
cdebootstrap_options = cdebootstrap_options_early + ' ' + args.cdebootstrap_options + ' ' + cdebootstrap_options_late
else:
cdebootstrap_options = cdebootstrap_options_early + ' ' + cdebootstrap_options_late
## Calling cdebootstrap
# stagefile
if os.path.isfile('.build/bootstrap'):
if verbose:
print('I: bootstrap already done - nothing to do')
sys.exit(0)
# dependencies
if not os.path.isfile('/usr/bin/cdebootstrap'):
print('E: /usr/bin/cdebootstrap - no such file', file=sys.stderr)
if verbose:
print('I: cdebootstrap can be obtained from:\n'
'I: http://anonscm.debian.org/gitweb/?p=users/waldi/cdebootstrap.git\n'
'I: http://ftp.debian.org/debian/pool/main/c/cdebootstrap/\n'
'I: On Debian based systems, cdebootstrap can be installed with:\n'
'I: # sudo apt-get install cdebootstrap')
sys.exit(1)
# clean
if os.path.exists('chroot'):
print('E: chroot already exists - unclean build', file=sys.stderr)
if verbose:
print('I: use \'lb clean\' to clean up a previously incomplete build')
sys.exit(1)
# stage cache
if os.path.exists('cache/bootstrap'):
if verbose:
print('I: Copying cache/bootstrap to chroot')
# Notes:
# * there's no Python equivalent to 'cp -a' that handels both symlinks and device nodes properly.
cache = subprocess.check_call('cp -a cache/bootstrap chroot', shell=True)
os.makedirs('.build', exist_ok=True)
open('.build/bootstrap', 'w').close()
sys.exit(0)
# packages cache
if glob.glob('cache/packages.bootstrap/*.deb'):
if verbose:
print('I: Copying cache/packages.bootstrap/*.deb to chroot/var/cache/bootstrap/*.deb')
# Notes:
# * copy instead of move to make cache survive incomplete build
os.makedirs('chroot/var/cache/bootstrap', exist_ok=True)
for package in glob.glob('cache/packages.bootstrap/*.deb'):
os.link(package, os.path.join('chroot/var/cache/bootstrap/' + os.path.basename(package)))
else:
# cdebootstrap
if verbose:
print('I: Calling \'/usr/bin/debootstrap --download-only ' + cdebootstrap_options + '\'')
# Notes:
# * calling cdebootstrap twice:
# - to use already downloaded /var/cache/bootstrap/*.deb on incomplete builds
# - to use /var/cache/boottrap/*.deb for debian-installer
cdebootstrap = subprocess.check_call('/usr/bin/cdebootstrap --download-only ' + cdebootstrap_options, shell=True)
# package cache
if glob.glob('chroot/var/cache/bootstrap/*.deb'):
if verbose:
print('I: Copying chroot/var/cache/bootstrap/*.deb to cache/packages.bootstrap')
# Notes:
# * remove first to keep cache minimal
# * remove files instead of directory to work with symlinked directory
for package in glob.glob('cache/packages.bootstrap/*.deb'):
os.remove(package)
os.makedirs('cache/packages.bootstrap', exist_ok=True)
for package in glob.glob('chroot/var/cache/bootstrap/*.deb'):
shutil.copy2(package, 'cache/packages.bootstrap')
# cdebootstrap
if not os.path.exists('chroot/bin'):
if verbose:
print('I: Calling \'/usr/bin/debootstrap ' + cdebootstrap_options + '\'')
cdebootstrap = subprocess.check_call('/usr/bin/cdebootstrap ' + cdebootstrap_options, shell=True)
# stage cache
if not os.path.exists('cache/bootstrap'):
if verbose:
print('I: Copying chroot to cache/bootstrap')
# Notes:
# * there's no Python equivalent to 'cp -a' that handels both symlinks and device nodes properly.
cache = subprocess.check_call('cp -a chroot cache/bootstrap', shell=True)
# stagefile
os.makedirs('.build', exist_ok=True)
open('.build/bootstrap', 'w').close()
if __name__ == '__main__':
main()

View File

@ -1,180 +0,0 @@
#!/usr/bin/python3
## live-build(7) - Live System Build Components
## Copyright (C) 2006-2014 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
# * debootstrap-options from config/options/debootstrap
# * take mirrors from config/archives/mirror.{bootstrap,chroot}
def main():
## Parsing Arguments
arguments = argparse.ArgumentParser(
prog = 'lb bootstrap-debootstrap',
usage = '%(prog)s [arguments]',
description = '''live-build contains the components to build a live system from a configuration directory.
The bootstrap-debootstrap command bootstraps the chroot system with debootstrap.''',
epilog = 'See \'man lb-bootstrap-debootstrap\' 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')
arguments.add_argument('--debootstrap-options', help='set debootstrap(8) options' )
args = arguments.parse_args()
## Parsing Configuration
if not os.path.isfile('config/build'):
print('E: config/build - no such file', file=sys.stderr)
sys.exit(1)
config = configparser.ConfigParser()
config.read('config/build')
try:
architecture = config.get('Image', 'Architecture')
archive_areas = config.get('Image', 'Parent-Archive-Areas')
distribution = config.get('Image', 'Parent-Distribution')
mirror_bootstrap = config.get('Image', 'Parent-Mirror-Bootstrap')
except:
archive_areas = config.get('Image', 'Archive-Areas')
distribution = config.get('Image', 'Distribution')
mirror_bootstrap = config.get('Image', 'Mirror-Bootstrap')
# --verbose
verbose = args.verbose
# --debootstrap-options
debootstrap_options_late = distribution + ' chroot ' + mirror_bootstrap
debootstrap_options_early = ''
if (architecture) and (not architecture == 'auto'):
debootstrap_options_early = debootstrap_options_early + ' --arch=' + architecture
if (archive_areas) and (not archive_areas == 'main'):
debootstrap_options_early = debootstrap_options_early + ' --components=' + archive_areas.replace(' ',',')
if args.debootstrap_options:
debootstrap_options = debootstrap_options_early + ' ' + args.debootstrap_options + ' ' + debootstrap_options_late
else:
debootstrap_options = debootstrap_options_early + ' ' + debootstrap_options_late
## Calling debootstrap
# stagefile
if os.path.isfile('.build/bootstrap'):
if verbose:
print('I: bootstrap already done - nothing to do')
sys.exit(0)
# dependencies
if not os.path.isfile('/usr/sbin/debootstrap'):
print('E: /usr/sbin/debootstrap - no such file', file=sys.stderr)
if verbose:
print('I: debootstrap can be obtained from:\n'
'I: http://anonscm.debian.org/gitweb/?p=d-i/debootstrap.git\n'
'I: http://ftp.debian.org/debian/pool/main/d/debootstrap/\n'
'I: On Debian based systems, debootstrap can be installed with:\n'
'I: # sudo apt-get install debootstrap')
sys.exit(1)
# clean
if os.path.exists('chroot'):
print('E: chroot already exists - unclean build', file=sys.stderr)
if verbose:
print('I: use \'lb clean\' to clean up a previously incomplete build')
sys.exit(1)
# stage cache
if os.path.exists('cache/bootstrap'):
if verbose:
print('I: Copying cache/bootstrap to chroot')
# Notes:
# * there's no Python equivalent to 'cp -a' that handels both symlinks and device nodes properly.
cache = subprocess.check_call('cp -a cache/bootstrap chroot', shell=True)
os.makedirs('.build', exist_ok=True)
open('.build/bootstrap', 'w').close()
sys.exit(0)
# packages cache
if glob.glob('cache/packages.bootstrap/*.deb'):
if verbose:
print('I: Copying cache/packages.bootstrap/*.deb to chroot/var/cache/apt/archives/*.deb')
# Notes:
# * copy instead of move to make cache survive incomplete build
os.makedirs('chroot/var/cache/apt/archives', exist_ok=True)
for package in glob.glob('cache/packages.bootstrap/*.deb'):
os.link(package, os.path.join('chroot/var/cache/apt/archives/' + os.path.basename(package)))
# debootstrap
if not os.path.exists('chroot/bin'):
if verbose:
print('I: Calling \'/usr/sbin/debootstrap ' + debootstrap_options + '\'')
debootstrap = subprocess.check_call('/usr/sbin/debootstrap ' + debootstrap_options, shell=True)
# package cache
if glob.glob('chroot/var/cache/apt/archives/*.deb'):
if verbose:
print('I: Copying chroot/var/cache/apt/archives/*.deb to cache/packages.bootstrap')
# Notes:
# * remove first to keep cache minimal,
# * remove files instead of directory to work with symlinked directory
for package in glob.glob('cache/packages.bootstrap/*.deb'):
os.remove(package)
os.makedirs('cache/packages.bootstrap', exist_ok=True)
# Notes:
# * move instead of copy to keep stage minimal
for package in glob.glob('chroot/var/cache/apt/archives/*.deb'):
shutil.move(package, 'cache/packages.bootstrap')
# stage cache
if not os.path.exists('cache/bootstrap'):
if verbose:
print('I: Copying chroot to cache/bootstrap')
# Notes:
# * there's no Python equivalent to 'cp -a' that handels both symlinks and device nodes properly.
cache = subprocess.check_call('cp -a chroot cache/bootstrap', shell=True)
# stagefile
os.makedirs('.build', exist_ok=True)
open('.build/bootstrap', 'w').close()
if __name__ == '__main__':
main()

View File

@ -1,108 +0,0 @@
#!/usr/bin/python3
## live-build(7) - Live System Build Components
## Copyright (C) 2006-2014 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 bootstrap-hooks',
usage = '%(prog)s [arguments]',
description = '''live-build contains the components to build a live system from a configuration directory.
The bootstrap-hooks command executes hook files after the bootstrap stage.''',
epilog = 'See \'man lb-bootstrap-hooks\' 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
## Calling bootstrap hooks
# stagefile
if os.path.isfile('.build/bootstrap-hooks'):
if verbose:
print('I: bootstrap-hooks 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)
# hooks
if not glob.glob('config/hooks/*.hook') and not glob.glob('config/hooks/*.hook.bootstrap'):
if verbose:
print ('I: no bootstrap hooks found at config/hooks/*.hook{,.bootstrap} - nothing to do')
sys.exit(0)
# bind mount configuration directory
if verbose:
print('I: Mounting config to chroot/live-build/config')
os.makedirs('chroot/live-build/config', exist_ok=True)
mount = subprocess.check_call('mount -o bind config chroot/live-build/config', shell=True)
remount = subprocess.check_call('mount -o remount,ro,bind chroot/live-build/config', shell=True)
# process hooks
os.makedirs('chroot/live-build', exist_ok=True)
hooks = glob.glob('config/hooks/*.hook') + glob.glob('config/hooks/*.hook.bootstrap')
for hook in sorted(hooks):
if verbose:
print('I: Copying config/hooks/*.hook.bootstrap to chroot/live-build')
shutil.copy(hook, os.path.join('chroot/live-build/' + os.path.basename(hook)), follow_symlinks=True)
if verbose:
print('I: Executing \' ' + hook + '\'')
os.chmod(hook, 0o755)
exec_hook = subprocess.check_call('chroot chroot /live-build/' + os.path.basename(hook), shell=True)
os.remove('chroot/live-build/' + os.path.basename(hook))
# unmount coniguration directory
umount = subprocess.check_call('umount chroot/live-build/config', shell=True)
os.rmdir('chroot/live-build/config')
os.rmdir('chroot/live-build')
# stagefile
os.makedirs('.build', exist_ok=True)
open('.build/bootstrap-hooks', 'w').close()
if __name__ == '__main__':
main()

View File

@ -1,100 +0,0 @@
#!/usr/bin/python3
## live-build(7) - Live System Build Components
## Copyright (C) 2006-2014 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 bootstrap-includes',
usage = '%(prog)s [arguments]',
description = '''live-build contains the components to build a live system from a configuration directory.
The bootstrap-includes command copies include files into the bootstrap stage.''',
epilog = 'See \'man lb-bootstrap-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 bootstrap includes
# stagefile
if os.path.isfile('.build/bootstrap-includes'):
if verbose:
print('I: bootstrap-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)
if not os.path.isfile('/bin/cpio'):
print('E: /bin/cpio - no such file', file=sys.stderr)
if verbose:
print('I: cpio can be obtained from:\n'
'I: http://www.gnu.org/software/cpio/\n'
'I: http://ftp.gnu.org/gnu/cpio/\n'
'I: On Debian based systems, cpio can be installed with:\n'
'I: # sudo apt-get install cpio')
sys.exit(1)
# includes
if not glob.glob('config/includes/*') and not glob.glob('config/includes/.*') and not glob.glob('config/includes.bootstrap/*') and not glob.glob('config/includes.bootstrap/.*'):
if verbose:
print ('I: no bootstrap includes found at config/includes{,.bootstrap} - nothing to do')
sys.exit(0)
# process includes
if glob.glob('config/includes/*') or glob.glob('config/includes/.*'):
if verbose:
print('I: Copying config/includes to chroot')
cpio = subprocess.check_call('cd config/includes && find . | cpio -dmpu --no-preserve-owner ../../chroot', shell=True)
if glob.glob('config/includes.bootstrap/*') or glob.glob('config/includes.bootstrap/.*'):
if verbose:
print('I: Copying config/includes.bootstrap to chroot')
cpio = subprocess.check_call('cd config/includes.bootstrap && find . | cpio -dmpu --no-preserve-owner ../../chroot', shell=True)
# stagefile
os.makedirs('.build', exist_ok=True)
open('.build/bootstrap-includes', 'w').close()
if __name__ == '__main__':
main()

View File

@ -1,108 +0,0 @@
#!/usr/bin/python3
## live-build(7) - Live System Build Components
## Copyright (C) 2006-2014 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-hooks',
usage = '%(prog)s [arguments]',
description = '''live-build contains the components to build a live system from a configuration directory.
The chroot-hooks command executes hook files after the chroot stage.''',
epilog = 'See \'man lb-chroot-hooks\' 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
## Calling chroot hooks
# stagefile
if os.path.isfile('.build/chroot-hooks'):
if verbose:
print('I: chroot-hooks 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)
# hooks
if not glob.glob('config/hooks/*.hook') and not glob.glob('config/hooks/*.hook.chroot'):
if verbose:
print ('I: no chroot hooks found at config/hooks/*.hook{,.chroot} - nothing to do')
sys.exit(0)
# bind mount configuration directory
if verbose:
print('I: Mounting config to chroot/live-build/config')
os.makedirs('chroot/live-build/config', exist_ok=True)
mount = subprocess.check_call('mount -o bind config chroot/live-build/config', shell=True)
remount = subprocess.check_call('mount -o remount,ro,bind chroot/live-build/config', shell=True)
# process hooks
os.makedirs('chroot/live-build', exist_ok=True)
hooks = glob.glob('config/hooks/*.hook') + glob.glob('config/hooks/*.hook.chroot')
for hook in sorted(hooks):
if verbose:
print('I: Copying config/hooks/*.hook.chroot to chroot/live-build')
shutil.copy(hook, os.path.join('chroot/live-build/' + os.path.basename(hook)), follow_symlinks=True)
if verbose:
print('I: Executing \' ' + hook + '\'')
os.chmod(hook, 0o755)
exec_hook = subprocess.check_call('chroot chroot /live-build/' + os.path.basename(hook), shell=True)
os.remove('chroot/live-build/' + os.path.basename(hook))
# unmount coniguration directory
umount = subprocess.check_call('umount chroot/live-build/config', shell=True)
os.rmdir('chroot/live-build/config')
os.rmdir('chroot/live-build')
# stagefile
os.makedirs('.build', exist_ok=True)
open('.build/chroot-hooks', 'w').close()
if __name__ == '__main__':
main()

View File

@ -1,100 +0,0 @@
#!/usr/bin/python3
## live-build(7) - Live System Build Components
## Copyright (C) 2006-2014 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)
if not os.path.isfile('/bin/cpio'):
print('E: /bin/cpio - no such file', file=sys.stderr)
if verbose:
print('I: cpio can be obtained from:\n'
'I: http://www.gnu.org/software/cpio/\n'
'I: http://ftp.gnu.org/gnu/cpio/\n'
'I: On Debian based systems, cpio can be installed with:\n'
'I: # sudo apt-get install cpio')
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/.*'):
if verbose:
print('I: Copying config/includes to chroot')
cpio = subprocess.check_call('cd config/includes && find . | cpio -dmpu --no-preserve-owner ../../chroot', shell=True)
if glob.glob('config/includes.chroot/*') or glob.glob('config/includes.chroot/.*'):
if verbose:
print('I: Copying config/includes.chroot to chroot')
cpio = subprocess.check_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()

View File

@ -1,165 +0,0 @@
#!/usr/bin/python3
## live-build(7) - Live System Build Components
## Copyright (C) 2006-2014 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
import urllib.request
# TODO:
# * logfile output
# * lockfile handling
# * use gettext for i18n
def main():
## Parsing Arguments
arguments = argparse.ArgumentParser(
prog = 'lb init',
usage = '%(prog)s [arguments]',
description = '''live-build contains the components to build a live system from a configuration directory.
The init command creates an empty configuration directory or reinitialize an existing one.''',
epilog = 'See \'man lb-init\' 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')
arguments.add_argument('--distribution', help='set default distribution')
arguments.add_argument('--project', help='set project defaults')
args = arguments.parse_args()
# --verbose
verbose = args.verbose
# --distribution
distribution = args.distribution
# --project
project = args.project
## Setting defaults
if not project:
# FIXME: hardcoded project information
project = 'debian'
if not distribution:
# FIXME hardcoded release information
default_distribution = { 'debian' : 'jessie',
'progress-linux' : 'cairon',
}
distribution = default_distribution[project]
## Creating configuration directory
# stagefile
if os.path.isdir('.build'):
if verbose:
print('I: configuration directory already initialized - nothing to do')
# Notes:
# * until further tests, we do not allow to re-run lb init on an already initialized directory.
sys.exit(0)
# Print warning about live-build development version
print('WARNING: THIS VERSION OF LIVE-BUILD IS EXPERIMENTAL\n')
print('IT IS UNFINISHED AND CHANGES HEAVILY WITHOUT PRIOR NOTICE.')
print('USER DISCRETION IS ADVISED.\n')
print('Please also note that you are running a live-build development version')
print('and that we are only supporting the newest development version.\n')
print('Make sure you are using the newest version at all times.')
# Configuring default archive-keys
if (project == 'progress-linux'):
# dependencies
if not os.path.isfile('/usr/bin/gpgv'):
print('E: /usr/bin/gpgv - no such file', file=sys.stderr)
if verbose:
print('I: gnupg can be obtained from:\n'
'I: http://www.gnupg.org/\n'
'I: On Debian based systems, gnupg can be installed with:\n'
'I: # sudo apt-get install gnupg')
sys.exit(1)
os.makedirs('config/archives', exist_ok=True)
# FIXME hardcoded release information
archive_keys_url = 'http://cdn.archive.progress-linux.org/packages/project/keys/'
archive_keys = { 'artax' : [ 'archive-key-1-artax.asc' , 'archive-key-1+-artax-backports.asc' ],
'artax-backports' : [ 'archive-key-1-artax.asc' , 'archive-key-1+-artax-backports.asc' ],
'baureo' : [ 'archive-key-2-baureo.asc' , 'archive-key-2+-baureo-backports.asc' ],
'baureo-backports' : [ 'archive-key-2-baureo.asc' , 'archive-key-2+-baureo-backports.asc' ],
'cairon' : [ 'archive-key-3-cairon.asc' , 'archive-key-3+-cairon-backports.asc' ],
'cairon-backports' : [ 'archive-key-3-cairon.asc' , 'archive-key-3+-cairon-backports.asc' ],
}
keys = archive_keys[distribution]
for key in keys:
url = archive_keys_url + key
target = os.path.splitext(os.path.basename(key))
if verbose:
print('I: Downloading ' + url)
r = urllib.request.urlopen(url)
f = open('config/archives/' + target[0] + '.key', 'w')
f.write(r.read())
# FIXME: download signatures and verify them against debian-keyring
# Configuring default hooks
os.makedirs('config/hooks', exist_ok=True)
for hook in glob.glob('/usr/share/live/build/hooks/*.hook*'):
os.symlink(hook, os.path.join('config/hooks/' + os.path.basename(hook)))
# Configuring default includes
os.makedirs('config/includes', exist_ok=True)
os.makedirs('config/includes.bootstrap', exist_ok=True)
os.makedirs('config/includes.chroot', exist_ok=True)
os.makedirs('config/includes.binary', exist_ok=True)
os.makedirs('config/includes.source', exist_ok=True)
# Ensure correct include directory permissions avoiding tainting of target system
os.chmod('config/includes', 0o755)
os.chmod('config/includes.bootstrap', 0o755)
os.chmod('config/includes.chroot', 0o755)
os.chmod('config/includes.binary', 0o755)
os.chmod('config/includes.source', 0o755)
# Configuring default package lists
os.makedirs('config/package-lists', exist_ok=True)
f = open('config/package-lists/live.list.chroot', 'w')
f.write('live-boot\nlive-config\nlive-config-sysvinit\n')
f.close()
## stagefile
os.makedirs('.build', exist_ok=True)
if __name__ == '__main__':
main()

View File

@ -1,108 +0,0 @@
#!/usr/bin/python3
## live-build(7) - Live System Build Components
## Copyright (C) 2006-2014 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 source-hooks',
usage = '%(prog)s [arguments]',
description = '''live-build contains the components to build a live system from a configuration directory.
The source-hooks command executes hook files after the source stage.''',
epilog = 'See \'man lb-source-hooks\' 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
## Calling source hooks
# stagefile
if os.path.isfile('.build/source-hooks'):
if verbose:
print('I: source-hooks already done - nothing to do')
sys.exit(0)
# dependencies
if not os.path.isfile('.build/source'):
print('E: source stage missing - aborting', file=sys.stderr)
if verbose:
print('I: use \'lb source\' to source system')
sys.exit(1)
# hooks
if not glob.glob('config/hooks/*.hook') and not glob.glob('config/hooks/*.hook.source'):
if verbose:
print ('I: no source hooks found at config/hooks/*.hook{,.source} - nothing to do')
sys.exit(0)
# bind mount configuration directory
if verbose:
print('I: Mounting config to source/live-build/config')
os.makedirs('source/live-build/config', exist_ok=True)
mount = subprocess.check_call('mount -o bind config source/live-build/config', shell=True)
remount = subprocess.check_call('mount -o remount,ro,bind source/live-build/config', shell=True)
# process hooks
os.makedirs('source/live-build', exist_ok=True)
hooks = glob.glob('config/hooks/*.hook') + glob.glob('config/hooks/*.hook.source')
for hook in sorted(hooks):
if verbose:
print('I: Copying config/hooks/*.hook.source to source/live-build')
shutil.copy(hook, os.path.join('source/live-build/' + os.path.basename(hook)), follow_symlinks=True)
if verbose:
print('I: Executing \' ' + hook + '\'')
os.chmod(hook, 0o755)
exec_hook = subprocess.check_call('cd source && live-build/' + os.path.basename(hook), shell=True)
os.remove('source/live-build/' + os.path.basename(hook))
# unmount coniguration directory
umount = subprocess.check_call('umount source/live-build/config', shell=True)
os.rmdir('source/live-build/config')
os.rmdir('source/live-build')
# stagefile
os.makedirs('.build', exist_ok=True)
open('.build/source-hooks', 'w').close()
if __name__ == '__main__':
main()

View File

@ -1,101 +0,0 @@
#!/usr/bin/python3
## live-build(7) - Live System Build Components
## Copyright (C) 2006-2014 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
# * derefence or remove symlinks if source filesystem does not support them
def main():
## Parsing Arguments
arguments = argparse.ArgumentParser(
prog = 'lb source-includes',
usage = '%(prog)s [arguments]',
description = '''live-build contains the components to build a live system from a configuration directory.
The source-includes command copies include files into the source stage.''',
epilog = 'See \'man lb-source-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 source includes
# stagefile
if os.path.isfile('.build/source-includes'):
if verbose:
print('I: source-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)
if not os.path.isfile('/bin/cpio'):
print('E: /bin/cpio - no such file', file=sys.stderr)
if verbose:
print('I: cpio can be obtained from:\n'
'I: http://www.gnu.org/software/cpio/\n'
'I: http://ftp.gnu.org/gnu/cpio/\n'
'I: On Debian based systems, cpio can be installed with:\n'
'I: # sudo apt-get install cpio')
sys.exit(1)
# includes
if not glob.glob('config/includes/*') and not glob.glob('config/includes/.*') and not glob.glob('config/includes.source/*') and not glob.glob('config/includes.source/.*'):
if verbose:
print ('I: no source includes found at config/includes{,.source} - nothing to do')
sys.exit(0)
# process includes
if glob.glob('config/includes/*') or glob.glob('config/includes/.*'):
if verbose:
print('I: Copying config/includes to source')
cpio = subprocess.check_call('cd config/includes && find . | cpio -dmpu --no-preserve-owner ../../source', shell=True)
if glob.glob('config/includes.source/*') or glob.glob('config/includes.source/.*'):
if verbose:
print('I: Copying config/includes.source to source')
cpio = subprocess.check_call('cd config/includes.source && find . | cpio -dmpu --no-preserve-owner ../../source', shell=True)
# stagefile
os.makedirs('.build', exist_ok=True)
open('.build/source-includes', 'w').close()
if __name__ == '__main__':
main()

1
debian/control vendored
View File

@ -14,7 +14,6 @@ Architecture: all
Depends:
${misc:Depends},
debootstrap | cdebootstrap | cdebootstrap-static,
python3,
Recommends:
cpio,
live-boot-doc,

View File

@ -67,10 +67,6 @@ case "${1}" in
then
# User has live-build copied locally in the system
SCRIPT="${LIVE_BUILD}/scripts/build/${COMMAND}"
elif [ -x "${LIVE_BUILD}/components/${COMMAND}" ]
then
# User has live-build copied locally in the system
SCRIPT="${LIVE_BUILD}/components/${COMMAND}"
elif [ -x "local/live-build/scripts/build/${COMMAND}" ]
then
# User has live-build copied locally in the config

View File

@ -67,8 +67,8 @@ lb binary_syslinux ${@}
lb binary_disk ${@}
lb binary_loadlin ${@}
lb binary_win32-loader ${@}
lb binary-includes ${@}
lb binary-hooks ${@}
lb binary_includes ${@}
lb binary_hooks ${@}
lb binary_checksums ${@}
if [ "${LB_BUILD_WITH_CHROOT}" != "true" ]

78
scripts/build/binary_hooks Executable file
View File

@ -0,0 +1,78 @@
#!/bin/sh
## live-build(7) - System Build Scripts
## Copyright (C) 2006-2014 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 'execute hooks in binary')"
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 executing hooks..."
# Requiring stage file
Require_stagefile .build/config .build/bootstrap
# Checking stage file
Check_stagefile .build/binary_hooks
# Checking lock file
Check_lockfile .lock
# Creating lock file
Create_lockfile .lock
## Processing distribution hooks
# Running hooks
for _HOOK in ${LB_BINARY_HOOKS}
do
for LOCATION in "${LIVE_BUILD}/hooks" /usr/share/live/build/hooks
do
for FILE in "${LOCATION}"/????-"${_HOOK}".binary
do
if [ -e "${FILE}" ]
then
cd binary
"${FILE}" || { Echo_error "${_HOOK} failed (exit non-zero). You should check for errors."; exit 1 ;}
cd "${OLDPWD}"
fi
done
done
done
## Processing local hooks
if Find_files config/hooks/*.binary
then
for HOOK in config/hooks/*.binary
do
# Making hook executable
if [ ! -x "${HOOK}" ]
then
chmod +x "${HOOK}"
fi
# Executing hook
./"${HOOK}" || { Echo_error "${HOOK} failed (exit non-zero). You should check for errors."; exit 1 ;}
done
# Creating stage file
Create_stagefile .build/binary_hooks
fi

57
scripts/build/binary_includes Executable file
View File

@ -0,0 +1,57 @@
#!/bin/sh
## live-build(7) - System Build Scripts
## Copyright (C) 2006-2014 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 binary')"
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 binary includes..."
# Requiring stage file
Require_stagefile .build/config .build/bootstrap
# Checking stage file
Check_stagefile .build/includes.binary
# Checking lock file
Check_lockfile .lock
# Creating lock file
Create_lockfile .lock
if Find_files config/includes.binary/
then
# Copying includes
cd config/includes.binary
find . | cpio -dmpu --no-preserve-owner "${OLDPWD}"/binary
cd "${OLDPWD}"
# Removing symlinks
case "${LIVE_IMAGE_TYPE}" in
hdd*)
find binary -type l | xargs rm -f
;;
esac
# Creating stage file
Create_stagefile .build/binary_includes
fi

View File

@ -35,7 +35,11 @@ Set_defaults
Setup_cleanup
# Bootstrapping system
lb bootstrap-${LB_BOOTSTRAP}
lb bootstrap_cache restore ${@}
lb bootstrap_cdebootstrap ${@}
lb bootstrap_debootstrap ${@}
lb bootstrap_archive-keys ${@}
lb bootstrap_cache save ${@}
# Configuring chroot
lb chroot_devpts install ${@}
@ -53,8 +57,6 @@ lb chroot_hostname install ${@}
lb chroot_apt install ${@}
lb bootstrap_archives binary ${@}
lb bootstrap-includes ${@}
lb bootstrap-hooks ${@}
# Deconfiguring chroot
lb chroot_apt remove ${@}

View File

@ -0,0 +1,77 @@
#!/bin/sh
## live-build(7) - System Build Scripts
## Copyright (C) 2006-2014 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 'bootstrap non-Debian archive-signing-keys')"
HELP=""
USAGE="${PROGRAM} [--force]"
Arguments "${@}"
# Reading configuration files
Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
Set_defaults
# TODO: allow verification against user-specified keyring
# For now, we'll only validate against debian-keyring
# TODO2: use chrooted validation rather than host system based one
case "${LB_MODE}" in
progress-linux)
case "${LB_DISTRIBUTION}" in
artax*)
_KEYS="1.0-artax 1.0-artax-packages"
;;
baureo*)
_KEYS="2.0-baureo 2.0-baureo-packages"
;;
chairon*)
_KEYS="3.0-chairon 3.0-chairon-packages"
;;
esac
_URL="${LB_MIRROR_CHROOT}/project/keys"
;;
esac
for _KEY in ${_KEYS}
do
Echo_message "Fetching archive-key ${_KEY}..."
wget -q "${_URL}/archive-key-${_KEY}.asc" -O chroot/key.asc
wget -q "${_URL}/archive-key-${_KEY}.asc.sig" -O chroot/key.asc.sig
if [ -e /usr/bin/gpgv ] && [ -e /usr/share/keyrings/debian-keyring.gpg ]
then
Echo_message "Verifying archive-key ${_KEY} against debian-keyring..."
/usr/bin/gpgv --quiet --keyring /usr/share/keyrings/debian-keyring.gpg chroot/key.asc.sig chroot/key.asc > /dev/null 2>&1 || { Echo_error "archive-key ${_KEY} has invalid signature."; return 1;}
else
Echo_warning "Skipping archive-key ${_KEY} verification, either gpgv or debian-keyring not available on host system..."
fi
Echo_message "Importing archive-key ${_KEY}..."
Chroot chroot "apt-key add key.asc"
rm -f chroot/key.asc chroot/key.asc.sig
done
Chroot chroot "apt-get update"
# Creating stage file
Create_stagefile .build/bootstrap_archive-keys

86
scripts/build/bootstrap_cache Executable file
View File

@ -0,0 +1,86 @@
#!/bin/sh
## live-build(7) - System Build Scripts
## Copyright (C) 2006-2014 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 'cache bootstrap stage')"
HELP=""
USAGE="${PROGRAM} [--force]"
Arguments "${@}"
# Reading configuration files
Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
Set_defaults
# Check architecture
Check_crossarchitectures
for STAGE in ${LB_CACHE_STAGES}
do
if [ "${STAGE}" = "bootstrap" ]
then
case "${1}" in
restore)
Echo_message "Restoring bootstrap stage from cache..."
# Checking stage file
Check_stagefile .build/bootstrap_cache.restore
if [ -d cache/bootstrap ]
then
# Checking lock file
Check_lockfile .lock
# Creating lock file
Create_lockfile .lock
# Removing old chroot
rm -rf chroot
# Restoring old cache
cp -a cache/bootstrap chroot
# Creating stage file
Create_stagefile .build/bootstrap_cache.restore
Create_stagefile .build/bootstrap
exit 0
fi
;;
save)
Echo_message "Saving bootstrap stage to cache..."
# Checking stage file
Check_stagefile .build/bootstrap_cache.save
# Checking lock file
Check_lockfile .lock
# Creating lock file
Create_lockfile .lock
rm -rf cache/bootstrap
mkdir -p cache
cp -a chroot cache/bootstrap
# Creating stage file
Create_stagefile .build/bootstrap_cache.save
;;
esac
fi
done

View File

@ -0,0 +1,143 @@
#!/bin/sh
## live-build(7) - System Build Scripts
## Copyright (C) 2006-2014 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 'bootstrap a Debian system with cdebootstrap(1)')"
HELP=""
USAGE="${PROGRAM} [--force]"
Arguments "${@}"
# Reading configuration files
Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
Set_defaults
if [ "${LB_BOOTSTRAP}" != "cdebootstrap" ] && [ "${LB_BOOTSTRAP}" != "cdebootstrap-static" ]
then
exit 0
fi
if [ ! -x "$(which cdebootstrap 2>/dev/null)" ]
then
echo "E: cdebootstrap - command not found"
echo "I: cdebootstrap can be obtained from http://ftp.debian.org/debian/pool/main/d/cdebootstrap/"
echo "I: On Debian based systems, cdebootstrap can be installed with 'apt-get install cdebootstrap'."
exit 1
fi
# Check architecture
Check_crossarchitectures
Echo_message "Begin bootstrapping system..."
Check_package /usr/bin/${LB_BOOTSTRAP} cdebootstrap
# Ensure that a system is built as root
lb testroot
# Checking stage file
Check_stagefile .build/bootstrap
Check_stagefile .build/bootstrap_cache.restore
# Checking lock file
Check_lockfile .lock
# Creating lock file
Create_lockfile .lock
# Creating chroot directory
mkdir -p chroot
# Setting cdebootstrap options
if [ -n "${LIVE_IMAGE_ARCHITECTURE}" ]
then
CDEBOOTSTRAP_OPTIONS="${CDEBOOTSTRAP_OPTIONS} --arch=${LIVE_IMAGE_ARCHITECTURE}"
fi
if [ "${_DEBUG}" = "true" ]
then
CDEBOOTSTRAP_OPTIONS="${CDEBOOTSTRAP_OPTIONS} --debug"
fi
if [ "${_QUIET}" = "true" ]
then
CDEBOOTSTRAP_OPTIONS="${CDEBOOTSTRAP_OPTIONS} --quiet"
fi
if [ "${_VERBOSE}" = "true" ]
then
CDEBOOTSTRAP_OPTIONS="${CDEBOOTSTRAP_OPTIONS} --verbose"
fi
if [ "${LB_APT_SECURE}" = "false" ]
then
CDEBOOTSTRAP_OPTIONS="${CDEBOOTSTRAP_OPTIONS} --allow-unauthenticated"
fi
if [ -x "/usr/bin/cdebootstrap" ] || [ -x "/usr/bin/cdebootstrap-static" ]
then
if [ "${LB_CACHE_PACKAGES}" = "true" ]
then
if ls cache/packages.bootstrap/*.deb > /dev/null 2>&1
then
mkdir -p chroot/var/cache/bootstrap
cp cache/packages.bootstrap/*.deb chroot/var/cache/bootstrap
fi
Echo_breakage "Running ${LB_BOOTSTRAP} (download-only)... "
${LB_BOOTSTRAP} ${CDEBOOTSTRAP_OPTIONS} --download-only "${LB_PARENT_DISTRIBUTION}" chroot "${LB_PARENT_MIRROR_BOOTSTRAP}"
# Removing old cache
rm -f cache/packages.bootstrap/*.deb
# Saving new cache
mkdir -p cache/packages.bootstrap
cp chroot/var/cache/bootstrap/*.deb cache/packages.bootstrap
fi
Echo_breakage "Running ${LB_BOOTSTRAP}... "
# Run appropriate bootstrap, i.e. foreign or regular bootstrap
if [ "${LB_BOOTSTRAP_QEMU_ARCHITECTURES}" = "${LIVE_IMAGE_ARCHITECTURE}" ]; then
if [ -n "${LB_BOOTSTRAP_QEMU_EXCLUDE}" ]
then
CDEBOOTSTRAP_OPTIONS="${CDEBOOTSTRAP_OPTIONS} --exclude=$(echo ${LB_BOOTSTRAP_QEMU_EXCLUDE} | sed 's| *|,|g')"
fi
Echo_message "Bootstrap will be foreign"
${LB_BOOTSTRAP} ${CDEBOOTSTRAP_OPTIONS} --foreign "${LB_PARENT_DISTRIBUTION}" chroot "${LB_PARENT_MIRROR_BOOTSTRAP}"
Echo_message "Running debootstrap second stage under QEMU"
cp ${LB_BOOTSTRAP_QEMU_STATIC} chroot/usr/bin
Chroot chroot /bin/sh /sbin/cdebootstrap-foreign
else
${LB_BOOTSTRAP} ${CDEBOOTSTRAP_OPTIONS} "${LB_PARENT_DISTRIBUTION}" chroot "${LB_PARENT_MIRROR_BOOTSTRAP}"
fi
# Deconfiguring cdebootstrap configurations
rm -f chroot/etc/apt/sources.list
rm -f chroot/etc/hosts
rm -f chroot/etc/resolv.conf
# Removing bootstrap cache
rm -rf chroot/var/cache/bootstrap
# Creating stage file
Create_stagefile .build/bootstrap
else
Echo_error "Can't process file /usr/bin/${LB_BOOTSTRAP} (FIXME)"
exit 1
fi

View File

@ -0,0 +1,139 @@
#!/bin/sh
## live-build(7) - System Build Scripts
## Copyright (C) 2006-2014 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 'bootstrap a Debian system with debootstrap(8)')"
HELP=""
USAGE="${PROGRAM} [--force]"
Arguments "${@}"
# Reading configuration files
Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
Set_defaults
if [ "${LB_BOOTSTRAP}" != "debootstrap" ]
then
exit 0
fi
if [ ! -x "$(which debootstrap 2>/dev/null)" ]
then
echo "E: debootstrap - command not found"
echo "I: debootstrap can be obtained from http://ftp.debian.org/debian/pool/main/d/debootstrap/"
echo "I: On Debian based systems, debootstrap can be installed with 'apt-get install debootstrap'."
exit 1
fi
# Check architecture
Check_crossarchitectures
Echo_message "Begin bootstrapping system..."
Check_package /usr/sbin/debootstrap debootstrap
# Ensure that a system is built as root
lb testroot
# Checking stage file
Check_stagefile .build/bootstrap
Check_stagefile .build/bootstrap_cache.restore
# Checking lock file
Check_lockfile .lock
# Creating lock file
Create_lockfile .lock
# Creating chroot directory
mkdir -p chroot
# Setting debootstrap options
if [ -n "${LIVE_IMAGE_ARCHITECTURE}" ]
then
DEBOOTSTRAP_OPTIONS="${DEBOOTSTRAP_OPTIONS} --arch=${LIVE_IMAGE_ARCHITECTURE}"
fi
if [ "${LIVE_IMAGE_ARCHIVE_AREAS}" != "main" ]
then
# Modify archive areas to remove leading/trailing whitespaces and replace other whitepspace with commas
DEBOOTSTRAP_OPTIONS="${DEBOOTSTRAP_OPTIONS} --components=$(echo ${LIVE_IMAGE_ARCHIVE_AREAS} | sed -e 's| |,|g')"
fi
if [ "${_VERBOSE}" = "true" ]
then
DEBOOTSTRAP_OPTIONS="${DEBOOTSTRAP_OPTIONS} --verbose"
fi
# If LB_APT_SECURE is false, do not check signatures of the Release file
# (requires debootstrap >= 1.0.30)
if [ "${LB_APT_SECURE}" = "false" ] && /usr/sbin/debootstrap --help | grep -qs '\-\-no-check-gpg'
then
DEBOOTSTRAP_OPTIONS="${DEBOOTSTRAP_OPTIONS} --no-check-gpg"
fi
if [ -x "/usr/sbin/debootstrap" ]
then
if [ "${LB_CACHE_PACKAGES}" = "true" ]
then
if ls cache/packages.bootstrap/*.deb > /dev/null 2>&1
then
mkdir -p chroot/var/cache/apt/archives
cp cache/packages.bootstrap/*.deb chroot/var/cache/apt/archives
fi
Echo_breakage "Running debootstrap (download-only)... "
debootstrap ${DEBOOTSTRAP_OPTIONS} --download-only "${LB_PARENT_DISTRIBUTION}" chroot "${LB_PARENT_MIRROR_BOOTSTRAP}"
# Removing old cache
rm -f cache/packages.bootstrap/*.deb
# Saving new cache
mkdir -p cache/packages.bootstrap
cp chroot/var/cache/apt/archives/*.deb cache/packages.bootstrap
fi
Echo_breakage "Running debootstrap... "
# Run appropriate bootstrap, i.e. foreign or regular bootstrap
if [ "${LB_BOOTSTRAP_QEMU_ARCHITECTURES}" = "${LIVE_IMAGE_ARCHITECTURE}" ]; then
if [ -n "${LB_BOOTSTRAP_QEMU_EXCLUDE}" ]
then
DEBOOTSTRAP_OPTIONS="${DEBOOTSTRAP_OPTIONS} --exclude=$(echo ${LB_BOOTSTRAP_QEMU_EXCLUDE} | sed 's| *|,|g')"
fi
Echo_message "Bootstrap will be foreign"
debootstrap ${DEBOOTSTRAP_OPTIONS} --foreign "${LB_PARENT_DISTRIBUTION}" chroot "${LB_PARENT_MIRROR_BOOTSTRAP}"
Echo_message "Running debootstrap second stage under QEMU"
cp ${LB_BOOTSTRAP_QEMU_STATIC} chroot/usr/bin
Chroot chroot /bin/sh /debootstrap/debootstrap --second-stage
else
debootstrap ${DEBOOTSTRAP_OPTIONS} "${LB_PARENT_DISTRIBUTION}" chroot "${LB_PARENT_MIRROR_BOOTSTRAP}"
fi
# Deconfiguring debootstrap configurations
rm -f chroot/etc/hosts
# Removing bootstrap cache
rm -f chroot/var/cache/apt/archives/*.deb
# Creating stage file
Create_stagefile .build/bootstrap
else
Echo_error "Can't process file /usr/bin/debootstrap (FIXME)"
exit 1
fi

View File

@ -17,7 +17,6 @@ set -e
if [ -x auto/config ] && [ ! -e .build/config ]
then
Echo_message "Automatically populating config tree."
lb init
lb config
fi

View File

@ -67,8 +67,8 @@ do
fi
done
lb chroot-includes ${@}
lb chroot-hooks ${@}
lb chroot_includes ${@}
lb chroot_hooks ${@}
lb chroot_hacks ${@}
lb chroot_interactive ${@}

115
scripts/build/chroot_hooks Executable file
View File

@ -0,0 +1,115 @@
#!/bin/sh
## live-build(7) - System Build Scripts
## Copyright (C) 2006-2014 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 'execute hooks in 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 executing hooks..."
# Requiring stage file
Require_stagefile .build/config .build/bootstrap
# Checking stage file
Check_stagefile .build/chroot_hooks
# Checking lock file
Check_lockfile .lock
# Creating lock file
Create_lockfile .lock
## Processing distribution hooks
# Make build config available to chroot hooks. First, make the bind
# mount and then make it read-only. This can't happen in one mount
# command, then the resulting mount will be rw (see mount(8)). Making it
# ro prevents modifications and prevents accidentally removing the
# contents of the config directory when removing the chroot.
mkdir -p chroot/live-build/config
mount -o bind config chroot/live-build/config
mount -o remount,ro,bind config chroot/live-build/config
# Copying hooks
for _HOOK in ${LB_CHROOT_HOOKS}
do
for LOCATION in "${LIVE_BUILD}/hooks" /usr/share/live/build/hooks
do
for FILE in "${LOCATION}"/????-"${_HOOK}".chroot
do
if [ -e "${FILE}" ]
then
mkdir -p chroot/root/lb_chroot_hooks
cp "${FILE}" chroot/root/lb_chroot_hooks
fi
done
done
done
# Running hooks
if ls chroot/root/lb_chroot_hooks/* > /dev/null 2>&1
then
for _HOOK in chroot/root/lb_chroot_hooks/*
do
Chroot chroot "/root/lb_chroot_hooks/$(basename ${_HOOK})" || { Echo_error "${_HOOK} failed (exit non-zero). You should check for errors."; exit 1 ;}
rm -f chroot/root/lb_chroot_hooks/"$(basename ${_HOOK})"
done
rmdir chroot/root/lb_chroot_hooks
fi
## Processing local hooks
if Find_files config/hooks/*.chroot
then
# Restoring cache
Restore_cache cache/packages.chroot
for _HOOK in config/hooks/*.chroot
do
# Copying hook
cp "${_HOOK}" chroot/root
# Making hook executable
if [ ! -x chroot/root/"$(basename ${_HOOK})" ]
then
chmod +x chroot/root/"$(basename ${_HOOK})"
fi
# Executing hook
Chroot chroot "/root/$(basename ${_HOOK})" || { Echo_error "${_HOOK} failed (exit non-zero). You should check for errors."; exit 1 ;}
# Removing hook
rm -f chroot/root/"$(basename ${_HOOK})"
done
# Saving cache
Save_cache cache/packages.chroot
# Creating stage file
Create_stagefile .build/chroot_hooks
fi
# Remove bind mount of build config inside chroot.
umount chroot/live-build/config
rmdir chroot/live-build/config

50
scripts/build/chroot_includes Executable file
View File

@ -0,0 +1,50 @@
#!/bin/sh
## live-build(7) - System Build Scripts
## Copyright (C) 2006-2014 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

View File

@ -0,0 +1,87 @@
#!/bin/sh
## live-build(7) - System Build Scripts
## Copyright (C) 2006-2014 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 'schedule live packages for installation')"
HELP=""
USAGE="${PROGRAM} [--force]"
Arguments "${@}"
# Reading configuration files
Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
Set_defaults
# Requiring stage file
Require_stagefile .build/config .build/bootstrap
# Checking stage file
Check_stagefile .build/chroot_live-packages
# Checking lock file
Check_lockfile .lock
# Creating lock file
Create_lockfile .lock
# Queue installation of live-boot
if [ -n "${LB_INITRAMFS}" ] && [ "${LB_INITRAMFS}" != "none" ]
then
_PACKAGES="${LB_INITRAMFS}"
fi
# Queue installation of live-config
if [ -n "${LB_INITSYSTEM}" ] && [ "${LB_INITSYSTEM}" != "none" ]
then
_PACKAGES="${_PACKAGES} live-config live-config-${LB_INITSYSTEM}"
fi
# Do initsystem specific hacks
case "${LB_INITSYSTEM}" in
systemd)
_PACKAGES="${_PACKAGES} systemd-sysv"
if [ -e chroot/var/lib/dpkg/info/sysvinit.list ]
then
Chroot chroot "dpkg --force-remove-essential --purge sysvinit"
fi
;;
sysvinit)
_PACKAGES="${_PACKAGES} sysvinit"
if [ -e chroot/var/lib/dpkg/info/systemd-sysv.list ]
then
Chroot chroot "dpkg --force-remove-essential --purge systemd systemd-sysv"
fi
;;
esac
# Install live packages
if [ -n "${_PACKAGES}" ]
then
case "${LB_APT}" in
apt|apt-get)
Chroot chroot "apt-get ${APT_OPTIONS} install ${_PACKAGES}"
;;
aptitude)
Chroot chroot "aptitude ${APTITUDE_OPTIONS} install ${_PACKAGES}"
;;
esac
# Creating stage file
Create_stagefile .build/chroot_live-packages
fi

View File

@ -883,8 +883,8 @@ Check_defaults
if [ ! -e config ]
then
Echo_error "fatal: Not a live-build directory: use 'lb init' to initialize it"
exit 1
Echo_message "Creating config tree for a ${LB_MODE}/${LB_DISTRIBUTION}/${LIVE_IMAGE_ARCHITECTURE} system"
mkdir config
else
Echo_message "Updating config tree for a ${LB_MODE}/${LB_DISTRIBUTION}/${LIVE_IMAGE_ARCHITECTURE} system"
fi
@ -1338,6 +1338,19 @@ then
rmdir --ignore-fail-on-non-empty local > /dev/null 2>&1 || true
fi
mkdir -p config/hooks
mkdir -p config/includes config/includes.bootstrap config/includes.chroot config/includes.binary config/includes.source
Echo_message "Symlinking hooks..."
for _HOOK in "${LIVE_BUILD}"/share/hooks/*.hook* /usr/share/live/build/hooks/*.hook*
do
if [ -e "${_HOOK}" ] && [ ! -e "config/hooks/$(basename ${_HOOK})" ]
then
ln -s "${_HOOK}" "config/hooks/$(basename ${_HOOK})"
fi
done
cat > config/build << EOF
[Image]
Architecture: ${LIVE_IMAGE_ARCHITECTURE}

View File

@ -51,8 +51,8 @@ lb chroot_archives source install ${@}
lb source_live ${@}
lb source_debian ${@}
lb source_disk ${@}
lb source-includes ${@}
lb source-hooks ${@}
lb source_includes ${@}
lb source_hooks ${@}
lb source_checksums ${@}
# Building images

View File

@ -0,0 +1,62 @@
#!/bin/sh
## live-build(7) - System Build Scripts
## Copyright (C) 2006-2014 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 debian-live config into source')"
HELP=""
USAGE="${PROGRAM} [--force]"
Arguments "${@}"
# Reading configuration files
Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
Set_defaults
if [ "${LB_SOURCE}" != "true" ]
then
exit 0
fi
Echo_message "Begin copying live-build configuration..."
# Requiring stage file
Require_stagefile .build/config .build/bootstrap
# Checking stage file
Check_stagefile .build/source_debian-live
# Checking lock file
Check_lockfile .lock
# Creating lock file
Create_lockfile .lock
# Remove old sources
if [ -d source/debian-live ]
then
rm -rf source/debian-live
fi
# Copy system configuration
mkdir -p source/debian-live
cp -a config source/debian-live
if Find_files auto/*
then
cp -a auto source/debian-live
fi
# Creating stage file
Create_stagefile .build/source_debian-live

78
scripts/build/source_hooks Executable file
View File

@ -0,0 +1,78 @@
#!/bin/sh
## live-build(7) - System Build Scripts
## Copyright (C) 2006-2014 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 'execute hooks in source')"
HELP=""
USAGE="${PROGRAM} [--force]"
Arguments "${@}"
# Reading configuration files
Read_conffiles config/all config/common config/bootstrap config/chroot config/source config/source
Set_defaults
Echo_message "Begin executing hooks..."
# Requiring stage file
Require_stagefile .build/config .build/bootstrap
# Checking stage file
Check_stagefile .build/source_hooks
# Checking lock file
Check_lockfile .lock
# Creating lock file
Create_lockfile .lock
## Processing distribution hooks
# Running hooks
for _HOOK in ${LB_BINARY_HOOKS}
do
for LOCATION in "${LIVE_BUILD}/hooks" /usr/share/live/build/hooks
do
for FILE in "${LOCATION}"/????-"${_HOOK}".source
do
if [ -e "${FILE}" ]
then
cd source
"${FILE}" || { Echo_error "${_HOOK} failed (exit non-zero). You should check for errors."; exit 1 ;}
cd "${OLDPWD}"
fi
done
done
done
## Processing local hooks
if Find_files config/hooks/*.source
then
for HOOK in config/hooks/*.source
do
# Making hook executable
if [ ! -x "${HOOK}" ]
then
chmod +x "${HOOK}"
fi
# Executing hook
./"${HOOK}" || { Echo_error "${HOOK} failed (exit non-zero). You should check for errors."; exit 1 ;}
done
# Creating stage file
Create_stagefile .build/source_hooks
fi