Ejemplo n.º 1
0
def main(args):
    print 'connecting to the Controller...'
    controller = soloutils.connect_controller(await=True)

    controller_version = soloutils.controller_versions(controller)['version']
    if LooseVersion('1.2.0') > LooseVersion(controller_version):
        print 'error: expecting version to be >= 1.2.0'
        print 'your Controller version: {}'.format(controller_version)
        print 'please flash your Controller with a newer version to run this command.'
        print ''
        print '    solo update solo latest'
        print '    solo update controller latest'
        sys.exit(1)

    print ''
    if args['--password']:
        print 'connecting to encrypted wifi network.'
        credentials = 'ssid="{ssid}"\npsk="{password}"'.format(
            ssid=args['--name'], password=args['--password'])
    else:
        print 'connecting to wifi network with NO password.'
        credentials = 'ssid="{ssid}"\nkey_mgmt=NONE'.format(
            ssid=args['--name'])
    print '(your computer may disconnect from Solo\'s network.)'

    controller = soloutils.connect_controller(await=True)
    code = soloutils.command_blind(controller,
                                   SCRIPT.format(credentials=credentials))
    time.sleep(8)
    controller.close()

    print ''
    print 'please manually reconnect to Solo\'s network once it becomes available.'
    print 'it may take up to 30s to a reconnect to succeed.'
    controller = soloutils.connect_controller(await=True, silent=True)
    print ''
    code = soloutils.command_stream(controller, 'cat /log/setupwifi.log')
    controller.close()

    try:
        drone = soloutils.connect_solo(await=False)
        print '(resetting Solo\'s DNS...',
        sys.stdout.flush()
        soloutils.command(drone,
                          'ifdown wlan0; ifdown -a; ifup -a; ifup wlan0')
        time.sleep(4)
        drone.close()
        print ' done.)'
    except:
        pass

    sys.exit(code)
Ejemplo n.º 2
0
def main(args):
    print 'connecting to the Controller...'
    controller = soloutils.connect_controller(await=True)

    controller_version = soloutils.controller_versions(controller)['version']
    if LooseVersion('1.2.0') > LooseVersion(controller_version):
        print 'error: expecting version to be >= 1.2.0'
        print 'your Controller version: {}'.format(controller_version)
        print 'please flash your Controller with a newer version to run this command.'
        print ''
        print '    solo update solo latest'
        print '    solo update controller latest'
        sys.exit(1)

    print ''
    if args['--password']:
        print 'connecting to encrypted wifi network.'
        credentials = 'ssid="{ssid}"\npsk="{password}"'.format(ssid=args['--name'], password=args['--password'])
    else:
        print 'connecting to wifi network with NO password.'
        credentials = 'ssid="{ssid}"\nkey_mgmt=NONE'.format(ssid=args['--name'])
    print '(your computer may disconnect from Solo\'s network.)'

    controller = soloutils.connect_controller(await=True)
    code = soloutils.command_blind(controller, SCRIPT.format(credentials=credentials))
    time.sleep(8)
    controller.close()

    print ''
    print 'please manually reconnect to Solo\'s network once it becomes available.'
    print 'it may take up to 30s to a reconnect to succeed.'
    controller = soloutils.connect_controller(await=True, silent=True)
    print ''
    code = soloutils.command_stream(controller, 'cat /log/setupwifi.log')
    controller.close()

    try:
        drone = soloutils.connect_solo(await=False)
        print '(resetting Solo\'s DNS...',
        sys.stdout.flush()
        soloutils.command(drone, 'ifdown wlan0; ifdown -a; ifup -a; ifup wlan0')
        time.sleep(4)
        drone.close()
        print ' done.)'
    except:
        pass

    sys.exit(code)
Ejemplo n.º 3
0
def solo_versions(solo):
    code, solo_str, stderr = soloutils.command(solo, 'cat /VERSION')
    version, ref = solo_str.strip().split()
    return {
        "version": version,
        "ref": ref,
    }
Ejemplo n.º 4
0
def solo_versions(solo):
    code, solo_str, stderr = soloutils.command(solo, 'cat /VERSION')
    version, ref = solo_str.strip().split()
    return {
        "version": version,
        "ref": ref,
    }
Ejemplo n.º 5
0
def controller_versions(controller):
    code, controller_str, stderr = soloutils.command(controller, 'cat /VERSION')
    version, ref = controller_str.strip().split()
    return {
        "version": version,
        "ref": ref,
    }
