コード例 #1
0
ファイル: build-os.py プロジェクト: PersonalBSD/freenas-build
def create_make_conf_build():
    conf = open(makeconfbuild, 'w')
    for k, v in config['make_conf_build'].items():
        conf.write('{0}={1}\n'.format(k, v))
    conf.close()
    conf = open(objdir('make-jail.conf'), 'w')
    for k, v in config['make_conf_build'].items():
        conf.write('{0}={1}\n'.format(k, v))
    for k, v in config['make_conf_jail'].items():
        conf.write('{0}={1}\n'.format(k, v))
    conf.close()
    conf = open(objdir('make-run.conf'), 'w')
    for k, v in config['make_conf_build'].items():
        conf.write('{0}={1}\n'.format(k, v))
    for k, v in config['make_conf_run'].items():
        conf.write('{0}={1}\n'.format(k, v))
    conf.close()
    conf = open(objdir('make-boot.conf'), 'w')
    for k, v in config['make_conf_build'].items():
        conf.write('{0}={1}\n'.format(k, v))
    for k, v in config['make_conf_run'].items():
        conf.write('{0}={1}\n'.format(k, v))
    for k, v in config['make_conf_boot'].items():
        conf.write('{0}={1}\n'.format(k, v))
    conf.close()
コード例 #2
0
ファイル: build-os.py プロジェクト: github188/freenas-build
def installworld(destdir, worldlog, distriblog, conf="build"):
    info('Installing world in {0}', destdir)
    info('Log file: {0}', worldlog)
    makeconf = objdir("make-${conf}.conf")
    sh(
        "env MAKEOBJDIRPREFIX=${OBJDIR}",
        "make",
        "-C ${TRUEOS_ROOT}",
        "installworld",
        "DESTDIR=${destdir}",
        "__MAKE_CONF=${makeconf}",
        log=worldlog
    )

    info('Creating distribution in {0}', destdir)
    info('Log file: {0}', distriblog)
    sh(
        "env MAKEOBJDIRPREFIX=${OBJDIR}",
        "make",
        "-C ${TRUEOS_ROOT}",
        "distribution",
        "DESTDIR=${destdir}",
        "__MAKE_CONF=${makeconf}",
        log=distriblog
    )
コード例 #3
0
def setup_vm():
    global vm_proc, termserv_proc

    info('Starting up VM')
    sh('bhyveload -m ${RAM_SIZE} -d ${OBJDIR}/test-root.ufs ${VM_NAME}')
    vm_proc = sh_spawn(
        'bhyve -m ${RAM_SIZE} -A -H -P',
        '-s 0:0,hostbridge',
        '-s 1:0,virtio-net,${tapdev}',
        '-s 2:0,ahci-hd,${OBJDIR}/test-root.ufs',
        '-s 3:0,ahci-hd,${OBJDIR}/test-swap.bin',
        '-s 31,lpc -l com1,${CONSOLE_MASTER}',
        '${VM_NAME}'
    )

    pid = vm_proc.pid
    logfile = objdir(e('logs/bhyve.${pid}.log'))

    info('Starting telnet server on port {0}', e('${TELNET_PORT}'))
    info('Console log file is {0}', logfile)
    termserv_proc = sh_spawn(
        'python',
        '${BUILD_TOOLS}/terminal-server.py',
        '-l ${logfile}',
        '-c ${CONSOLE_SLAVE}',
        '-p ${TELNET_PORT}'
    )

    on_abort(shutdown_vm)
コード例 #4
0
ファイル: build-os.py プロジェクト: liberty1776dtom/build-2
def installkernel(kconf, destdir, log, kodir=None, modules=None, conf="build"):
    info('Installing kernel in {0}', log)
    info('Log file: {0}', log)
    if modules is None:
        modules = config['kernel_modules']
    if kodir is None:
        kodir = "/boot/kernel"
    makeconf = objdir("make-${conf}.conf")
    modules = ' '.join(modules)
    sh(
        "env MAKEOBJDIRPREFIX=${OBJDIR}",
        "make",
        "-C ${OS_ROOT}",
        "installkernel",
        "DESTDIR=${destdir}",
        "KERNCONF={0}".format(kconf),
        "KODIR={0}".format(kodir),
        "__MAKE_CONF=${makeconf}",
        "MODULES_OVERRIDE='{0}'".format(modules),
        log=log
    )

    # Saving the SDK sources
    if e('${SDK}') == "yes":
        info('SDK: Saving FreeBSD sources to src.txz...')
        sh('tar cJf ${BE_ROOT}/src.txz --exclude .git -C ${OS_ROOT} .')
