Merge remote-tracking branch 'origin/master' into merge-branch

Change-Id: Ibab1bb95521292ae818bd91f7073c3749a2cc0cb
This commit is contained in:
Ian Wienand 2016-11-18 13:53:56 +11:00
commit 7d5afecfd9
40 changed files with 275 additions and 138 deletions

View File

@ -1 +0,0 @@
include README.rst

View File

@ -153,6 +153,12 @@ for i in $(find $ELEMENTS_DIR -type f \
fi fi
fi fi
# check that environment files don't "set -x"
if [[ "$i" =~ (environment.d) ]]; then
if grep -q "set -x" $i; then
error "Environment file $i should not set tracing"
fi
fi
# check that sudo calls in phases run outside the chroot look # check that sudo calls in phases run outside the chroot look
# "safe"; meaning that they seem to operate within the chroot # "safe"; meaning that they seem to operate within the chroot

View File

@ -1,9 +1 @@
#!/bin/bash
if [ "${DIB_DEBUG_TRACE:-0}" -gt 0 ]; then
set -x
fi
set -eu
set -o pipefail
export DIB_EXTLINUX=1 export DIB_EXTLINUX=1

View File

@ -9,10 +9,10 @@ set -o pipefail
[ -n "$ARCH" ] [ -n "$ARCH" ]
[ -n "$TARGET_ROOT" ] [ -n "$TARGET_ROOT" ]
if [ 'amd64' = "$ARCH" ] ; then if [[ "amd64 x86_64" =~ "$ARCH" ]]; then
ARCH="x86_64" ARCH="x86_64"
else else
echo 'centos7 root element only support the amd64 $ARCH value.' echo 'centos7 root element only support the x86_64 $ARCH value.'
exit 1 exit 1
fi fi

View File

@ -10,3 +10,4 @@ net-tools:
cloud-init: cloud-init:
cloud-utils: cloud-utils:
cloud-initramfs-growroot: cloud-initramfs-growroot:
dialog:

View File

@ -15,7 +15,13 @@ fi
DIB_INIT_SYSTEM=$(dib-init-system) DIB_INIT_SYSTEM=$(dib-init-system)
if [ "$DIB_INIT_SYSTEM" == "upstart" ]; then if [ "$DIB_INIT_SYSTEM" == "upstart" ]; then
install -D -g root -o root -m 0755 ${SCRIPTDIR}/dhcp-all-interfaces.conf /etc/init/dhcp-all-interfaces.conf if [ -e "/etc/redhat-release" ] ; then
# the init system is upstart but networking is using sysv compatabiliy (i.e. Centos/RHEL 6)
install -D -g root -o root -m 0755 ${SCRIPTDIR}/dhcp-all-interfaces.init /etc/init.d/dhcp-all-interfaces
chkconfig dhcp-all-interfaces on
else
install -D -g root -o root -m 0755 ${SCRIPTDIR}/dhcp-all-interfaces.conf /etc/init/dhcp-all-interfaces.conf
fi
elif [ "$DIB_INIT_SYSTEM" == "systemd" ]; then elif [ "$DIB_INIT_SYSTEM" == "systemd" ]; then
install -D -g root -o root -m 0755 ${SCRIPTDIR}/dhcp-interface@.service /usr/lib/systemd/system/dhcp-interface@.service install -D -g root -o root -m 0755 ${SCRIPTDIR}/dhcp-interface@.service /usr/lib/systemd/system/dhcp-interface@.service
install -D -g root -o root -m 0644 ${SCRIPTDIR}/dhcp-all-interfaces-udev.rules /etc/udev/rules.d/99-dhcp-all-interfaces.rules install -D -g root -o root -m 0644 ${SCRIPTDIR}/dhcp-all-interfaces-udev.rules /etc/udev/rules.d/99-dhcp-all-interfaces.rules

View File

@ -6,6 +6,7 @@
# Default-Start: S # Default-Start: S
# Default-Stop: 0 6 # Default-Stop: 0 6
# X-Start-Before: networking # X-Start-Before: networking
# chkconfig: 3 9 50
# Short-Description: Autodetect network interfaces # Short-Description: Autodetect network interfaces
# Description: Autodetect network interfaces during boot and configure them for DHCP # Description: Autodetect network interfaces during boot and configure them for DHCP
### END INIT INFO ### END INIT INFO

View File

@ -14,7 +14,12 @@ PATH=/sbin:$PATH
if [ -d "/etc/network" ]; then if [ -d "/etc/network" ]; then
CONF_TYPE="eni" CONF_TYPE="eni"
elif [ -d "/etc/sysconfig/network-scripts/" ]; then elif [ -d "/etc/sysconfig/network-scripts/" ]; then
CONF_TYPE="netscripts" CONF_TYPE="rhel-netscripts"
SCRIPTS_PATH="/etc/sysconfig/network-scripts/"
elif [ -d "/etc/sysconfig/network/" ]; then
# SUSE network scripts location
CONF_TYPE="suse-netscripts"
SCRIPTS_PATH="/etc/sysconfig/network/"
else else
echo "Unsupported network configuration type!" echo "Unsupported network configuration type!"
exit 1 exit 1
@ -42,8 +47,10 @@ function enable_interface() {
serialize_me serialize_me
if [ "$CONF_TYPE" == "eni" ]; then if [ "$CONF_TYPE" == "eni" ]; then
printf "auto $interface\niface $interface inet dhcp\n\n" >>$ENI_FILE printf "auto $interface\niface $interface inet dhcp\n\n" >>$ENI_FILE
elif [ "$CONF_TYPE" == "netscripts" ]; then elif [ "$CONF_TYPE" == "rhel-netscripts" ]; then
printf "DEVICE=\"$interface\"\nBOOTPROTO=\"dhcp\"\nONBOOT=\"yes\"\nTYPE=\"Ethernet\"" >"/etc/sysconfig/network-scripts/ifcfg-$interface" printf "DEVICE=\"$interface\"\nBOOTPROTO=\"dhcp\"\nONBOOT=\"yes\"\nTYPE=\"Ethernet\"" >"${SCRIPTS_PATH}ifcfg-$interface"
elif [ "$CONF_TYPE" == "suse-netscripts" ]; then
printf "BOOTPROTO=\"dhcp\"\nSTARTMODE=\"auto\"" >"${SCRIPTS_PATH}ifcfg-$interface"
fi fi
echo "Configured $1" echo "Configured $1"
@ -51,8 +58,8 @@ function enable_interface() {
function config_exists() { function config_exists() {
local interface=$1 local interface=$1
if [ "$CONF_TYPE" == "netscripts" ]; then if [[ "$CONF_TYPE" =~ "netscripts" ]]; then
if [ -f "/etc/sysconfig/network-scripts/ifcfg-$interface" ]; then if [ -f "${SCRIPTS_PATH}ifcfg-$interface" ]; then
return 0 return 0
fi fi
else else

View File

@ -3,6 +3,7 @@ Description=Ironic Python Agent
After=network-online.target After=network-online.target
[Service] [Service]
ExecStartPre=/usr/sbin/modprobe vfat
ExecStart=/usr/local/bin/ironic-python-agent ExecStart=/usr/local/bin/ironic-python-agent
Restart=always Restart=always
RestartSec=30s RestartSec=30s

View File

@ -1,5 +1,3 @@
#!/bin/bash
#
# Copyright 2014 Hewlett-Packard Development Company, L.P. # Copyright 2014 Hewlett-Packard Development Company, L.P.
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may # Licensed under the Apache License, Version 2.0 (the "License"); you may
@ -15,11 +13,5 @@
# under the License. # under the License.
# #
if [ ${DIB_DEBUG_TRACE:-0} -gt 0 ]; then
set -x
fi
set -eu
set -o pipefail
export DIB_MANIFEST_IMAGE_DIR=${DIB_MANIFEST_IMAGE_DIR:-/etc/dib-manifests} export DIB_MANIFEST_IMAGE_DIR=${DIB_MANIFEST_IMAGE_DIR:-/etc/dib-manifests}
export DIB_MANIFEST_SAVE_DIR=${DIB_MANIFEST_SAVE_DIR:-${IMAGE_NAME}.d/} export DIB_MANIFEST_SAVE_DIR=${DIB_MANIFEST_SAVE_DIR:-${IMAGE_NAME}.d/}

View File

@ -1,9 +0,0 @@
#!/bin/bash
if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then
set -x
fi
set -eu
set -o pipefail
rm -rf /tmp/grub

View File

@ -6,14 +6,3 @@ traceroute:
which: which:
gettext: gettext:
phase: pre-install.d phase: pre-install.d
# these are being installed to satisfy the dependencies of grub2. See
# 15-remove-grub for more details
grub2-tools:
phase: pre-install.d
os-prober:
phase: pre-install.d
redhat-lsb-core:
phase: pre-install.d
system-logos:
phase: pre-install.d

View File

@ -1,47 +0,0 @@
#!/bin/bash
if [ "${DIB_DEBUG_TRACE:-0}" -gt 0 ]; then
set -x
fi
set -eu
set -o pipefail
# grub2 isn't available on rhel6/centos6; they are setup to use
# extlinux. skip this
# you would think we could match on $DISTRO or something else; but
# we can't because the rhel/centos elements are a bit mixed up;
# centos-minimal for example sets distro to "centos". so the best
# check is just for the original "grub-install" script
if [ -f /sbin/grub-install ]; then
exit 0
fi
# remove grub2 package. As described in
# elements/ubuntu/pre-install.d/00-remove-grub; the grub post-kernel
# install hook will barf if the block device can't be found (as
# happens in a chroot).
#
# XXX : it is not clear this is necessary for fedora/centos7 and it's
# install hooks. Investigation is required.
if rpm -q grub2; then
install-packages -e grub-pc
fi
# now configure things to re-install grub at the end. We don't want
# to rely on vm/finalise.d/51-bootloader to simply reinstall the
# package via the package-manager, because at that point (during
# finalise) the build-time yum-cache has been unmounted (hence the
# local-cache looks empty) and yum may try to repopulate the
# local-cache with all the grub2 dependencies. This is slow, and
# potentially fills up the disk.
#
# XXX : At this point, keepcache=0 *should* probably be set for
# yum/dnf. We have not standarised/documented that this will be done,
# however. This would *probably* stop dependencies being populated
# into the cache. We could investigate this, and possibly remove this
# all together if we standardise some of these behaviours.
# So we download the latest grub2 package and setup the install script
# to just install the single-package, which will be called later by
# vm/finalise.d/51-bootloader
install-packages -d /tmp/grub grub-pc
echo "rpm -i /tmp/grub/*.rpm" > /tmp/grub/install

View File

@ -131,6 +131,8 @@ case "${REG_METHOD:-}" in
rpm -Uvh "$REG_SAT_URL/pub/katello-ca-consumer-latest.noarch.rpm" || true rpm -Uvh "$REG_SAT_URL/pub/katello-ca-consumer-latest.noarch.rpm" || true
echo "Registering with options: $sanitized_opts" echo "Registering with options: $sanitized_opts"
subscription-manager register $opts subscription-manager register $opts
echo "Disabling all previous repos"
subscription-manager repos --disable=\*
echo "Enabling repos: $user_repos" echo "Enabling repos: $user_repos"
subscription-manager $repos subscription-manager $repos
echo "Installing katello-agent" echo "Installing katello-agent"

View File

@ -114,8 +114,6 @@ case "${REG_METHOD:-}" in
subscription-manager repos --disable=\* subscription-manager repos --disable=\*
echo "Enabling repos: $user_repos" echo "Enabling repos: $user_repos"
subscription-manager $repos subscription-manager $repos
echo "Disabling satellite repo because it is no longer needed"
subscription-manager repos --disable ${satellite_repo}
;; ;;
disable) disable)
echo "Disabling RHEL registration" echo "Disabling RHEL registration"

View File

@ -9,10 +9,10 @@ set -o pipefail
[ -n "$ARCH" ] [ -n "$ARCH" ]
[ -n "$TARGET_ROOT" ] [ -n "$TARGET_ROOT" ]
if [ 'amd64' = "$ARCH" ] ; then if [[ "amd64 x86_64" =~ "$ARCH" ]]; then
ARCH="x86_64" ARCH="x86_64"
else else
echo 'rhel7 root element only support the amd64 $ARCH value.' echo 'rhel7 root element only support the x86_64 $ARCH value.'
exit 1 exit 1
fi fi

View File

@ -9,7 +9,7 @@ set -o pipefail
if [ "i386" = "$ARCH" ]; then if [ "i386" = "$ARCH" ]; then
basearch=i386 basearch=i386
arch=i686 arch=i686
elif [ "amd64" = "$ARCH" ]; then elif [[ "amd64 x86_64" =~ "$ARCH" ]]; then
basearch=x86_64 basearch=x86_64
arch=x86_64 arch=x86_64
elif [[ "$ARCH" = "ppc64" ]]; then elif [[ "$ARCH" = "ppc64" ]]; then
@ -28,7 +28,7 @@ fi
if [[ $DISTRO_NAME == "fedora" && $DIB_RELEASE -ge 22 ]]; then if [[ $DISTRO_NAME == "fedora" && $DIB_RELEASE -ge 22 ]]; then
mkdir -p /etc/dnf/vars mkdir -p /etc/dnf/vars
echo $basearch > /etc/dnf/vars/basearch echo $basearch > /etc/dnf/vars/basearch
echo $arch > /etc/dnf/vars/basearch echo $arch > /etc/dnf/vars/arch
else else
echo $basearch > /etc/yum/vars/basearch echo $basearch > /etc/yum/vars/basearch
echo $arch > /etc/yum/vars/arch echo $arch > /etc/yum/vars/arch

View File

@ -1 +1,2 @@
dib-init-system dib-init-system
install-static

View File

@ -2,19 +2,8 @@
Description=OpenSSH Server Key Generation Description=OpenSSH Server Key Generation
Before=ssh.service Before=ssh.service
ConditionPathExists=|!/etc/ssh/ssh_host_key
ConditionPathExists=|!/etc/ssh/ssh_host_key.pub
ConditionPathExists=|!/etc/ssh/ssh_host_rsa_key
ConditionPathExists=|!/etc/ssh/ssh_host_rsa_key.pub
ConditionPathExists=|!/etc/ssh/ssh_host_dsa_key
ConditionPathExists=|!/etc/ssh/ssh_host_dsa_key.pub
ConditionPathExists=|!/etc/ssh/ssh_host_ecdsa_key
ConditionPathExists=|!/etc/ssh/ssh_host_ecdsa_key.pub
ConditionPathExists=|!/etc/ssh/ssh_host_ed25519_key
ConditionPathExists=|!/etc/ssh/ssh_host_ed25519_key.pub
[Service] [Service]
ExecStart=/usr/bin/ssh-keygen -A ExecStart=/usr/local/sbin/runtime-ssh-host-keys.sh
Type=oneshot Type=oneshot
RemainAfterExit=yes RemainAfterExit=yes

View File

@ -5,4 +5,4 @@ console output
task task
exec /usr/bin/ssh-keygen -A exec /usr/local/sbin/runtime-ssh-host-keys.sh

View File

@ -5,6 +5,9 @@
}, },
"gentoo": { "gentoo": {
"openssh-client": "" "openssh-client": ""
},
"suse": {
"openssh-client": "openssh"
} }
} }
} }

