Merge pull request #2015 from steveeJ/etcd-wrapper

amd64: etcd-wrapper ebuild + script
This commit is contained in:
Stefan Junker 2016-07-08 17:40:26 -07:00 committed by GitHub
commit fe68488aed
8 changed files with 182 additions and 1 deletions

View File

@ -0,0 +1,2 @@
DIST etcd-v2.3.7_pubkey.gpg 6179 SHA256 56eb40918ba8dfbfc30bfddb3d235c3485825af1e7bd9816bdc478716d40544b SHA512 74d2de868f3df73452c50f196320857283c97d0f1d654fd4788be7aa621b50d0767527679ce0f111a86b69ce301329e58d188cb219def306580e0a24c4037738 WHIRLPOOL 3499e633cbb5e28cb3a373263137af30c83573b513d479190ca1402591a7e4fdf78c497f9ac84ced0ffb5fd1dda440eb04a31b81da2a8f964d914c8d1cbb7969
DIST etcd-v3.0.2_pubkey.gpg 6179 SHA256 56eb40918ba8dfbfc30bfddb3d235c3485825af1e7bd9816bdc478716d40544b SHA512 74d2de868f3df73452c50f196320857283c97d0f1d654fd4788be7aa621b50d0767527679ce0f111a86b69ce301329e58d188cb219def306580e0a24c4037738 WHIRLPOOL 3499e633cbb5e28cb3a373263137af30c83573b513d479190ca1402591a7e4fdf78c497f9ac84ced0ffb5fd1dda440eb04a31b81da2a8f964d914c8d1cbb7969

View File

@ -0,0 +1 @@
files/etcd-wrapper.ebuild

View File

@ -0,0 +1 @@
files/etcd-wrapper.ebuild

View File

@ -0,0 +1,82 @@
#
# Copyright (c) 2016 CoreOS, Inc.. All rights reserved.
# Distributed under the terms of the GNU General Public License v2
# $Header:$
#
EAPI=6
inherit systemd
DESCRIPTION="etcd (System Application Container)"
HOMEPAGE="https://github.com/coreos/etcd"
KEYWORDS="amd64"
LICENSE="Apache-2.0"
IUSE=""
MY_PV=${PV}
MY_PV=${MY_PV/_alpha/-alpha.}
MY_PV=${MY_PV/_beta/-beta.}
case ${MY_PV} in
2*)
SLOT="2"
;;
3*)
SLOT="3"
;;
*)
die "Unknown etcd version ${MY_PV}"
;;
esac
SRC_URI="https://coreos.com/dist/pubkeys/app-signing-pubkey.gpg -> etcd-v${MY_PV}_pubkey.gpg"
IMG_FILENAME="etcd-v${MY_PV}-linux-${ARCH}.aci"
PUBKEY_FILENAME="etcd-v${MY_PV}_pubkey.gpg"
IMG_PREFIX="coreos.com/etcd"
IMG_PUBKEY="${DISTDIR}/${PUBKEY_FILENAME}"
RKT="rkt"
VERSION_DIR=/usr/lib/coreos/versions
VERSION_DIR_VAR=/var/lib/coreos/versions
IMG_VERSION_FILE="${VERSION_DIR}/etcd${SLOT}"
IMG_VERSION_FILE_VAR="${VERSION_DIR_VAR}/etcd${SLOT}"
IMG_VERSION_DIR="${VERSION_DIR}/etcd${SLOT}.d"
ENV_PREFIX="ETCD"
DEPEND=""
RDEPEND=">=app-emulation/rkt-1.9.1[rkt_stage1_fly]"
S=${WORKDIR}
pkg_preinst() {
echo ${ENV_PREFIX}_IMG="https://github.com/coreos/etcd/releases/download/v${MY_PV}/etcd-v${MY_PV}-linux-${ARCH}.aci" >> "${D}/${IMG_VERSION_FILE}"
echo ${ENV_PREFIX}_IMG_USER=etcd >> "${D}/${IMG_VERSION_FILE}"
echo ${ENV_PREFIX}_DATA_DIR=/var/lib/etcd${SLOT} >> "${D}/${IMG_VERSION_FILE}"
echo ${ENV_PREFIX}_IMG_PREFIX=${IMG_PREFIX} >> "${D}/${IMG_VERSION_FILE}"
echo ${ENV_PREFIX}_IMG_PUBKEY=${IMG_VERSION_DIR}/${PUBKEY_FILENAME} >> "${D}/${IMG_VERSION_FILE}"
}
src_install() {
insinto "${IMG_VERSION_DIR}"
doins "${DISTDIR}/${PUBKEY_FILENAME}"
local wrapper_file="${TMP}/etcd${SLOT}-wrapper"
cat ${FILESDIR}/etcd-wrapper.template > ${wrapper_file}
sed -i ${wrapper_file} -e \
"s,{{SOURCE_FILES}},${IMG_VERSION_FILE} ${IMG_VERSION_FILE_VAR},g" \
|| die
dobin ${wrapper_file}
local service_file="${TMP}/etcd${SLOT}-wrapper.service"
cat "${FILESDIR}/etcd-wrapper.service.template" > ${service_file}
cat ${service_file}
sed -i ${service_file} -e \
"s,{{SLOT}},${SLOT},g" \
|| die
sed -i ${service_file} -e \
"s,{{SOURCE_FILES}},${IMG_VERSION_FILE} ${IMG_VERSION_FILE_VAR},g" \
|| die
systemd_dounit "${service_file}"
}

