mirror of
https://github.com/ceph/ceph
synced 2024-12-23 20:03:56 +00:00
69e9b22e4b
Most of the flavor, sha1, tag etc. selection logic as implemented in the packaging module of teuthology relies on remote hosts. This is complex to tests and inconvenient because hosts must be provisionned even before trying to figure out which packages need to be installed. Using remote hosts is necessary when bare metal targets are used because teuthology must adapt to the operating system already installed. The selection logic in the context of dynamically provisionned targets is simpler because it is defined by the job being run. The buildpackages is refactored to use only the job configuration to figure out which packages must be built. It makes it specific to targets that are dynamically provisionned. It would have to be modified to query the remote host in the case of bare metal targets. Signed-off-by: Loic Dachary <loic@dachary.org>
247 lines
6.3 KiB
Bash
Executable File
247 lines
6.3 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright (C) 2015 Red Hat <contact@redhat.com>
|
|
#
|
|
# Author: Loic Dachary <loic@dachary.org>
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU Library Public License as published by
|
|
# the Free Software Foundation; either version 2, or (at your option)
|
|
# any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Library Public License for more details.
|
|
#
|
|
|
|
#
|
|
# Create and upload a RPM repository with the same naming conventions
|
|
# as https://github.com/ceph/autobuild-ceph/blob/master/build-ceph-rpm.sh
|
|
#
|
|
|
|
set -xe
|
|
|
|
base=/tmp/release
|
|
gitbuilder_host=$1
|
|
codename=$2
|
|
git_ceph_url=$3
|
|
sha1=$4
|
|
flavor=$5
|
|
|
|
sudo yum install -y git
|
|
|
|
source $(dirname $0)/common.sh
|
|
|
|
init_ceph $git_ceph_url $sha1
|
|
|
|
#id=$(lsb_release -s -i | tr A-Z a-z)
|
|
#major=$(lsb_release -s -r | sed -s "s;\..*;;g")
|
|
#codename="${id}${major}"
|
|
releasedir=$base/$(lsb_release -si)/WORKDIR
|
|
#
|
|
# git describe provides a version that is
|
|
# a) human readable
|
|
# b) is unique for each commit
|
|
# c) compares higher than any previous commit
|
|
# d) contains the short hash of the commit
|
|
#
|
|
vers=$(git describe --long --match "v*" | sed s/^v//)
|
|
: ${NPROC:=$(nproc)}
|
|
ceph_dir=$(pwd)
|
|
|
|
#
|
|
# Create a repository in a directory with a name structured
|
|
# as
|
|
#
|
|
arch=x86_64
|
|
base=ceph-rpm-$codename-$arch-$flavor
|
|
|
|
function setup_rpmmacros() {
|
|
if ! grep -q find_debuginfo_dwz_opts $HOME/.rpmmacros ; then
|
|
echo '%_find_debuginfo_dwz_opts %{nil}' >> $HOME/.rpmmacros
|
|
fi
|
|
if lsb_release -d -s | grep CentOS | grep -q 'release 7' ; then
|
|
if ! grep -q '%dist .el7' $HOME/.rpmmacros ; then
|
|
echo '%dist .el7' >> $HOME/.rpmmacros
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function build_package() {
|
|
rm -fr $releasedir
|
|
mkdir -p $releasedir
|
|
#
|
|
# remove all files not under git so they are not
|
|
# included in the distribution.
|
|
#
|
|
git clean -qdxff
|
|
#
|
|
# creating the distribution tarbal requires some configure
|
|
# options (otherwise parts of the source tree will be left out).
|
|
#
|
|
sudo yum install -y bzip2
|
|
./autogen.sh
|
|
./configure $(flavor2configure $flavor) --with-debug --with-radosgw --with-fuse --with-libatomic-ops --with-gtk2 --with-nss
|
|
#
|
|
# use distdir= to set the name of the top level directory of the
|
|
# tarbal to match the desired version
|
|
#
|
|
make dist-bzip2
|
|
# Set up build area
|
|
setup_rpmmacros
|
|
sudo yum install -y rpm-build
|
|
local buildarea=$releasedir
|
|
mkdir -p ${buildarea}/SOURCES
|
|
mkdir -p ${buildarea}/SRPMS
|
|
mkdir -p ${buildarea}/SPECS
|
|
cp ceph.spec ${buildarea}/SPECS
|
|
mkdir -p ${buildarea}/RPMS
|
|
mkdir -p ${buildarea}/BUILD
|
|
cp -a ceph-*.tar.bz2 ${buildarea}/SOURCES/.
|
|
cp -a rpm/*.patch ${buildarea}/SOURCES || true
|
|
(
|
|
cd ${buildarea}/SPECS
|
|
ccache=$(echo /usr/lib*/ccache)
|
|
# Build RPMs
|
|
buildarea=`readlink -fn ${releasedir}` ### rpm wants absolute path
|
|
PATH=$ccache:$PATH rpmbuild -ba --define "_unpackaged_files_terminate_build 0" --define "_topdir ${buildarea}" ceph.spec
|
|
)
|
|
}
|
|
|
|
function build_rpm_release() {
|
|
local buildarea=$1
|
|
local sha1=$2
|
|
local gitbuilder_host=$3
|
|
local base=$4
|
|
|
|
cat <<EOF > ${buildarea}/SPECS/ceph-release.spec
|
|
Name: ceph-release
|
|
Version: 1
|
|
Release: 0%{?dist}
|
|
Summary: Ceph repository configuration
|
|
Group: System Environment/Base
|
|
License: GPLv2
|
|
URL: http://gitbuilder.ceph.com/$dist
|
|
Source0: ceph.repo
|
|
#Source0: RPM-GPG-KEY-CEPH
|
|
#Source1: ceph.repo
|
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
|
BuildArch: noarch
|
|
|
|
%description
|
|
This package contains the Ceph repository GPG key as well as configuration
|
|
for yum and up2date.
|
|
|
|
%prep
|
|
|
|
%setup -q -c -T
|
|
install -pm 644 %{SOURCE0} .
|
|
#install -pm 644 %{SOURCE1} .
|
|
|
|
%build
|
|
|
|
%install
|
|
rm -rf %{buildroot}
|
|
#install -Dpm 644 %{SOURCE0} \
|
|
# %{buildroot}/%{_sysconfdir}/pki/rpm-gpg/RPM-GPG-KEY-CEPH
|
|
%if 0%{defined suse_version}
|
|
install -dm 755 %{buildroot}/%{_sysconfdir}/zypp
|
|
install -dm 755 %{buildroot}/%{_sysconfdir}/zypp/repos.d
|
|
install -pm 644 %{SOURCE0} \
|
|
%{buildroot}/%{_sysconfdir}/zypp/repos.d
|
|
%else
|
|
install -dm 755 %{buildroot}/%{_sysconfdir}/yum.repos.d
|
|
install -pm 644 %{SOURCE0} \
|
|
%{buildroot}/%{_sysconfdir}/yum.repos.d
|
|
%endif
|
|
|
|
%clean
|
|
#rm -rf %{buildroot}
|
|
|
|
%post
|
|
|
|
%postun
|
|
|
|
%files
|
|
%defattr(-,root,root,-)
|
|
#%doc GPL
|
|
%if 0%{defined suse_version}
|
|
/etc/zypp/repos.d/*
|
|
%else
|
|
/etc/yum.repos.d/*
|
|
%endif
|
|
#/etc/pki/rpm-gpg/*
|
|
|
|
%changelog
|
|
* Tue Mar 10 2013 Gary Lowell <glowell@inktank.com> - 1-0
|
|
- Handle both yum and zypper
|
|
- Use URL to ceph git repo for key
|
|
- remove config attribute from repo file
|
|
* Tue Aug 27 2012 Gary Lowell <glowell@inktank.com> - 1-0
|
|
- Initial Package
|
|
EOF
|
|
|
|
cat <<EOF > $buildarea/SOURCES/ceph.repo
|
|
[Ceph]
|
|
name=Ceph packages for \$basearch
|
|
baseurl=http://${gitbuilder_host}/${base}/sha1/${sha1}/\$basearch
|
|
enabled=1
|
|
gpgcheck=0
|
|
type=rpm-md
|
|
|
|
[Ceph-noarch]
|
|
name=Ceph noarch packages
|
|
baseurl=http://${gitbuilder_host}/${base}/sha1/${sha1}/noarch
|
|
enabled=1
|
|
gpgcheck=0
|
|
type=rpm-md
|
|
|
|
[ceph-source]
|
|
name=Ceph source packages
|
|
baseurl=http://${gitbuilder_host}/${base}/sha1/${sha1}/SRPMS
|
|
enabled=1
|
|
gpgcheck=0
|
|
type=rpm-md
|
|
EOF
|
|
|
|
rpmbuild -bb --define "_topdir ${buildarea}" ${buildarea}/SPECS/ceph-release.spec
|
|
}
|
|
|
|
function build_rpm_repo() {
|
|
local buildarea=$1
|
|
local gitbuilder_host=$2
|
|
local base=$3
|
|
|
|
sudo yum install -y createrepo
|
|
|
|
for dir in ${buildarea}/SRPMS ${buildarea}/RPMS/*
|
|
do
|
|
createrepo ${dir}
|
|
done
|
|
|
|
local sha1_dir=${buildarea}/../$codename/$base/sha1/$sha1
|
|
mkdir -p $sha1_dir
|
|
echo $vers > $sha1_dir/version
|
|
echo $sha1 > $sha1_dir/sha1
|
|
echo ceph > $sha1_dir/name
|
|
|
|
for dir in ${buildarea}/SRPMS ${buildarea}/RPMS/*
|
|
do
|
|
cp -fla ${dir} $sha1_dir
|
|
done
|
|
|
|
link_same ${buildarea}/../$codename/$base/ref $ceph_dir $sha1
|
|
if test "$gitbuilder_host" ; then
|
|
(
|
|
cd ${buildarea}/../$codename
|
|
RSYNC_RSH='ssh -o StrictHostKeyChecking=false' rsync -av $base/ ubuntu@$gitbuilder_host:/usr/share/nginx/html/$base/
|
|
)
|
|
fi
|
|
}
|
|
|
|
setup_rpmmacros
|
|
build_package
|
|
build_rpm_release $releasedir $sha1 $gitbuilder_host $base
|
|
build_rpm_repo $releasedir $gitbuilder_host $base
|