View File

@ -12,6 +12,9 @@ set -o pipefail
# Fedora # Fedora
rm -f /etc/sysconfig/network-scripts/ifcfg-eth* rm -f /etc/sysconfig/network-scripts/ifcfg-eth*
# SUSE
rm -f /etc/sysconfig/network/ifcfg-eth*
# Ubuntu # Ubuntu
rm -f /etc/network/interfaces.d/eth* rm -f /etc/network/interfaces.d/eth*

View File

@ -1,4 +1,4 @@
export DISTRO_NAME=ubuntu export DISTRO_NAME=ubuntu
export DIB_RELEASE=${DIB_RELEASE:-trusty} export DIB_RELEASE=${DIB_RELEASE:-xenial}
export DIB_DEBIAN_COMPONENTS=${DIB_DEBIAN_COMPONENTS:-main,restricted,universe} export DIB_DEBIAN_COMPONENTS=${DIB_DEBIAN_COMPONENTS:-main,restricted,universe}
export DIB_DISTRIBUTION_MIRROR=${DIB_DISTRIBUTION_MIRROR:-http://archive.ubuntu.com/ubuntu} export DIB_DISTRIBUTION_MIRROR=${DIB_DISTRIBUTION_MIRROR:-http://archive.ubuntu.com/ubuntu}

View File

@ -1,2 +1,2 @@
export DISTRO_NAME=ubuntu export DISTRO_NAME=ubuntu
export DIB_RELEASE=${DIB_RELEASE:-trusty} export DIB_RELEASE=${DIB_RELEASE:-xenial}

View File

@ -4,7 +4,7 @@ grubby:
kernel: kernel:
initscripts: initscripts:
man-pages: man-pages:
redhat-lsb-core: lsb_release:
selinux-policy: selinux-policy:
selinux-policy-targeted: selinux-policy-targeted:
libselinux-python: libselinux-python:

View File

@ -56,6 +56,7 @@ _RPM="rpm --dbpath=/var/lib/rpm"
# has yum/yumdownloader # has yum/yumdownloader
function _install_repos { function _install_repos {
local packages local packages
local rc
# pre-install the base system packages via rpm. We previously # pre-install the base system packages via rpm. We previously
# just left it up to yum to drag these in when we "yum install # just left it up to yum to drag these in when we "yum install
@ -79,11 +80,21 @@ function _install_repos {
packages+="${DISTRO_NAME}-repos " packages+="${DISTRO_NAME}-repos "
fi fi
yumdownloader \ # yumdownloader puts repo xml files and such into a directory
# ${TMPDIR}/yum-$USER-random. Since we don't need this once the
# initial download happens, redirect TMPDIR for this call so we
# can clean it up nicely
local temp_tmp
temp_tmp=$(mktemp -d)
TMPDIR=${temp_tmp} yumdownloader \
--releasever=$DIB_RELEASE \ --releasever=$DIB_RELEASE \
--setopt=reposdir=$TMP_HOOKS_PATH/yum.repos.d \ --setopt=reposdir=$TMP_HOOKS_PATH/yum.repos.d \
--destdir=$WORKING \ --destdir=$WORKING \
${packages} ${packages} && rc=$? || rc=$?
rm -rf ${temp_tmp}
if [[ ${rc} != 0 ]]; then
die "Failed to download initial packages: ${packages}"
fi
# --nodeps works around these wanting /bin/sh in some fedora # --nodeps works around these wanting /bin/sh in some fedora
# releases, see rhbz#1265873 # releases, see rhbz#1265873

View File

@ -142,21 +142,48 @@ function eval_run_d () {
trap - ERR trap - ERR
} }
function kill_chroot_processes () {
if [ -z "${1}" ]; then
echo "ERROR: no chroot directory specified"
exit 1
fi
for piddir in /proc/[0-9]*; do
pid=${piddir##/proc/}
pidname=$(cat $piddir/comm 2>/dev/null || echo "unknown")
# If there are open files from the chroot, just kill the process using
# these files.
if sudo readlink -f $piddir/root | grep -q $TMP_BUILD_DIR; then
echo "Killing chroot process: '${pidname}($pid)'"
sudo kill $pid
fi
done
}
function cleanup_build_dir () { function cleanup_build_dir () {
if ! timeout 5 sh -c " while ! sudo rm -rf $TMP_BUILD_DIR/built; do sleep 1; done"; then if ! timeout 5 sh -c " while ! sudo rm -rf $TMP_BUILD_DIR/built; do sleep 1; done"; then
echo "ERROR: unable to cleanly remove $TMP_BUILD_DIR/built" echo "ERROR: unable to cleanly remove $TMP_BUILD_DIR/built"
exit 1 exit 1
fi fi
sudo rm -rf $TMP_BUILD_DIR/mnt sudo rm -rf $TMP_BUILD_DIR/mnt
kill_chroot_processes $TMP_BUILD_DIR
if tmpfs_check 0; then if tmpfs_check 0; then
sudo umount -f $TMP_BUILD_DIR || true # If kill_chroot_processes did not succeed then we have to wait for
# init to reap the orphaned chroot processes
if ! timeout 120 sh -c "while ! sudo umount -f $TMP_BUILD_DIR; do sleep 1; done"; then
echo "ERROR: failed to umount the $TMP_BUILD_DIR tmpfs mount point"
exit 1
fi
fi fi
rm -rf --one-file-system $TMP_BUILD_DIR rm -rf --one-file-system $TMP_BUILD_DIR
} }
function cleanup_image_dir () { function cleanup_image_dir () {
kill_chroot_processes $TMP_IMAGE_DIR
if tmpfs_check 0; then if tmpfs_check 0; then
sudo umount -f $TMP_IMAGE_DIR || true if ! timeout 120 sh -c "while ! sudo umount -f $TMP_IMAGE_DIR; do sleep 1; done"; then
echo "ERROR: failed to umount the $TMP_IMAGE_DIR tmpfs mount point"
exit 1
fi
fi fi
rm -rf --one-file-system $TMP_IMAGE_DIR rm -rf --one-file-system $TMP_IMAGE_DIR
} }

View File

@ -79,7 +79,7 @@ function show_options () {
echo " --docker-target -- specify the repo and tag to use if the output type is docker. Defaults to the value of output imagename" echo " --docker-target -- specify the repo and tag to use if the output type is docker. Defaults to the value of output imagename"
if [ "$IS_RAMDISK" == "0" ]; then if [ "$IS_RAMDISK" == "0" ]; then
echo " -n skip the default inclusion of the 'base' element" echo " -n skip the default inclusion of the 'base' element"
echo " -p package[,package,package] -- list of packages to install in the image" echo " -p package[,package,package] -- list of packages to install in the image. If specified multiple times the packages are appended to the list."
fi fi
echo " -h|--help -- display this help and exit" echo " -h|--help -- display this help and exit"
echo " --version -- display version and exit" echo " --version -- display version and exit"
@ -136,7 +136,7 @@ while true ; do
-u) shift; export COMPRESS_IMAGE="";; -u) shift; export COMPRESS_IMAGE="";;
-c) shift ; export CLEAR_ENV=1;; -c) shift ; export CLEAR_ENV=1;;
-n) shift; export SKIP_BASE="1";; -n) shift; export SKIP_BASE="1";;
-p) IFS="," read -a INSTALL_PACKAGES <<< "$2"; export INSTALL_PACKAGES ; shift 2 ;; -p) IFS="," read -a _INSTALL_PACKAGES <<< "$2"; export INSTALL_PACKAGES=( ${INSTALL_PACKAGES[@]} ${_INSTALL_PACKAGES[@]} ) ; shift 2 ;;
--checksum) shift; export DIB_CHECKSUM=1;; --checksum) shift; export DIB_CHECKSUM=1;;
--image-size) export DIB_IMAGE_SIZE=$2; shift 2;; --image-size) export DIB_IMAGE_SIZE=$2; shift 2;;
--image-cache) export DIB_IMAGE_CACHE=$2; shift 2;; --image-cache) export DIB_IMAGE_CACHE=$2; shift 2;;

