
We don't really need the SDK installer in the published output, for two reasons: 1) The directory produced is for the consumption of devtool sdk-update, and the installer isn't used by that at all 2) It wouldn't really make sense to point users at the update directory to download the SDK installer because it contains a bunch of things that aren't meant for manual download, so it wouldn't be very tidy. Leaving the file present can mislead you into thinking the opposite of both of the above. (From OE-Core rev: a9ec72b7897ffc0b901c1ccbcbe3cabbc7ac41ee) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
5.0 KiB
Executable File
#!/usr/bin/env python
OpenEmbedded SDK publishing tool
oe-publish-sdk publish
: extensible SDK to publish (path to the installer shell script)
: local or remote location which servers as an SDK update server
e.g.
oe-publish-sdk /path/to/sdk-ext.sh /mnt/poky/sdk-ext
oe-publish-sdk /path/to/sdk-ext.sh user@host:/opt/poky/sdk-ext
import sys import os import argparse import glob import re import subprocess import logging import shutil import errno
scripts_path = os.path.dirname(os.path.realpath(file)) lib_path = scripts_path + '/lib' sys.path = sys.path + [lib_path] import scriptutils import argparse_oe logger = scriptutils.logger_create('sdktool')
def mkdir(d): try: os.makedirs(d) except OSError as e: if e.errno != errno.EEXIST: raise e
def publish(args): logger.debug("In publish function") target_sdk = args.sdk destination = args.dest logger.debug("target_sdk = %s, update_server = %s" % (target_sdk, destination)) sdk_basename = os.path.basename(target_sdk)
# Ensure the SDK exists
if not os.path.exists(target_sdk):
logger.error("%s doesn't exist" % target_sdk)
return -1
if ':' in destination:
is_remote = True
host, destdir = destination.split(':')
dest_sdk = os.path.join(destdir, sdk_basename)
else:
is_remote = False
dest_sdk = os.path.join(destination, sdk_basename)
destdir = destination
# Making sure the directory exists
logger.debug("Making sure the destination directory exists")
if not is_remote:
mkdir(destination)
else:
cmd = "ssh %s 'mkdir -p %s'" % (host, destdir)
ret = subprocess.call(cmd, shell=True)
if ret != 0:
logger.error("Making directory %s on %s failed" % (destdir, host))
return ret
# Copying the SDK to the destination
logger.info("Copying the SDK to destination")
if not is_remote:
if os.path.exists(dest_sdk):
os.remove(dest_sdk)
if (os.stat(target_sdk).st_dev == os.stat(destination).st_dev):
os.link(target_sdk, dest_sdk)
else:
shutil.copy(target_sdk, dest_sdk)
else:
cmd = "scp %s %s" % (target_sdk, destination)
ret = subprocess.call(cmd, shell=True)
if ret != 0:
logger.error("scp %s %s failed" % (target_sdk, destination))
return ret
# Unpack the SDK
logger.info("Unpacking SDK")
cleanupfiles = [dest_sdk, os.path.join(destdir, 'ext-sdk-prepare.py')]
if not is_remote:
cmd = "sh %s -n -y -d %s" % (dest_sdk, destination)
ret = subprocess.call(cmd, shell=True)
if ret == 0:
logger.info('Successfully unpacked %s to %s' % (dest_sdk, destination))
for cleanupfile in cleanupfiles:
os.remove(cleanupfile)
else:
logger.error('Failed to unpack %s to %s' % (dest_sdk, destination))
return ret
else:
cmd = "ssh %s 'sh %s -n -y -d %s && rm -f %s'" % (host, dest_sdk, destdir, ' '.join(cleanupfiles))
ret = subprocess.call(cmd, shell=True)
if ret == 0:
logger.info('Successfully unpacked %s to %s' % (dest_sdk, destdir))
else:
logger.error('Failed to unpack %s to %s' % (dest_sdk, destdir))
return ret
# Setting up the git repo
if not is_remote:
cmd = 'set -e; mkdir -p %s/layers; cd %s/layers; if [ ! -e .git ]; then git init .; mv .git/hooks/post-update.sample .git/hooks/post-update; fi; git add -A .; git commit -q -m "init repo" || true; git update-server-info' % (destination, destination)
else:
cmd = "ssh %s 'set -e; mkdir-p %s/layers; cd %s/layers; if [ ! -e .git ]; then git init .; mv .git/hooks/post-update.sample .git/hooks/post-update; fi; git add -A .; git commit -q -m \"init repo\" || true; git update-server-info'" % (host, destdir, destdir)
ret = subprocess.call(cmd, shell=True)
if ret == 0:
logger.info('SDK published successfully')
else:
logger.error('Failed to set up layer git repo')
return ret
def main(): parser = argparse_oe.ArgumentParser(description="OpenEmbedded development tool", epilog="Use %(prog)s --help to get help on a specific command") parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true') parser.add_argument('-q', '--quiet', help='Print only errors', action='store_true')
parser.add_argument('sdk', help='Extensible SDK to publish')
parser.add_argument('dest', help='Destination to publish SDK to')
parser.set_defaults(func=publish)
args = parser.parse_args()
if args.debug:
logger.setLevel(logging.DEBUG)
elif args.quiet:
logger.setLevel(logging.ERROR)
ret = args.func(args)
return ret
if name == "main": try: ret = main() except Exception: ret = 1 import traceback traceback.print_exc(5) sys.exit(ret)