Use new bindep syntax

With new bindep syntax we can AND together specific profiles. The most
blatant need for this is with 'python-rbd'. We should only install
python-rbd when both 'ceph' and 'glance' profiles are specified.

The change is merged upstream, but a new version of bindep is not tagged
yet, so we install from upstream temporarily. Using hte upstream package
will not effect the output of the image.

With this change we can use the same profiles across all projects when
building, so the user only needs to set one list of profiles rather than
profiles per project which could help pipelines keep images consistent.

export PROFILES="ceph openvswitch nginx"
docker build --build-arg PROFILES="${PROFILES}" --build-arg PROJECT=keystone .
docker build --build-arg PROFILES="${PROFILES}" --build-arg PROJECT=glance .
docker build --build-arg PROFILES="${PROFILES}" --build-arg PROJECT=nova .
docker build --build-arg PROFILES="${PROFILES}" --build-arg PROJECT=neutron .

Change-Id: I50a73bfab9c80c8650f5f59c4e16fdfd32fc9c47
This commit is contained in:
Sam Yaple 2017-09-22 21:43:07 -04:00
parent ec71665e08
commit bdb298f435
2 changed files with 76 additions and 150 deletions

View File

@ -1,55 +1,73 @@
# Apache apache2 [platform:dpkg apache]
apache2 [platform:dpkg apache] bridge-utils [(neutron linuxbridge)]
libapache2-mod-wsgi [platform:dpkg apache] build-essential [platform:dpkg requirements]
bzip2 [platform:rpm requirements]
httpd [platform:rpm apache] ceph-common [(ceph cinder) (ceph glance) (ceph nova)]
mod_ssl [platform:rpm apache] conntrack [platform:dpkg neutron]
mod_wsgi [platform:rpm apache] conntrack-tools [platform:rpm neutron]
cyrus-sasl-devel [platform:rpm requirements]
# Ceph dnsmasq [neutron]
ceph-common [ceph] dnsmasq-utils [neutron]
# TODO(SamYaple): extend bindep to allow 'profile AND profile' rather than the ebtables [neutron]
# current 'profile OR profile' so we can set this to 'ceph AND glance' so this gcc-c++ [platform:rpm requirements]
# would only get installed in glance container gcc [platform:rpm requirements]
python-rbd [ceph] git [requirements]
httpd [platform:rpm apache]
# LVM iproute2 [platform:dpkg neutron nova]
lvm2 [lvm] ipset [neutron]
iptables [neutron]
tgt [platform:dpkg lvm] iputils-arping [platform:dpkg neutron]
thin-provisioning-tools [platform:dpkg lvm] keepalived [neutron]
libapache2-mod-wsgi [platform:dpkg apache]
targetcli [platform:rpm lvm] liberasurecode-devel [platform:rpm requirements]
liberasurecode-dev [platform:dpkg requirements]
# QEMU libffi-devel [platform:rpm requirements]
qemu-utils [platform:dpkg qemu] libffi-dev [platform:dpkg requirements]
qemu-img [platform:rpm qemu] libgcrypt [platform:rpm requirements]
libkrb5-dev [platform:dpkg requirements]
# Nova libldap2-dev [platform:dpkg requirements]
iproute2 [platform:dpkg nova] libmariadbclient-dev [platform:debian requirements]
libpython2.7 [platform:dpkg nova] libmysqlclient-dev [platform:ubuntu requirements]
libvirt0 [platform:dpkg nova] libnss3-dev [platform:dpkg requirements]
openvswitch-switch [platform:dpkg nova] libpq-dev [platform:dpkg requirements]
libpython2.7 [platform:dpkg neutron nova]
libvirt-libs [platform:rpm nova] libsasl2-dev [platform:dpkg requirements]
openvswitch [platform:rpm nova] libssl-dev [platform:dpkg requirements]
libsystemd-dev [platform:dpkg requirements]
# Neutron libvirt0 [platform:dpkg nova]
bridge-utils [neutron] libvirt-devel [platform:rpm requirements]
dnsmasq [neutron] libvirt-dev [platform:dpkg requirements]
dnsmasq-utils [neutron] libxml2-devel [platform:rpm requirements]
ebtables [neutron] libxml2-dev [platform:dpkg requirements]
ipset [neutron] libxslt1-dev [platform:dpkg requirements]
iptables [neutron] libxslt-devel [platform:rpm requirements]
keepalived [neutron] libyaml-devel [platform:rpm requirements]
libyaml-dev [platform:dpkg requirements]
conntrack [platform:dpkg neutron] libz-dev [platform:dpkg requirements]
iproute2 [platform:dpkg neutron] lvm2 [(cinder lvm)]
iputils-arping [platform:dpkg neutron] make [platform:rpm requirements]
libpython2.7 [platform:dpkg neutron] mariadb-devel [platform:rpm requirements]
openvswitch-switch [platform:dpkg neutron] mod_ssl [platform:rpm apache]
uuid-runtime [platform:dpkg neutron] mod_wsgi [platform:rpm apache]
nginx [nginx]
conntrack-tools [platform:rpm neutron] nss-devel [platform:rpm requirements]
openvswitch [platform:rpm neutron] nss-util [platform:rpm requirements]
uuid [platform:rpm neutron] openldap-devel [platform:rpm requirements]
openssl-devel [platform:rpm requirements]
openvswitch [platform:rpm (neutron openvswitch) (nova openvswitch)]
openvswitch-switch [platform:dpkg (neutron openvswitch) (nova openvswitch)]
pkg-config [platform:dpkg requirements]
pkgconfig [platform:rpm requirements]
postgresql-devel [platform:rpm requirements]
python-devel [platform:rpm requirements]
python-dev [platform:dpkg requirements]
python-rbd [(ceph glance)]
qemu-img [platform:rpm (qemu nova)]
qemu-utils [platform:dpkg (qemu nova)]
systemd-devel [platform:rpm requirements]
targetcli [platform:rpm (cinder lvm)]
tgt [platform:dpkg (cinder lvm)]
thin-provisioning-tools [platform:dpkg (cinder lvm)]
uuid [platform:rpm neutron]
uuid-runtime [platform:dpkg neutron]
zlib-devel [platform:rpm requirements]