View File

@ -172,11 +172,12 @@ the image as executable files.
Environment Variables Environment Variables
^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^
To set environment variables for other hooks, add a file to your element To set environment variables for other hooks, add a file to your
``environment.d``. element ``environment.d``. This directory contains bash script
snippets that are sourced before running scripts in each phase. Note
This directory contains bash script snippets that are sourced before running that because environment includes are sourced together, they should
scripts in each phase. not set global flags like ``set -x`` because they will affect all
preceeding imports.
Dependencies Dependencies

View File

@ -1,5 +1,6 @@
export DISTRO_NAME=opensuse export DISTRO_NAME=opensuse
export DIB_RELEASE=${DIB_RELEASE:-42.1} DIB_RELEASE=${DIB_RELEASE:-42.1}
export DIB_RELEASE=${DIB_RELEASE,,}
export DIB_OPENSUSE_MIRROR=${DIB_OPENSUSE_MIRROR:-http://download.opensuse.org} export DIB_OPENSUSE_MIRROR=${DIB_OPENSUSE_MIRROR:-http://download.opensuse.org}
case ${DIB_RELEASE} in case ${DIB_RELEASE} in
# We are using "=>" as the assignment symbol since "@" "=" etc could be used in the URI itself. # We are using "=>" as the assignment symbol since "@" "=" etc could be used in the URI itself.
@ -15,6 +16,11 @@ case ${DIB_RELEASE} in
ZYPPER_REPOS="update=>${DIB_OPENSUSE_MIRROR}/update/leap/${DIB_RELEASE}/oss/ " ZYPPER_REPOS="update=>${DIB_OPENSUSE_MIRROR}/update/leap/${DIB_RELEASE}/oss/ "
ZYPPER_REPOS+="oss=>${DIB_OPENSUSE_MIRROR}/distribution/leap/${DIB_RELEASE}/repo/oss/" ZYPPER_REPOS+="oss=>${DIB_OPENSUSE_MIRROR}/distribution/leap/${DIB_RELEASE}/repo/oss/"
;; ;;
# Tumbleweed
tumbleweed)
ZYPPER_REPOS="update=>${DIB_OPENSUSE_MIRROR}/update/${DIB_RELEASE}/ "
ZYPPER_REPOS+="oss=>${DIB_OPENSUSE_MIRROR}/${DIB_RELEASE}/repo/oss/"
;;
*) echo "Unsupported openSUSE release: ${DIB_RELEASE}"; exit 1 ;; *) echo "Unsupported openSUSE release: ${DIB_RELEASE}"; exit 1 ;;
esac esac
export ZYPPER_REPOS export ZYPPER_REPOS