View File

@ -0,0 +1,17 @@
[Unit]
Description=etcd{{SLOT}} (System Application Container)
Conflicts=etcd{{SLOT}}.service
[Service]
Type=notify
Environment=ETCD_NAME=%m
Environment=ETCD_IMG_USER=etcd
Environment="SOURCE_FILES={{SOURCE_FILES}}"
ExecStart=/usr/bin/etcd{{SLOT}}-wrapped
Restart=always
RestartSec=10s
LimitNOFILE=40000
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,72 @@
#!/usr/bin/bash -e
# Wrapper for launching etcd via rkt.
SOURCE_FILES=${SOURCE_FILES:-{{SOURCE_FILES}}}
for source_file in ${SOURCE_FILES}; do
if [[ -e "${source_file}" ]]; then
source "${source_file}"
fi
done
REQUIRED_ENV_VARS="ETCD_IMG ETCD_IMG_USER ETCD_DATA_DIR"
for rev in $REQUIRED_ENV_VARS ; do
if [[ -z ${!rev} ]]; then
echo ${rev} is not set
exit 1
fi
done
SSL_CERTS_SRC=${SSL_CERTS_SRC:-/etc/ssl/certs}
ETC_HOSTS_SRC=${ETC_HOSTS_SRC:-/etc/hosts}
SYSTEMD_SYSTEM_DIR_SRC=${SYSTEMD_SYSTEM_DIR_SRC:-/run/systemd/system}
RKT=${RKT:-/usr/bin/rkt}
ETCD_IMG_EXEC=${ETCD_IMG_EXEC:-/etcd}
RKT_STAGE1_ARG=${RKT_STAGE1_ARG:-"--stage1-from-dir=stage1-fly.aci"}
if [[ ! -e ${ETCD_DATA_DIR} ]]; then
mkdir -p ${ETCD_DATA_DIR}
chown ${ETCD_IMG_USER} ${ETCD_DATA_DIR}
fi
if [[ ! -z ${ETCD_IMG_PUBKEY} ]]; then
${RKT} trust ${RKT_TRUST_ARGS} \
--prefix=${ETCD_IMG_PREFIX} \
--skip-fingerprint-review \
${ETCD_IMG_PUBKEY}
fi
if [[ -d ${SYSTEMD_SYSTEM_DIR_SRC} ]]; then
RKT_RUN_ARGS="${RKT_RUN_ARGS} \
--mount volume=systemd-dir,target=/run/systemd/system \
--volume systemd-dir,kind=host,source=${SYSTEMD_SYSTEM_DIR_SRC},readOnly=true \
"
fi
if [[ -S ${NOTIFY_SOCKET} ]]; then
RKT_RUN_ARGS="${RKT_RUN_ARGS} \
--mount volume=notify,target=/run/systemd/notify \
--volume notify,kind=host,source=${NOTIFY_SOCKET} \
--set-env=NOTIFY_SOCKET=/run/systemd/notify \
"
fi
set -x
exec ${RKT} ${RKT_GLOBAL_ARGS} \
run ${RKT_RUN_ARGS} \
--volume data-dir,kind=host,source=${ETCD_DATA_DIR} \
\
--mount volume=etc-ssl-certs,target=/etc/ssl/certs \
--volume etc-ssl-certs,kind=host,source=${SSL_CERTS_SRC} \
\
--mount volume=etc-hosts,target=/etc/hosts \
--volume etc-hosts,kind=host,source=${ETC_HOSTS_SRC} \
\
${RKT_STAGE1_ARG} \
${ETCD_IMG} ${ETCD_IMG_ARGS} \
--user=$(id -u ${ETCD_IMG_USER})
--exec=${ETCD_IMG_EXEC} -- \
"$@"

View File

@ -73,7 +73,13 @@ RDEPEND="${RDEPEND}
dev-db/etcd:1 dev-db/etcd:1
!etcd_protocols_2? ( dev-db/etcdctl ) !etcd_protocols_2? ( dev-db/etcdctl )
) )
etcd_protocols_2? ( dev-db/etcd:2 ) etcd_protocols_2? (
dev-db/etcd:2
amd64? (
app-admin/etcd-wrapper:2
app-admin/etcd-wrapper:3
)
)
" "
# Optionally enable SELinux and pull in policy for containers # Optionally enable SELinux and pull in policy for containers