log.info('Skipping firmware on distro kernel');
return
(role_remote,) = ctx.cluster.only(role).remotes.keys()
+ machine_type = teuthology.get_system_type(role_remote)
+ if machine_type == 'rpm':
+ return
log.info('Installing linux-firmware on {role}...'.format(role=role))
role_remote.run(
args=[
],
)
-def download_deb(ctx, config):
+def download_kernel(ctx, config):
"""
Download a Debian kernel and copy the assocated linux image.
if src.find('distro') >= 0:
log.info('Installing newest kernel distro');
return
-
+ machine_type = teuthology.get_system_type(role_remote)
if src.find('/') >= 0:
# local deb
log.info('Copying kernel deb {path} to {role}...'.format(path=src,
stdin=f
)
procs[role_remote.name] = proc
-
else:
log.info('Downloading kernel {sha1} on {role}...'.format(sha1=src,
role=role))
+ if machine_type == 'rpm':
+ dist, ver = teuthology.get_system_type(role_remote, distro=True, version=True)
+ if '.' in ver:
+ ver = ver.split('.')[0]
+ ldist = '{dist}{ver}'.format(dist=dist, ver=ver)
+ _, rpm_url = teuthology.get_ceph_binary_url(
+ package='kernel',
+ sha1=src,
+ format='rpm',
+ flavor='basic',
+ arch='x86_64',
+ dist=ldist,
+ )
+
+ kernel_url = urlparse.urljoin(rpm_url, 'kernel.x86_64.rpm')
+ output, err_mess = StringIO(), StringIO()
+ role_remote.run(args=['sudo', 'yum', 'list', 'installed', 'kernel'], stdout=output, stderr=err_mess )
+ if src[0:7] in output.getvalue():
+ output.close()
+ err_mess.close()
+ continue
+ output.close()
+ err_mess.close()
+ proc = role_remote.run(args=['sudo', 'yum', 'install', '-y', kernel_url], wait=False)
+ procs[role_remote.name] = proc
+
+ #download_rpm_kernel(role_remote, kernel_url, src)
+ continue
+
larch, ldist = _find_arch_and_dist(ctx)
_, deb_url = teuthology.get_ceph_binary_url(
package='kernel',
(role_remote,) = ctx.cluster.only(role).remotes.keys()
if src.find('distro') >= 0:
log.info('Installing distro kernel on {role}...'.format(role=role))
- install_distro_kernel(role_remote)
+ install_kernel(role_remote)
continue
-
log.info('Installing kernel {src} on {role}...'.format(src=src,
role=role))
+ system_type = teuthology.get_system_type(role_remote)
+ if system_type == 'rpm':
+ install_kernel(role_remote, src)
+ continue
proc = role_remote.run(
args=[
# install the kernel deb
role_remote.run(args=['uname', '-r' ], stdout=output, stderr=err_mess )
current = output.getvalue().strip()
if system_type == 'rpm':
- role_remote.run(args=['sudo', 'yum', 'install', '-y', 'kernel' ], stdout=output, stderr=err_mess )
+ role_remote.run(args=['sudo', 'yum', 'install', '-y', 'kernel'], stdout=output, stderr=err_mess )
#reset stringIO output.
output, err_mess = StringIO(), StringIO()
role_remote.run(args=['rpm', '-q', 'kernel', '--last' ], stdout=output, stderr=err_mess )
- newest=output.getvalue().split()[0]
+ for kernel in output.getvalue().split():
+ if kernel.startswith('kernel'):
+ if 'ceph' not in kernel:
+ newest = kernel
if system_type == 'deb':
distribution = teuthology.get_system_type(role_remote, distro=True)
log.info('Not newest distro kernel. Curent: {cur} Expected: {new}'.format(cur=current, new=newest))
return True
-def install_distro_kernel(remote):
+
+def download_rpm_kernel(remote, url, sha1):
+ """
+ Install RPM kernel from URL.
+ """
+ output, err_mess = StringIO(), StringIO()
+ remote.run(args=['sudo', 'yum', 'list', 'installed', 'kernel'], stdout=output, stderr=err_mess )
+ if sha1[0:7] in output.getvalue():
+ return
+ remote.run(args=['sudo', 'yum', 'install', '-y', url], stdout=output, stderr=err_mess )
+
+def install_kernel(remote, sha1=None):
"""
RPM: Find newest kernel on the machine and update grub to use kernel + reboot.
DEB: Find newest kernel. Parse grub.cfg to figure out the entryname/subentry.
then modify 01_ceph_kernel to have correct entry + updategrub + reboot.
"""
+ if sha1:
+ short = sha1[0:7]
+ else:
+ short = None
system_type = teuthology.get_system_type(remote)
distribution = ''
if system_type == 'rpm':
output, err_mess = StringIO(), StringIO()
- remote.run(args=['rpm', '-q', 'kernel', '--last' ], stdout=output, stderr=err_mess )
- newest=output.getvalue().split()[0].split('kernel-')[1]
- log.info('Distro Kernel Version: {version}'.format(version=newest))
+ kern_out, kern_err = StringIO(), StringIO()
+ if short:
+ remote.run(args=['rpm', '-q', 'kernel' ], stdout=output, stderr=err_mess )
+ if short in output.getvalue():
+ for kernel in output.getvalue().split('\n'):
+ if short in kernel:
+ remote.run(args=['rpm', '-ql', kernel ], stdout=kern_out, stderr=kern_err )
+ for file in kern_out.getvalue().split('\n'):
+ if 'vmlinuz' in file:
+ newest = file.split('/boot/vmlinuz-')[1]
+ log.info('Kernel Version: {version}'.format(version=newest))
+ else:
+ raise 'Something went wrong kernel file was installed but version is missing'
+ else:
+ remote.run(args=['rpm', '-q', 'kernel', '--last' ], stdout=output, stderr=err_mess )
+ newest=output.getvalue().split()[0].split('kernel-')[1]
+ log.info('Distro Kernel Version: {version}'.format(version=newest))
update_grub_rpm(remote, newest)
remote.run( args=['sudo', 'shutdown', '-r', 'now'], wait=False )
output.close()
if need_install:
install_firmware(ctx, need_install)
- download_deb(ctx, need_install)
+ download_kernel(ctx, need_install)
install_and_reboot(ctx, need_install)
wait_for_reboot(ctx, need_version, timeout)