View File

@ -0,0 +1,29 @@
#!/bin/bash
# Copyright 2016 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
# dib-lint: disable=dibdebugtrace
set -exu
set -o pipefail
# We are running into race conditions with glean, which ssh-keygen -A is
# not handling properly. So, create a new script to first check if the
# file exists, then use 'yes' to disable overwriting of existing files.
for key in dsa ecdsa ed25519 rsa; do
FILE=/etc/ssh/ssh_host_${key}_key
if ! [ -e $FILE ]; then
/usr/bin/yes n | /usr/bin/ssh-keygen -f $FILE -N '' -t $key
fi
done

View File

@ -0,0 +1,12 @@
======
sysctl
======
Add a sysctl-set-value command which can be run from within an element.
Running this command will cause the sysctl value to be set on boot (by
writing the value to /etc/sysctl.d).
Example usage
::
sysctl-set-value net.ipv4.ip_forward 1

View File

@ -0,0 +1,49 @@
#!/bin/bash
#
# Copied from tripleo-image-element's sysctl element
#
# Validate and manage setting sysctl settings.
#
# The script is called with name/value pairs which are stored
# in the system default sysctl.d directory. Before adding new
# settings a validation is done to ensure that conflicting
# sysctl settings have not been requested. Once finished sysctl
# is used to activate the changes.
if [ ${DIB_DEBUG_TRACE:-0} -gt 0 ]; then
set -x
fi
set -eu
set -o pipefail
NAME=${1:-}
VALUE=${2:-}
# Optional comment used to describe the setting
COMMENT=${3:-"This file was created by diskimage-builder."}
if [ -z "$NAME" -o -z "$VALUE" ]; then
echo "NAME and VALUE are required."
exit 1
fi
FILENAME="/etc/sysctl.d/${NAME}.conf"
if [ -f $FILENAME ]; then
# check to make sure the settings match... otherwise fail
if ! grep -q "^$NAME = $VALUE" $FILENAME; then
echo "Conflicting sysctl.conf setting for $NAME == $VALUE. Found:"
grep "^$NAME" $FILENAME
exit 1
fi
else
if ! sysctl -a | grep -q "^$NAME"; then
echo "Invalid sysctl key: $NAME"
exit 1
fi
sysctl-write-value $NAME "$VALUE" "$COMMENT"
sysctl -p $FILENAME
fi

