mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-05-01 13:14:33 +00:00
packaging: Revert "packaging: Stop providing OBS packages"
This reverts commit c0ea910273
.
Two scripts are still required for release and testing, which should
have never been under obs-packaging dir in the first place. Let's
revert, move the scripts / update references to it, and then we can
remove the remaining obs-packaging/ tooling.
Signed-off-by: Eric Ernst <eric.g.ernst@gmail.com>
This commit is contained in:
parent
13e260a864
commit
3f6cd4d5f7
@ -1,6 +1,7 @@
|
|||||||
# Kata Containers packaging
|
# Kata Containers packaging
|
||||||
|
|
||||||
* [Introduction](#introduction)
|
* [Introduction](#introduction)
|
||||||
|
* [Build using OBS](#build-using-obs)
|
||||||
* [Build in a container](#build-in-a-container)
|
* [Build in a container](#build-in-a-container)
|
||||||
* [Build a snap package](#build-a-snap-package)
|
* [Build a snap package](#build-a-snap-package)
|
||||||
* [Build static binaries](#build-static-binaries)
|
* [Build static binaries](#build-static-binaries)
|
||||||
@ -17,6 +18,10 @@
|
|||||||
Kata Containers currently supports packages for many distributions. Tooling to
|
Kata Containers currently supports packages for many distributions. Tooling to
|
||||||
aid in creating these packages are contained within this repository.
|
aid in creating these packages are contained within this repository.
|
||||||
|
|
||||||
|
## Build using OBS
|
||||||
|
|
||||||
|
See the [OBS documentation](obs-packaging).
|
||||||
|
|
||||||
## Build in a container
|
## Build in a container
|
||||||
|
|
||||||
Kata build artifacts are available within a container image, created by a
|
Kata build artifacts are available within a container image, created by a
|
||||||
|
12
tools/packaging/obs-packaging/Dockerfile
Normal file
12
tools/packaging/obs-packaging/Dockerfile
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
ARG SUSE_VERSION=${SUSE_VERSION:-15.1}
|
||||||
|
FROM opensuse/leap:${SUSE_VERSION}
|
||||||
|
|
||||||
|
|
||||||
|
# Get OBS client, plugins and dependencies
|
||||||
|
RUN zypper -v -n install osc-plugin-install vim curl bsdtar git sudo
|
||||||
|
RUN zypper -v -n install build \
|
||||||
|
obs-service-tar_scm \
|
||||||
|
obs-service-verify_file \
|
||||||
|
obs-service-obs_scm \
|
||||||
|
obs-service-recompress \
|
||||||
|
obs-service-download_url
|
8
tools/packaging/obs-packaging/Makefile
Normal file
8
tools/packaging/obs-packaging/Makefile
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Copyright (c) 2018 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
clean:
|
||||||
|
find . -maxdepth 2 -type d -name '*home:katacontainers*' -prune -exec sudo rm -rf {} \;
|
11
tools/packaging/obs-packaging/README.md
Normal file
11
tools/packaging/obs-packaging/README.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Building under OBS
|
||||||
|
|
||||||
|
SUSE's [Open Build Service (OBS)](https://openbuildservice.org) is used to
|
||||||
|
build [the official Kata Containers packages](https://build.opensuse.org/project/subprojects/home:katacontainers).
|
||||||
|
|
||||||
|
This directory contains tooling and packaging metadata to build all Kata
|
||||||
|
components with OBS.
|
||||||
|
|
||||||
|
See
|
||||||
|
[the Kata installation documentation](../../../docs/install/README.md)
|
||||||
|
for instructions on how to install the official packages.
|
105
tools/packaging/obs-packaging/build_all.sh
Executable file
105
tools/packaging/obs-packaging/build_all.sh
Executable file
@ -0,0 +1,105 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
[ -z "${DEBUG}" ] || set -o xtrace
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
readonly script_name="$(basename "${BASH_SOURCE[0]}")"
|
||||||
|
readonly script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
|
||||||
|
# shellcheck source=scripts/obs-docker.sh
|
||||||
|
source "${script_dir}/scripts/obs-pkgs.sh"
|
||||||
|
|
||||||
|
PUSH=${PUSH:-""}
|
||||||
|
LOCAL=${LOCAL:-""}
|
||||||
|
|
||||||
|
export BUILD_DISTROS=${BUILD_DISTROS:-xUbuntu_16.04}
|
||||||
|
# Packaging use this variable instead of use git user value
|
||||||
|
# On CI git user is not set
|
||||||
|
export AUTHOR="${AUTHOR:-user}"
|
||||||
|
export AUTHOR_EMAIL="${AUTHOR_EMAIL:-user@example.com}"
|
||||||
|
|
||||||
|
die() {
|
||||||
|
local msg="${1:-}"
|
||||||
|
local print_usage=$"${2:-}"
|
||||||
|
if [ -n "${msg}" ]; then
|
||||||
|
echo -e "ERROR: ${msg}\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -n "${print_usage}" ] && usage 1
|
||||||
|
}
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
exit_code=$"${1:-0}"
|
||||||
|
cat <<EOT
|
||||||
|
Usage:
|
||||||
|
${script_name} [-h | --help] <kata-branch> [PROJ1 PROJ2 ... ]
|
||||||
|
|
||||||
|
Generate OBS packages sources for the kata projects, based on branch
|
||||||
|
kata-branch.
|
||||||
|
${script_name} processes all the kata projects by default; alternatively you can
|
||||||
|
specify a subset of the projects as additional arguments.
|
||||||
|
|
||||||
|
Environment variables:
|
||||||
|
PUSH When set, push the packages sources to the openSUSE build
|
||||||
|
service.
|
||||||
|
|
||||||
|
LOCAL When set, build the packages locally.
|
||||||
|
|
||||||
|
EOT
|
||||||
|
exit "${exit_code}"
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
case "${1:-}" in
|
||||||
|
"-h"|"--help")
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
die "Invalid option: ${1:-}" "1"
|
||||||
|
;;
|
||||||
|
"")
|
||||||
|
die "missing branch" "1"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
branch="${1:-}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
local projectsList=("$@")
|
||||||
|
[ "${#projectsList[@]}" = "0" ] && projectsList=("${OBS_PKGS_PROJECTS[@]}")
|
||||||
|
|
||||||
|
# Make sure runtime is the last project
|
||||||
|
projectsList=($(echo "${projectsList[@]}" | sed -E "s/(^.*)(runtime)(.*$)/\1 \3 \2/"))
|
||||||
|
|
||||||
|
pushd "${script_dir}" >>/dev/null
|
||||||
|
local compare_result="$(./gen_versions_txt.sh --compare ${branch})"
|
||||||
|
[[ "$compare_result" =~ different ]] && die "$compare_result -- you need to run gen_versions_txt.sh"
|
||||||
|
for p in "${projectsList[@]}"; do
|
||||||
|
[ -d "$p" ] || die "$p is not a valid project directory"
|
||||||
|
update_cmd="./update.sh"
|
||||||
|
if [ -n "${PUSH}" ]; then
|
||||||
|
# push to obs
|
||||||
|
update_cmd+=" -p"
|
||||||
|
elif [ -n "${LOCAL}" ]; then
|
||||||
|
# local build
|
||||||
|
update_cmd+=" -l"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "======= Updating ${p} ======="
|
||||||
|
pushd "$p" >>/dev/null
|
||||||
|
bash -c "${update_cmd} ${branch}"
|
||||||
|
popd >>/dev/null
|
||||||
|
echo ""
|
||||||
|
done
|
||||||
|
popd >> /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
main $@
|
68
tools/packaging/obs-packaging/build_from_docker.sh
Executable file
68
tools/packaging/obs-packaging/build_from_docker.sh
Executable file
@ -0,0 +1,68 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
[ -z "${DEBUG}" ] || set -o xtrace
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
script_dir=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
|
||||||
|
script_name="$(basename "${BASH_SOURCE[0]}")"
|
||||||
|
#where packaing repo lives
|
||||||
|
packaging_repo_dir=$(cd "${script_dir}/.." && pwd)
|
||||||
|
export USE_DOCKER=1
|
||||||
|
http_proxy=${http_proxy:-}
|
||||||
|
https_proxy=${https_proxy:-}
|
||||||
|
no_proxy=${no_proxy:-}
|
||||||
|
PUSH=${PUSH:-}
|
||||||
|
BUILD_HEAD="${BUILD_HEAD:-false}"
|
||||||
|
|
||||||
|
# shellcheck source=scripts/obs-docker.sh
|
||||||
|
source "${script_dir}/scripts/obs-docker.sh"
|
||||||
|
|
||||||
|
GO_ARCH=$(go env GOARCH)
|
||||||
|
export GO_ARCH
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
msg="${1:-}"
|
||||||
|
exit_code=$"${2:-0}"
|
||||||
|
cat <<EOT
|
||||||
|
${msg}
|
||||||
|
Usage:
|
||||||
|
${script_name} <kata-branch>
|
||||||
|
EOT
|
||||||
|
exit "${exit_code}"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_image() {
|
||||||
|
pushd "${script_dir}/kata-containers-image/"
|
||||||
|
local branch="${1:-}"
|
||||||
|
if [ -z "${branch}" ]; then
|
||||||
|
echo "branch not provided"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if [ ${BUILD_HEAD} = "false" ] && "${script_dir}/download_image.sh" "${branch}"; then
|
||||||
|
echo "OK image downloaded"
|
||||||
|
find . -name 'kata-containers-'"${branch}"'-*.tar.gz' || die "Failed to find downloaded image"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
echo "Building image"
|
||||||
|
"${script_dir}/../obs-packaging/kata-containers-image/build_image.sh" -v "${branch}"
|
||||||
|
find . -name 'kata-containers-'"${branch}"'-*.tar.gz' || die "built image not found"
|
||||||
|
popd
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
local branch="${1:-}"
|
||||||
|
[ -n "${branch}" ] || usage "missing branch" "1"
|
||||||
|
#Build all kata packages
|
||||||
|
make -f "${script_dir}/Makefile" clean
|
||||||
|
get_image "${branch}"
|
||||||
|
docker_run "${packaging_repo_dir}/obs-packaging/build_all.sh ${branch}"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
191
tools/packaging/obs-packaging/create-repo-branch.sh
Executable file
191
tools/packaging/obs-packaging/create-repo-branch.sh
Executable file
@ -0,0 +1,191 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
[ -z "${DEBUG}" ] || set -o xtrace
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
script_dir=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
|
||||||
|
script_name="$(basename "${BASH_SOURCE[0]}")"
|
||||||
|
|
||||||
|
# shellcheck source=./../scripts/lib.sh
|
||||||
|
source "${script_dir}/../scripts/lib.sh"
|
||||||
|
|
||||||
|
# shellcheck source=scripts/obs-docker.sh
|
||||||
|
source "${script_dir}/scripts/obs-docker.sh"
|
||||||
|
|
||||||
|
readonly home_project="home:katacontainers"
|
||||||
|
readonly template_pkg="kata-pkg-template"
|
||||||
|
arch_target=${ARCH:-$(uname -m)}
|
||||||
|
|
||||||
|
# shellcheck source=scripts/obs-docker.sh
|
||||||
|
source "${script_dir}/scripts/obs-pkgs.sh"
|
||||||
|
|
||||||
|
pkg_exist() {
|
||||||
|
local project="$1"
|
||||||
|
local pkg="$2"
|
||||||
|
|
||||||
|
docker_run osc list "${project}" | grep "${pkg}" || return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# Array of repositories.
|
||||||
|
#
|
||||||
|
# Each element is comprised of multiple parts in the form:
|
||||||
|
#
|
||||||
|
# name::project::repository
|
||||||
|
#
|
||||||
|
typeset -a repos
|
||||||
|
read_repos(){
|
||||||
|
while read -r p; do
|
||||||
|
[[ "$p" != "#"* ]] || continue
|
||||||
|
repos+=("${p}")
|
||||||
|
echo "Adding distro: ${p}"
|
||||||
|
done < "${script_dir}/distros_${arch_target}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Array of maintainers
|
||||||
|
#
|
||||||
|
# Each element is comprised of multiple parts in the form:
|
||||||
|
#
|
||||||
|
# userid::role
|
||||||
|
#
|
||||||
|
typeset -a maintainers
|
||||||
|
|
||||||
|
read_maintainers(){
|
||||||
|
while read -r p; do
|
||||||
|
[[ "$p" != "#"* ]] || continue
|
||||||
|
maintainers+=("${p}::maintainer")
|
||||||
|
echo "Adding maintainer: ${p}"
|
||||||
|
done < "${script_dir}/maintainers"
|
||||||
|
}
|
||||||
|
|
||||||
|
create_repos_xml_nodes() {
|
||||||
|
for entry in "${repos[@]}"; do
|
||||||
|
[ -z "$entry" ] && die "found empty entry"
|
||||||
|
|
||||||
|
local name
|
||||||
|
local project
|
||||||
|
local repositories
|
||||||
|
name=$(echo "$entry" | awk -F"::" '{print $1;}')
|
||||||
|
project=$(echo "$entry" | awk -F"::" '{print $2;}')
|
||||||
|
repositories=$(echo "$entry" | awk -F"::" '{print $3;}')
|
||||||
|
|
||||||
|
[ -z "$name" ] && die "no name for entry '$entry'"
|
||||||
|
[ -z "$project" ] && die "no project for entry '$entry'"
|
||||||
|
[ -z "$repositories" ] && die "no repository for entry '$entry'"
|
||||||
|
|
||||||
|
echo " <repository name=\"${name}\">"
|
||||||
|
|
||||||
|
echo "${repositories}"| tr ',' '\n' | while read -r repository; do
|
||||||
|
echo " <path project=\"${project}\" repository=\"${repository}\"/>"
|
||||||
|
done
|
||||||
|
|
||||||
|
arch_target_obs=${arch_target}
|
||||||
|
if [ "$arch_target" == "ppc64" ]; then
|
||||||
|
arch_target_obs="ppc64le"
|
||||||
|
fi
|
||||||
|
echo " <arch>${arch_target_obs}</arch>"
|
||||||
|
echo " </repository>"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
create_maintainers_xml_nodes() {
|
||||||
|
for entry in "${maintainers[@]}"; do
|
||||||
|
[ -z "$entry" ] && die "found empty entry"
|
||||||
|
local userid=$(echo "$entry" | awk -F"::" '{print $1;}')
|
||||||
|
local role=$(echo "$entry" | awk -F"::" '{print $2;}')
|
||||||
|
[ -z "$userid" ] && die "no userid for entry '$entry'"
|
||||||
|
[ -z "$role" ] && die "no role for entry '$entry'"
|
||||||
|
echo " <person userid=\"${userid}\" role=\"${role}\"/>"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
create_publish_xml_node() {
|
||||||
|
# publishing is enabled by default, so only update the config
|
||||||
|
# when we want to disable publishing
|
||||||
|
if [ "${publish_repo:-true}" == "false" ];then
|
||||||
|
echo " <publish>"
|
||||||
|
echo " <disable/>"
|
||||||
|
echo " </publish>"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
create_meta_xml() {
|
||||||
|
project="${1:-}"
|
||||||
|
branch="${2:-}"
|
||||||
|
publish_repo="${3:-true}"
|
||||||
|
[ -n "${project}" ] || die "project is empty"
|
||||||
|
[ -n "${branch}" ] || die "branch is empty"
|
||||||
|
|
||||||
|
read_maintainers
|
||||||
|
read_repos
|
||||||
|
cat >meta_project.xml <<EOT
|
||||||
|
<project name="${project}">
|
||||||
|
<title>Branch project for Kata Containers branch ${branch}</title>
|
||||||
|
<description>This project is the Kata Containers branch ${branch}</description>
|
||||||
|
$(create_publish_xml_node)
|
||||||
|
$(create_maintainers_xml_nodes)
|
||||||
|
$(create_repos_xml_nodes)
|
||||||
|
</project>
|
||||||
|
EOT
|
||||||
|
}
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
msg="${1:-}"
|
||||||
|
exit_code=$"${2:-0}"
|
||||||
|
cat <<EOT
|
||||||
|
${msg}
|
||||||
|
Usage:
|
||||||
|
${script_name} <kata-branch>
|
||||||
|
EOT
|
||||||
|
exit "${exit_code}"
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
case "${1:-}" in
|
||||||
|
"-h"|"--help")
|
||||||
|
usage Help
|
||||||
|
;;
|
||||||
|
--ci)
|
||||||
|
create_ci_subproject=true
|
||||||
|
publish_repo=false
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
die "Invalid option: ${1:-}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
local branch="${1:-}"
|
||||||
|
[ -n "${branch}" ] || usage "missing branch" "1"
|
||||||
|
if [ "${create_ci_subproject:-false}" == "true" ];then
|
||||||
|
release_type="ci"
|
||||||
|
elif [ "$arch_target" == "ppc64le" ]; then
|
||||||
|
release_type="alpha"
|
||||||
|
else
|
||||||
|
release_type="releases"
|
||||||
|
fi
|
||||||
|
|
||||||
|
project_branch="${home_project}:${release_type}:${arch_target}:${branch}"
|
||||||
|
create_meta_xml "${project_branch}" "${branch}" "${publish_repo}"
|
||||||
|
info "Creating/Updating project with name ${project_branch}"
|
||||||
|
# Update /Create project metadata.
|
||||||
|
docker_run osc meta prj "${project_branch}" -F meta_project.xml
|
||||||
|
docker_run osc meta prjconf "${project_branch}" -F projectconfig
|
||||||
|
for pkg in "${OBS_PKGS_PROJECTS[@]}"; do
|
||||||
|
if ! pkg_exist "${project_branch}" "${pkg}"; then
|
||||||
|
echo "Package ${pkg} does not exit in ${project_branch}, creating ..."
|
||||||
|
docker_run osc branch "${home_project}" "${template_pkg}" "${project_branch}" "${pkg}"
|
||||||
|
fi
|
||||||
|
pkg_dir="${project_branch}/${pkg}"
|
||||||
|
[ -d "${pkg_dir}/.osc" ] || docker_run osc co "${pkg_dir}"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
main $@
|
12
tools/packaging/obs-packaging/distros_ppc64le
Normal file
12
tools/packaging/obs-packaging/distros_ppc64le
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# Repositories.
|
||||||
|
#
|
||||||
|
# Each element is comprised of multiple parts in the form:
|
||||||
|
#
|
||||||
|
# name::project::repository
|
||||||
|
#
|
||||||
|
CentOS_7::CentOS:CentOS-7::standard
|
||||||
|
Fedora_30::Fedora:30::standard
|
||||||
|
SLE_12_SP3::SUSE:SLE-12-SP3:GA::standard
|
||||||
|
openSUSE_Leap_15.0::openSUSE:Leap:15.0:Ports::ports
|
||||||
|
xUbuntu_16.04::Ubuntu:16.04:Ports::universe,update
|
||||||
|
xUbuntu_18.04::Ubuntu:18.04:Ports::universe
|
20
tools/packaging/obs-packaging/distros_x86_64
Normal file
20
tools/packaging/obs-packaging/distros_x86_64
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# Repositories.
|
||||||
|
#
|
||||||
|
# Each element is comprised of multiple parts in the form:
|
||||||
|
#
|
||||||
|
# name::project::repository
|
||||||
|
#
|
||||||
|
CentOS_7::CentOS:CentOS-7::standard
|
||||||
|
CentOS_8::CentOS:CentOS-8::standard
|
||||||
|
Debian_9::Debian:9.0::standard
|
||||||
|
# Qemu vanilla is broken see https://github.com/kata-containers/packaging/issues/1051
|
||||||
|
#Debian_10::Debian:10::standard
|
||||||
|
Fedora_30::Fedora:30::standard
|
||||||
|
# FIXME: https://github.com/kata-containers/packaging/issues/510
|
||||||
|
#RHEL_7::RedHat:RHEL-7::standard
|
||||||
|
SLE_15_SP1::SUSE:SLE-15-SP1:GA::standard
|
||||||
|
openSUSE_Leap_15.1::openSUSE:Leap:15.1::standard
|
||||||
|
openSUSE_Tumbleweed::openSUSE:Factory::snapshot
|
||||||
|
xUbuntu_16.04::Ubuntu:16.04::universe,universe-update,update
|
||||||
|
xUbuntu_18.04::Ubuntu:18.04::universe
|
||||||
|
xUbuntu_20.04::Ubuntu:20.04::universe
|
53
tools/packaging/obs-packaging/download_image.sh
Executable file
53
tools/packaging/obs-packaging/download_image.sh
Executable file
@ -0,0 +1,53 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright (c) 2019 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
set -o errtrace
|
||||||
|
|
||||||
|
script_dir=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
|
||||||
|
source "${script_dir}/scripts/obs-docker.sh"
|
||||||
|
source "${script_dir}/scripts/pkglib.sh"
|
||||||
|
|
||||||
|
handle_error() {
|
||||||
|
local exit_code="${?}"
|
||||||
|
local line_number="${1:-}"
|
||||||
|
echo "Failed at $line_number: ${BASH_COMMAND}"
|
||||||
|
exit "${exit_code}"
|
||||||
|
}
|
||||||
|
trap 'handle_error $LINENO' ERR
|
||||||
|
|
||||||
|
die() {
|
||||||
|
echo >&2 "ERROR: $*"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
BRANCH=${1:-master}
|
||||||
|
agent_repository="https://github.com/kata-containers/agent.git"
|
||||||
|
kata_version_url="https://raw.githubusercontent.com/kata-containers/runtime/${BRANCH}/VERSION"
|
||||||
|
|
||||||
|
echo "Download kata image from branch ${BRANCH}"
|
||||||
|
|
||||||
|
if ! version=$(curl -s --fail -L "${kata_version_url}"); then
|
||||||
|
die "failed to get version from branch ${BRANCH}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! out=$(git ls-remote "${agent_repository}"); then
|
||||||
|
die "failed to query agent git repo"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! tag_info=$(echo "$out" | grep "${version}^{}"); then
|
||||||
|
die "failed to find version info $version: ${out}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
commit=$(echo "$tag_info" | awk '{print $1}')
|
||||||
|
echo "$commit"
|
||||||
|
|
||||||
|
agent_repository="github.com/kata-containers/agent"
|
||||||
|
tarball_name="kata-containers-${version}-${commit:0:${short_commit_length}}-$(uname -m).tar.gz"
|
||||||
|
image_url="https://${agent_repository}/releases/download/${version}/${tarball_name}"
|
||||||
|
#curl -OL "${image_url}"
|
||||||
|
#tar xvf "${tarball_name}"
|
188
tools/packaging/obs-packaging/gen_versions_txt.sh
Executable file
188
tools/packaging/obs-packaging/gen_versions_txt.sh
Executable file
@ -0,0 +1,188 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright (c) 2018 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
[ -z "${DEBUG}" ] || set -x
|
||||||
|
set -e
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
readonly script_name="$(basename "${BASH_SOURCE[0]}")"
|
||||||
|
readonly script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
readonly versions_txt="versions.txt"
|
||||||
|
project="kata-containers"
|
||||||
|
|
||||||
|
source "${script_dir}/../scripts/lib.sh"
|
||||||
|
|
||||||
|
ARCH=${ARCH:-$(arch_to_golang "$(uname -m)")}
|
||||||
|
|
||||||
|
get_kata_version() {
|
||||||
|
cat "${script_dir}/../../../VERSION"
|
||||||
|
}
|
||||||
|
|
||||||
|
gen_version_file() {
|
||||||
|
local branch="$1"
|
||||||
|
local kata_version="$2"
|
||||||
|
local ref="refs/heads/${branch}"
|
||||||
|
|
||||||
|
if [ "${kata_version}" == "HEAD" ]; then
|
||||||
|
kata_version="${branch}"
|
||||||
|
ref="refs/heads/${branch}"
|
||||||
|
else
|
||||||
|
ref="refs/tags/${kata_version}^{}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
qemu_vanilla_branch=$(get_from_kata_deps "assets.hypervisor.qemu.version" "${kata_version}")
|
||||||
|
# Check if qemu.version can be used to get the version and hash, otherwise use qemu.tag
|
||||||
|
qemu_vanilla_ref="refs/heads/${qemu_vanilla_branch}"
|
||||||
|
if ! (git ls-remote --heads "https://github.com/qemu/qemu.git" | grep -q "refs/heads/${qemu_vanilla_branch}"); then
|
||||||
|
qemu_vanilla_branch=$(get_from_kata_deps "assets.hypervisor.qemu.tag" "${kata_version}")
|
||||||
|
qemu_vanilla_ref="refs/tags/${qemu_vanilla_branch}^{}"
|
||||||
|
fi
|
||||||
|
qemu_vanilla_version=$(curl -s -L "https://raw.githubusercontent.com/qemu/qemu/${qemu_vanilla_branch}/VERSION")
|
||||||
|
qemu_vanilla_hash=$(git ls-remote https://github.com/qemu/qemu.git | grep "${qemu_vanilla_ref}" | awk '{print $1}')
|
||||||
|
|
||||||
|
kernel_version=$(get_from_kata_deps "assets.kernel.version" "${kata_version}")
|
||||||
|
#Remove extra 'v'
|
||||||
|
kernel_version=${kernel_version#v}
|
||||||
|
|
||||||
|
golang_version=$(get_from_kata_deps "languages.golang.meta.newest-version" "${kata_version}")
|
||||||
|
|
||||||
|
# - is not a valid char for rpmbuild
|
||||||
|
# see https://github.com/semver/semver/issues/145
|
||||||
|
kata_version=$(get_kata_version)
|
||||||
|
kata_version=${kata_version/-/\~}
|
||||||
|
cat > "$versions_txt" <<EOT
|
||||||
|
# This is a generated file from ${script_name}
|
||||||
|
|
||||||
|
kata_version=${kata_version}
|
||||||
|
|
||||||
|
# Dependencies
|
||||||
|
kata_osbuilder_version=${kata_version}
|
||||||
|
|
||||||
|
qemu_vanilla_version=${qemu_vanilla_version}
|
||||||
|
qemu_vanilla_hash=${qemu_vanilla_hash}
|
||||||
|
|
||||||
|
kernel_version=${kernel_version}
|
||||||
|
|
||||||
|
# Golang
|
||||||
|
go_version=${golang_version}
|
||||||
|
EOT
|
||||||
|
}
|
||||||
|
|
||||||
|
die() {
|
||||||
|
local msg="${1:-}"
|
||||||
|
local print_usage=$"${2:-}"
|
||||||
|
if [ -n "${msg}" ]; then
|
||||||
|
echo -e "ERROR: ${msg}\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -n "${print_usage}" ] && usage 1
|
||||||
|
}
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
exit_code=$"${1:-0}"
|
||||||
|
cat <<EOT
|
||||||
|
Usage:
|
||||||
|
${script_name} [--compare | -h | --help] <kata-branch>
|
||||||
|
|
||||||
|
Generate a ${versions_txt} file, containing version numbers and commit hashes
|
||||||
|
of all the kata components under the git branch <kata-branch>.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
-h, --help Print this help.
|
||||||
|
--compare Only compare the kata version at branch <kata-branch> with the
|
||||||
|
one in ${versions_txt} and leave the file untouched.
|
||||||
|
--head Use <kata-branch>'s head to generate the versions file.
|
||||||
|
EOT
|
||||||
|
exit "${exit_code}"
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
local compareOnly=
|
||||||
|
local use_head=
|
||||||
|
local use_tag=
|
||||||
|
|
||||||
|
case "${1:-}" in
|
||||||
|
"-h"|"--help")
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
--compare)
|
||||||
|
compareOnly=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--head)
|
||||||
|
use_head=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--tag)
|
||||||
|
use_tag=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
die "Invalid option: ${1:-}" "1"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
local kata_version=
|
||||||
|
if [ -n "$use_tag" ]; then
|
||||||
|
if [ -n "${use_head}" ]; then
|
||||||
|
die "tag and head options are mutually exclusive"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We are generating versions based on the provided tag
|
||||||
|
local tag="${1:-}"
|
||||||
|
[ -n "${tag}" ] || die "No tag specified" "1"
|
||||||
|
|
||||||
|
# use the runtime's repository to determine branch information
|
||||||
|
local repo="github.com/kata-containers/kata-containers"
|
||||||
|
local repo_dir="kata-containers"
|
||||||
|
git clone --quiet "https://${repo}.git" "${repo_dir}"
|
||||||
|
pushd "${repo_dir}" >> /dev/null
|
||||||
|
local branch=$(git branch -r -q --contains "${tag}" | grep -E "master|stable|2.0-dev" | grep -v HEAD)
|
||||||
|
|
||||||
|
popd >> /dev/null
|
||||||
|
rm -rf ${repo_dir}
|
||||||
|
|
||||||
|
[ -n "${branch}" ] || die "branch for tag ${tag} not found"
|
||||||
|
|
||||||
|
# in the event this is on master as well as stable, or multiple stables, just pick the first branch
|
||||||
|
# (ie, 1.8.0-alpha0 may live on stable-1.8 as well as master: we'd just use master in this case)
|
||||||
|
branch=$(echo ${branch} | awk -F" " '{print $1}')
|
||||||
|
|
||||||
|
# format will be origin/<branch-name> - let's drop origin:
|
||||||
|
branch=$(echo ${branch} | awk -F"/" '{print $2}')
|
||||||
|
|
||||||
|
echo "generating versions for tag ${tag} which is on branch ${branch}"
|
||||||
|
kata_version=${tag}
|
||||||
|
else
|
||||||
|
local branch="${1:-}"
|
||||||
|
[ -n "${branch}" ] || die "No branch specified" "1"
|
||||||
|
|
||||||
|
if [ -n "${use_head}" ]; then
|
||||||
|
kata_version="HEAD"
|
||||||
|
else
|
||||||
|
kata_version=$(get_kata_version)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$compareOnly" ]; then
|
||||||
|
source "./${versions_txt}" || exit 1
|
||||||
|
kata_version=${kata_version/\~/-}
|
||||||
|
[ -n "${kata_version}" ] || die "${version_file} does not contain a valid kata_version variable"
|
||||||
|
# Replacing ~ with -, as - is not a valid char for rpmbuild
|
||||||
|
# see https://github.com/semver/semver/issues/145
|
||||||
|
[ "$(get_kata_version)" = "${kata_version/\~/-}" ] && compare_result="matches" || compare_result="is different from"
|
||||||
|
echo "${kata_version} in ${versions_txt} ${compare_result} the version at branch ${branch}"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
gen_version_file "${branch}" "${kata_version}"
|
||||||
|
}
|
||||||
|
|
||||||
|
main $@
|
2079
tools/packaging/obs-packaging/kata-containers-image/LICENSE
Normal file
2079
tools/packaging/obs-packaging/kata-containers-image/LICENSE
Normal file
File diff suppressed because it is too large
Load Diff
120
tools/packaging/obs-packaging/kata-containers-image/build_image.sh
Executable file
120
tools/packaging/obs-packaging/kata-containers-image/build_image.sh
Executable file
@ -0,0 +1,120 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
[ -z "${DEBUG}" ] || set -x
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
readonly script_name="$(basename "${BASH_SOURCE[0]}")"
|
||||||
|
readonly script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
readonly tmp_dir=$(mktemp -d -t build-image-tmp.XXXXXXXXXX)
|
||||||
|
export GOPATH="${tmp_dir}/go"
|
||||||
|
|
||||||
|
export GOPATH=${GOPATH:-${HOME}/go}
|
||||||
|
source "${script_dir}/../../scripts/lib.sh"
|
||||||
|
source "${script_dir}/../scripts/pkglib.sh"
|
||||||
|
|
||||||
|
exit_handler() {
|
||||||
|
[ -d "${tmp_dir}" ] && sudo rm -rf "$tmp_dir"
|
||||||
|
}
|
||||||
|
trap exit_handler EXIT
|
||||||
|
|
||||||
|
arch_target="$(uname -m)"
|
||||||
|
|
||||||
|
source "${script_dir}/../versions.txt"
|
||||||
|
|
||||||
|
readonly destdir="${PWD}"
|
||||||
|
|
||||||
|
build_initrd() {
|
||||||
|
sudo -E PATH="$PATH" make initrd \
|
||||||
|
DISTRO="$initrd_distro" \
|
||||||
|
DEBUG="${DEBUG:-}" \
|
||||||
|
OS_VERSION="${initrd_os_version}" \
|
||||||
|
ROOTFS_BUILD_DEST="${tmp_dir}/initrd-image" \
|
||||||
|
USE_DOCKER=1 \
|
||||||
|
AGENT_INIT="yes"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
build_image() {
|
||||||
|
sudo -E PATH="${PATH}" make image \
|
||||||
|
DISTRO="${img_distro}" \
|
||||||
|
DEBUG="${DEBUG:-}" \
|
||||||
|
USE_DOCKER="1" \
|
||||||
|
IMG_OS_VERSION="${img_os_version}" \
|
||||||
|
ROOTFS_BUILD_DEST="${tmp_dir}/rootfs-image"
|
||||||
|
}
|
||||||
|
|
||||||
|
create_tarball() {
|
||||||
|
agent_sha=$(get_repo_hash "${script_dir}")
|
||||||
|
#reduce sha size for short names
|
||||||
|
agent_sha=${agent_sha:0:${short_commit_length}}
|
||||||
|
tarball_name="kata-containers-${kata_version}-${agent_sha}-${arch_target}.tar.gz"
|
||||||
|
image_name="kata-containers-image_${img_distro}_${kata_version}_agent_${agent_sha}.img"
|
||||||
|
initrd_name="kata-containers-initrd_${initrd_distro}_${kata_version}_agent_${agent_sha}.initrd"
|
||||||
|
|
||||||
|
mv "${script_dir}/../../../osbuilder/kata-containers.img" "${image_name}"
|
||||||
|
mv "${script_dir}/../../../osbuilder/kata-containers-initrd.img" "${initrd_name}"
|
||||||
|
sudo tar cfzv "${tarball_name}" "${initrd_name}" "${image_name}"
|
||||||
|
}
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
return_code=${1:-0}
|
||||||
|
cat <<EOT
|
||||||
|
Create image and initrd in a tarball for kata containers.
|
||||||
|
Use it to build an image to distribute kata.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
${script_name} [options]
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-v <version> : Kata version to build images. Use kata release for
|
||||||
|
for agent and osbuilder.
|
||||||
|
|
||||||
|
EOT
|
||||||
|
|
||||||
|
exit "${return_code}"
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
while getopts "v:h" opt; do
|
||||||
|
case "$opt" in
|
||||||
|
h) usage 0 ;;
|
||||||
|
v) kata_version="${OPTARG}" ;;
|
||||||
|
*)
|
||||||
|
echo "Invalid option $opt"
|
||||||
|
usage 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
install_yq
|
||||||
|
|
||||||
|
#image information
|
||||||
|
img_distro=$(get_from_kata_deps "assets.image.architecture.${arch_target}.name" "${kata_version}")
|
||||||
|
#In old branches this is not defined, use a default
|
||||||
|
img_distro=${img_distro:-clearlinux}
|
||||||
|
img_os_version=$(get_from_kata_deps "assets.image.architecture.${arch_target}.version" "${kata_version}")
|
||||||
|
|
||||||
|
#initrd information
|
||||||
|
initrd_distro=$(get_from_kata_deps "assets.initrd.architecture.${arch_target}.name" "${kata_version}")
|
||||||
|
#In old branches this is not defined, use a default
|
||||||
|
initrd_distro=${initrd_distro:-alpine}
|
||||||
|
initrd_os_version=$(get_from_kata_deps "assets.image.architecture.${arch_target}.version" "${kata_version}")
|
||||||
|
|
||||||
|
shift "$((OPTIND - 1))"
|
||||||
|
pushd "${script_dir}/../../../osbuilder/"
|
||||||
|
build_initrd
|
||||||
|
build_image
|
||||||
|
create_tarball
|
||||||
|
cp "${tarball_name}" "${destdir}"
|
||||||
|
popd
|
||||||
|
}
|
||||||
|
|
||||||
|
main $*
|
@ -0,0 +1 @@
|
|||||||
|
9
|
@ -0,0 +1,12 @@
|
|||||||
|
Source: kata-containers-image
|
||||||
|
Section: devel
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Kata containers team <https://github.com/kata-containers/>
|
||||||
|
Standards-Version: 3.9.6
|
||||||
|
Homepage: https://katacontainers.io
|
||||||
|
Build-Depends: debhelper (>= 9), flex, bison
|
||||||
|
|
||||||
|
Package: kata-containers-image
|
||||||
|
Architecture: @deb_arch@
|
||||||
|
Description: Kata containers image
|
||||||
|
|
@ -0,0 +1 @@
|
|||||||
|
usr/share/kata-containers
|
17
tools/packaging/obs-packaging/kata-containers-image/debian.rules-template
Executable file
17
tools/packaging/obs-packaging/kata-containers-image/debian.rules-template
Executable file
@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/make -f
|
||||||
|
|
||||||
|
%:
|
||||||
|
dh $@
|
||||||
|
override_dh_auto_build:
|
||||||
|
|
||||||
|
override_dh_auto_install:
|
||||||
|
mkdir -p debian/kata-containers-image ; \
|
||||||
|
tar xzf /usr/src/packages/SOURCES/kata-containers.tar.gz -C /usr/src/packages/SOURCES/ ; \
|
||||||
|
image=$$(find /usr/src/packages/SOURCES/ -type f -name '*.img') ; \
|
||||||
|
initrd=$$(find /usr/src/packages/SOURCES/ -type f -name '*.initrd') ; \
|
||||||
|
install -m 0400 -D $${image} ./debian/kata-containers-image/usr/share/kata-containers/ ; \
|
||||||
|
install -m 0400 -D $${initrd} ./debian/kata-containers-image/usr/share/kata-containers/ ; \
|
||||||
|
ln -s /usr/share/kata-containers/$$(basename $${image}) \
|
||||||
|
./debian/kata-containers-image/usr/share/kata-containers/kata-containers.img ; \
|
||||||
|
ln -s /usr/share/kata-containers/$$(basename $${initrd}) \
|
||||||
|
./debian/kata-containers-image/usr/share/kata-containers/kata-containers-initrd.img ;
|
@ -0,0 +1,14 @@
|
|||||||
|
Format: 3.0 (quilt)
|
||||||
|
Source: kata-containers-image
|
||||||
|
Version: @VERSION@-@RELEASE@
|
||||||
|
Section: devel
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Kata containers team <https://github.com/kata-containers/>
|
||||||
|
Build-Depends: debhelper (>= 9), flex, bison
|
||||||
|
Standards-Version: 3.9.6
|
||||||
|
Homepage: https://katacontainers.io
|
||||||
|
Debtransform-Tar: kata-containers.tar.gz
|
||||||
|
|
||||||
|
Package: kata-containers-image
|
||||||
|
Architecture: @deb_arch@
|
||||||
|
Description: Kata containers image
|
@ -0,0 +1,43 @@
|
|||||||
|
Name: kata-containers-image
|
||||||
|
Version: @VERSION@
|
||||||
|
Release: @RELEASE@
|
||||||
|
License: Artistic-1.0 and BSD-3-Clause and BSD-4-Clause-UC and GFDL-1.3 and GPL-2.0 and GPL-2.0+ and GPL-3.0 and GPL-3.0+ and LGPL-2.0 and LGPL-2.0+ and LGPL-2.1 and LGPL-3.0+ and MIT and MPL-2.0
|
||||||
|
Summary: Kata Containers Image
|
||||||
|
Url: https://github.com/kata-containers/osbuilder
|
||||||
|
Group: image
|
||||||
|
Source0: kata-containers.tar.gz
|
||||||
|
Source1: LICENSE
|
||||||
|
|
||||||
|
%global debug_package %{nil}
|
||||||
|
|
||||||
|
@RPM_PATCH_LIST@
|
||||||
|
|
||||||
|
%description
|
||||||
|
Kata Containers rootfs image
|
||||||
|
|
||||||
|
%prep
|
||||||
|
# Patches
|
||||||
|
@RPM_APPLY_PATCHES@
|
||||||
|
|
||||||
|
%install
|
||||||
|
ImageDir=%{buildroot}/usr/share/kata-containers
|
||||||
|
mkdir -p ${ImageDir}
|
||||||
|
|
||||||
|
pushd %{_sourcedir}
|
||||||
|
tar xfz kata-containers.tar.gz
|
||||||
|
image=$(find ${PWD} -type f -name '*.img')
|
||||||
|
initrd=$(find ${PWD} -type f -name '*.initrd')
|
||||||
|
popd
|
||||||
|
install -m 0400 -p "${image}" ${ImageDir}/
|
||||||
|
install -m 0400 -p "${initrd}" ${ImageDir}/
|
||||||
|
ln -s /usr/share/kata-containers/$(basename "${image}") ${ImageDir}/kata-containers.img
|
||||||
|
ln -s /usr/share/kata-containers/$(basename "${initrd}") ${ImageDir}/kata-containers-initrd.img
|
||||||
|
|
||||||
|
%files
|
||||||
|
%if 0%{?suse_version}
|
||||||
|
%dir /usr/share/kata-containers
|
||||||
|
%endif
|
||||||
|
/usr/share/kata-containers/kata-containers-image*.img
|
||||||
|
/usr/share/kata-containers/kata-containers.img
|
||||||
|
/usr/share/kata-containers/kata-containers-initrd*.initrd
|
||||||
|
/usr/share/kata-containers/kata-containers-initrd.img
|
62
tools/packaging/obs-packaging/kata-containers-image/update.sh
Executable file
62
tools/packaging/obs-packaging/kata-containers-image/update.sh
Executable file
@ -0,0 +1,62 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||||
|
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||||
|
|
||||||
|
# Automation script to create specs to build kata-containers-image
|
||||||
|
# Default image to build is the one specified in file versions.txt
|
||||||
|
# located at the root of the repository.
|
||||||
|
|
||||||
|
[ -z "${DEBUG}" ] || set -o xtrace
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
source ../versions.txt
|
||||||
|
source ../scripts/pkglib.sh
|
||||||
|
|
||||||
|
SCRIPT_NAME=$0
|
||||||
|
SCRIPT_DIR=$(dirname $0)
|
||||||
|
PKG_NAME="kata-containers-image"
|
||||||
|
VERSION=$kata_osbuilder_version
|
||||||
|
|
||||||
|
GENERATED_FILES=(kata-containers-image.spec kata-containers-image.dsc debian.rules debian.control)
|
||||||
|
STATIC_FILES=(LICENSE debian.compat debian.dirs kata-containers.tar.gz)
|
||||||
|
|
||||||
|
# Parse arguments
|
||||||
|
cli "$@"
|
||||||
|
|
||||||
|
[ "$VERBOSE" == "true" ] && set -x
|
||||||
|
PROJECT_REPO=${PROJECT_REPO:-home:${OBS_PROJECT}:${OBS_SUBPROJECT}/kata-containers-image}
|
||||||
|
RELEASE=$(get_obs_pkg_release "${PROJECT_REPO}")
|
||||||
|
((RELEASE++))
|
||||||
|
|
||||||
|
function check_image() {
|
||||||
|
[ ! -f "${SCRIPT_DIR}/kata-containers.tar.gz" ] && die "No kata-containers.tar.gz found!\nUse the build_image.sh script" || echo "Image: OK"
|
||||||
|
}
|
||||||
|
|
||||||
|
replace_list=(
|
||||||
|
"VERSION=$VERSION"
|
||||||
|
"RELEASE=$RELEASE"
|
||||||
|
)
|
||||||
|
|
||||||
|
verify
|
||||||
|
rm -rf kata-containers.tar.gz
|
||||||
|
image_tarball=$(find . -name 'kata-containers-'"${VERSION/\~/-}"'-'"${kata_agent_hash:0:${short_commit_length}}"'*-*.tar.gz')
|
||||||
|
[ -f "${image_tarball}" ] || die "image not found"
|
||||||
|
cp "${image_tarball}" kata-containers.tar.gz
|
||||||
|
|
||||||
|
check_image
|
||||||
|
echo "Verify succeed."
|
||||||
|
get_git_info
|
||||||
|
#TODO delete me: used by changelog_update
|
||||||
|
hash_tag="nocommit"
|
||||||
|
changelog_update $VERSION
|
||||||
|
generate_files "$SCRIPT_DIR" "${replace_list[@]}"
|
||||||
|
build_pkg "${PROJECT_REPO}"
|
@ -0,0 +1,25 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) 2018 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
# Installation variables
|
||||||
|
DESTDIR :=
|
||||||
|
DEFAULTSDIR := /usr/share/
|
||||||
|
PROJECT_DIR := Kata-containers
|
||||||
|
VMLINUX := @VMLINUX@
|
||||||
|
VMLINUZ := @VMLINUZ@
|
||||||
|
|
||||||
|
DESTSYSCONFDIR := $(abspath $(DESTDIR)/$(DEFAULTSDIR)/$(PROJECT_DIR))
|
||||||
|
|
||||||
|
|
||||||
|
VMLINUX_DEST := $(abspath $(DESTSYSCONFDIR)/$(VMLINUX))
|
||||||
|
VMLINUZ_DEST := $(abspath $(DESTSYSCONFDIR)/$(VMLINUZ))
|
||||||
|
|
||||||
|
|
||||||
|
install:
|
||||||
|
install -D --owner root --group root --mode 0644 $(VMLINUX) $(VMLINUX_DEST)
|
||||||
|
install -D --owner root --group root --mode 0644 $(VMLINUZ) $(VMLINUZ_DEST)
|
||||||
|
ln -sf $(VMLINUX_DEST) $(DESTSYSCONFDIR)/vmlinuz.container
|
||||||
|
ln -sf $(VMLINUZ_DEST) $(DESTSYSCONFDIR)/vmlinux.container
|
@ -0,0 +1,13 @@
|
|||||||
|
<!--- XML Structure defined here: https://en.opensuse.org/openSUSE:Build_Service_Concept_SourceService -->
|
||||||
|
<services>
|
||||||
|
<service name="download_url">
|
||||||
|
<param name="protocol">https</param>
|
||||||
|
<param name="host">cdn.kernel.org</param>
|
||||||
|
<param name="path">/pub/linux/kernel/v5.x/linux-@VERSION@.tar.xz</param>
|
||||||
|
</service>
|
||||||
|
<service name="verify_file">
|
||||||
|
<param name="file">_service:download_url:linux-@VERSION@.tar.xz</param>
|
||||||
|
<param name="verifier">sha256</param>
|
||||||
|
<param name="checksum">@KERNEL_SHA256@</param>
|
||||||
|
</service>
|
||||||
|
</services>
|
@ -0,0 +1 @@
|
|||||||
|
9
|
@ -0,0 +1,18 @@
|
|||||||
|
Source: kata-linux-container
|
||||||
|
Section: devel
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Kata containers team <https://github.com/kata-containers/>
|
||||||
|
Build-Depends: debhelper (>= 9), cpio, libelf-dev, libnewt-dev, libiberty-dev, rsync, libdw-dev, libpci-dev, pkg-config, flex, bison, libunwind8-dev, openssl, libaudit-dev, bc, python-dev, gawk, autoconf, automake, libtool, libssl-dev
|
||||||
|
Standards-Version: 3.9.6
|
||||||
|
Homepage: https://katacontainers.io
|
||||||
|
|
||||||
|
Package: kata-linux-container
|
||||||
|
Architecture: @deb_arch@
|
||||||
|
Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends},
|
||||||
|
Description: linux kernel optimised for container-like workloads.
|
||||||
|
Linux kernel optimised for container-like workloads
|
||||||
|
|
||||||
|
Package: kata-linux-container-debug
|
||||||
|
Architecture: @deb_arch@
|
||||||
|
Description: Debug components for the kata-linux-container package.
|
||||||
|
This package includes the kernel config and the kernel map.
|
@ -0,0 +1,30 @@
|
|||||||
|
This is the Kata containers prepackaged version of the Linux kernel.
|
||||||
|
Linux was written by Linus Torvalds <Linus.Torvalds@cs.Helsinki.FI>
|
||||||
|
and others.
|
||||||
|
|
||||||
|
This package was put together by the Kata containers team, from
|
||||||
|
sources retrieved from upstream linux git.
|
||||||
|
The sources may be found at most Linux download websites, including
|
||||||
|
https://www.kernel.org/pub/linux/kernel/
|
||||||
|
|
||||||
|
This package is currently maintained by the
|
||||||
|
Kata containers team <https://github.com/kata-containers/
|
||||||
|
|
||||||
|
Linux is copyrighted by Linus Torvalds and others.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; version 2 dated June, 1991.
|
||||||
|
|
||||||
|
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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
On your Linux system, the complete text of the GNU General
|
||||||
|
Public License v2 can be found in `/usr/share/common-licenses/GPL-2'.
|
||||||
|
copyright (END)
|
@ -0,0 +1 @@
|
|||||||
|
usr/share/Kata-containers
|
63
tools/packaging/obs-packaging/linux-container/debian.rules
Executable file
63
tools/packaging/obs-packaging/linux-container/debian.rules
Executable file
@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/make -f
|
||||||
|
include /usr/share/dpkg/default.mk
|
||||||
|
KernelDir=debian/kata-linux-container/usr/share/kata-containers
|
||||||
|
DebugDir=debian/kata-linux-container-debug/usr/share/kata-containers
|
||||||
|
KernelVer=${DEB_VERSION_UPSTREAM_REVISION}.container
|
||||||
|
HOST_ARCH=$(shell arch)
|
||||||
|
KATA_MULTIARCH="/usr/src/packages/SOURCES/kata-multiarch.sh"
|
||||||
|
KERNEL_ARCH=$(shell /bin/bash $(KATA_MULTIARCH) -a $(HOST_ARCH))
|
||||||
|
KERNEL_IMAGE=$(shell /bin/bash $(KATA_MULTIARCH) -i $(HOST_ARCH))
|
||||||
|
KERNEL_CONFIGS=kata-kernel-configs
|
||||||
|
KERNEL_FRAG_COMMON_DIR="$(KERNEL_CONFIGS)/fragments/common"
|
||||||
|
KERNEL_FRAG_ARCH_DIR="$(KERNEL_CONFIGS)/fragments/$(KERNEL_ARCH)"
|
||||||
|
|
||||||
|
# used in merge_config.sh
|
||||||
|
export KCONFIG_CONFIG=.config
|
||||||
|
export ARCH=$(KERNEL_ARCH)
|
||||||
|
|
||||||
|
%:
|
||||||
|
dh $@
|
||||||
|
|
||||||
|
override_dh_auto_build:
|
||||||
|
sed -i "s/^EXTRAVERSION.*/EXTRAVERSION = -$$(echo $(KernelVer) | cut -d'-' -f2)/" Makefile
|
||||||
|
tar xzf /usr/src/packages/SOURCES/$(KERNEL_CONFIGS).tar.gz
|
||||||
|
rm -f .config
|
||||||
|
find $(KERNEL_CONFIGS) -name "$(KERNEL_ARCH)_kata_kvm_*" -exec cp {} .config \;
|
||||||
|
if [ ! -f .config ]; then \
|
||||||
|
scripts/kconfig/merge_config.sh -r -n $(KERNEL_FRAG_COMMON_DIR)/*.conf $(KERNEL_FRAG_ARCH_DIR)/* ; \
|
||||||
|
if [ ! -f .config ]; then \
|
||||||
|
echo "ERROR: cannot find the kernel config file for the $(KERNEL_ARCH) architecture"; \
|
||||||
|
exit 1; \
|
||||||
|
fi \
|
||||||
|
fi
|
||||||
|
|
||||||
|
# https://github.com/kata-containers/packaging/issues/394 enable reproducible builds:
|
||||||
|
export KBUILD_BUILD_USER=katabuilduser
|
||||||
|
export KBUILD_BUILD_HOST=katabuildhost
|
||||||
|
# Default to zero seconds after midnight 1970-01-01 (the epoch)
|
||||||
|
export KBUILD_BUILD_TIMESTAMP="$(LANG=C date -u -d "@${SOURCE_DATE_EPOCH:-0}")"
|
||||||
|
make -s ARCH=$(KERNEL_ARCH) oldconfig > /dev/null
|
||||||
|
make -s CONFIG_DEBUG_SECTION_MISMATCH=y ARCH=$(KERNEL_ARCH)
|
||||||
|
|
||||||
|
override_dh_auto_install:
|
||||||
|
|
||||||
|
override_dh_auto_clean:
|
||||||
|
|
||||||
|
override_dh_install:
|
||||||
|
dh_install
|
||||||
|
mkdir -p $(DebugDir)
|
||||||
|
mkdir -p $(KernelDir)
|
||||||
|
install -m 644 .config $(DebugDir)/config-$(KernelVer)
|
||||||
|
install -m 644 System.map $(DebugDir)/System.map-$(KernelVer)
|
||||||
|
if [ -n "$(KERNEL_IMAGE)" ]; then \
|
||||||
|
cp $$(realpath $(KERNEL_IMAGE)) $(KernelDir)/vmlinuz-$(KernelVer); \
|
||||||
|
chmod 755 $(KernelDir)/vmlinuz-$(KernelVer); \
|
||||||
|
ln -sf vmlinuz-$(KernelVer) $(KernelDir)/vmlinuz.container; \
|
||||||
|
fi
|
||||||
|
cp vmlinux $(KernelDir)/vmlinux-$(KernelVer)
|
||||||
|
chmod 755 $(KernelDir)/vmlinux-$(KernelVer)
|
||||||
|
ln -sf vmlinux-$(KernelVer) $(KernelDir)/vmlinux.container
|
||||||
|
|
||||||
|
override_dh_strip:
|
||||||
|
|
||||||
|
override_dh_shlibdeps:
|
@ -0,0 +1,20 @@
|
|||||||
|
Format: 3.0 (quilt)
|
||||||
|
Source: kata-linux-container
|
||||||
|
Version: @VERSION@.@CONFIG_VERSION@-@RELEASE@
|
||||||
|
Section: devel
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Kata containers team <https://github.com/kata-containers/>
|
||||||
|
Build-Depends: debhelper (>= 9), cpio, libelf-dev, libnewt-dev, libiberty-dev, rsync, libdw-dev, libpci-dev, pkg-config, flex, bison, libunwind8-dev, openssl, libaudit-dev, bc, python-dev, gawk, autoconf, automake, libtool, libssl-dev
|
||||||
|
Standards-Version: 3.9.6
|
||||||
|
Homepage: https://katacontainers.io
|
||||||
|
Debtransform-Tar: linux-@VERSION@.tar.xz
|
||||||
|
|
||||||
|
Package: kata-linux-container
|
||||||
|
Architecture: @deb_arch@
|
||||||
|
Description: linux kernel optimised for container-like workloads.
|
||||||
|
Linux kernel optimised for container-like workloads
|
||||||
|
|
||||||
|
Package: kata-linux-container-debug
|
||||||
|
Architecture: @deb_arch@
|
||||||
|
Description: Debug components for the kata-linux-container package.
|
||||||
|
This package includes the kernel config and the kernel map.
|
@ -0,0 +1,165 @@
|
|||||||
|
#
|
||||||
|
# This is a special configuration of the Linux kernel, aimed exclusively
|
||||||
|
# for running inside a container
|
||||||
|
# This specialization allows us to optimize memory footprint and boot time.
|
||||||
|
#
|
||||||
|
|
||||||
|
Name: kata-linux-container
|
||||||
|
Version: @VERSION@.@CONFIG_VERSION@
|
||||||
|
Release: @RELEASE@
|
||||||
|
License: GPL-2.0
|
||||||
|
Summary: The Linux kernel optimized for running inside a container
|
||||||
|
Group: System/Kernel
|
||||||
|
Url: http://www.kernel.org/
|
||||||
|
Source0: https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-@VERSION@.tar.xz
|
||||||
|
Source1: kata-kernel-configs.tar.gz
|
||||||
|
Source2: kata-multiarch.sh
|
||||||
|
|
||||||
|
%define kversion %{version}-%{release}.container
|
||||||
|
|
||||||
|
BuildRequires: bash >= 2.03
|
||||||
|
BuildRequires: bc
|
||||||
|
BuildRequires: binutils-devel
|
||||||
|
|
||||||
|
%if 0%{?rhel_version}
|
||||||
|
BuildRequires: elfutils-devel
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if 0%{?suse_version}
|
||||||
|
BuildRequires: libelf-devel
|
||||||
|
BuildRequires: fdupes
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if 0%{?fedora} || 0%{?centos} <= 7
|
||||||
|
BuildRequires: pkgconfig(libelf)
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if 0%{?centos} >= 8
|
||||||
|
BuildRequires: elfutils-libelf-devel
|
||||||
|
%endif
|
||||||
|
|
||||||
|
BuildRequires: make >= 3.78
|
||||||
|
BuildRequires: openssl-devel
|
||||||
|
BuildRequires: flex
|
||||||
|
BuildRequires: bison
|
||||||
|
|
||||||
|
# don't strip .ko files!
|
||||||
|
%global __os_install_post %{nil}
|
||||||
|
%define debug_package %{nil}
|
||||||
|
%define __strip /bin/true
|
||||||
|
|
||||||
|
# Patches
|
||||||
|
@RPM_PATCH_LIST@
|
||||||
|
|
||||||
|
%description
|
||||||
|
The Linux kernel.
|
||||||
|
|
||||||
|
%package debug
|
||||||
|
Summary: Debug components for the %{name} package
|
||||||
|
Group: System/Kernel
|
||||||
|
|
||||||
|
%description debug
|
||||||
|
Debug components for the kata-linux-container package.
|
||||||
|
This package includes the kernel config and the kernel map.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q -n linux-@VERSION@
|
||||||
|
%setup -q -T -D -n linux-@VERSION@ -a 1
|
||||||
|
cp %{SOURCE2} .
|
||||||
|
chmod +x $(basename %{SOURCE2})
|
||||||
|
|
||||||
|
# Patches
|
||||||
|
@RPM_APPLY_PATCHES@
|
||||||
|
|
||||||
|
%build
|
||||||
|
|
||||||
|
BuildKernel() {
|
||||||
|
local kernelArch=$(./kata-multiarch.sh -a %{_arch})
|
||||||
|
ExtraVer="-%{release}.container"
|
||||||
|
|
||||||
|
perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = ${ExtraVer}/" Makefile
|
||||||
|
|
||||||
|
make -s mrproper
|
||||||
|
|
||||||
|
# Runtime .config selection based on kernelArch
|
||||||
|
rm -f .config
|
||||||
|
find kata-kernel-configs -name "${kernelArch}_kata_kvm_*" -exec cp {} .config \;
|
||||||
|
if [ ! -f .config ]; then
|
||||||
|
# Use fragments to generate the .config
|
||||||
|
frag_dir="kata-kernel-configs/fragments"
|
||||||
|
KCONFIG_CONFIG=.config ARCH=${kernelArch} scripts/kconfig/merge_config.sh -r -n ${frag_dir}/common/*.conf ${frag_dir}/${kernelArch}/*
|
||||||
|
fi
|
||||||
|
[ -f .config ] || (echo "ERROR: cannot find the kernel config file for the ${kernelArch} architecture"; exit 1)
|
||||||
|
|
||||||
|
%if 0%{?rhel_version} || 0%{?suse_version}
|
||||||
|
# RHEL in OBS has updated gcc.
|
||||||
|
# https://github.com/kata-containers/packaging/pull/370#issuecomment-469620154
|
||||||
|
sed -i -e 's/CONFIG_RETPOLINE=y/CONFIG_RETPOLINE=n/g' .config
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if 0%{?fedora}
|
||||||
|
#Fedora uses gcc 8, build is failing due to warnings.
|
||||||
|
export CFLAGS="-Wno-error=restrict"
|
||||||
|
export EXTRA_CFLAGS="-Wno-format-truncation -Wno-cast-function-type -Wno-error=restrict -Wno-error"
|
||||||
|
%endif
|
||||||
|
# https://github.com/kata-containers/packaging/issues/394 enable reproducible builds:
|
||||||
|
export KBUILD_BUILD_USER=katabuilduser
|
||||||
|
export KBUILD_BUILD_HOST=katabuildhost
|
||||||
|
# Default to zero seconds after midnight 1970-01-01 (the epoch)
|
||||||
|
export KBUILD_BUILD_TIMESTAMP="$(LANG=C date -u -d "@${SOURCE_DATE_EPOCH:-0}")"
|
||||||
|
|
||||||
|
make -s ARCH=$kernelArch oldconfig > /dev/null
|
||||||
|
make -s CONFIG_DEBUG_SECTION_MISMATCH=y %{?_smp_mflags} ARCH=$kernelArch %{?sparse_mflags} || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
BuildKernel
|
||||||
|
|
||||||
|
%install
|
||||||
|
|
||||||
|
InstallKernel() {
|
||||||
|
compressedImage=$(./kata-multiarch.sh -i %{_arch})
|
||||||
|
rawImage="vmlinux"
|
||||||
|
KernelVer=%{kversion}
|
||||||
|
KernelDir=%{buildroot}/usr/share/kata-containers
|
||||||
|
|
||||||
|
mkdir -p ${KernelDir}
|
||||||
|
|
||||||
|
if [ -n "$compressedImage" ]; then
|
||||||
|
cp "$compressedImage" ${KernelDir}/vmlinuz-$KernelVer
|
||||||
|
chmod 755 ${KernelDir}/vmlinuz-$KernelVer
|
||||||
|
ln -sf vmlinuz-$KernelVer ${KernelDir}/vmlinuz.container
|
||||||
|
fi
|
||||||
|
|
||||||
|
cp $rawImage ${KernelDir}/vmlinux-$KernelVer
|
||||||
|
chmod 755 ${KernelDir}/vmlinux-$KernelVer
|
||||||
|
ln -sf vmlinux-$KernelVer ${KernelDir}/vmlinux.container
|
||||||
|
|
||||||
|
cp .config "${KernelDir}/config-${KernelVer}"
|
||||||
|
cp System.map "${KernelDir}/System.map-${KernelVer}"
|
||||||
|
|
||||||
|
rm -f %{buildroot}/usr/lib/modules/$KernelVer/build
|
||||||
|
rm -f %{buildroot}/usr/lib/modules/$KernelVer/source
|
||||||
|
}
|
||||||
|
|
||||||
|
InstallKernel
|
||||||
|
|
||||||
|
rm -rf %{buildroot}/usr/lib/firmware
|
||||||
|
|
||||||
|
%if 0%{?suse_version}
|
||||||
|
%fdupes -s %{buildroot}
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%files
|
||||||
|
%dir /usr/share/kata-containers
|
||||||
|
/usr/share/kata-containers/vmlinux-%{kversion}
|
||||||
|
/usr/share/kata-containers/vmlinux.container
|
||||||
|
|
||||||
|
%ifnarch ppc64le
|
||||||
|
/usr/share/kata-containers/vmlinuz-%{kversion}
|
||||||
|
/usr/share/kata-containers/vmlinuz.container
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%files debug
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
/usr/share/kata-containers/config-%{kversion}
|
||||||
|
/usr/share/kata-containers/System.map-%{kversion}
|
@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Convert architecture to the name used by the Linux kernel build system
|
||||||
|
arch_to_kernel() {
|
||||||
|
local -r arch="$1"
|
||||||
|
|
||||||
|
case "${arch}" in
|
||||||
|
aarch64) echo "arm64";;
|
||||||
|
ppc64le) echo "powerpc";;
|
||||||
|
s390|s390x) echo "s390";;
|
||||||
|
x86_64) echo "${arch}";;
|
||||||
|
*) echo "unsupported architecture: ${arch}" >&2; exit 1;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Convert architecture to the location of the compressed linux image
|
||||||
|
arch_to_image() {
|
||||||
|
local -r arch="$1"
|
||||||
|
case "${arch}" in
|
||||||
|
aarch64)
|
||||||
|
echo "arch/arm64/boot/Image"
|
||||||
|
;;
|
||||||
|
ppc64le)
|
||||||
|
# No compressed image
|
||||||
|
;;
|
||||||
|
s390|s390x)
|
||||||
|
echo "arch/s390/boot/image"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "arch/${arch}/boot/bzImage"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "$(basename $0) FLAG ARCHITECTURE"
|
||||||
|
echo "Allowed flags:"
|
||||||
|
echo " -a : Print kernel architecture"
|
||||||
|
echo " -i : Print kernel compressed image location (may be empty)"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$#" != "2" ]; then
|
||||||
|
echo -e "Invalid options\n\n$(usage)" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
-a)
|
||||||
|
arch_to_kernel $2
|
||||||
|
;;
|
||||||
|
-i)
|
||||||
|
arch_to_image $2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -e "Invalid options\n\n$(usage)" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
72
tools/packaging/obs-packaging/linux-container/update.sh
Executable file
72
tools/packaging/obs-packaging/linux-container/update.sh
Executable file
@ -0,0 +1,72 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||||
|
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||||
|
|
||||||
|
# Automation script to create specs to build Kata containers kernel
|
||||||
|
[ -z "${DEBUG}" ] || set -o xtrace
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
source ../versions.txt
|
||||||
|
source ../scripts/pkglib.sh
|
||||||
|
|
||||||
|
SCRIPT_NAME=$0
|
||||||
|
SCRIPT_DIR=$(dirname $0)
|
||||||
|
|
||||||
|
PKG_NAME="kata-linux-container"
|
||||||
|
VERSION=$kernel_version
|
||||||
|
KATA_CONFIG_VERSION=$(cat "${SCRIPT_DIR}/../../kernel/kata_config_version")
|
||||||
|
|
||||||
|
KR_SERIES="$(echo $VERSION | cut -d "." -f 1).x"
|
||||||
|
KR_LTS=$(echo $VERSION | cut -d "." -f 1,2)
|
||||||
|
ln -sfT "${SCRIPT_DIR}/../../kernel/patches/${KR_LTS}.x" "${SCRIPT_DIR}/patches"
|
||||||
|
|
||||||
|
KR_PATCHES=$(eval find "${SCRIPT_DIR}/patches" -type f -name "*.patch")
|
||||||
|
|
||||||
|
KR_REL=https://www.kernel.org/releases.json
|
||||||
|
KR_SHA=https://cdn.kernel.org/pub/linux/kernel/v"${KR_SERIES}"/sha256sums.asc
|
||||||
|
|
||||||
|
KR_CONFIGS="kata-kernel-configs"
|
||||||
|
|
||||||
|
GENERATED_FILES=(kata-linux-container.dsc kata-linux-container.spec _service debian.control ${KR_CONFIGS}.tar.gz)
|
||||||
|
STATIC_FILES=(debian.dirs debian.rules debian.compat debian.copyright kata-multiarch.sh)
|
||||||
|
#STATIC_FILES+=($KR_PATCHES)
|
||||||
|
|
||||||
|
# Parse arguments
|
||||||
|
cli "$@"
|
||||||
|
|
||||||
|
[ "$VERBOSE" == "true" ] && set -x
|
||||||
|
PROJECT_REPO=${PROJECT_REPO:-home:${OBS_PROJECT}:${OBS_SUBPROJECT}/linux-container}
|
||||||
|
RELEASE=$(get_obs_pkg_release "${PROJECT_REPO}")
|
||||||
|
((RELEASE++))
|
||||||
|
|
||||||
|
kernel_sha256=$(curl -L -s -f ${KR_SHA} | awk '/linux-'${VERSION}'.tar.xz/ {print $1}')
|
||||||
|
|
||||||
|
# Copy the kernel config files and fragments for all architecture
|
||||||
|
mkdir -p configs
|
||||||
|
readonly configs_dir="kernel/configs"
|
||||||
|
find "${SCRIPT_DIR}/../../${configs_dir}" \( -name "*_kata_kvm_${KR_LTS}.x" -o -name fragments \) -exec tar --transform="s,${configs_dir},${KR_CONFIGS}," -czf ${KR_CONFIGS}.tar.gz {} +
|
||||||
|
|
||||||
|
replace_list=(
|
||||||
|
"VERSION=${VERSION}"
|
||||||
|
"CONFIG_VERSION=${KATA_CONFIG_VERSION}"
|
||||||
|
"RELEASE=$RELEASE"
|
||||||
|
"KERNEL_SHA256=$kernel_sha256"
|
||||||
|
)
|
||||||
|
|
||||||
|
verify
|
||||||
|
echo "Verify succeed."
|
||||||
|
get_git_info
|
||||||
|
#TODO delete me: used by changelog_update
|
||||||
|
hash_tag="nocommit"
|
||||||
|
changelog_update "${VERSION}-${KATA_CONFIG_VERSION}"
|
||||||
|
generate_files "$SCRIPT_DIR" "${replace_list[@]}"
|
||||||
|
build_pkg "${PROJECT_REPO}"
|
3
tools/packaging/obs-packaging/maintainers
Normal file
3
tools/packaging/obs-packaging/maintainers
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
egernst
|
||||||
|
jcvenega
|
||||||
|
nitkon
|
1
tools/packaging/obs-packaging/projectconfig
Normal file
1
tools/packaging/obs-packaging/projectconfig
Normal file
@ -0,0 +1 @@
|
|||||||
|
ExpandFlags: module:python36-3.6
|
File diff suppressed because it is too large
Load Diff
16
tools/packaging/obs-packaging/qemu-vanilla/_service-template
Normal file
16
tools/packaging/obs-packaging/qemu-vanilla/_service-template
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<!--- XML Structure defined here: https://en.opensuse.org/openSUSE:Build_Service_Concept_SourceService -->
|
||||||
|
<services>
|
||||||
|
<service name="tar_scm">
|
||||||
|
<param name="scm">git</param>
|
||||||
|
<param name="url">https://github.com/qemu/qemu.git</param>
|
||||||
|
<param name="exclude">.git</param>
|
||||||
|
<param name="filename">qemu-vanilla</param>
|
||||||
|
<!--- %h in the version format is a hash from a given revision -->
|
||||||
|
<param name="versionformat">@VERSION@+git.%h</param>
|
||||||
|
<param name="revision">@QEMU_VANILLA_HASH@</param>
|
||||||
|
</service>
|
||||||
|
<service name="recompress">
|
||||||
|
<param name="file">*.tar*</param>
|
||||||
|
<param name="compression">gz</param>
|
||||||
|
</service>
|
||||||
|
</services>
|
1
tools/packaging/obs-packaging/qemu-vanilla/debian.compat
Normal file
1
tools/packaging/obs-packaging/qemu-vanilla/debian.compat
Normal file
@ -0,0 +1 @@
|
|||||||
|
9
|
@ -0,0 +1,13 @@
|
|||||||
|
Source: qemu-vanilla
|
||||||
|
Section: devel
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Kata containers team <https://github.com/kata-containers/>
|
||||||
|
Build-Depends: debhelper (>= 9), cpio, libelf-dev, rsync, libdw-dev, pkg-config, flex, bison, libaudit-dev, bc, python3-dev, gawk, autoconf, automake, libtool, libltdl-dev, libglib2.0-dev, libglib2.0-0, libcap-dev, libcap-ng-dev, libattr1-dev, m4, libnuma-dev, zlib1g-dev, libpixman-1-0, libpixman-1-dev, libselinux1-dev, libffi-dev, libmount-dev, libblkid-dev
|
||||||
|
Standards-Version: 3.9.6
|
||||||
|
Homepage: https://katacontainers.io
|
||||||
|
|
||||||
|
Package: qemu-vanilla
|
||||||
|
Architecture: @deb_arch@
|
||||||
|
Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends},
|
||||||
|
Description: linux kernel optimised for container-like workloads.
|
||||||
|
Linux kernel optimised for container-like workloads
|
@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/make -f
|
||||||
|
include /usr/share/dpkg/default.mk
|
||||||
|
export LANG=C
|
||||||
|
%:
|
||||||
|
dh $@
|
||||||
|
|
||||||
|
override_dh_auto_configure:
|
||||||
|
chmod a+x "../SOURCES/configure-hypervisor.sh"
|
||||||
|
eval "../SOURCES/configure-hypervisor.sh" "qemu-vanilla" | sed -e 's/--enable-libpmem//g' | xargs ./configure --prefix=/usr
|
||||||
|
override_dh_auto_build:
|
||||||
|
make
|
||||||
|
|
||||||
|
override_dh_auto_install:
|
||||||
|
dh_auto_install
|
||||||
|
for file in $(CURDIR)/debian/qemu-vanilla/usr/bin/* ; do \
|
||||||
|
dir=$$(dirname $$file) ;\
|
||||||
|
bin=$$(basename $$file) ;\
|
||||||
|
new=$$(echo $$bin | sed -e 's/qemu-/qemu-vanilla-/g' -e 's/ivshmem-/ivshmem-vanilla-/g' -e 's/virtfs-/virtfs-vanilla-/g') ;\
|
||||||
|
mv $$file "$$dir"/"$$new" ; \
|
||||||
|
done
|
||||||
|
|
||||||
|
override_dh_auto_test:
|
||||||
|
echo "Skip auto test"
|
||||||
|
|
||||||
|
override_dh_auto_clean:
|
||||||
|
echo "Skip auto clean"
|
@ -0,0 +1 @@
|
|||||||
|
setBadness('arch-dependent-file-in-usr-share', 0)
|
@ -0,0 +1,16 @@
|
|||||||
|
Format: 3.0 (quilt)
|
||||||
|
Source: qemu-vanilla
|
||||||
|
Version: @VERSION@+git.@QEMU_VANILLA_HASH@-@RELEASE@
|
||||||
|
Section: devel
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Kata containers team <https://github.com/kata-containers/>
|
||||||
|
Build-Depends: debhelper (>= 9), cpio, libelf-dev, rsync, libdw-dev, pkg-config, flex, bison, libaudit-dev, bc, python3-dev, gawk, autoconf, automake, libtool, libltdl-dev, libglib2.0-dev, libglib2.0-0, libcap-dev, libcap-ng-dev, libattr1-dev, m4, libnuma-dev, zlib1g-dev, libpixman-1-0, libpixman-1-dev, librbd-dev, libselinux1-dev, libffi-dev, libmount-dev, libblkid-dev
|
||||||
|
Standards-Version: 3.9.6
|
||||||
|
Homepage: https://katacontainers.io
|
||||||
|
Debtransform-Tar: qemu-vanilla-@VERSION@+git.@QEMU_VANILLA_HASH@.tar.gz
|
||||||
|
|
||||||
|
Package: qemu-vanilla
|
||||||
|
Architecture: @deb_arch@
|
||||||
|
Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends},
|
||||||
|
Description: QEMU is a generic and open source machine & userspace emulator and
|
||||||
|
virtualizer.
|
@ -0,0 +1,135 @@
|
|||||||
|
%global qemu_vanilla_hash @QEMU_VANILLA_HASH@
|
||||||
|
Name: qemu-vanilla
|
||||||
|
Version: @VERSION@+git.%{qemu_vanilla_hash}
|
||||||
|
Release: @RELEASE@
|
||||||
|
Source0: %{name}-%{version}.tar.gz
|
||||||
|
Source1: qemu-vanilla-rpmlintrc
|
||||||
|
Source2: configure-hypervisor.sh
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}
|
||||||
|
|
||||||
|
Summary : OpenBIOS development utilities
|
||||||
|
Group : Development/Tools
|
||||||
|
License : BSD-2-Clause and BSD-3-Clause and GPL-2.0 and GPL-2.0+ and LGPL-2.0+ and LGPL-2.1
|
||||||
|
|
||||||
|
Requires: qemu-vanilla-bin
|
||||||
|
Requires: qemu-vanilla-data
|
||||||
|
BuildRequires : automake
|
||||||
|
BuildRequires : bc
|
||||||
|
BuildRequires : bison
|
||||||
|
BuildRequires : flex
|
||||||
|
BuildRequires : gcc-c++
|
||||||
|
BuildRequires : glib2-devel
|
||||||
|
BuildRequires : libattr-devel
|
||||||
|
BuildRequires : libcap-devel
|
||||||
|
BuildRequires : libcap-ng-devel
|
||||||
|
BuildRequires : libtool
|
||||||
|
BuildRequires : libtool-ltdl-devel
|
||||||
|
BuildRequires : libtool
|
||||||
|
BuildRequires : m4
|
||||||
|
BuildRequires : findutils
|
||||||
|
|
||||||
|
%if 0%{?centos_version}
|
||||||
|
BuildRequires : librbd1-devel
|
||||||
|
BuildRequires : libmount
|
||||||
|
%else
|
||||||
|
|
||||||
|
%if ! 0%{?rhel_version}
|
||||||
|
BuildRequires : librbd-devel
|
||||||
|
%endif
|
||||||
|
|
||||||
|
BuildRequires : libselinux-devel
|
||||||
|
BuildRequires : libffi-devel
|
||||||
|
BuildRequires : libmount-devel
|
||||||
|
BuildRequires : libblkid-devel
|
||||||
|
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if 0%{?suse_version}
|
||||||
|
BuildRequires : libnuma-devel
|
||||||
|
%else
|
||||||
|
BuildRequires : numactl-devel
|
||||||
|
%endif
|
||||||
|
|
||||||
|
BuildRequires : python3
|
||||||
|
BuildRequires : python3-devel
|
||||||
|
BuildRequires : zlib-devel
|
||||||
|
BuildRequires : pkgconfig(pixman-1)
|
||||||
|
BuildRequires : libpmem-devel
|
||||||
|
|
||||||
|
# Patches
|
||||||
|
@RPM_PATCH_LIST@
|
||||||
|
|
||||||
|
%description
|
||||||
|
===========
|
||||||
|
QEMU is a generic and open source machine & userspace emulator and
|
||||||
|
virtualizer.
|
||||||
|
|
||||||
|
%package bin
|
||||||
|
Summary: Bin components for the qemu-vanilla package
|
||||||
|
Group: Binaries
|
||||||
|
Requires: qemu-vanilla-data
|
||||||
|
|
||||||
|
%description bin
|
||||||
|
bin components for the qemu-vanilla package.
|
||||||
|
|
||||||
|
|
||||||
|
%package data
|
||||||
|
Summary: Data components for the qemu-vanilla package
|
||||||
|
Group: Data
|
||||||
|
|
||||||
|
%description data
|
||||||
|
data components for the qemu-vanilla package.
|
||||||
|
|
||||||
|
%global debug_package %{nil}
|
||||||
|
|
||||||
|
%prep
|
||||||
|
chmod +x %{_sourcedir}/configure-hypervisor.sh
|
||||||
|
|
||||||
|
%setup -q
|
||||||
|
# Patches
|
||||||
|
@RPM_APPLY_PATCHES@
|
||||||
|
|
||||||
|
%build
|
||||||
|
export LANG=C
|
||||||
|
|
||||||
|
# RHEL in OBS does not provide librados.
|
||||||
|
# Remove it: See https://github.com/kata-containers/packaging/issues/36
|
||||||
|
"%{_sourcedir}/configure-hypervisor.sh" "qemu-vanilla" \
|
||||||
|
%if 0%{?rhel_version}
|
||||||
|
| sed -e 's/--enable-rbd//g' \
|
||||||
|
%endif
|
||||||
|
| xargs ./configure --prefix=/usr
|
||||||
|
|
||||||
|
make V=1 %{?_smp_mflags}
|
||||||
|
|
||||||
|
%install
|
||||||
|
rm -rf %{buildroot}
|
||||||
|
#%make_install
|
||||||
|
make install DESTDIR=%{buildroot}
|
||||||
|
## make_install_append content
|
||||||
|
for file in %{buildroot}/usr/bin/*
|
||||||
|
do
|
||||||
|
dir=$(dirname "$file")
|
||||||
|
bin=$(basename "$file")
|
||||||
|
new=$(echo "$bin"|sed -e 's/qemu-/qemu-vanilla-/g' -e 's/ivshmem-/ivshmem-vanilla-/g' -e 's/virtfs-/virtfs-vanilla-/g')
|
||||||
|
mv "$file" "$dir/$new"
|
||||||
|
done
|
||||||
|
## make_install_append end
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
|
||||||
|
%files bin
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
%exclude /usr/bin/qemu-vanilla-ga
|
||||||
|
%exclude /usr/bin/qemu-vanilla-pr-helper
|
||||||
|
/usr/bin/qemu-vanilla-system-*
|
||||||
|
%exclude /usr/bin/virtfs-vanilla-proxy-helper
|
||||||
|
%exclude %dir /usr/libexec
|
||||||
|
%exclude %dir /usr/libexec/qemu-vanilla
|
||||||
|
%exclude /usr/libexec/qemu-vanilla/qemu-bridge-helper
|
||||||
|
|
||||||
|
%files data
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
%dir /usr/share/qemu-vanilla
|
||||||
|
/usr/share/qemu-vanilla/*
|
53
tools/packaging/obs-packaging/qemu-vanilla/update.sh
Executable file
53
tools/packaging/obs-packaging/qemu-vanilla/update.sh
Executable file
@ -0,0 +1,53 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||||
|
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||||
|
|
||||||
|
# Automation script to create specs to build kata containers kernel
|
||||||
|
[ -z "${DEBUG}" ] || set -o xtrace
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
source ../versions.txt
|
||||||
|
source ../scripts/pkglib.sh
|
||||||
|
|
||||||
|
SCRIPT_NAME=$0
|
||||||
|
SCRIPT_DIR=$(dirname $0)
|
||||||
|
PKG_NAME="qemu-vanilla"
|
||||||
|
VERSION=$qemu_vanilla_version
|
||||||
|
|
||||||
|
PATCHES_VERSION="$(echo $VERSION | cut -d "." -f 1,2).x"
|
||||||
|
ln -sfT "${SCRIPT_DIR}/../../qemu/patches/${PATCHES_VERSION}" "${SCRIPT_DIR}/patches"
|
||||||
|
|
||||||
|
GENERATED_FILES=(qemu-vanilla.dsc qemu-vanilla.spec debian.rules _service debian.control)
|
||||||
|
STATIC_FILES=(debian.compat "${SCRIPT_DIR}/../../scripts/configure-hypervisor.sh" qemu-vanilla-rpmlintrc)
|
||||||
|
|
||||||
|
# Parse arguments
|
||||||
|
cli "$@"
|
||||||
|
|
||||||
|
[ "$VERBOSE" == "true" ] && set -x
|
||||||
|
PROJECT_REPO=${PROJECT_REPO:-home:${OBS_PROJECT}:${OBS_SUBPROJECT}/qemu-vanilla}
|
||||||
|
RELEASE=$(get_obs_pkg_release "${PROJECT_REPO}")
|
||||||
|
((RELEASE++))
|
||||||
|
|
||||||
|
set_versions "${qemu_vanilla_hash}"
|
||||||
|
|
||||||
|
replace_list=(
|
||||||
|
"VERSION=$VERSION"
|
||||||
|
"RELEASE=$RELEASE"
|
||||||
|
"QEMU_VANILLA_HASH=${qemu_vanilla_hash:0:${short_commit_length}}"
|
||||||
|
)
|
||||||
|
|
||||||
|
verify
|
||||||
|
echo "Verify succeed."
|
||||||
|
get_git_info
|
||||||
|
changelog_update $VERSION
|
||||||
|
generate_files "$SCRIPT_DIR" "${replace_list[@]}"
|
||||||
|
build_pkg "${PROJECT_REPO}"
|
26
tools/packaging/obs-packaging/runtime/_service-template
Normal file
26
tools/packaging/obs-packaging/runtime/_service-template
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<!--- XML Structure defined here: https://en.opensuse.org/openSUSE:Build_Service_Concept_SourceService -->
|
||||||
|
<services>
|
||||||
|
<!--- OBS plugin tar_scm (Source control manager) -->
|
||||||
|
<service name="tar_scm">
|
||||||
|
<param name="scm">git</param>
|
||||||
|
<param name="url">https://github.com/kata-containers/kata-containers.git</param>
|
||||||
|
<param name="filename">kata-runtime</param>
|
||||||
|
<!--- versionformat defines the name of the tarball. -->
|
||||||
|
<param name="versionformat">@VERSION@</param>
|
||||||
|
<param name="revision">@HASH@</param>
|
||||||
|
</service>
|
||||||
|
<service name="recompress">
|
||||||
|
<param name="file">*.tar*</param>
|
||||||
|
<param name="compression">gz</param>
|
||||||
|
</service>
|
||||||
|
<service name="download_url">
|
||||||
|
<param name="protocol">https</param>
|
||||||
|
<param name="host">storage.googleapis.com</param>
|
||||||
|
<param name="path">golang/go@GO_VERSION@.linux-@GO_ARCH@.tar.gz</param>
|
||||||
|
</service>
|
||||||
|
<service name="verify_file">
|
||||||
|
<param name="file">_service:download_url:go@GO_VERSION@.linux-@GO_ARCH@.tar.gz</param>
|
||||||
|
<param name="verifier">sha256</param>
|
||||||
|
<param name="checksum">@GO_CHECKSUM@</param>
|
||||||
|
</service>
|
||||||
|
</services>
|
1
tools/packaging/obs-packaging/runtime/debian.compat
Normal file
1
tools/packaging/obs-packaging/runtime/debian.compat
Normal file
@ -0,0 +1 @@
|
|||||||
|
9
|
@ -0,0 +1,17 @@
|
|||||||
|
Source: kata-runtime
|
||||||
|
Section: devel
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Kata containers team <https://github.com/kata-containers/>
|
||||||
|
Standards-Version: 3.9.6
|
||||||
|
Homepage: https://katacontainers.io
|
||||||
|
Build-Depends: dh-make, git, ca-certificates, execstack, devscripts, debhelper,
|
||||||
|
build-essential, dh-autoreconf, make
|
||||||
|
|
||||||
|
Package: kata-runtime
|
||||||
|
Architecture: @deb_arch@
|
||||||
|
Depends: kata-containers-image (= @kata_osbuilder_version_release@),
|
||||||
|
kata-linux-container (= @linux_container_version_release@),
|
||||||
|
qemu-vanilla(= @qemu_vanilla_version_release@)
|
||||||
|
Description:
|
||||||
|
An Open Containers Initiative (OCI) "runtime" that launches an Intel VT-x
|
||||||
|
secured Kata Containers hypervisor, rather than a standard Linux container.
|
46
tools/packaging/obs-packaging/runtime/debian.rules-template
Normal file
46
tools/packaging/obs-packaging/runtime/debian.rules-template
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#!/usr/bin/make -f
|
||||||
|
export DH_VERBOSE = 1
|
||||||
|
export PKG_NAME=kata-runtime
|
||||||
|
export DOMAIN=github.com
|
||||||
|
export ORG=kata-containers
|
||||||
|
export PROJECT=runtime
|
||||||
|
export IMPORTNAME=$(DOMAIN)/$(ORG)/$(PROJECT)
|
||||||
|
export DH_GOPKG:=$(IMPORTNAME)
|
||||||
|
export DEB_BUILD_OPTIONS=nocheck
|
||||||
|
export PATH:=/usr/src/packages/BUILD/local/go/bin:$(PATH)
|
||||||
|
export GOPATH=/usr/src/packages/BUILD/go
|
||||||
|
export GOROOT=/usr/src/packages/BUILD/local/go
|
||||||
|
export DH_OPTIONS
|
||||||
|
|
||||||
|
export DEFAULT_QEMU=qemu-vanilla-system-x86_64
|
||||||
|
|
||||||
|
GO_VERSION=@GO_VERSION@
|
||||||
|
|
||||||
|
%:
|
||||||
|
dh $@
|
||||||
|
|
||||||
|
override_dh_auto_clean:
|
||||||
|
|
||||||
|
override_dh_auto_build:
|
||||||
|
mkdir -p /usr/src/packages/BUILD/local/
|
||||||
|
mkdir -p /usr/src/packages/BUILD/go/src/$(DOMAIN)/$(ORG)/
|
||||||
|
tar xzf /usr/src/packages/SOURCES/go$(GO_VERSION).linux-@GO_ARCH@.tar.gz -C /usr/src/packages/BUILD/local
|
||||||
|
ln -s /usr/src/packages/BUILD /usr/src/packages/BUILD/go/src/$(IMPORTNAME)
|
||||||
|
cd $(GOPATH)/src/$(IMPORTNAME)/; \
|
||||||
|
make \
|
||||||
|
QEMUCMD=$(DEFAULT_QEMU) \
|
||||||
|
COMMIT=@HASH@ \
|
||||||
|
SKIP_GO_VERSION_CHECK=1
|
||||||
|
|
||||||
|
override_dh_auto_install:
|
||||||
|
mkdir -p debian/$(PKG_NAME)
|
||||||
|
|
||||||
|
cd $(GOPATH)/src/$(IMPORTNAME)/; \
|
||||||
|
make install \
|
||||||
|
DESTDIR=$(shell pwd)/debian/$(PKG_NAME)/ \
|
||||||
|
PREFIX=/usr \
|
||||||
|
COMMIT=@HASH@ \
|
||||||
|
QEMUCMD=$(DEFAULT_QEMU) \
|
||||||
|
SKIP_GO_VERSION_CHECK=1
|
||||||
|
|
||||||
|
sed -i -e '/^initrd =/d' $(shell pwd)/debian/$(PKG_NAME)/usr/share/defaults/kata-containers/configuration.toml
|
@ -0,0 +1,22 @@
|
|||||||
|
Format: 3.0 (quilt)
|
||||||
|
Source: kata-runtime
|
||||||
|
# Version is expected to be started with a digit following by an alphanumeric string
|
||||||
|
# e.g. 1.0.0+git.1234567-1
|
||||||
|
Version: @VERSION@-@RELEASE@
|
||||||
|
Section: devel
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Kata containers team <https://github.com/kata-containers/>
|
||||||
|
Standards-Version: 3.9.6
|
||||||
|
Build-Depends: dh-make, git, ca-certificates, execstack, fakeroot, devscripts, debhelper,
|
||||||
|
build-essential, dh-autoreconf, make
|
||||||
|
Homepage: https://katacontainers.io
|
||||||
|
Debtransform-Tar: kata-runtime-@VERSION@.tar.gz
|
||||||
|
|
||||||
|
Package: kata-runtime
|
||||||
|
Architecture: @deb_arch@
|
||||||
|
Depends: kata-containers-image (= @kata_osbuilder_version_release@),
|
||||||
|
kata-linux-container (= @linux_container_version_release@),
|
||||||
|
qemu-vanilla(= @qemu_vanilla_version_release@)
|
||||||
|
Description:
|
||||||
|
An Open Containers Initiative (OCI) "runtime" that launches an Intel VT-x
|
||||||
|
secured Kata Containers hypervisor, rather than a standard Linux container.
|
@ -0,0 +1,97 @@
|
|||||||
|
%global DOMAIN github.com
|
||||||
|
%global ORG kata-containers
|
||||||
|
%global PROJECT runtime
|
||||||
|
%global IMPORTNAME %{DOMAIN}/%{ORG}/%{PROJECT}
|
||||||
|
%global GO_VERSION @GO_VERSION@
|
||||||
|
|
||||||
|
%global DEFAULT_QEMU qemu-vanilla-system-x86_64
|
||||||
|
|
||||||
|
%define LIBEXECDIR /usr/libexec
|
||||||
|
|
||||||
|
%undefine _missing_build_ids_terminate_build
|
||||||
|
%define debug_package %{nil}
|
||||||
|
|
||||||
|
Name: kata-runtime
|
||||||
|
# Version is expected to be started with a digit following by an alphanumeric string
|
||||||
|
# e.g. 1.0.0+git.1234567
|
||||||
|
Version: @VERSION@
|
||||||
|
Release: @RELEASE@
|
||||||
|
Source0: %{name}-%{version}.tar.gz
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
|
Summary : No detailed summary available
|
||||||
|
Group : Development/Tools
|
||||||
|
License : Apache-2.0
|
||||||
|
|
||||||
|
BuildRequires: git
|
||||||
|
|
||||||
|
Requires: kata-containers-image = @kata_osbuilder_version@
|
||||||
|
Requires: kata-linux-container = @linux_container_version@
|
||||||
|
Requires: qemu-vanilla = @qemu_vanilla_version@
|
||||||
|
|
||||||
|
# Patches
|
||||||
|
@RPM_PATCH_LIST@
|
||||||
|
|
||||||
|
%description
|
||||||
|
.. contents::
|
||||||
|
.. sectnum::
|
||||||
|
``kata-runtime``
|
||||||
|
===================
|
||||||
|
Overview
|
||||||
|
--------
|
||||||
|
|
||||||
|
%prep
|
||||||
|
mkdir local
|
||||||
|
tar -C local -xzf ../SOURCES/go%{GO_VERSION}.linux-@GO_ARCH@.tar.gz
|
||||||
|
%autosetup -N -S git
|
||||||
|
# Patches
|
||||||
|
@RPM_APPLY_PATCHES@
|
||||||
|
|
||||||
|
|
||||||
|
%build
|
||||||
|
export GOROOT=$HOME/rpmbuild/BUILD/local/go
|
||||||
|
export PATH=$PATH:$HOME/rpmbuild/BUILD/local/go/bin
|
||||||
|
export GOPATH=$HOME/rpmbuild/BUILD/go/
|
||||||
|
|
||||||
|
mkdir -p $HOME/rpmbuild/BUILD/go/src/%{DOMAIN}/%{ORG}
|
||||||
|
ln -s $HOME/rpmbuild/BUILD/kata-runtime-%{version} $HOME/rpmbuild/BUILD/go/src/%{IMPORTNAME}
|
||||||
|
cd $HOME/rpmbuild/BUILD/go/src/%{IMPORTNAME}
|
||||||
|
make \
|
||||||
|
QEMUCMD=%{DEFAULT_QEMU} \
|
||||||
|
COMMIT=@HASH@ \
|
||||||
|
SKIP_GO_VERSION_CHECK=1
|
||||||
|
|
||||||
|
%check
|
||||||
|
export http_proxy=http://127.0.0.1:9/
|
||||||
|
export https_proxy=http://127.0.0.1:9/
|
||||||
|
export no_proxy=localhost
|
||||||
|
|
||||||
|
%install
|
||||||
|
|
||||||
|
export GOROOT=$HOME/rpmbuild/BUILD/local/go
|
||||||
|
export PATH=$PATH:$HOME/rpmbuild/BUILD/local/go/bin
|
||||||
|
export GOPATH=$HOME/rpmbuild/BUILD/go/
|
||||||
|
|
||||||
|
cd $HOME/rpmbuild/BUILD/go/src/%{IMPORTNAME}
|
||||||
|
make \
|
||||||
|
DESTDIR=%{buildroot} \
|
||||||
|
PREFIX=/usr \
|
||||||
|
QEMUCMD=%{DEFAULT_QEMU} \
|
||||||
|
COMMIT=@HASH@ \
|
||||||
|
SKIP_GO_VERSION_CHECK=1 \
|
||||||
|
install
|
||||||
|
sed -i -e '/^initrd =/d' %{buildroot}/usr/share/defaults/kata-containers/configuration.toml
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
/usr/bin/kata-runtime
|
||||||
|
/usr/bin/containerd-shim-kata-v2
|
||||||
|
%{LIBEXECDIR}
|
||||||
|
%{LIBEXECDIR}/kata-containers
|
||||||
|
%{LIBEXECDIR}/kata-containers/kata-netmon
|
||||||
|
/usr/bin/kata-collect-data.sh
|
||||||
|
/usr/share/defaults/
|
||||||
|
/usr/share/defaults/kata-containers/
|
||||||
|
/usr/share/defaults/kata-containers/configuration*.toml
|
||||||
|
/usr/share/bash-completion
|
||||||
|
/usr/share/bash-completion/completions
|
||||||
|
/usr/share/bash-completion/completions/kata-runtime
|
135
tools/packaging/obs-packaging/runtime/update.sh
Executable file
135
tools/packaging/obs-packaging/runtime/update.sh
Executable file
@ -0,0 +1,135 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||||
|
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||||
|
#
|
||||||
|
# Automation script to create specs to build kata-runtime
|
||||||
|
# Default: Build is the one specified in file configure.ac
|
||||||
|
# located at the root of the repository.
|
||||||
|
[ -z "${DEBUG}" ] || set -o xtrace
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
source ../versions.txt
|
||||||
|
source ../scripts/pkglib.sh
|
||||||
|
|
||||||
|
SCRIPT_NAME=$0
|
||||||
|
SCRIPT_DIR=$(dirname "$0")
|
||||||
|
replace_list=()
|
||||||
|
|
||||||
|
# Package information
|
||||||
|
# Used by pkglib.sh
|
||||||
|
export PKG_NAME="kata-runtime"
|
||||||
|
VERSION=$kata_runtime_version
|
||||||
|
|
||||||
|
# Used by pkglib
|
||||||
|
export GENERATED_FILES=(kata-runtime.spec kata-runtime.dsc debian.control debian.rules _service)
|
||||||
|
# Used by pkglib
|
||||||
|
export STATIC_FILES=(debian.compat)
|
||||||
|
|
||||||
|
#cli flags
|
||||||
|
LOCAL_BUILD=false
|
||||||
|
OBS_PUSH=false
|
||||||
|
VERBOSE=false
|
||||||
|
|
||||||
|
#
|
||||||
|
# Given the name of a package returns the full package version to be used for
|
||||||
|
# DEB and RPM dependency constraints as follows, composed of:
|
||||||
|
# - a version,
|
||||||
|
# - an optional hash (only for select packages),
|
||||||
|
# - a release number (only for "deb" packages)
|
||||||
|
#
|
||||||
|
pkg_required_ver() {
|
||||||
|
local pkg="$1"
|
||||||
|
local versionVar="${pkg}_version"
|
||||||
|
local hashVar="${pkg}_hash"
|
||||||
|
local version=$(echo ${!versionVar})
|
||||||
|
local gitHash=
|
||||||
|
|
||||||
|
# Make pkg match the package name on OBS
|
||||||
|
pkg="${pkg#kata_}"
|
||||||
|
pkg="${pkg//_/-}"
|
||||||
|
pkg="${pkg//osbuilder/kata-containers-image}"
|
||||||
|
pkg="${pkg//kernel/linux-container}"
|
||||||
|
|
||||||
|
if [ -n "${PROJECT_REPO:-}" ]; then
|
||||||
|
local proj="${PROJECT_REPO%/runtime}"
|
||||||
|
else
|
||||||
|
local proj="home:${OBS_PROJECT}:${OBS_SUBPROJECT}"
|
||||||
|
fi
|
||||||
|
local release="$(get_obs_pkg_release "${proj}/${pkg//_/-}")"
|
||||||
|
|
||||||
|
case "$pkg" in
|
||||||
|
linux-container)
|
||||||
|
version="${version}.$(cat "${SCRIPT_DIR}/../../kernel/kata_config_version")"
|
||||||
|
;;
|
||||||
|
qemu-*)
|
||||||
|
gitHash=$(echo ${!hashVar}})
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
local debVer=$(pkg_version "$version" "$release" "$gitHash")
|
||||||
|
local rpmVer=$(pkg_version "$version" "" "$gitHash")
|
||||||
|
|
||||||
|
echo "${debVer}" "${rpmVer}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Parse arguments
|
||||||
|
cli "$@"
|
||||||
|
|
||||||
|
[ "$VERBOSE" == "true" ] && set -x
|
||||||
|
|
||||||
|
declare -a pkgVersions
|
||||||
|
# Package depedencies
|
||||||
|
info "Requires:"
|
||||||
|
declare -A KERNEL_REQUIRED_VERSION
|
||||||
|
pkgVersions=($(pkg_required_ver "kernel"))
|
||||||
|
KERNEL_REQUIRED_VERSION["deb"]=${pkgVersions[0]}
|
||||||
|
KERNEL_REQUIRED_VERSION["rpm"]=${pkgVersions[1]}
|
||||||
|
info "kata-linux-container ${KERNEL_REQUIRED_VERSION[@]}"
|
||||||
|
|
||||||
|
declare -A KATA_IMAGE_REQUIRED_VERSION
|
||||||
|
pkgVersions=($(pkg_required_ver "kata_osbuilder"))
|
||||||
|
KATA_IMAGE_REQUIRED_VERSION["deb"]=${pkgVersions[0]}
|
||||||
|
KATA_IMAGE_REQUIRED_VERSION["rpm"]=${pkgVersions[1]}
|
||||||
|
info "image ${KATA_IMAGE_REQUIRED_VERSION[@]}"
|
||||||
|
|
||||||
|
declare -A KATA_QEMU_VANILLA_REQUIRED_VERSION
|
||||||
|
pkgVersions=($(pkg_required_ver "qemu_vanilla"))
|
||||||
|
KATA_QEMU_VANILLA_REQUIRED_VERSION["deb"]=${pkgVersions[0]}
|
||||||
|
KATA_QEMU_VANILLA_REQUIRED_VERSION["rpm"]=${pkgVersions[1]}
|
||||||
|
info "qemu-vanilla ${KATA_QEMU_VANILLA_REQUIRED_VERSION[@]}"
|
||||||
|
|
||||||
|
PROJECT_REPO=${PROJECT_REPO:-home:${OBS_PROJECT}:${OBS_SUBPROJECT}/runtime}
|
||||||
|
RELEASE=$(get_obs_pkg_release "${PROJECT_REPO}")
|
||||||
|
((RELEASE++))
|
||||||
|
|
||||||
|
set_versions "$kata_runtime_hash"
|
||||||
|
|
||||||
|
replace_list+=(
|
||||||
|
"GO_CHECKSUM=$go_checksum"
|
||||||
|
"GO_VERSION=$go_version"
|
||||||
|
"GO_ARCH=$GO_ARCH"
|
||||||
|
"HASH=$short_hashtag"
|
||||||
|
"RELEASE=$RELEASE"
|
||||||
|
"VERSION=$VERSION"
|
||||||
|
"linux_container_version=${KERNEL_REQUIRED_VERSION["rpm"]}"
|
||||||
|
"linux_container_version_release=${KERNEL_REQUIRED_VERSION["deb"]}"
|
||||||
|
"qemu_vanilla_version=${KATA_QEMU_VANILLA_REQUIRED_VERSION["rpm"]}"
|
||||||
|
"qemu_vanilla_version_release=${KATA_QEMU_VANILLA_REQUIRED_VERSION["deb"]}"
|
||||||
|
)
|
||||||
|
|
||||||
|
verify
|
||||||
|
echo "Verify succeed."
|
||||||
|
get_git_info
|
||||||
|
changelog_update $VERSION
|
||||||
|
generate_files "$SCRIPT_DIR" "${replace_list[@]}"
|
||||||
|
build_pkg "${PROJECT_REPO}"
|
68
tools/packaging/obs-packaging/scripts/obs-docker.sh
Executable file
68
tools/packaging/obs-packaging/scripts/obs-docker.sh
Executable file
@ -0,0 +1,68 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright (c) 2018 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
_obs_docker_packaging_repo_dir=$(cd $(dirname "${BASH_SOURCE[0]}") && cd ../.. && pwd)
|
||||||
|
GO_ARCH=$(go env GOARCH)
|
||||||
|
|
||||||
|
setup_oscrc() {
|
||||||
|
# oscrc exists at different places on different distros
|
||||||
|
[ -f "${HOME}/.config/osc/oscrc" ] && OSCRC="${HOME}/.config/osc/oscrc"
|
||||||
|
OSCRC=${OSCRC:-"${HOME}/.oscrc"}
|
||||||
|
(
|
||||||
|
# do not log OBS credentials even in debug mode
|
||||||
|
set +x
|
||||||
|
OBS_API="https://api.opensuse.org"
|
||||||
|
|
||||||
|
if [ -n "${OBS_USER:-}" ] && [ -n "${OBS_PASS:-}" ] && [ ! -e "${OSCRC}" ]; then
|
||||||
|
echo "Creating ${OSCRC} with user $OBS_USER"
|
||||||
|
mkdir -p $(dirname $OSCRC)
|
||||||
|
cat <<eom >"${OSCRC}"
|
||||||
|
[general]
|
||||||
|
apiurl = ${OBS_API}
|
||||||
|
[${OBS_API}]
|
||||||
|
user = ${OBS_USER}
|
||||||
|
pass = ${OBS_PASS}
|
||||||
|
eom
|
||||||
|
fi
|
||||||
|
) >>/dev/null
|
||||||
|
if [ ! -e "${OSCRC}" ]; then
|
||||||
|
echo "${OSCRC}, please do 'export OBS_USER=your_user ; export OBS_PASS=your_pass' to configure osc for first time."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "OK - osc configured"
|
||||||
|
}
|
||||||
|
|
||||||
|
docker_run() {
|
||||||
|
local cmd="$*"
|
||||||
|
local obs_image="obs-kata"
|
||||||
|
#where results will be stored
|
||||||
|
local host_datadir="${PWD}/pkgs"
|
||||||
|
local cache_dir=${PWD}/obs-cache
|
||||||
|
setup_oscrc
|
||||||
|
|
||||||
|
sudo docker build \
|
||||||
|
--build-arg http_proxy="${http_proxy:-}" \
|
||||||
|
--build-arg https_proxy="${https_proxy:-}" \
|
||||||
|
-t $obs_image "${_obs_docker_packaging_repo_dir}/obs-packaging"
|
||||||
|
|
||||||
|
sudo docker run \
|
||||||
|
--rm \
|
||||||
|
--env http_proxy="${http_proxy:-}" \
|
||||||
|
--env https_proxy="${https_proxy:-}" \
|
||||||
|
--env no_proxy="${no_proxy:-}" \
|
||||||
|
--env GO_ARCH="${GO_ARCH}" \
|
||||||
|
--env PUSH="${PUSH:-}" \
|
||||||
|
--env DEBUG="${DEBUG:-}" \
|
||||||
|
--env OBS_PROJECT="${OBS_PROJECT:-}" \
|
||||||
|
--env OBS_SUBPROJECT="${OBS_SUBPROJECT:-}" \
|
||||||
|
-v "${cache_dir}":/var/tmp/osbuild-packagecache/ \
|
||||||
|
-v "${_obs_docker_packaging_repo_dir}":"${_obs_docker_packaging_repo_dir}" \
|
||||||
|
-v "${host_datadir}":/var/packaging \
|
||||||
|
-v "${OSCRC}":/root/.oscrc \
|
||||||
|
-v "${PWD}":"${PWD}" \
|
||||||
|
-w "${PWD}" \
|
||||||
|
-ti "${obs_image}" bash -c "${cmd}"
|
||||||
|
}
|
19
tools/packaging/obs-packaging/scripts/obs-pkgs.sh
Executable file
19
tools/packaging/obs-packaging/scripts/obs-pkgs.sh
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright (c) 2018 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
#NOTES:
|
||||||
|
# - update qemu and the kernel first, they take longer to build
|
||||||
|
# - runtime is always built at the end, as it depends on all the other listed
|
||||||
|
# packages, and we need to get the full version of all those.
|
||||||
|
|
||||||
|
typeset -a OBS_PKGS_PROJECTS
|
||||||
|
|
||||||
|
OBS_PKGS_PROJECTS+=(
|
||||||
|
qemu-vanilla
|
||||||
|
linux-container
|
||||||
|
kata-containers-image
|
||||||
|
runtime
|
||||||
|
)
|
389
tools/packaging/obs-packaging/scripts/pkglib.sh
Normal file
389
tools/packaging/obs-packaging/scripts/pkglib.sh
Normal file
@ -0,0 +1,389 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This is a helper library for the setup scripts of each package
|
||||||
|
# in this repository.
|
||||||
|
|
||||||
|
source_dir_pkg_lib=$(dirname "${BASH_SOURCE[0]}")
|
||||||
|
source_dir_pkg_lib=$(realpath "${source_dir_pkg_lib}")
|
||||||
|
source "${source_dir_pkg_lib}/../../scripts/lib.sh"
|
||||||
|
|
||||||
|
# Verify that versions.txt exists
|
||||||
|
version_file="${source_dir_pkg_lib}/../versions.txt"
|
||||||
|
if [ -f "${version_file}" ]; then
|
||||||
|
source "${version_file}"
|
||||||
|
else
|
||||||
|
die "${version_file} does not exist, you need to run first the gen_versions_txt.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
PACKAGING_DIR=/var/packaging
|
||||||
|
LOG_DIR=${PACKAGING_DIR}/build_logs
|
||||||
|
|
||||||
|
# OBS Project info
|
||||||
|
OBS_PROJECT="${OBS_PROJECT:-katacontainers}"
|
||||||
|
OBS_SUBPROJECT="${OBS_SUBPROJECT:-alpha}"
|
||||||
|
|
||||||
|
# BUILD OPTIONS
|
||||||
|
BUILD_DISTROS=${BUILD_DISTROS:-Fedora_27 xUbuntu_16.04 CentOS_7}
|
||||||
|
BUILD_ARCH="$(uname -m)"
|
||||||
|
|
||||||
|
COMMIT=false
|
||||||
|
BRANCH=false
|
||||||
|
LOCAL_BUILD=false
|
||||||
|
OBS_PUSH=false
|
||||||
|
VERBOSE=false
|
||||||
|
|
||||||
|
arch_to_golang()
|
||||||
|
{
|
||||||
|
local -r arch="$1"
|
||||||
|
|
||||||
|
case "$arch" in
|
||||||
|
aarch64) echo "arm64";;
|
||||||
|
ppc64le) echo "$arch";;
|
||||||
|
x86_64) echo "amd64";;
|
||||||
|
s390x) echo "s390x";;
|
||||||
|
*) die "unsupported architecture: $arch";;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
# Used for debian.control files
|
||||||
|
# Architecture: The architecture specifies which type of hardware this
|
||||||
|
# package was compiled for.
|
||||||
|
|
||||||
|
short_commit_length=10
|
||||||
|
|
||||||
|
arch=$(uname -m)
|
||||||
|
DEB_ARCH=$(arch_to_golang "$arch")
|
||||||
|
if [[ $DEB_ARCH == "ppc64le" ]]; then
|
||||||
|
DEB_ARCH="ppc64el"
|
||||||
|
fi
|
||||||
|
|
||||||
|
GO_ARCH=$(arch_to_golang "$arch")
|
||||||
|
export GO_ARCH
|
||||||
|
|
||||||
|
function display_help() {
|
||||||
|
cat <<-EOL
|
||||||
|
$SCRIPT_NAME
|
||||||
|
|
||||||
|
This script is intended to create Kata Containers packages for the OBS
|
||||||
|
(Open Build Service) platform.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
$SCRIPT_NAME [options]
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
-l --local-build Build the runtime locally
|
||||||
|
-b --branch Build with a given branch name
|
||||||
|
-p --push Push changes to OBS
|
||||||
|
-a --api-url Especify an OBS API (e.g. custom private OBS)
|
||||||
|
-r --obs-repository An OBS repository to push the changes.
|
||||||
|
-w --workdir Directory of a working copy of the OBS runtime repo
|
||||||
|
-v --verbose Set the -x flag for verbosity
|
||||||
|
-C --clean Clean the repository
|
||||||
|
-V --verify Verify the environment
|
||||||
|
-h --help Display this help message
|
||||||
|
|
||||||
|
Usage examples:
|
||||||
|
|
||||||
|
$SCRIPT_NAME --local-build --branch staging
|
||||||
|
$SCRIPT_NAME --push --api-url http://127.0.0.1
|
||||||
|
$SCRIPT_NAME --push --obs-repository home:userx/repository
|
||||||
|
$SCRIPT_NAME --push
|
||||||
|
|
||||||
|
EOL
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
die() {
|
||||||
|
msg="$*"
|
||||||
|
echo >&2 "ERROR: $msg"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
info() {
|
||||||
|
msg="$*"
|
||||||
|
echo "INFO: $msg"
|
||||||
|
}
|
||||||
|
|
||||||
|
function verify() {
|
||||||
|
# This function perform some checks in order to make sure
|
||||||
|
# the script will run flawlessly.
|
||||||
|
|
||||||
|
# Make sure this script is called from ./
|
||||||
|
[ "$SCRIPT_DIR" != "." ] && die "The script must be called from its base dir."
|
||||||
|
|
||||||
|
# Verify if osc is installed, exit otherwise.
|
||||||
|
[ ! -x "$(command -v osc)" ] && die "osc is not installed."
|
||||||
|
|
||||||
|
info "OK"
|
||||||
|
}
|
||||||
|
|
||||||
|
function clean() {
|
||||||
|
# This function clean generated files
|
||||||
|
for file in "$@"; do
|
||||||
|
[ -e $file ] && rm -v $file
|
||||||
|
done
|
||||||
|
[ -e ./debian.changelog ] && git checkout ./debian.changelog
|
||||||
|
[ -e ./release ] && git checkout ./release
|
||||||
|
echo "Clean done."
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_git_info() {
|
||||||
|
AUTHOR=${AUTHOR:-$(git config user.name)}
|
||||||
|
AUTHOR_EMAIL=${AUTHOR_EMAIL:-$(git config user.email)}
|
||||||
|
}
|
||||||
|
|
||||||
|
function set_versions() {
|
||||||
|
local commit_hash="$1"
|
||||||
|
hash_tag="$commit_hash"
|
||||||
|
short_hashtag="${hash_tag:0:7}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function changelog_update() {
|
||||||
|
d=$(date -R)
|
||||||
|
cat <<<"$PKG_NAME ($VERSION) stable; urgency=medium
|
||||||
|
|
||||||
|
* Update $PKG_NAME $VERSION ${hash_tag:0:7}
|
||||||
|
|
||||||
|
-- $AUTHOR <$AUTHOR_EMAIL> $d
|
||||||
|
" >debian.changelog
|
||||||
|
# Append, so it can be copied to the OBS repository
|
||||||
|
GENERATED_FILES+=('debian.changelog')
|
||||||
|
}
|
||||||
|
|
||||||
|
function local_build() {
|
||||||
|
[ ! -e $PACKAGING_DIR ] && mkdir $PACKAGING_DIR
|
||||||
|
[ ! -e $LOG_DIR ] && mkdir $LOG_DIR
|
||||||
|
|
||||||
|
pushd "${obs_repo_dir}"
|
||||||
|
|
||||||
|
BUILD_ARGS=('--local-package' '--no-verify' '--noservice' '--trust-all-projects' '--keep-pkgs=/var/packaging/results')
|
||||||
|
[ "$OFFLINE" == "true" ] && BUILD_ARGS+=('--offline')
|
||||||
|
|
||||||
|
osc service run
|
||||||
|
for distro in ${BUILD_DISTROS[@]}; do
|
||||||
|
# If more distros are supported, add here the relevant validations.
|
||||||
|
if [[ $distro =~ ^Fedora.* ]] || [[ $distro =~ ^CentOS.* ]]; then
|
||||||
|
echo "Perform a local build for ${distro}"
|
||||||
|
osc build ${BUILD_ARGS[@]} \
|
||||||
|
${distro} $BUILD_ARCH *.spec | tee ${LOG_DIR}/${distro}_${PKG_NAME}_build.log
|
||||||
|
|
||||||
|
elif [[ $distro =~ ^xUbuntu.* ]]; then
|
||||||
|
echo "Perform a local build for ${distro}"
|
||||||
|
osc build ${BUILD_ARGS[@]} \
|
||||||
|
${distro} $BUILD_ARCH *.dsc | tee ${LOG_DIR}/${distro}_${PKG_NAME}_build.log
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
popd
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkout_repo() {
|
||||||
|
local repo="${1}"
|
||||||
|
export obs_repo_dir="${repo}"
|
||||||
|
|
||||||
|
mkdir -p "${obs_repo_dir}"
|
||||||
|
osc co "${repo}" -o "${obs_repo_dir}"
|
||||||
|
find "${obs_repo_dir}" -maxdepth 1 -mindepth 1 ! -name '.osc' -prune -exec echo remove {} \; -exec rm -rf {} \;
|
||||||
|
|
||||||
|
mv "${GENERATED_FILES[@]}" "${obs_repo_dir}"
|
||||||
|
cp "${STATIC_FILES[@]}" "$obs_repo_dir"
|
||||||
|
}
|
||||||
|
|
||||||
|
function obs_push() {
|
||||||
|
pushd "${obs_repo_dir}"
|
||||||
|
osc addremove
|
||||||
|
osc commit -m "Update ${PKG_NAME} $VERSION: ${hash_tag:0:7}"
|
||||||
|
popd
|
||||||
|
}
|
||||||
|
|
||||||
|
function cli() {
|
||||||
|
OPTS=$(getopt -o abclprwvCVh: --long api-url,branch,commit-id,local-build,push,obs-repository,workdir,verbose,clean,verify,help -- "$@")
|
||||||
|
while true; do
|
||||||
|
case "${1}" in
|
||||||
|
-b | --branch)
|
||||||
|
BRANCH="true"
|
||||||
|
OBS_REVISION="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-l | --local-build)
|
||||||
|
LOCAL_BUILD="true"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-p | --push)
|
||||||
|
OBS_PUSH="true"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-r | --obs-repository)
|
||||||
|
PROJECT_REPO="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-v | --verbose)
|
||||||
|
VERBOSE="true"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-o | --offline)
|
||||||
|
OFFLINE="true"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-C | --clean)
|
||||||
|
clean ${GENERATED_FILES[@]}
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
-V | --verify)
|
||||||
|
verify
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
-h | --help)
|
||||||
|
display_help
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*) break ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function build_pkg() {
|
||||||
|
|
||||||
|
obs_repository="${1}"
|
||||||
|
|
||||||
|
[ -z "${obs_repository}" ] && die "${FUNCNAME}: obs repository not provided"
|
||||||
|
|
||||||
|
checkout_repo "${obs_repository}"
|
||||||
|
|
||||||
|
if [ "$LOCAL_BUILD" == "true" ]; then
|
||||||
|
info "Local build"
|
||||||
|
local_build
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$OBS_PUSH" == "true" ]; then
|
||||||
|
info "Push build to OBS"
|
||||||
|
obs_push
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function generate_files() {
|
||||||
|
|
||||||
|
directory=$1
|
||||||
|
replace_list=$2
|
||||||
|
template_files=$(find $directory -type f -name "*-template")
|
||||||
|
|
||||||
|
replace_list+=("deb_arch=$DEB_ARCH")
|
||||||
|
|
||||||
|
#find_patches sets $RPM_PATCH_LIST and $RPM_PATCH_LIST
|
||||||
|
# It also creates debian.series file
|
||||||
|
find_patches
|
||||||
|
replace_list+=("RPM_PATCH_LIST=$RPM_PATCH_LIST")
|
||||||
|
replace_list+=("RPM_APPLY_PATCHES=$RPM_APPLY_PATCHES")
|
||||||
|
|
||||||
|
# check replace list
|
||||||
|
# key=val
|
||||||
|
for replace in "${replace_list[@]}"; do
|
||||||
|
[[ $replace == *"="* ]] || die "invalid replace $replace"
|
||||||
|
local key="${replace%%=*}"
|
||||||
|
local value="${replace##*=}"
|
||||||
|
[ -n "$key" ] || die "${replace} key is empty"
|
||||||
|
[ -n "$value" ] || die "${replace} val is empty"
|
||||||
|
grep -q "@$key@" $template_files || die "@$key@ not found in any template file"
|
||||||
|
done
|
||||||
|
|
||||||
|
for f in ${template_files}; do
|
||||||
|
genfile="${f%-template}"
|
||||||
|
cp "$f" "${genfile}"
|
||||||
|
info "Generate file ${genfile}"
|
||||||
|
for replace in "${replace_list[@]}"; do
|
||||||
|
[[ $replace == *"="* ]] || die "invalid replace $replace"
|
||||||
|
local key="${replace%%=*}"
|
||||||
|
local value="${replace##*=}"
|
||||||
|
export k="@${key}@"
|
||||||
|
export v="$value"
|
||||||
|
perl -p -e 's/$ENV{k}/$ENV{v}/g' "${genfile}" >"${genfile}.out"
|
||||||
|
mv "${genfile}.out" ${genfile}
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function pkg_version() {
|
||||||
|
local project_version="$1"
|
||||||
|
# Used for
|
||||||
|
# Release: in spec file
|
||||||
|
# DebianRevisionNumber in dsc files
|
||||||
|
local pkg_release="$2"
|
||||||
|
local commit_id="$3"
|
||||||
|
[ -n "${project_version}" ] || die "${FUNCNAME}: need version"
|
||||||
|
|
||||||
|
pkg_version="${project_version}"
|
||||||
|
|
||||||
|
if [ -n "$commit_id" ]; then
|
||||||
|
pkg_version+="+git.${commit_id:0:${short_commit_length}}"
|
||||||
|
fi
|
||||||
|
if [ -n "$pkg_release" ]; then
|
||||||
|
pkg_version+="-${pkg_release}"
|
||||||
|
fi
|
||||||
|
echo "$pkg_version"
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_obs_pkg_release() {
|
||||||
|
local obs_pkg_name="$1"
|
||||||
|
local pkg
|
||||||
|
local repo_dir
|
||||||
|
local release=""
|
||||||
|
|
||||||
|
pkg=$(basename "${obs_pkg_name}")
|
||||||
|
repo_dir=$(mktemp -d -u -t "${pkg}.XXXXXXXXXXX")
|
||||||
|
|
||||||
|
out=$(osc -v co "${obs_pkg_name}" -o "${repo_dir}") || die "failed to checkout:$out"
|
||||||
|
|
||||||
|
spec_file=$(find "${repo_dir}" -maxdepth 1 -type f -name '*.spec' | head -1)
|
||||||
|
# Find in specfile in Release: XX field.
|
||||||
|
[ ! -f "${spec_file}" ] || release=$(grep -oP 'Release:\s+[0-9]+' "${spec_file}" | grep -oP '[0-9]+')
|
||||||
|
|
||||||
|
if [ -z "${release}" ] && [ -f "${spec_file}" ] ; then
|
||||||
|
# Not release number found find in "%define release XX"
|
||||||
|
release=$(grep -oP '%define\s+release\s+[0-9]+' "${spec_file}" | grep -oP '[0-9]+')
|
||||||
|
fi
|
||||||
|
|
||||||
|
release_file=$(find "${repo_dir}" -maxdepth 1 -type f -name 'pkg-release')
|
||||||
|
if [ -z "${release}" ] && [ -f "${release_file}" ]; then
|
||||||
|
# Release still not found check pkg-release file
|
||||||
|
release=$(grep -oP '[0-9]+' "${release_file}")
|
||||||
|
fi
|
||||||
|
if [ -z "${release}" ]; then
|
||||||
|
# Not release number found, this is a new repository.
|
||||||
|
release=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -r "${repo_dir}"
|
||||||
|
echo "${release}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#find_patches find patches in 'patches' directory.
|
||||||
|
# sets $RPM_PATCH_LIST and $RPM_PATCH_LIST
|
||||||
|
# RPM_PATCH_LIST fomat:
|
||||||
|
# Patch<number>: patch.file
|
||||||
|
# RPM_APPLY_PATCHES fomat:
|
||||||
|
# %Patch<number> -p1
|
||||||
|
# It also creates debian.series file
|
||||||
|
function find_patches() {
|
||||||
|
export RPM_PATCH_LIST="#Patches"$'\n'
|
||||||
|
export RPM_APPLY_PATCHES="#Apply patches"$'\n'
|
||||||
|
[ ! -d patches ] && info "No patches found" && return
|
||||||
|
local patches
|
||||||
|
patches=$(find patches/ -type f -name '*.patch' -exec basename {} \; | sort -t- -k1,1n)
|
||||||
|
n="1"
|
||||||
|
rm -f debian.series
|
||||||
|
for p in ${patches}; do
|
||||||
|
STATIC_FILES+=("patches/$p")
|
||||||
|
RPM_PATCH_LIST+="Patch00${n}: $p"$'\n'
|
||||||
|
RPM_APPLY_PATCHES+="%patch00${n} -p1"$'\n'
|
||||||
|
echo "$p" >>debian.series
|
||||||
|
((n++))
|
||||||
|
done
|
||||||
|
GENERATED_FILES+=(debian.series)
|
||||||
|
}
|
307
tools/packaging/obs-packaging/wait-obs.sh
Executable file
307
tools/packaging/obs-packaging/wait-obs.sh
Executable file
@ -0,0 +1,307 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright (c) 2019 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
set -o errtrace
|
||||||
|
|
||||||
|
script_name="$(basename "${BASH_SOURCE[0]}")"
|
||||||
|
|
||||||
|
OBS_PROJECT=${OBS_PROJECT:-"home:katacontainers:"}
|
||||||
|
# Project to wait for
|
||||||
|
project=""
|
||||||
|
|
||||||
|
handle_error() {
|
||||||
|
local exit_code="${?}"
|
||||||
|
local line_number="${1:-}"
|
||||||
|
echo "Failed at $line_number: ${BASH_COMMAND}"
|
||||||
|
exit "${exit_code}"
|
||||||
|
}
|
||||||
|
trap 'handle_error $LINENO' ERR
|
||||||
|
|
||||||
|
script_dir=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
|
||||||
|
|
||||||
|
run_in_docker() {
|
||||||
|
if [ -n "${USE_DOCKER:-}" ]; then
|
||||||
|
# shellcheck source=scripts/obs-docker.sh
|
||||||
|
source "${script_dir}/scripts/obs-docker.sh"
|
||||||
|
packaging_repo_dir=$(cd "${script_dir}/.." && pwd)
|
||||||
|
docker_run "${packaging_repo_dir}/obs-packaging/wait-obs.sh" $@
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# project information
|
||||||
|
project=""
|
||||||
|
|
||||||
|
# repo information
|
||||||
|
repo=""
|
||||||
|
repo_state=""
|
||||||
|
repo_code=""
|
||||||
|
|
||||||
|
# package information
|
||||||
|
package=""
|
||||||
|
package_code=""
|
||||||
|
package_details=""
|
||||||
|
|
||||||
|
# packages still building
|
||||||
|
packages_building=0
|
||||||
|
|
||||||
|
fail=0
|
||||||
|
return=0
|
||||||
|
continue=0
|
||||||
|
|
||||||
|
result_handler() {
|
||||||
|
# reset project information
|
||||||
|
project=""
|
||||||
|
|
||||||
|
# reset repo information
|
||||||
|
repo=""
|
||||||
|
repo_state=""
|
||||||
|
repo_code=""
|
||||||
|
|
||||||
|
local IFS=' '
|
||||||
|
for i in $1; do
|
||||||
|
case $(echo $i | cut -d= -f1) in
|
||||||
|
project)
|
||||||
|
project=$(echo $i | cut -d= -f2 | tr -d '"')
|
||||||
|
;;
|
||||||
|
|
||||||
|
repository)
|
||||||
|
repo=$(echo $i | cut -d= -f2 | tr -d '"')
|
||||||
|
;;
|
||||||
|
|
||||||
|
code)
|
||||||
|
repo_code=$(echo $i | cut -d= -f2 | tr -d '"')
|
||||||
|
;;
|
||||||
|
|
||||||
|
state)
|
||||||
|
repo_state=$(echo $i | cut -d= -f2 | tr -d '"')
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
case "${repo_code}" in
|
||||||
|
blocked)
|
||||||
|
continue=1
|
||||||
|
;;
|
||||||
|
|
||||||
|
unresolvable)
|
||||||
|
fail=1
|
||||||
|
;;
|
||||||
|
|
||||||
|
excluded)
|
||||||
|
return=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
status_handler() {
|
||||||
|
# reset package information
|
||||||
|
package=""
|
||||||
|
package_code=""
|
||||||
|
package_details=""
|
||||||
|
|
||||||
|
local IFS=' '
|
||||||
|
for i in $1; do
|
||||||
|
case $(echo $i | cut -d= -f1) in
|
||||||
|
package)
|
||||||
|
package=$(echo $i | cut -d= -f2 | tr -d '"')
|
||||||
|
;;
|
||||||
|
|
||||||
|
code)
|
||||||
|
package_code=$(echo $i | cut -d= -f2 | tr -d '"')
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
case "${package_code}" in
|
||||||
|
blocked)
|
||||||
|
continue=1
|
||||||
|
;;
|
||||||
|
|
||||||
|
unresolvable)
|
||||||
|
fail=1
|
||||||
|
;;
|
||||||
|
|
||||||
|
excluded)
|
||||||
|
return=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
details_handler() {
|
||||||
|
# reset package details
|
||||||
|
package_details="$(echo $1 | cut -d\> -f2 | cut -d\< -f1)"
|
||||||
|
|
||||||
|
if [ "$package_details" == "failed" ]; then
|
||||||
|
fail=1
|
||||||
|
osc pr
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$package_details" == "broken" ]; then
|
||||||
|
fail=1
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${package_details}" != "succeeded" ] || [ "${package_code}" != "finished" ]; then
|
||||||
|
packages_building=$((packages_building+1))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
check_repo() {
|
||||||
|
if [ -z "${repo}" ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
dump_info() {
|
||||||
|
echo "package: $package, code: $package_code, details: $package_details"
|
||||||
|
echo "repository: $repo, state: $repo_state, code: $repo_code"
|
||||||
|
echo "For more information go to https://build.opensuse.org/package/live_build_log/${project}/${package}/${repo}/$(uname -m)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check all project has finshed the build
|
||||||
|
wait_finish_building() {
|
||||||
|
local out
|
||||||
|
while true; do
|
||||||
|
sleep 30
|
||||||
|
out=$(osc api "/build/${project}/_result")
|
||||||
|
continue=0
|
||||||
|
packages_building=0
|
||||||
|
|
||||||
|
local IFS=$'\n'
|
||||||
|
for i in ${out[*]}; do
|
||||||
|
i="$(echo $i | sed -e 's/^[[:space:]]*//' -e 's/^<//' -e 's/>$//')"
|
||||||
|
if echo "$i" | egrep -q "^result"; then
|
||||||
|
result_handler "$i"
|
||||||
|
elif echo "$i" | egrep -q "^status"; then
|
||||||
|
status_handler "$i"
|
||||||
|
elif echo "$i" | egrep -q "^details"; then
|
||||||
|
details_handler "$i"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $fail -eq 1 ]; then
|
||||||
|
echo -n "FAILED: "
|
||||||
|
dump_info
|
||||||
|
exit 1
|
||||||
|
elif [ $return -eq 1 ]; then
|
||||||
|
return
|
||||||
|
elif [ $packages_building -gt 0 ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $continue -eq 1 ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $packages_building -gt 0 ]; then
|
||||||
|
echo -n "BULDING: "
|
||||||
|
dump_info
|
||||||
|
else
|
||||||
|
echo "FINISHED: SUCCEEDED!"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# obs distro final status is 'published'
|
||||||
|
# Check all distros are published
|
||||||
|
is_published() {
|
||||||
|
columns=$(osc pr -q -c | head -1 | column -t -s\;)
|
||||||
|
# print to show status
|
||||||
|
for c in ${columns}; do
|
||||||
|
if [ "${c}" == '_' ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
if ! echo "${c}" | grep 'published'; then
|
||||||
|
echo "waiting for : ${c}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Wait that all repositories are published
|
||||||
|
wait_published() {
|
||||||
|
while ! is_published; do
|
||||||
|
echo "Waitling for all repos are published"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
check_failed() {
|
||||||
|
failed_query=$(osc pr -c -s F)
|
||||||
|
if [[ ${failed_query} =~ failed ]]; then
|
||||||
|
echo "ERROR: Build failed"
|
||||||
|
osc pr -V -s 'F'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "Nothing failed"
|
||||||
|
osc pr -q -c | tail -n +2 | column -t -s\;
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
msg="${1:-}"
|
||||||
|
exit_code=$"${2:-0}"
|
||||||
|
cat <<EOT
|
||||||
|
${msg}
|
||||||
|
Usage:
|
||||||
|
${script_name} [--options]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help: Show this help
|
||||||
|
--no-wait-publish : no wait that OBS publish packages
|
||||||
|
EOT
|
||||||
|
exit "${exit_code}"
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
run_in_docker $@
|
||||||
|
local no_wait_publish="false"
|
||||||
|
case "${1:-}" in
|
||||||
|
"-h" | "--help")
|
||||||
|
usage "Help" 0
|
||||||
|
;;
|
||||||
|
--no-wait-publish)
|
||||||
|
no_wait_publish="true"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
usage "Invalid option: ${1:-}" 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
project=${1:-}
|
||||||
|
if [ "${project}" == "" ]; then
|
||||||
|
OBS_SUBPROJECT="${OBS_SUBPROJECT:-}"
|
||||||
|
project="${OBS_PROJECT}${OBS_SUBPROJECT}"
|
||||||
|
fi
|
||||||
|
echo "Checkout: ${project}"
|
||||||
|
osc co "$project" || true
|
||||||
|
cd "$project" || exit 1
|
||||||
|
|
||||||
|
echo "Wait all is build"
|
||||||
|
wait_finish_building
|
||||||
|
echo "OK - build finished"
|
||||||
|
|
||||||
|
echo "Check failed"
|
||||||
|
check_failed
|
||||||
|
echo "OK - build did not fail"
|
||||||
|
|
||||||
|
if [ "${no_wait_publish}" == "true" ]; then
|
||||||
|
echo " Requested not wait for publish"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Wait for published"
|
||||||
|
wait_published
|
||||||
|
echo "OK - published"
|
||||||
|
}
|
||||||
|
|
||||||
|
main $@
|
Loading…
Reference in New Issue
Block a user