IF YOU WOULD LIKE TO GET AN ACCOUNT, please write an email to s dot adaszewski at gmail dot com. User accounts are meant only to report issues and/or generate pull requests. This is a purpose-specific Git hosting for ADARED projects. Thank you for your understanding!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

32 lines
1.3KB

  1. import subprocess
  2. import hashlib
  3. from .misc import find_prefix
  4. from .zfs import zfs_poolname, \
  5. zfs_mountpoint, \
  6. zfs_tag, \
  7. zfs_untag
  8. def command_bootstrap(args):
  9. if args.empty and args.non_interactive:
  10. raise ValueError('--empty and --non-interactive are mutually exclusive')
  11. version = subprocess.check_output(['freebsd-version']).decode('utf-8')
  12. print('FreeBSD version:', version)
  13. tags = args.tags or [ 'freebsd-' + version.split('-')[0], 'freebsd-latest' ]
  14. sha256 = hashlib.sha256(('FreeBSD ' + version).encode('utf-8')).hexdigest()
  15. poolname = zfs_poolname()
  16. name = find_prefix(poolname + '/focker/images/', sha256)
  17. subprocess.check_output(['zfs', 'create', '-o', 'focker:sha256=' + sha256, name])
  18. zfs_untag(tags, focker_type='image')
  19. zfs_tag(name, tags)
  20. res = None
  21. if args.non_interactive:
  22. res = subprocess.run(['focker-bsdinstall', zfs_mountpoint(name)])
  23. elif not args.empty:
  24. res = subprocess.run(['bsdinstall', 'jail', zfs_mountpoint(name)])
  25. if res is not None and res.returncode != 0:
  26. zfs_run(['zfs', 'destroy', '-r', '-f', name])
  27. raise ValueError('bsdinstall failed')
  28. subprocess.check_output(['zfs', 'set', 'rdonly=on', name])
  29. subprocess.check_output(['zfs', 'snapshot', name + '@1'])