Ejemplo n.º 6
0
def push(solo, scp, force):
    if not force:
        code, stdout, stderr = soloutils.command(
            solo, 'md5sum /tmp/solo-script.tar.gz')
        md5sum = next(iter((stdout or '').split()), None)
        localmd5sum = hashlib.md5(open(SCRIPT_FILENAME,
                                       'rb').read()).hexdigest()

        if code == 0 and md5sum == localmd5sum:
            print 'script bundle already up to date.'
            return 0

    print 'uploading script bundle...'
    scp.put(SCRIPT_FILENAME, '/tmp')
    return soloutils.command_stream(
        solo, '''
set -e
rm -rf /log/solo-script || true
mkdir /log/solo-script
cd /log/solo-script
tar -xvf /tmp/solo-script.tar.gz
virtualenv --clear env || virtualenv env
cp -rf /usr/lib/python2.7/site-packages/greenlet* env/lib/python2.7/site-packages/ || true
source ./env/bin/activate
pip install --no-index -U ./wheelhouse/* 
''')
Ejemplo n.º 7
0
def solo_versions__monkey_patch(solo):
    code, solo_str, stderr = soloutils.command(solo, 'cat /VERSION')
    # ^ Same as comment above ^
    version, ref, _name, _ = solo_str.strip().split('\n')
    return {
        "version": version,
        "ref": ref,
    }
Ejemplo n.º 8
0
def controller_versions(controller):
    code, controller_str, stderr = soloutils.command(controller,
                                                     'cat /VERSION')
    version, ref = controller_str.strip().split()
    return {
        "version": version,
        "ref": ref,
    }
Ejemplo n.º 9
0
def pixhawk_versions(solo):
    code, pixhawk_str, stderr = soloutils.command(solo, 'cat /PIX_VERSION')
    version, apm_ref, px4firmware_ref, px4nuttx_ref = pixhawk_str.strip().split()
    return {
        "version": version,
        "apm_ref": apm_ref,
        "px4firmware_ref": px4firmware_ref,
        "px4nuttx_ref": px4nuttx_ref,
    }
Ejemplo n.º 10
0
def pixhawk_versions(solo):
    code, pixhawk_str, stderr = soloutils.command(solo, 'cat /PIX_VERSION')
    version, apm_ref, px4firmware_ref, px4nuttx_ref = pixhawk_str.strip(
    ).split()
    return {
        "version": version,
        "apm_ref": apm_ref,
        "px4firmware_ref": px4firmware_ref,
        "px4nuttx_ref": px4nuttx_ref,
    }
Ejemplo n.º 11
0
def controller_versions__monkey_patch(controller):
    code, controller_str, stderr = soloutils.command(controller,
                                                     'cat /VERSION')
    # Have to add two unpacking variables and split on newline,
    # as the `/VERSION` file now contains 4 lines instead of one line with 2 tokens separated by a space
    version, ref, _name, _ = controller_str.strip().split('\n')
    return {
        "version": version,
        "ref": ref,
    }
Ejemplo n.º 12
0
def main(args):
    rsa = os.path.join(expanduser('~'), '.ssh/id_rsa.pub')
    dsa = os.path.join(expanduser('~'), '.ssh/id_dsa.pub')
    if not (os.path.isfile(rsa) or os.path.isfile(dsa)):
        print 'no $HOME/.ssh/id_rsa.pub or $HOME/.ssh/id_dsa.pub file found.'
        print 'run ssh-keygen and try again.'
        sys.exit(1)

    if os.path.isfile(rsa):
        key = open(rsa).read()
    else:
        key = open(dsa).read()

    controller = soloutils.connect_controller(await=True)
    solo = soloutils.connect_solo(await=True)

    soloutils.command(solo, 'test -d .ssh || mkdir -m 0700 .ssh ; echo $\'' + key + '\' >> ~/.ssh/authorized_keys')
    soloutils.command(controller, 'test -d .ssh || mkdir -m 0700 .ssh ; echo $\'' + key + '\' >> ~/.ssh/authorized_keys')
    
    print 'provisioned.'
Ejemplo n.º 13
0
def gimbal_versions(solo):
    code, gimbal_str, stderr = soloutils.command(solo, 'cat /AXON_VERSION')
    try:
        version, = gimbal_str.strip().split()
        return {
            "version": version,
            "connected": True,
        }
    except:
        return {
            "connected": False,
        }
Ejemplo n.º 14
0
def gimbal_versions(solo):
    code, gimbal_str, stderr = soloutils.command(solo, 'cat /AXON_VERSION')
    try:
        version, = gimbal_str.strip().split()
        return {
            "version": version,
            "connected": True,
        }
    except:
        return {
            "connected": False,
        }
