def upgrade_kernel_and_grub(do_reboot=False, log=True): """ updates the kernel and the grub config """ if log: log_yellow('upgrading kernel') with settings(hide('running', 'stdout')): sudo('unset UCF_FORCE_CONFFOLD; ' 'export UCF_FORCE_CONFFNEW=YES; ' 'ucf --purge /boot/grub/menu.lst; ' 'export DEBIAN_FRONTEND=noninteractive ; ' 'apt-get update; ' 'apt-get -o Dpkg::Options::="--force-confnew" --force-yes -fuy ' 'dist-upgrade') with settings(warn_only=True): if do_reboot: if log: log_yellow('rebooting host') reboot()
def bootstrap_jenkins_slave_centos7(instance): # ec2 hosts get their ip addresses using dhcp, we need to know the new # ip address of our box before we continue our provisioning tasks. # we load the state from disk, and store the ip in ec2_host# cloud_host = "%s@%s" % (instance.username, instance.ip_address) distro = instance.distro with settings(host_string=cloud_host, key_filename=instance.key_filename): install_os_updates(distribution='centos7') # make sure our umask is set to 022 fix_umask(instance.username) # ttys are tricky, lets make sure we don't need them disable_requiretty_on_sudoers() # when we sudo, we want to keep our original environment variables disable_env_reset_on_sudo() add_epel_yum_repository() install_centos_development_tools() # installs a bunch of required packages yum_install(packages=centos7_required_packages()) # installing the source for the centos kernel is a bit of an odd # process these days. yum_install_from_url( "http://vault.centos.org/7.1.1503/updates/Source/SPackages/" "kernel-3.10.0-229.11.1.el7.src.rpm", "non-available-kernel-src") # we want to be running the latest kernel before installing ZFS # so, lets reboot and make sure we do. with settings(warn_only=True): reboot() wait_for_ssh(instance.ip_address) # install the latest ZFS from testing add_zfs_yum_repository() yum_install_from_url( "http://archive.zfsonlinux.org/epel/zfs-release.el7.noarch.rpm", "zfs-release") install_zfs_from_testing_repository() # note: will reboot the host for us if selinux is disabled enable_selinux() wait_for_ssh(instance.ip_address) # these are likely to happen after a reboot with settings(host_string=cloud_host, key_filename=instance.key_filename): # brings up the firewall enable_firewalld_service() # we create a docker group ourselves, as we want to be part # of that group when the daemon first starts. create_docker_group() add_user_to_docker_group(distro) install_docker() # ubuntu uses dash which causes jenkins jobs to fail symlink_sh_to_bash(distro) # some flocker acceptance tests fail when we don't have # a know_hosts file sudo("mkdir -p /root/.ssh") sudo("touch /root/.ssh/known_hosts") # generate a id_rsa_flocker sudo("test -e $HOME/.ssh/id_rsa_flocker || ssh-keygen -N '' " "-f $HOME/.ssh/id_rsa_flocker") # and fix perms on /root/.ssh sudo("chmod -R 0600 /root/.ssh") # TODO: this may not be needed, as packaging is done on a docker img install_system_gem('fpm') systemd(service='docker', restart=True) systemd(service='nginx', start=True, unmask=True) # cache some docker images locally to speed up some of our tests for docker_image in local_docker_images(): cache_docker_image_locally(docker_image) # centos has a fairly old git, so we install the latest version # in every box. install_recent_git_from_source() add_usr_local_bin_to_path() # to use wheels, we want the latest pip update_system_pip_to_latest_pip() # cache the latest python modules and dependencies in the local # user cache git_clone('https://github.com/ClusterHQ/flocker.git', 'flocker') with cd('flocker'): run('pip install --quiet --user .') run('pip install --quiet ' '--user --process-dependency-links ".[dev]"') run('pip install --quiet --user python-subunit junitxml') # nginx is used during the acceptance tests, the VM built by # flocker provision will connect to the jenkins slave on p 80 # and retrieve the just generated rpm/deb file install_nginx(instance.username) # /etc/slave_config is used by the jenkins_slave plugin to # transfer files from the master to the slave create_etc_slave_config() # installs python-pypy onto /opt/python-pypy/2.6.1 and symlinks it # to /usr/local/bin/pypy install_python_pypy('2.6.1')