| @@ -8,3 +8,5 @@ __pycache__ | |||||
| /example/gitea/x | /example/gitea/x | ||||
| .pytest_cache/ | .pytest_cache/ | ||||
| .coverage | .coverage | ||||
| /scripts/jail | |||||
| /scripts/focker-bsdinstall.not-needed | |||||
| @@ -7,6 +7,8 @@ from .zfs import zfs_poolname, \ | |||||
| def command_bootstrap(args): | def command_bootstrap(args): | ||||
| if args.empty and args.non_interactive: | |||||
| raise ValueError('--empty and --non-interactive are mutually exclusive') | |||||
| version = subprocess.check_output(['freebsd-version']).decode('utf-8') | version = subprocess.check_output(['freebsd-version']).decode('utf-8') | ||||
| print('FreeBSD version:', version) | print('FreeBSD version:', version) | ||||
| tags = args.tags or [ 'freebsd-' + version.split('-')[0], 'freebsd-latest' ] | tags = args.tags or [ 'freebsd-' + version.split('-')[0], 'freebsd-latest' ] | ||||
| @@ -15,10 +17,13 @@ def command_bootstrap(args): | |||||
| name = find_prefix(poolname + '/focker/images/', sha256) | name = find_prefix(poolname + '/focker/images/', sha256) | ||||
| subprocess.check_output(['zfs', 'create', '-o', 'focker:sha256=' + sha256, name]) | subprocess.check_output(['zfs', 'create', '-o', 'focker:sha256=' + sha256, name]) | ||||
| zfs_tag(name, tags) | zfs_tag(name, tags) | ||||
| if not args.empty: | |||||
| res = None | |||||
| if args.non_interactive: | |||||
| res = subprocess.run(['focker-bsdinstall', zfs_mountpoint(name)]) | |||||
| elif not args.empty: | |||||
| res = subprocess.run(['bsdinstall', 'jail', zfs_mountpoint(name)]) | res = subprocess.run(['bsdinstall', 'jail', zfs_mountpoint(name)]) | ||||
| if res.returncode != 0: | |||||
| zfs_run(['zfs', 'destroy', '-r', '-f', name]) | |||||
| raise ValueError('bsdinstall failed') | |||||
| if res is not None and res.returncode != 0: | |||||
| zfs_run(['zfs', 'destroy', '-r', '-f', name]) | |||||
| raise ValueError('bsdinstall failed') | |||||
| subprocess.check_output(['zfs', 'set', 'rdonly=on', name]) | subprocess.check_output(['zfs', 'set', 'rdonly=on', name]) | ||||
| subprocess.check_output(['zfs', 'snapshot', name + '@1']) | subprocess.check_output(['zfs', 'snapshot', name + '@1']) | ||||
| @@ -82,6 +82,7 @@ def create_parser(): | |||||
| parser.set_defaults(func=command_bootstrap) | parser.set_defaults(func=command_bootstrap) | ||||
| parser.add_argument('--tags', '-t', type=str, nargs='+', default=None) | parser.add_argument('--tags', '-t', type=str, nargs='+', default=None) | ||||
| parser.add_argument('--empty', '-e', action='store_true') | parser.add_argument('--empty', '-e', action='store_true') | ||||
| parser.add_argument('--non-interactive', '-ni', action='store_true') | |||||
| # image | # image | ||||
| subparsers = ListForwarder([ subparsers_top.add_parser(cmd).add_subparsers(dest='L2_command') \ | subparsers = ListForwarder([ subparsers_top.add_parser(cmd).add_subparsers(dest='L2_command') \ | ||||
| @@ -0,0 +1,68 @@ | |||||
| #!/bin/sh | |||||
| if [ -z "$1" ]; then | |||||
| echo "Usage: focker-bsdinstall chroot_dir" | |||||
| exit 1 | |||||
| fi | |||||
| BSDCFG_SHARE="/usr/share/bsdconfig" | |||||
| . $BSDCFG_SHARE/common.subr || exit 1 | |||||
| : ${BSDINSTALL_TMPETC="/tmp/bsdinstall_etc"}; export BSDINSTALL_TMPETC | |||||
| : ${BSDINSTALL_TMPBOOT="/tmp/bsdinstall_boot"}; export BSDINSTALL_TMPBOOT | |||||
| : ${PATH_FSTAB="$BSDINSTALL_TMPETC/fstab"}; export PATH_FSTAB | |||||
| : ${BSDINSTALL_DISTDIR="/usr/freebsd-dist"}; export BSDINSTALL_DISTDIR | |||||
| : ${BSDINSTALL_CHROOT="/mnt"}; export BSDINSTALL_CHROOT | |||||
| echo "Began Installation at" "$( date )" | |||||
| export BSDINSTALL_CHROOT=$1 | |||||
| error() { | |||||
| if [ -n "$1" ]; then | |||||
| echo "$1" >&2 | |||||
| fi | |||||
| exit $FAILURE | |||||
| } | |||||
| rm -rf $BSDINSTALL_TMPETC | |||||
| mkdir $BSDINSTALL_TMPETC | |||||
| mkdir -p $1 || error "mkdir failed for $1" | |||||
| test ! -d $BSDINSTALL_DISTDIR && mkdir -p $BSDINSTALL_DISTDIR | |||||
| # echo "BSDINSTALL_DISTDIR: $BSDINSTALL_DISTDIR" | |||||
| # exit | |||||
| export DISTRIBUTIONS="base.txz" | |||||
| FETCH_DISTRIBUTIONS="" | |||||
| for dist in $DISTRIBUTIONS; do | |||||
| if [ ! -f $BSDINSTALL_DISTDIR/$dist ]; then | |||||
| FETCH_DISTRIBUTIONS="$FETCH_DISTRIBUTIONS $dist" | |||||
| fi | |||||
| done | |||||
| FETCH_DISTRIBUTIONS=`echo $FETCH_DISTRIBUTIONS` # Trim white space | |||||
| if [ -n "$FETCH_DISTRIBUTIONS" -a -z "$BSDINSTALL_DISTSITE" ]; then | |||||
| BSDINSTALL_DISTSITE=`focker-mirrorselect` | |||||
| export BSDINSTALL_DISTSITE | |||||
| fi | |||||
| if [ ! -z "$FETCH_DISTRIBUTIONS" ]; then | |||||
| bsdinstall distfetch || error "Failed to fetch distribution" | |||||
| fi | |||||
| bsdinstall checksum || error "Distribution checksum failed" | |||||
| bsdinstall distextract || error "Distribution extract failed" | |||||
| # bsdinstall rootpass || error "Could not set root password" | |||||
| echo "Setting random root password ..." | |||||
| openssl rand -base64 8 | md5 | head -c32 | chroot "$BSDINSTALL_CHROOT" pw user mod root -h 0 | |||||
| bsdinstall config || error "Failed to save config" | |||||
| cp /etc/resolv.conf $1/etc | |||||
| cp /etc/localtime $1/etc | |||||
| bsdinstall entropy | |||||
| echo "Installation Completed at" "$(date)" | |||||
| exit $SUCCESS | |||||
| @@ -0,0 +1,139 @@ | |||||
| #!/bin/sh | |||||
| MIRROR1=ftp://ftp.freebsd.org | |||||
| MIRROR2=ftp://ftp.freebsd.org | |||||
| MIRROR3=ftp://ftp3.ie.freebsd.org | |||||
| MIRROR4=ftp://ftp2.jp.freebsd.org | |||||
| MIRROR5=ftp://ftp4.se.freebsd.org | |||||
| MIRROR6=ftp://ftp4.us.freebsd.org | |||||
| MIRROR7=ftp://ftp2.tr.freebsd.org | |||||
| MIRROR8=ftp://ftp1.freebsd.org | |||||
| MIRROR9=ftp://ftp2.freebsd.org | |||||
| MIRROR10=ftp://ftp3.freebsd.org | |||||
| MIRROR11=ftp://ftp4.freebsd.org | |||||
| MIRROR12=ftp://ftp5.freebsd.org | |||||
| MIRROR13=ftp://ftp6.freebsd.org | |||||
| MIRROR14=ftp://ftp7.freebsd.org | |||||
| MIRROR15=ftp://ftp10.freebsd.org | |||||
| MIRROR16=ftp://ftp11.freebsd.org | |||||
| MIRROR17=ftp://ftp12.freebsd.org | |||||
| MIRROR18=ftp://ftp13.freebsd.org | |||||
| MIRROR19=ftp://ftp14.freebsd.org | |||||
| MIRROR20=ftp://ftp1.am.freebsd.org | |||||
| MIRROR21=ftp://ftp.au.freebsd.org | |||||
| MIRROR22=ftp://ftp2.au.freebsd.org | |||||
| MIRROR23=ftp://ftp3.au.freebsd.org | |||||
| MIRROR24=ftp://ftp.at.freebsd.org | |||||
| MIRROR25=ftp://ftp2.br.freebsd.org | |||||
| MIRROR26=ftp://ftp3.br.freebsd.org | |||||
| MIRROR27=ftp://ftp4.br.freebsd.org | |||||
| MIRROR28=ftp://ftp.ca.freebsd.org | |||||
| MIRROR29=ftp://ftp.cn.freebsd.org | |||||
| MIRROR30=ftp://ftp.cz.freebsd.org | |||||
| MIRROR31=ftp://ftp.dk.freebsd.org | |||||
| MIRROR32=ftp://ftp.ee.freebsd.org | |||||
| MIRROR33=ftp://ftp.fi.freebsd.org | |||||
| MIRROR34=ftp://ftp.fr.freebsd.org | |||||
| MIRROR35=ftp://ftp3.fr.freebsd.org | |||||
| MIRROR36=ftp://ftp4.fr.freebsd.org | |||||
| MIRROR37=ftp://ftp5.fr.freebsd.org | |||||
| MIRROR38=ftp://ftp6.fr.freebsd.org | |||||
| MIRROR39=ftp://ftp7.fr.freebsd.org | |||||
| MIRROR40=ftp://ftp8.fr.freebsd.org | |||||
| MIRROR41=ftp://ftp.de.freebsd.org | |||||
| MIRROR42=ftp://ftp2.de.freebsd.org | |||||
| MIRROR43=ftp://ftp4.de.freebsd.org | |||||
| MIRROR44=ftp://ftp5.de.freebsd.org | |||||
| MIRROR45=ftp://ftp6.de.freebsd.org | |||||
| MIRROR46=ftp://ftp7.de.freebsd.org | |||||
| MIRROR47=ftp://ftp8.de.freebsd.org | |||||
| MIRROR48=ftp://ftp.gr.freebsd.org | |||||
| MIRROR49=ftp://ftp2.gr.freebsd.org | |||||
| MIRROR50=ftp://ftp3.ie.freebsd.org | |||||
| MIRROR51=ftp://ftp.il.freebsd.org | |||||
| MIRROR52=ftp://ftp.it.freebsd.org | |||||
| MIRROR53=ftp://ftp.jp.freebsd.org | |||||
| MIRROR54=ftp://ftp2.jp.freebsd.org | |||||
| MIRROR55=ftp://ftp3.jp.freebsd.org | |||||
| MIRROR56=ftp://ftp4.jp.freebsd.org | |||||
| MIRROR57=ftp://ftp5.jp.freebsd.org | |||||
| MIRROR58=ftp://ftp6.jp.freebsd.org | |||||
| MIRROR59=ftp://ftp7.jp.freebsd.org | |||||
| MIRROR60=ftp://ftp8.jp.freebsd.org | |||||
| MIRROR61=ftp://ftp9.jp.freebsd.org | |||||
| MIRROR62=ftp://ftp.kr.freebsd.org | |||||
| MIRROR63=ftp://ftp2.kr.freebsd.org | |||||
| MIRROR64=ftp://ftp.lv.freebsd.org | |||||
| MIRROR65=ftp://ftp.lt.freebsd.org | |||||
| MIRROR66=ftp://ftp.nl.freebsd.org | |||||
| MIRROR67=ftp://ftp2.nl.freebsd.org | |||||
| MIRROR68=ftp://ftp.nz.freebsd.org | |||||
| MIRROR69=ftp://ftp.no.freebsd.org | |||||
| MIRROR70=ftp://ftp.pl.freebsd.org | |||||
| MIRROR71=ftp://ftp2.pl.freebsd.org | |||||
| MIRROR72=ftp://ftp.ru.freebsd.org | |||||
| MIRROR73=ftp://ftp2.ru.freebsd.org | |||||
| MIRROR74=ftp://ftp4.ru.freebsd.org | |||||
| MIRROR75=ftp://ftp5.ru.freebsd.org | |||||
| MIRROR76=ftp://ftp6.ru.freebsd.org | |||||
| MIRROR77=ftp://ftp.sk.freebsd.org | |||||
| MIRROR78=ftp://ftp2.sk.freebsd.org | |||||
| MIRROR79=ftp://ftp.si.freebsd.org | |||||
| MIRROR80=ftp://ftp.za.freebsd.org | |||||
| MIRROR81=ftp://ftp2.za.freebsd.org | |||||
| MIRROR82=ftp://ftp4.za.freebsd.org | |||||
| MIRROR83=ftp://ftp.es.freebsd.org | |||||
| MIRROR84=ftp://ftp3.es.freebsd.org | |||||
| MIRROR85=ftp://ftp.se.freebsd.org | |||||
| MIRROR86=ftp://ftp2.se.freebsd.org | |||||
| MIRROR87=ftp://ftp3.se.freebsd.org | |||||
| MIRROR88=ftp://ftp4.se.freebsd.org | |||||
| MIRROR89=ftp://ftp6.se.freebsd.org | |||||
| MIRROR90=ftp://ftp.ch.freebsd.org | |||||
| MIRROR91=ftp://ftp.tw.freebsd.org | |||||
| MIRROR92=ftp://ftp2.tw.freebsd.org | |||||
| MIRROR93=ftp://ftp3.tw.freebsd.org | |||||
| MIRROR94=ftp://ftp4.tw.freebsd.org | |||||
| MIRROR95=ftp://ftp6.tw.freebsd.org | |||||
| MIRROR96=ftp://ftp11.tw.freebsd.org | |||||
| MIRROR97=ftp://ftp.uk.freebsd.org | |||||
| MIRROR98=ftp://ftp2.uk.freebsd.org | |||||
| MIRROR99=ftp://ftp3.uk.freebsd.org | |||||
| MIRROR100=ftp://ftp4.uk.freebsd.org | |||||
| MIRROR101=ftp://ftp5.uk.freebsd.org | |||||
| MIRROR102=ftp://ftp.ua.freebsd.org | |||||
| MIRROR103=ftp://ftp7.ua.freebsd.org | |||||
| MIRROR104=ftp://ftp1.us.freebsd.org | |||||
| MIRROR105=ftp://ftp2.us.freebsd.org | |||||
| MIRROR106=ftp://ftp3.us.freebsd.org | |||||
| MIRROR107=ftp://ftp4.us.freebsd.org | |||||
| MIRROR108=ftp://ftp5.us.freebsd.org | |||||
| MIRROR109=ftp://ftp6.us.freebsd.org | |||||
| MIRROR110=ftp://ftp8.us.freebsd.org | |||||
| MIRROR111=ftp://ftp10.us.freebsd.org | |||||
| MIRROR112=ftp://ftp11.us.freebsd.org | |||||
| MIRROR113=ftp://ftp13.us.freebsd.org | |||||
| MIRROR114=ftp://ftp14.us.freebsd.org | |||||
| MIRROR115=ftp://ftp15.us.freebsd.org | |||||
| x=`jot -r 1 1 115` | |||||
| # echo $x | |||||
| x=MIRROR${x} | |||||
| eval MIRROR=\$${x} | |||||
| _UNAME_R=`uname -r` | |||||
| _UNAME_R=${_UNAME_R%-p*} | |||||
| case ${_UNAME_R} in | |||||
| *-CURRENT|*-STABLE|*-PRERELEASE) | |||||
| RELDIR="snapshots" | |||||
| ;; | |||||
| *) | |||||
| RELDIR="releases" | |||||
| ;; | |||||
| esac | |||||
| BSDINSTALL_DISTSITE="$MIRROR/pub/FreeBSD/${RELDIR}/`uname -m`/`uname -p`/${_UNAME_R}" | |||||
| export BSDINSTALL_DISTSITE | |||||
| echo $BSDINSTALL_DISTSITE | |||||
| @@ -2,7 +2,7 @@ from distutils.core import setup | |||||
| setup( | setup( | ||||
| name='focker', | name='focker', | ||||
| version='0.91', | |||||
| version='0.95', | |||||
| author='Stanislaw Adaszewski', | author='Stanislaw Adaszewski', | ||||
| author_email='s.adaszewski@gmail.com', | author_email='s.adaszewski@gmail.com', | ||||
| url='https://github.com/sadaszewski/focker', | url='https://github.com/sadaszewski/focker', | ||||
| @@ -10,7 +10,7 @@ setup( | |||||
| license='The GNU General Public License v3.0', | license='The GNU General Public License v3.0', | ||||
| description='Focker is a FreeBSD image orchestration tool in the vein of Docker.', | description='Focker is a FreeBSD image orchestration tool in the vein of Docker.', | ||||
| long_description='Focker is a FreeBSD image orchestration tool in the vein of Docker.', | long_description='Focker is a FreeBSD image orchestration tool in the vein of Docker.', | ||||
| scripts=['scripts/focker'], | |||||
| scripts=['scripts/focker', 'scripts/focker-bsdinstall', 'scripts/focker-mirrorselect'], | |||||
| install_requires=[ | install_requires=[ | ||||
| "tabulate", | "tabulate", | ||||
| "jailconf", | "jailconf", | ||||