コード例 #5
0
ファイル: build-os.py プロジェクト: github188/freenas-build
def create_make_conf_build():
    conf = open(makeconfbuild, 'w')
    for k, v in config['make_conf_build'].items():
        conf.write('{0}={1}\n'.format(k, v))
    conf.close()
    conf = open(objdir('make-run.conf'), 'w')
    for k, v in config['make_conf_build'].items():
        conf.write('{0}={1}\n'.format(k, v))
    for k, v in config['make_conf_run'].items():
        conf.write('{0}={1}\n'.format(k, v))
    conf.close()
    conf = open(objdir('make-boot.conf'), 'w')
    for k, v in config['make_conf_build'].items():
        conf.write('{0}={1}\n'.format(k, v))
    for k, v in config['make_conf_run'].items():
        conf.write('{0}={1}\n'.format(k, v))
    for k, v in config['make_conf_boot'].items():
        conf.write('{0}={1}\n'.format(k, v))
    conf.close()
コード例 #6
0
ファイル: build-os.py プロジェクト: zfstor/build
def installkernel(kconf, destdir, log, kodir=None, modules=None, conf="build"):
    info('Installing kernel in {0}', log)
    info('Log file: {0}', log)
    if modules is None:
        modules = config['kernel_modules']
    if kodir is None:
        kodir = "/boot/kernel"
    makeconf = objdir("make-${conf}.conf")
    modules = ' '.join(modules)
    sh("env MAKEOBJDIRPREFIX=${OBJDIR}",
       "make",
       "-C ${OS_ROOT}",
       "installkernel",
       "DESTDIR=${destdir}",
       "KERNCONF={0}".format(kconf),
       "KODIR={0}".format(kodir),
       "__MAKE_CONF=${makeconf}",
       "MODULES_OVERRIDE='{0}'".format(modules),
       log=log)
コード例 #7
0
ファイル: run-os-tests.py プロジェクト: zfstor/build
def main():
    if e('${PLAYGROUND}'):
        info('Type RETURN to kill VM')
        input()
        vm_proc.kill()
        return

    tests_total = len(glob('${TESTS_ROOT}/os/*.py'))
    tests_success = []
    tests_failure = []

    for t in sorted(glob('${TESTS_ROOT}/os/*.py')):
        testname = os.path.splitext(os.path.basename(t))[0]
        logfile = objdir('logs/test-${testname}.log')
        info('Running test {0} (logfile {1})', testname, logfile)
        mod = imp.load_source(testname, t)
        success, reason = mod.run(lambda x: ssh(x, logfile))

        # Give VM a while if panic happened
        time.sleep(2)

        if vm_proc.returncode is not None:
            # VM crashed!
            error('Test {0} caused VM crash', testname)

        if success is None:
            error('Test {0} returned aborted test schedule: {1}', testname,
                  reason)
        elif success:
            tests_success.append(testname)
        else:
            info('Failed: {0}', reason)
            tests_failure.append(testname)

    vm_proc.kill()
    info('{0} total tests', tests_total)
    info('{0} successes', len(tests_success))
    info('{0} failures', len(tests_failure))

    if len(tests_failure) > 0:
        info('Failed tests: {0}', ', '.join(tests_failure))
コード例 #8
0
ファイル: build-os.py プロジェクト: github188/freenas-build
def installkernel(kconf, destdir, log, kodir=None, modules=None, conf="build"):
    info('Installing kernel in {0}', log)
    info('Log file: {0}', log)
    if modules is None:
        modules = config['kernel_modules']
    if kodir is None:
        kodir = "/boot/kernel"
    makeconf = objdir("make-${conf}.conf")
    modules = ' '.join(modules)
    sh(
        "env MAKEOBJDIRPREFIX=${OBJDIR}",
        "make",
        "-C ${TRUEOS_ROOT}",
        "installkernel",
        "DESTDIR=${destdir}",
        "KERNCONF={0}".format(kconf),
        "KODIR={0}".format(kodir),
        "__MAKE_CONF=${makeconf}",
        "MODULES_OVERRIDE='{0}'".format(modules),
        log=log
    )