Ejemplo n.º 15
0
def main(args):

    os.makedirs('./drone')
    os.makedirs('./controller')

    print 'connecting to Solo...'
    solo = soloutils.connect_solo(await=True)
    code, stdout, stderr = soloutils.command(solo, 'ls -p /log | grep -v /')
    files = stdout.strip().split()

    os.chdir('./drone')
    scp = SCPClient(solo.get_transport())
    count = 0
    for item in files:
        print 'file {} of {}...'.format(count, len(files))
        scp.get('/log/' + item)
        count += 1
    os.chdir('..')

    solo.close()

    print 'connecting to Controller...'
    controller = soloutils.connect_controller(await=True)
    code, stdout, stderr = soloutils.command(controller,
                                             'ls -p /log | grep -v /')
    files = stdout.strip().split()

    os.chdir('./controller')
    scp = SCPClient(controller.get_transport())
    count = 0
    for item in files:
        print 'file {} of {}...'.format(count, len(files))
        scp.get('/log/' + item)
        count += 1
    os.chdir('..')

    controller.close()

    print 'logs download complete.'
Ejemplo n.º 16
0
def main(args):

    os.makedirs('./drone')
    os.makedirs('./controller')

    print 'connecting to Solo...'
    solo = soloutils.connect_solo(await=True)
    code, stdout, stderr = soloutils.command(solo, 'ls -p /log | grep -v /')
    files = stdout.strip().split()

    os.chdir('./drone')
    scp = SCPClient(solo.get_transport())
    count = 0
    for item in files:
    	print 'file {} of {}...'.format(count, len(files))
    	scp.get('/log/' + item)
    	count += 1
    os.chdir('..')

    solo.close()

    print 'connecting to Controller...'
    controller = soloutils.connect_controller(await=True)
    code, stdout, stderr = soloutils.command(controller, 'ls -p /log | grep -v /')
    files = stdout.strip().split()

    os.chdir('./controller')
    scp = SCPClient(controller.get_transport())
    count = 0
    for item in files:
        print 'file {} of {}...'.format(count, len(files))
        scp.get('/log/' + item)
        count += 1
    os.chdir('..')

    controller.close()

    print 'logs download complete.'
Ejemplo n.º 17
0
def main(args):
    print 'connecting to Solo...'
    solo = soloutils.connect_solo(await=True)

    code, stdout, stderr = soloutils.command(solo, 'ls -p /log | grep -v /')
    files = stdout.strip().split()

    scp = SCPClient(solo.get_transport())
    count = 0
    for item in files:
        print 'file {} of {}...'.format(count, len(files))
        scp.get('/log/' + item)
        count += 1

    print 'complete.'
Ejemplo n.º 18
0
def main(args):
    print 'connecting to Solo...'
    solo = soloutils.connect_solo(await=True)

    code, stdout, stderr = soloutils.command(solo, 'ls -p /log | grep -v /')
    files = stdout.strip().split()

    scp = SCPClient(solo.get_transport())
    count = 0
    for item in files:
    	print 'file {} of {}...'.format(count, len(files))
    	scp.get('/log/' + item)
    	count += 1

    print 'complete.'
Ejemplo n.º 19
0
def main(args):
    rsa = os.path.join(expanduser('~'), '.ssh/id_rsa.pub')
    dsa = os.path.join(expanduser('~'), '.ssh/id_dsa.pub')
    if not (os.path.isfile(rsa) or os.path.isfile(dsa)):
        print 'no $HOME/.ssh/id_rsa.pub or $HOME/.ssh/id_dsa.pub file found.'
        print 'run ssh-keygen and try again.'
        sys.exit(1)

    if os.path.isfile(rsa):
        key = open(rsa).read()
    else:
        key = open(dsa).read()

    controller = soloutils.connect_controller(await=True)
    solo = soloutils.connect_solo(await=True)

    soloutils.command(
        solo, 'test -d .ssh || mkdir -m 0700 .ssh ; echo $\'' + key +
        '\' >> ~/.ssh/authorized_keys')
    soloutils.command(
        controller, 'test -d .ssh || mkdir -m 0700 .ssh ; echo $\'' + key +
        '\' >> ~/.ssh/authorized_keys')

    print 'provisioned.'