View File

@ -2,101 +2,9 @@
set -eux set -eux
# TODO(SamYaple): Switch all of this to bindep once syntax is supported better
# NOTE(SamYaple): Ubuntu and Debian have slightly different package lists
case ${distro} in
debian)
apt-get update
apt-get upgrade -y
apt-get install -y --no-install-recommends \
build-essential \
ca-certificates \
git \
liberasurecode-dev \
libffi-dev \
libkrb5-dev \
libldap2-dev \
libmariadbclient-dev \
libnss3-dev \
libpq-dev \
libsasl2-dev \
libssl-dev \
libsystemd-dev \
libxml2-dev \
libxslt1-dev \
libvirt-dev \
libyaml-dev \
libz-dev \
pkg-config \
python-dev \
python-pip \
python-virtualenv
;;
ubuntu)
apt-get update
apt-get upgrade -y
apt-get install -y --no-install-recommends \
build-essential \
ca-certificates \
git \
liberasurecode-dev \
libffi-dev \
libkrb5-dev \
libldap2-dev \
libmysqlclient-dev \
libnss3-dev \
libpq-dev \
libsasl2-dev \
libssl-dev \
libsystemd-dev \
libxml2-dev \
libxslt1-dev \
libvirt-dev \
libyaml-dev \
libz-dev \
pkg-config \
python-dev \
python-pip
;;
centos)
yum upgrade -y
# NOTE(SamYaple): https://bugs.centos.org/view.php?id=10750
yum install -y --setopt=tsflags=docs --setopt=skip_missing_names_on_install=False libffi-devel
yum install -y --setopt=skip_missing_names_on_install=False \
gcc \
gcc-c++ \
make \
openssl-devel \
ca-certificates \
git \
bzip2 \
liberasurecode-devel \
openldap-devel \
mariadb-devel \
nss-devel \
postgresql-devel \
cyrus-sasl-devel \
openssl-devel \
libxml2-devel \
libxslt-devel \
libvirt-devel \
libyaml-devel \
zlib-devel \
pkgconfig \
python \
python-devel \
python-pip \
libgcrypt \
nss-util \
systemd-devel
;;
*)
echo "Unknown distro: ${distro}"
exit 1
;;
esac
$(dirname $0)/setup_pip.sh $(dirname $0)/setup_pip.sh
pip install git+https://github.com/openstack-infra/bindep
$(dirname $0)/install_packages.sh
$(dirname $0)/clone_project.sh $(dirname $0)/clone_project.sh
mv /tmp/requirements/{global-requirements.txt,upper-constraints.txt} / mv /tmp/requirements/{global-requirements.txt,upper-constraints.txt} /
@ -107,7 +15,7 @@ split -l1 /upper-constraints.txt
ls -1 | xargs -n1 -P20 -t pip wheel --no-deps --wheel-dir / -c /upper-constraints.txt -r ls -1 | xargs -n1 -P20 -t pip wheel --no-deps --wheel-dir / -c /upper-constraints.txt -r
popd popd
# NOTE(SamYaple): Handle packages not in global-requirements # NOTE(SamYaple): Handle packages not in global-requirements
additional_packages=(argparse bindep==2.5.0 pip setuptools uwsgi wheel virtualenv) additional_packages=(argparse git+https://github.com/openstack-infra/bindep pip setuptools uwsgi wheel virtualenv)
echo "${additional_packages[@]}" | xargs -n1 -P20 pip wheel --wheel-dir / -c /upper-constraints.txt echo "${additional_packages[@]}" | xargs -n1 -P20 pip wheel --wheel-dir / -c /upper-constraints.txt
# NOTE(SamYaple): We want to purge all files that are not wheels or txt to # NOTE(SamYaple): We want to purge all files that are not wheels or txt to