View File

@ -0,0 +1,32 @@
#!/bin/bash
#
# Copied from tripleo-image-element's sysctl element
#
# Validate and manage setting sysctl settings.
#
# The script is called with name/value pairs which are stored
# in the system default sysctl.d directory. This script performs
# no checking, just writing out the file.
if [ ${DIB_DEBUG_TRACE:-0} -gt 0 ]; then
set -x
fi
set -eu
set -o pipefail
NAME=${1:-}
VALUE=${2:-}
# Optional comment used to describe the setting
COMMENT=${3:-"This file was created by diskimage-builder."}
if [ -z "$NAME" -o -z "$VALUE" ]; then
echo "Usage: sysctl-write-value <name> <value> [comment]"
exit 1
fi
FILENAME="/etc/sysctl.d/${NAME}.conf"
cat > $FILENAME <<EOF_CAT
# $COMMENT
$NAME = $VALUE
EOF_CAT

View File

@ -27,6 +27,10 @@ set -o pipefail
[ -n "${ZYPPER_REPOS}" ] [ -n "${ZYPPER_REPOS}" ]
function cleanup() { function cleanup() {
sudo umount $TARGET_ROOT/proc
sudo umount $TARGET_ROOT/dev/pts
sudo umount $TARGET_ROOT/dev
sudo umount $TARGET_ROOT/sys
sudo umount $TMP_MOUNT_PATH/var/cache/zypp sudo umount $TMP_MOUNT_PATH/var/cache/zypp
} }
@ -41,9 +45,6 @@ for repo in ${ZYPPER_REPOS}; do
sudo zypper ${ZYPPER_TARGET_OPTS} addrepo --name ${reponame} --keep-packages ${repouri} ${reponame} sudo zypper ${ZYPPER_TARGET_OPTS} addrepo --name ${reponame} --keep-packages ${repouri} ${reponame}
done done
# Refresh it
sudo zypper ${ZYPPER_TARGET_OPTS} refresh
# It appears that zypper will clean up the repo's cache when it (re-)adds the # It appears that zypper will clean up the repo's cache when it (re-)adds the
# repo so we need to add the cache now, once the repos are added. This is # repo so we need to add the cache now, once the repos are added. This is
# similar to what the zypper/50-zypper-cache script does # similar to what the zypper/50-zypper-cache script does
@ -53,6 +54,20 @@ mkdir -p $ZYPPER_CACHE_DIR
sudo mkdir -p $TMP_MOUNT_PATH/var/cache/zypp sudo mkdir -p $TMP_MOUNT_PATH/var/cache/zypp
sudo mount --bind $ZYPPER_CACHE_DIR $TMP_MOUNT_PATH/var/cache/zypp sudo mount --bind $ZYPPER_CACHE_DIR $TMP_MOUNT_PATH/var/cache/zypp
# Refresh it so we get updated data in cased we switched DIB_RELEASE
# since last run.
sudo zypper ${ZYPPER_TARGET_OPTS} refresh
# Note this is not usually done for root.d elements (see
# lib/common-functions:mount_proc_dev_sys) but it's important that
# we have things like /dev/urandom around inside the chroot for
# the rpm [pre|post]inst scripts within the packages.
sudo mkdir -p $TARGET_ROOT/proc $TARGET_ROOT/dev $TARGET_ROOT/sys
sudo mount -t proc none $TARGET_ROOT/proc
sudo mount --bind /dev $TARGET_ROOT/dev
sudo mount --bind /dev/pts $TARGET_ROOT/dev/pts
sudo mount -t sysfs none $TARGET_ROOT/sys
# Install filesystem, base and useful tools # Install filesystem, base and useful tools
sudo zypper ${ZYPPER_TARGET_OPTS} install ${ZYPPER_INSTALL_OPTS} filesystem sudo zypper ${ZYPPER_TARGET_OPTS} install ${ZYPPER_INSTALL_OPTS} filesystem
# Install basic components in order # Install basic components in order
@ -83,5 +98,5 @@ for newfile in $(sudo find $TARGET_ROOT -type f -name '*rpmnew') ; do
sudo mv $newfile $(echo $newfile | sed 's/.rpmnew$//') sudo mv $newfile $(echo $newfile | sed 's/.rpmnew$//')
done done
# Unmounting of the /var/cache/zypp is handled by the cleanup EXIT # Unmounting of all the mount points is handled by the cleanup EXIT
# handler so there is nothing else to do here # handler so there is nothing else to do here