Ejemplo n.º 20
0
def run(solo, scp):
    code, stdout, stderr = soloutils.command(solo, 'pip --version')
    if code != 0:
        print 'installing pip... ',
        scp.put(os.path.join(os.path.dirname(__file__), 'lib/ez_setup.py'),
                '/tmp')
        scp.put(
            os.path.join(os.path.dirname(__file__),
                         'lib/setuptools-18.7.1.zip'), '/tmp')
        code, stdout, stderr = soloutils.command(
            solo, 'cd /tmp; python ez_setup.py --to-dir=/tmp')
        if code:
            print ''
            print 'Error in installing pip:'
            print stdout
            print stderr
            return 1
        print 'done.'

    code, stdout, stderr = soloutils.command(solo, 'python -c "import wheel"')
    if code != 0:
        print 'installing wheel... ',
        scp.put(
            os.path.join(os.path.dirname(__file__), 'lib/wheel-0.26.0.tar.gz'),
            '/tmp')
        code, stdout, stderr = soloutils.command(
            solo, 'pip install /tmp/wheel-0.26.0.tar.gz')
        if code:
            print ''
            print 'Error in installing wheel:'
            print stdout
            print stderr
            return 1
        print 'done.'

    code, stdout, stderr = soloutils.command(solo, 'virtualenv --version')
    if code != 0:
        print 'installing virtualenv... ',
        scp.put(
            os.path.join(os.path.dirname(__file__),
                         'lib/virtualenv-13.1.2.tar.gz'), '/tmp')
        code, stdout, stderr = soloutils.command(
            solo, 'pip install /tmp/virtualenv-13.1.2.tar.gz')
        if code:
            print ''
            print 'Error in installing virtualenv:'
            print stdout
            print stderr
            return 1
        print 'done.'

    return 0
Ejemplo n.º 21
0
def push(solo, scp, force):
    if not force:
        code, stdout, stderr = soloutils.command(solo, 'md5sum /tmp/solo-script.tar.gz')
        md5sum = next(iter((stdout or '').split()), None)
        localmd5sum = hashlib.md5(open(SCRIPT_FILENAME, 'rb').read()).hexdigest()
        
        if code == 0 and md5sum == localmd5sum:
            print 'script bundle already up to date.'
            return 0

    print 'uploading script bundle...'
    scp.put(SCRIPT_FILENAME, '/tmp')
    return soloutils.command_stream(solo, '''
set -e
rm -rf /log/solo-script || true
mkdir /log/solo-script
cd /log/solo-script
tar -xvf /tmp/solo-script.tar.gz
virtualenv --clear env || virtualenv env
cp -rf /usr/lib/python2.7/site-packages/greenlet* env/lib/python2.7/site-packages/ || true
source ./env/bin/activate
pip install --no-index -U ./wheelhouse/* 
''')
Ejemplo n.º 22
0
def run(solo, scp):
    code, stdout, stderr = soloutils.command(solo, 'pip --version')
    if code != 0:
        print 'installing pip... ',
        scp.put(os.path.join(os.path.dirname(__file__), 'lib/ez_setup.py'), '/tmp')
        scp.put(os.path.join(os.path.dirname(__file__), 'lib/setuptools-18.7.1.zip'), '/tmp')
        code, stdout, stderr = soloutils.command(solo, 'cd /tmp; python ez_setup.py --to-dir=/tmp')
        if code:
            print ''
            print 'Error in installing pip:'
            print stdout
            print stderr
            return 1
        print 'done.'

    code, stdout, stderr = soloutils.command(solo, 'python -c "import wheel"')
    if code != 0:
        print 'installing wheel... ',
        scp.put(os.path.join(os.path.dirname(__file__), 'lib/wheel-0.26.0.tar.gz'), '/tmp')
        code, stdout, stderr = soloutils.command(solo, 'pip install /tmp/wheel-0.26.0.tar.gz')
        if code:
            print ''
            print 'Error in installing wheel:'
            print stdout
            print stderr
            return 1
        print 'done.'

    code, stdout, stderr = soloutils.command(solo, 'virtualenv --version')
    if code != 0:
        print 'installing virtualenv... ',
        scp.put(os.path.join(os.path.dirname(__file__), 'lib/virtualenv-13.1.2.tar.gz'), '/tmp')
        code, stdout, stderr = soloutils.command(solo, 'pip install /tmp/virtualenv-13.1.2.tar.gz')
        if code:
            print ''
            print 'Error in installing virtualenv:'
            print stdout
            print stderr
            return 1
        print 'done.'

    return 0
Ejemplo n.º 23
0
def gimbal_versions(solo):
    code, gimbal_str, stderr = soloutils.command(solo, 'cat /AXON_VERSION')
    version, = gimbal_str.strip().split()
    return {
        "version": version,
    }
Ejemplo n.º 24
0
def gimbal_versions(solo):
    code, gimbal_str, stderr = soloutils.command(solo, 'cat /AXON_VERSION')
    version, = gimbal_str.strip().split()
    return {
        "version": version,
    }