Allow kernel build to be specified from command line.
This change fixes a few glitches and adds functionality that:
- allow kernel builds to be explicitly specified via parameters,
- allow forced updates of image files,
- include socat in cuttlefish dependencies
- verbosely list transferred files.
Change-Id: I7b05d8f30eed9891c8b18e603c7cf29418c1a395
(cherry picked from commit d3e6aa7a449020f015f075d5966d8c2392d5f538)
diff --git a/deploy/cmdexec.py b/deploy/cmdexec.py
index 1d9bbbb..b14b7a7 100644
--- a/deploy/cmdexec.py
+++ b/deploy/cmdexec.py
@@ -41,7 +41,8 @@
Returns:
None
"""
- proc = Popen(['scp'].append(SSH_ARGS).append([source, '%s:%s' % (self._server, target)]),
+ LOG.info('Transferring file %s -> %s' % (source, target))
+ proc = Popen(['scp'] + SSH_ARGS + [source, '%s:%s' % (self._server, target)],
stdin=PIPE, stdout=PIPE, close_fds=True)
result = proc.wait()
if result != 0:
@@ -74,6 +75,7 @@
Returns:
None
"""
+ LOG.info('Copying file %s -> %s' % (source, target))
proc = Popen(['cp', source, target], stdin=PIPE, stdout=PIPE, close_fds=True)
result = proc.wait()
if result != 0:
diff --git a/deploy/config.py b/deploy/config.py
index a5e111c..5ccf485 100644
--- a/deploy/config.py
+++ b/deploy/config.py
@@ -24,6 +24,10 @@
"""Configure remote instance."""
try:
ssh_tgt = Target.for_remote_host(args.instance)
+ # Configure current user to allow them to use libvirt.
+ ssh_tgt.execute('sudo usermod -a -G libvirt ${USER}')
+ ssh_tgt.execute('newgrp libvirt')
+
# Give user and libvirt access rights to specified folder.
# Remote directory appears as 'no access rights' except for included
# users.
@@ -32,14 +36,12 @@
ssh_tgt.execute('sudo setfacl -m g:libvirt:rwx %s' % args.instance_folder)
ssh_tgt.execute('sudo setfacl -m u:libvirt-qemu:rwx %s' % args.instance_folder)
- # Configure current user to allow them to use libvirt.
- ssh_tgt.execute('sudo usermod -a -G libvirt ${USER}')
-
# Configure libvirt to allow qemu to connect to our sockets.
ssh_tgt.execute('sudo sed -i\'\' \''
's/[#\\s]*security_driver = ".*"\\s*$/security_driver = "none"/g'
'\' /etc/libvirt/qemu.conf')
ssh_tgt.execute('sudo service libvirtd restart')
+ ssh_tgt.execute('virsh net-create /usr/share/cuttlefish-common/network-abr0.xml')
finally:
pass
diff --git a/deploy/deploy.py b/deploy/deploy.py
index 315d8f3..fcc2114 100644
--- a/deploy/deploy.py
+++ b/deploy/deploy.py
@@ -17,15 +17,15 @@
parser.add_argument('--system_build', type=str, required=False,
default='latest',
help='Build number to fetch from Android Build server.')
- parser.add_argument('--configure', action='store_true',
- default=False,
- help='Configure remote server for cuttlefish.')
parser.add_argument('--system_branch', type=str, required=False,
default='git_oc-gce-dev',
help='Android Build branch providing system images.')
parser.add_argument('--system_target', type=str, required=False,
default='cf_x86_phone-userdebug',
help='Android Build target providing system images.')
+ parser.add_argument('--kernel_build', type=str, required=False,
+ default='latest',
+ help='Build number to fetch from Android Build server.')
parser.add_argument('--kernel_branch', type=str, required=False,
default='kernel-n-dev-android-gce-3.18-x86_64',
help='Android Build branch providing kernel images.')
@@ -43,6 +43,14 @@
parser.add_argument('--instance_folder', type=str, required=False,
default='/srv/cf',
help='Folder on the remote machine where images should be deployed.')
+ parser.add_argument('--force_update', type=str, required=False,
+ help='Comma separated list of artifacts to force update.')
+
+
+ def _to_build_id(self, selector):
+ if selector == 'latest':
+ return '--latest'
+ return '--bid='+selector
def execute(self, args):
@@ -57,9 +65,9 @@
loc_tgt = Target.for_localhost()
ssh_tgt = Target.for_remote_host(args.instance)
- build_selector = '--latest'
- if args.system_build != 'latest':
- build_selector = '--bid=' + args.system_build
+ system_build = self._to_build_id(args.system_build)
+ kernel_build = self._to_build_id(args.kernel_build)
+ force_update = args.force_update.split(',')
if not os.path.exists('system.img'):
if not os.path.exists(temp_image):
@@ -67,22 +75,21 @@
'/google/data/ro/projects/android/fetch_artifact '
'%s --branch=%s --target=%s '
'\'cf_x86_phone-img-*\' \'%s\'' %
- (build_selector, args.system_branch, args.system_target, temp_image))
+ (system_build, args.system_branch, args.system_target, temp_image))
loc_tgt.execute('unzip -u \'%s\' system.img' % temp_image)
- if not os.path.exists('kernel'):
- loc_tgt.execute(
- '/google/data/ro/projects/android/fetch_artifact '
- '--latest --branch=%s --target=%s '
- 'bzImage kernel' %
- (args.kernel_branch, args.kernel_target))
-
if not os.path.exists('ramdisk.img'):
loc_tgt.execute(
'/google/data/ro/projects/android/fetch_artifact '
'%s --branch=%s --target=%s ramdisk.img' %
- (build_selector, args.system_branch, args.system_target))
+ (system_build, args.system_branch, args.system_target))
+ if not os.path.exists('kernel'):
+ loc_tgt.execute(
+ '/google/data/ro/projects/android/fetch_artifact '
+ '%s --branch=%s --target=%s '
+ 'bzImage kernel' %
+ (kernel_build, args.kernel_branch, args.kernel_target))
# Give user and libvirt access rights to specified folder.
# Remote directory appears as 'no access rights' except for included
@@ -99,10 +106,16 @@
'system.img'
]
for file_name in upload_list:
- out = ssh_tgt.execute('test -f %s/%s; echo $?' % (target_dir, file_name))
- if out[0] == '1':
+ update = file_name in force_update
+
+ if not update:
+ out = ssh_tgt.execute('test -f %s/%s; echo $?' % (target_dir, file_name))
+ update = out[0] == '1'
+
+ if update:
ssh_tgt.copy(file_name, target_dir)
+ ssh_tgt.execute('cp /usr/share/cuttlefish-common/gce_ramdisk.img %s' % target_dir)
ssh_tgt.execute('setfacl -m g:libvirt:rw %s/*' % target_dir)
ssh_tgt.execute('setfacl -m u:libvirt-qemu:rw %s/*' % target_dir)