View File

@ -2,7 +2,7 @@
# of appearance. Changing the order has an impact on the overall integration # of appearance. Changing the order has an impact on the overall integration
# process, which may cause wedges in the gate later. # process, which may cause wedges in the gate later.
Babel>=2.3.4 # BSD Babel>=2.3.4 # BSD
pbr>=1.6 # Apache-2.0 pbr>=1.8 # Apache-2.0
PyYAML>=3.10.0 # MIT PyYAML>=3.10.0 # MIT
flake8<2.6.0,>=2.5.4 # MIT flake8<2.6.0,>=2.5.4 # MIT
six>=1.9.0 # MIT six>=1.9.0 # MIT

View File

@ -6,7 +6,7 @@ description-file =
author = HP Cloud Services author = HP Cloud Services
author_email = openstack-dev@lists.openstack.org author_email = openstack-dev@lists.openstack.org
license: Apache License (2.0) license: Apache License (2.0)
home-page = https://git.openstack.org/cgit/openstack/diskimage-builder home-page = http://docs.openstack.org/developer/diskimage-builder/
classifier = classifier =
Development Status :: 3 - Alpha Development Status :: 3 - Alpha
License :: OSI Approved :: Apache Software License License :: OSI Approved :: Apache Software License

View File

@ -11,4 +11,4 @@ sphinx!=1.3b1,<1.4,>=1.2.1 # BSD
oslosphinx>=4.7.0 # Apache-2.0 oslosphinx>=4.7.0 # Apache-2.0
# releasenotes # releasenotes
reno>=1.8.0 # Apache2 reno>=1.8.0 # Apache-2.0