コード例 #9
0
ファイル: run-os-tests.py プロジェクト: zfstor/build
def setup_vm():
    global vm_proc, termserv_proc

    info('Starting up VM')
    sh('bhyveload -m ${RAM_SIZE} -d ${OBJDIR}/test-root.ufs ${VM_NAME}')
    vm_proc = sh_spawn('bhyve -m ${RAM_SIZE} -A -H -P', '-s 0:0,hostbridge',
                       '-s 1:0,virtio-net,${tapdev}',
                       '-s 2:0,ahci-hd,${OBJDIR}/test-root.ufs',
                       '-s 3:0,ahci-hd,${OBJDIR}/test-swap.bin',
                       '-s 31,lpc -l com1,${CONSOLE_MASTER}', '${VM_NAME}')

    pid = vm_proc.pid
    logfile = objdir(e('logs/bhyve.${pid}.log'))

    info('Starting telnet server on port {0}', e('${TELNET_PORT}'))
    info('Console log file is {0}', logfile)
    termserv_proc = sh_spawn('python', '${BUILD_TOOLS}/terminal-server.py',
                             '-l ${logfile}', '-c ${CONSOLE_SLAVE}',
                             '-p ${TELNET_PORT}')

    on_abort(shutdown_vm)
コード例 #10
0
def main():
    if e('${PLAYGROUND}'):
        info('Type RETURN to kill VM')
        input()
        vm_proc.kill()
        return

    tests_total = len(glob('${TESTS_ROOT}/trueos/*.py'))
    tests_success = []
    tests_failure = []

    for t in sorted(glob('${TESTS_ROOT}/trueos/*.py')):
        testname = os.path.splitext(os.path.basename(t))[0]
        logfile = objdir('logs/test-${testname}.log')
        info('Running test {0} (logfile {1})', testname, logfile)
        mod = imp.load_source(testname, t)
        success, reason = mod.run(lambda x: ssh(x, logfile))

        # Give VM a while if panic happened
        time.sleep(2)

        if vm_proc.returncode is not None:
            # VM crashed!
            error('Test {0} caused VM crash', testname)

        if success is None:
            error('Test {0} returned aborted test schedule: {1}', testname, reason)
        elif success:
            tests_success.append(testname)
        else:
            info('Failed: {0}', reason)
            tests_failure.append(testname)

    vm_proc.kill()
    info('{0} total tests', tests_total)
    info('{0} successes', len(tests_success))
    info('{0} failures', len(tests_failure))

    if len(tests_failure) > 0:
        info('Failed tests: {0}', ', '.join(tests_failure))
コード例 #11
0
def stage_non_installed_ports():

    """
    If a port was given the `install` key and it was
    set to False, then the port was not installed but
    we still should save the associated *.txz file in
    the final release directory.
    """

    config = load_profile_config()
    glob_pattern = '/*.txz'

    non_installed_ports = []
    for i in config.ports:
        if isinstance(i, dict) and not i.get('install', True):
            if 'package' in i:
                non_installed_ports.append(i.package)
            else:
                non_installed_ports.append(i.name)

    if non_installed_ports:
        sh('mkdir -p ${RELEASE_STAGEDIR}/${BUILD_ARCH_SHORT}/${NON_INSTALLED_DIR}')
        pkgdir = subprocess.run(
            ['find', objdir('ports/data/packages'), '-name', 'All', '-type', 'd'],
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
        )
        if pkgdir.stdout:
            pkgdir = pkgdir.stdout.decode().strip()

            for i in non_installed_ports:
                # port name will have the directory it resides in
                # so make sure to remove it if it's there
                if '/' in i:
                    i = i.split('/')[1]

                for t in glob(pkgdir + glob_pattern):
                    pkg = t.split('/')[-1]
                    if pkg.startswith(i):
                        sh('cp ${t} ${RELEASE_STAGEDIR}/${BUILD_ARCH_SHORT}/${NON_INSTALLED_DIR}')
コード例 #12
0
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#####################################################################

import os
import sys
import glob
from dsl import load_profile_config
from utils import (sh, objdir, info, error, e, on_abort, chroot,
                   get_port_names, readfile)