View File

@ -29,16 +29,26 @@ DEFAULT_SKIP_TESTS=(
function log_with_prefix { function log_with_prefix {
local pr=$1 local pr=$1
local log
while read a; do while read a; do
echo $(date +"%Y%m%d-%H%M%S.%N") "[$pr] $a" log="[$pr] $a"
if [[ ${LOG_DATESTAMP} -ne 0 ]]; then
log="$(date +"%Y%m%d-%H%M%S.%N") ${log}"
fi
echo "${log}"
done done
} }
# Log job control messages # Log job control messages
function log_jc { function log_jc {
local msg="$1" local msg="$1"
printf "[JOB-CONTROL] %s %s\n" "$(date)" "${msg}" local log="[JOB-CONTROL] ${msg}"
if [[ ${LOG_DATESTAMP} -ne 0 ]]; then
log="$(date +"%Y%m%d-%H%M%S.%N") ${log}"
fi
echo "${log}"
} }
function job_cnt { function job_cnt {
@ -158,15 +168,23 @@ for e in $DIB_ELEMENTS/*/test-elements/*; do
TESTS+=("$element/$test_element") TESTS+=("$element/$test_element")
done done
#
# Default values
#
JOB_MAX_CNT=1 JOB_MAX_CNT=1
LOG_DATESTAMP=0
while getopts ":hlpj:" opt; do #
# Parse args
#
while getopts ":hlj:t" opt; do
case $opt in case $opt in
h) h)
echo "run_functests.sh [-h] [-l] <test> <test> ..." echo "run_functests.sh [-h] [-l] <test> <test> ..."
echo " -h : show this help" echo " -h : show this help"
echo " -l : list available tests" echo " -l : list available tests"
echo " -p : run all tests in parallel" echo " -j : parallel job count (default to 1)"
echo " -t : prefix log messages with timestamp"
echo " <test> : functional test to run" echo " <test> : functional test to run"
echo " Special test 'all' will run all tests" echo " Special test 'all' will run all tests"
exit 0 exit 0
@ -184,6 +202,9 @@ while getopts ":hlpj:" opt; do
JOB_MAX_CNT=${OPTARG} JOB_MAX_CNT=${OPTARG}
echo "Running parallel - using [${JOB_MAX_CNT}] jobs" echo "Running parallel - using [${JOB_MAX_CNT}] jobs"
;; ;;
t)
LOG_DATESTAMP=1
;;
\?) \?)
echo "Invalid option: -$OPTARG" echo "Invalid option: -$OPTARG"
exit 1 exit 1

View File

@ -37,4 +37,4 @@ commands = sphinx-build -a -W -E -d releasenotes/build/doctrees -b html releasen
[flake8] [flake8]
ignore = E125,H202,H302,H803 ignore = E125,H202,H302,H803
exclude = .venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build,conf.py exclude = .venv,.git,.tox,dist,doc,*lib/python*,*egg,build,conf.py