config = load_profile_config()
logfile = objdir('logs/pkg-install')


def mount_packages():
    on_abort(umount_packages)
    jailname = readfile(e('${OBJDIR}/jailname'))
    sh('mkdir -p ${WORLD_DESTDIR}/usr/ports/packages')
    sh('mount -t nullfs ${OBJDIR}/ports/data/packages/${jailname}-p ${WORLD_DESTDIR}/usr/ports/packages'
       )


def fetch_binary_packages():
    if e('${SKIP_PACKAGES_FETCH}'):
        return

    for i in config.binary_packages:
コード例 #13
0
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#####################################################################

import os
import subprocess
import imp
import threading
import time
from utils import sh, sh_str, sh_spawn, e, glob, objdir, info, debug, error, load_file, import_function, on_abort, appendfile


load_file('${BUILD_CONFIG}/tests/bhyve.pyd', os.environ)
installworldlog = objdir('logs/test-installworld')
distributionlog = objdir('logs/test-distribution')
buildkernellog = objdir('logs/test-buildkernel')
installkernellog = objdir('logs/test-installkernel')
buildkernel = import_function('build-os', 'buildkernel')
installworld = import_function('build-os', 'installworld')
installkernel = import_function('build-os', 'installkernel')
vm_proc = None
termserv_proc = None
vm_wait_thread = None
current_test = None
shutdown = False
tapdev = None


ssh_args =  ['ssh',
コード例 #14
0
ファイル: run-os-tests.py プロジェクト: zfstor/build
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#####################################################################

import os
import subprocess
import imp
import threading
import time
from utils import sh, sh_str, sh_spawn, e, glob, objdir, info, debug, error, load_file, import_function, on_abort, appendfile

load_file('${BUILD_CONFIG}/tests/bhyve.pyd', os.environ)
installworldlog = objdir('logs/test-installworld')
distributionlog = objdir('logs/test-distribution')
buildkernellog = objdir('logs/test-buildkernel')
installkernellog = objdir('logs/test-installkernel')
buildkernel = import_function('build-os', 'buildkernel')
installworld = import_function('build-os', 'installworld')
installkernel = import_function('build-os', 'installkernel')
vm_proc = None
termserv_proc = None
vm_wait_thread = None
current_test = None
shutdown = False
tapdev = None

ssh_args = [
    'ssh', '-o', 'LogLevel=QUIET', '-o', 'ServerAliveInterval=10', '-o',
コード例 #15
0
ファイル: main.py プロジェクト: zfstor/build
import os
import json
import time
import argparse
import shutil
import subprocess
from utils import e, sh, objdir, info
from xml.etree.ElementTree import Element, SubElement, tostring, parse
from distutils.core import run_setup
from xml.dom import minidom

EXCLUDES = [
    'os', 'objs', 'ports', 'release', 'release.build.log', 'repo-manifest'
]

venvdir = objdir('tests/venv')
output_root = objdir('test-output')


class Main(object):
    def __init__(self):
        self.test_suites = []
        self.output_path = None
        self.excluded = ['os', 'objs', 'ports', 'release']

    def find_tests(self):
        info('Looking for test manifests in ${{BE_ROOT}}')
        for dir in os.listdir(e('${BE_ROOT}')):
            if dir not in self.excluded:
                for root, _, files in os.walk(
                        os.path.join(e('${BE_ROOT}'), dir)):
コード例 #16
0
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#####################################################################

import os
import sys
from utils import sh, e, setup_env, objdir, info, import_function


installworldlog = objdir('logs/jail-installworld')
distributionlog = objdir('logs/jail-distribution')
installkernellog = objdir('logs/jail-installkernel')
installworld = import_function('build-os', 'installworld')
installkernel = import_function('build-os', 'installkernel')


if __name__ == '__main__':
    if e('${SKIP_INSTALL_JAIL}'):
        info('Skipping jail installation, as instructed by setting SKIP_INSTALL_JAIL')
        sys.exit(0)

    if os.path.isdir(e('${WORLD_DESTDIR}')):
        sh('chflags -fR 0 ${JAIL_DESTDIR}')
        sh('rm -rf ${JAIL_DESTDIR}')
コード例 #17
0
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#####################################################################

import os
import sys
import glob
from utils import env, e, setup_env, sh, sh_str, info, debug, error, walk, objdir

logfile = objdir('logs/build-gui')


def cleandirs():
    sh('mkdir -p ${GUI_STAGEDIR}')
    sh('mkdir -p ${GUI_DESTDIR}')
    sh('rm -rf ${GUI_STAGEDIR}/*')
    sh('rm -rf ${GUI_DESTDIR}/*')


def copy():
    sh('cp -a ${BE_ROOT}/gui/ ${GUI_STAGEDIR}/')


def install():
    node_modules = e('${GUI_STAGEDIR}/node_modules')
コード例 #18
0
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#####################################################################

import os
import errno
import shutil
from utils import sh, e, info, objdir, sha256, is_elf


output = objdir('${NAME}.debug.txz')


def main():
    sh('rm -rf ${DEBUG_WORLD}')
    sh('mkdir -p ${DEBUG_WORLD}')

    info('Saving debug information in ${{DEBUG_WORLD}}')

    for root, dirs, files in os.walk(e('${WORLD_DESTDIR}/')):
        for name in files:
            filename = os.path.join(root, name)
            relpath = os.path.relpath(filename, e('${WORLD_DESTDIR}'))
            destpath = os.path.join(e('${DEBUG_WORLD}'), relpath)

            ext = os.path.splitext(name)[1]
コード例 #19
0
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#####################################################################

import os
import sys
from dsl import load_profile_config
from utils import sh, sh_str, env, e, setup_env, objdir, info, debug, error, pathjoin

config = load_profile_config()
arch = env('TARGET_ARCH', 'amd64')
makeconfbuild = objdir('make-build.conf')
kernconf = objdir(e('${KERNCONF}'))
kernlog = objdir('logs/buildkernel')
worldlog = objdir('logs/buildworld')
makejobs = None


def calculate_make_jobs():
    global makejobs

    jobs = sh_str('sysctl -n kern.smp.cpus')
    if not jobs:
        makejobs = 2

    makejobs = 2 * int(jobs) + 1
    debug('Using {0} make jobs', makejobs)
コード例 #20
0
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#####################################################################

import os
from dsl import load_file, load_profile_config
from utils import sh, info, objdir, e, chroot, glob, readfile, setfile, template, sha256, import_function, get_port_names, on_abort, is_elf

ports = load_file('${BUILD_CONFIG}/ports-installer.pyd', os.environ)
installworld = import_function('build-os', 'installworld')
installkernel = import_function('build-os', 'installkernel')
installworldlog = objdir('logs/iso-installworld')
installkernellog = objdir('logs/iso-installkernel')
distributionlog = objdir('logs/iso-distribution')
sysinstalllog = objdir('logs/iso-sysinstall')
imgfile = objdir('base.ufs')
output = objdir('${NAME}.iso')

purge_dirs = ['/bin', '/sbin', '/usr/bin', '/usr/sbin']

files_to_preserve = [
    '/bin/sleep', '/usr/bin/dialog', '/usr/bin/dirname', '/usr/bin/awk',
    '/usr/bin/cut', '/usr/bin/cmp', '/usr/bin/find', '/usr/bin/grep',
    '/usr/bin/logger', '/usr/bin/mkfifo', '/usr/bin/mktemp', '/usr/bin/sed',
    '/usr/bin/sort', '/usr/bin/scp', '/usr/bin/sftp', '/usr/bin/ssh',
    '/usr/bin/ssh-keygen', '/usr/bin/tr', '/usr/bin/uname', '/usr/bin/xargs',
    '/usr/sbin/diskinfo', '/usr/sbin/sshd', '/usr/sbin/swapinfo',
コード例 #21
0
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#

import os
from dsl import load_file, load_profile_config
from utils import sh, sh_str, sh_spawn, info, objdir, e

load_profile_config()
load_file(e('${BUILD_ROOT}/tests/freenas/config.pyd'), os.environ)
testdir = objdir('tests')
venvdir = objdir('tests/venv')


def cleanup():
    sh('bhyvectl --destroy --vm=${VM_NAME}', nofail=True)


def setup_venv():
    sh('virtualenv ${venvdir}')
    sh('${venvdir}/bin/pip install -U cython six paramiko nose2')
    sh('${venvdir}/bin/pip install -U ${BE_ROOT}/py-bsd')
    sh('${venvdir}/bin/pip install -U ${BE_ROOT}/py-netif')
    sh('${venvdir}/bin/pip install -U ${BE_ROOT}/py-dhcp')
    sh('${venvdir}/bin/pip install -U ${BE_ROOT}/py-freenas.utils')
    sh('${venvdir}/bin/pip install -U ${BE_ROOT}/dispatcher-client/python')
コード例 #22
0
ファイル: early-customize.py プロジェクト: zfstor/build
def main():
    for i in dsl['early_customize_tasks']:
        logfile = objdir('logs/custom-${i}')
        sh('${BUILD_ROOT}/build/customize/${i}.py ${WORLD_DESTDIR}', log=logfile)
コード例 #23
0
ファイル: build-packages.py プロジェクト: zfstor/build
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#####################################################################

import os
import time
import hashlib
from dsl import load_profile_config
from utils import sh, e, objdir, info, env


config = load_profile_config()
tooldir = objdir('pkgtools')
pkgdir = objdir('packages')
pkgtoolslog = objdir('logs/build-pkgtools')
pkgversion = ''
sequence = ''
validators = []

def read_repo_manifest():
    global pkgversion
    global sequence

    versions = []
    f = open(e("${BE_ROOT}/repo-manifest"))
    o = open(e("${BE_ROOT}/objs/world/etc/repo-manifest"), "w")

    for i in f:
コード例 #24
0
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#####################################################################

import sys
import os
from utils import sh, e, objdir, info, import_function


installworldlog = objdir('logs/dest-installworld')
distributionlog = objdir('logs/dest-distribution')
installkernellog = objdir('logs/dest-installkernel')
installkerneldebuglog = objdir('logs/dest-installkerneldebug')
installworld = import_function('build-os', 'installworld')
installkernel = import_function('build-os', 'installkernel')


if __name__ == '__main__':
    if e('${SKIP_INSTALL_WORLD}'):
        info('Skipping world installation, as instructed by setting SKIP_INSTALL_WORLD')
        sys.exit(0)

    if os.path.isdir(e('${WORLD_DESTDIR}')):
        sh('chflags -fR 0 ${WORLD_DESTDIR}')
        sh('rm -rf ${WORLD_DESTDIR}')
コード例 #25
0
ファイル: build-os.py プロジェクト: github188/freenas-build
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#####################################################################

import os
import sys
from dsl import load_profile_config
from utils import sh, sh_str, env, e, setup_env, objdir, info, debug, error, pathjoin


config = load_profile_config()
arch = env('TARGET_ARCH', 'amd64')
makeconfbuild = objdir('make-build.conf')
kernconf = objdir(e('${KERNCONF}'))
kernconf_debug = objdir(e('${KERNCONF}-DEBUG'))
kernlog = objdir('logs/buildkernel')
kerndebuglog = objdir('logs/buildkernel-debug')
worldlog = objdir('logs/buildworld')
makejobs = None


def calculate_make_jobs():
    global makejobs

    jobs = sh_str('sysctl -n kern.smp.cpus')
    if not jobs:
        makejobs = 2
コード例 #26
0
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#####################################################################

import os
import sys
from utils import sh, e, objdir, info, import_function


installworldlog = objdir('logs/jail-installworld')
distributionlog = objdir('logs/jail-distribution')
installkernellog = objdir('logs/jail-installkernel')
installworld = import_function('build-os', 'installworld')
installkernel = import_function('build-os', 'installkernel')


if __name__ == '__main__':
    if e('${SKIP_INSTALL_JAIL}'):
        info('Skipping jail installation, as instructed by setting SKIP_INSTALL_JAIL')
        sys.exit(0)

    if os.path.isdir(e('${WORLD_DESTDIR}')):
        sh('chflags -fR 0 ${JAIL_DESTDIR}')
        sh('rm -rf ${JAIL_DESTDIR}')
コード例 #27
0
ファイル: create-iso.py プロジェクト: github188/freenas-build
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#####################################################################


import os
from dsl import load_file, load_profile_config
from utils import sh, info, objdir, e, chroot, glob, readfile, setfile, template, sha256, import_function, get_port_names, on_abort


ports = load_file('${BUILD_CONFIG}/ports-installer.pyd', os.environ)
installworld = import_function('build-os', 'installworld')
installkernel = import_function('build-os', 'installkernel')
installworldlog = objdir('logs/iso-installworld')
installkernellog = objdir('logs/iso-installkernel')
distributionlog = objdir('logs/iso-distribution')
sysinstalllog = objdir('logs/iso-sysinstall')
imgfile = objdir('base.ufs')
output = objdir('${NAME}.iso')


purge_dirs = [
    '/bin',
    '/sbin',
    '/usr/bin',
    '/usr/sbin'
]

files_to_preserve = [
コード例 #28
0
#
#####################################################################


import os
import sys
import glob
from dsl import load_profile_config
from utils import (
    sh, objdir, info, error, e, on_abort,
    chroot, get_port_names, readfile
)


config = load_profile_config()
logfile = objdir('logs/pkg-install')


def mount_packages():
    on_abort(umount_packages)
    jailname = readfile(e('${OBJDIR}/jailname'))
    sh('mkdir -p ${WORLD_DESTDIR}/usr/ports/packages')
    sh('mount -t nullfs ${OBJDIR}/ports/packages/${jailname}-p ${WORLD_DESTDIR}/usr/ports/packages')


def fetch_binary_packages():
    if e('${SKIP_PACKAGES_FETCH}'):
        return

    for i in config.binary_packages:
        _, name = os.path.split(i)
コード例 #29
0
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#####################################################################

import os
import errno
import shutil
from utils import sh, e, info, objdir, sha256, is_elf


output = objdir('${NAME}.debug.txz')


def main():
    sh('rm -rf ${DEBUG_ROOT}')
    sh('mkdir -p ${DEBUG_ROOT}')

    info('Saving debug information in ${{DEBUG_ROOT}}')

    destpath = os.path.join(e('${DEBUG_ROOT}'), "usr/lib");
    os.makedirs(destpath)
    shutil.move(os.path.join(e('${WORLD_DESTDIR}'), "usr/lib/debug"),
        destpath)

    for root, dirs, files in os.walk(e('${WORLD_DESTDIR}/')):
        for name in files:
コード例 #30
0
ファイル: build-os.py プロジェクト: zfstor/build
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#####################################################################

import os
import sys
from dsl import load_profile_config
from utils import sh, sh_str, env, e, objdir, info, debug, pathjoin

config = load_profile_config()
arch = env('TARGET_ARCH', 'amd64')
makeconfbuild = objdir('make-build.conf')
kernconf = objdir(e('${KERNCONF}'))
kernconf_debug = objdir(e('${KERNCONF}-DEBUG'))
kernlog = objdir('logs/buildkernel')
kerndebuglog = objdir('logs/buildkernel-debug')
worldlog = objdir('logs/buildworld')
makejobs = None


def calculate_make_jobs():
    global makejobs

    jobs = sh_str('sysctl -n kern.smp.cpus')
    if not jobs:
        makejobs = 2
コード例 #31
0
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#####################################################################

import time
import hashlib
from dsl import load_profile_config
from utils import sh, e, objdir, info


config = load_profile_config()
tooldir = objdir('pkgtools')
pkgdir = objdir('packages')
pkgtoolslog = objdir('logs/build-pkgtools')
pkgversion = ''
sequence = ''


def read_repo_manifest():
    global pkgversion
    global sequence

    versions = []
    f = open(e("${BE_ROOT}/repo-manifest"))
    o = open(e("${BE_ROOT}/objs/world/etc/repo-manifest"), "w")

    for i in f:
コード例 #32
0
# POSSIBILITY OF SUCH DAMAGE.
#

import os
import ipaddress
import subprocess
import threading
import time
from dhcp.server import Server
from dhcp.lease import Lease
from dsl import load_file, load_profile_config
from utils import sh, sh_str, sh_spawn, info, objdir, e

load_profile_config()
load_file(e('${BUILD_ROOT}/tests/freenas/config.pyd'), os.environ)
destdir = objdir('tests')
venvdir = objdir('tests/venv')
isopath = objdir('${NAME}.iso')
tapdev = None
dhcp_server = None
ready = threading.Event()


def cleanup():
    sh('bhyvectl --destroy --vm=${VM_NAME}', nofail=True)


def setup_files():
    sh('mkdir -p ${destdir}')
    sh('truncate -s 8G ${destdir}/boot.img')
    sh('truncate -s 20G ${destdir}/hd1.img')