From 9be7d7c1300a778a589d2e005a314c3d755c86ff Mon Sep 17 00:00:00 2001 From: Alex Polvi Date: Sun, 13 Oct 2013 19:23:24 -0700 Subject: [PATCH 1/5] add(coreos-base/oem-rackspace): added initial oem for rackspace --- .../oem-rackspace/files/ifconfig.sh | 328 ++++++++++++++++++ .../coreos-base/oem-rackspace/files/net.sh | 36 ++ .../oem-rackspace/files/resolvconf.sh | 10 + .../coreos-base/oem-rackspace/files/run | 4 + .../oem-rackspace/files/run-nova-agent.sh | 12 + .../coreos-base/oem-rackspace/files/ssh.sh | 15 + .../files/systemd/nova-agent.service | 5 + .../oem-rackspace/files/systemd/oem.target | 9 + .../files/systemd/setup-networking.service | 7 + .../files/systemd/setup-resolvconf.service | 7 + .../files/systemd/setup-ssh.service | 6 + .../oem-rackspace-0.0.1-r1.ebuild | 1 + .../oem-rackspace/oem-rackspace-0.0.1.ebuild | 34 ++ 13 files changed, 474 insertions(+) create mode 100644 sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/ifconfig.sh create mode 100755 sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/net.sh create mode 100755 sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/resolvconf.sh create mode 100755 sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/run create mode 100755 sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/run-nova-agent.sh create mode 100755 sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/ssh.sh create mode 100644 sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/nova-agent.service create mode 100644 sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/oem.target create mode 100644 sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/setup-networking.service create mode 100644 sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/setup-resolvconf.service create mode 100644 sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/setup-ssh.service create mode 120000 sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/oem-rackspace-0.0.1-r1.ebuild create mode 100644 sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/oem-rackspace-0.0.1.ebuild diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/ifconfig.sh b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/ifconfig.sh new file mode 100644 index 0000000000..2afa66cb54 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/ifconfig.sh @@ -0,0 +1,328 @@ +# Copyright (c) 2007-2008 Roy Marples +# Released under the 2-clause BSD license. + +ifconfig_depend() +{ + program /sbin/ifconfig /bin/ifconfig + provide interface +} + +_up() +{ + ifconfig "${IFACE}" up +} + +_down() +{ + ifconfig "${IFACE}" down +} + +_exists() +{ + [ -e /sys/class/net/"$IFACE" ] +} + +_ifindex() +{ + local index=-1 + local f v + if [ -e /sys/class/net/"${IFACE}"/ifindex ]; then + index=$(cat /sys/class/net/"${IFACE}"/ifindex) + else + for f in /sys/class/net/*/ifindex ; do + v=$(cat $f) + [ $v -gt $index ] && index=$v + done + : $(( index += 1 )) + fi + echo "${index}" + return 0 +} + +_is_wireless() +{ + # Support new sysfs layout + [ -d /sys/class/net/"${IFACE}"/wireless -o \ + -d /sys/class/net/"${IFACE}"/phy80211 ] && return 0 + + [ ! -e /proc/net/wireless ] && return 1 + grep -Eq "^[[:space:]]*${IFACE}:" /proc/net/wireless +} + +_set_flag() +{ + ifconfig "${IFACE}" "$1" +} + +_get_mac_address() +{ + local mac=$(LC_ALL=C ifconfig "${IFACE}" | \ + sed -n -e 's/.* \(HWaddr\|ether\) \(..:..:..:..:..:..\).*/\2/p') + + case "${mac}" in + 00:00:00:00:00:00);; + 44:44:44:44:44:44);; + FF:FF:FF:FF:FF:FF);; + "");; + *) echo "${mac}"; return 0;; + esac + + return 1 +} + +_set_mac_address() +{ + ifconfig "${IFACE}" hw ether "$1" +} + +_get_inet_address() +{ + set -- $(LC_ALL=C ifconfig "${IFACE}" | + sed -n -e 's/.*\(inet addr:\|inet \)\([^ ]*\).*\(Mask:\|netmask \)\([^ ]*\).*/\2 \4/p') + [ -z "$1" ] && return 1 + + echo -n "$1" + shift + echo "/$(_netmask2cidr "$1")" +} + +_get_inet_addresses() +{ + local iface=${IFACE} i=0 + local addrs="$(_get_inet_address)" + + while true; do + local IFACE="${iface}:${i}" + _exists || break + local addr="$(_get_inet_address)" + [ -n "${addr}" ] && addrs="${addrs}${addrs:+ }${addr}" + : $(( i += 1 )) + done + echo "${addrs}" +} + +_cidr2netmask() +{ + local cidr="$1" netmask="" done=0 i=0 sum=0 cur=128 + local octets= frac= + + local octets=$(( cidr / 8 )) + local frac=$(( cidr % 8 )) + while [ ${octets} -gt 0 ]; do + netmask="${netmask}.255" + : $(( octets -= 1 )) + : $(( done += 1 )) + done + + if [ ${done} -lt 4 ]; then + while [ ${i} -lt ${frac} ]; do + : $(( sum += cur )) + : $(( cur /= 2 )) + : $(( i += 1 )) + done + netmask="${netmask}.${sum}" + : $(( done += 1 )) + + while [ ${done} -lt 4 ]; do + netmask="${netmask}.0" + : $(( done += 1 )) + done + fi + + echo "${netmask#.*}" +} + +_add_address() +{ + if [ "$1" = "127.0.0.1/8" -a "${IFACE}" = "lo" ]; then + ifconfig "${IFACE}" "$@" 2>/dev/null + return 0 + fi + + case "$1" in + *:*) ifconfig "${IFACE}" inet6 add "$@"; return $?;; + esac + + # IPv4 is tricky - ifconfig requires an aliased device + # for multiple addresses + local iface="${IFACE}" + if LC_ALL=C ifconfig "${iface}" | grep -Eq '\/dev/null)" ] && return 0 + + ebegin "Destroying tunnel ${IFACE}" + iptunnel del "${IFACE}" + eend $? +} + +# Is the interface administratively/operationally up? +# The 'UP' status in ifconfig/iproute2 is the administrative status +# Operational state is available in iproute2 output as 'state UP', or the +# operstate sysfs variable. +# 0: up +# 1: down +# 2: invalid arguments +is_admin_up() +{ + local iface="$1" + [ -z "$iface" ] && iface="$IFACE" + ifconfig "${iface}" | \ + sed -n '1,1{ /flags=.*[<,]UP[,>]/{ q 0 }}; q 1; ' +} + +is_oper_up() +{ + local iface="$1" + [ -z "$iface" ] && iface="$IFACE" + read state > /var/run/resolv.conf +done + diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/resolvconf.sh b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/resolvconf.sh new file mode 100755 index 0000000000..994751751c --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/resolvconf.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +OEM_DIR="/usr/share/oem" +CONF=$OEM_DIR/nova-agent/etc/resolv.conf +while [ ! -e ${SSH_CONF} ]; do + echo waiting... + sleep .1 +done + +cp ${CONF} /etc/resolv.conf diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/run b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/run new file mode 100755 index 0000000000..98506fa240 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/run @@ -0,0 +1,4 @@ +#!/bin/bash + +systemctl enable --runtime /usr/share/oem/system/* +systemctl start oem.target diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/run-nova-agent.sh b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/run-nova-agent.sh new file mode 100755 index 0000000000..bf58a0fbb5 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/run-nova-agent.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +AGENT_ROOT="/usr/share/oem/nova-agent" +/bin/mount --bind /proc ${AGENT_ROOT}/proc +/bin/mount -t xenfs none ${AGENT_ROOT}/proc/xen +/bin/mount --bind /dev ${AGENT_ROOT}/dev +/bin/mount --bind /sys ${AGENT_ROOT}/sys +/usr/bin/chroot /usr/share/oem/nova-agent/ /bin/sh -c "HOME=/root /usr/share/nova-agent/0.0.1.38/sbin/nova-agent -o - -n -l info /usr/share/nova-agent/nova-agent.py" +/bin/umount ${AGENT_ROOT}/proc/xen +/bin/umount ${AGENT_ROOT}/proc +/bin/umount ${AGENT_ROOT}/dev +/bin/umount ${AGENT_ROOT}/sys diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/ssh.sh b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/ssh.sh new file mode 100755 index 0000000000..484403a66a --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/ssh.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +OEM_DIR="/usr/share/oem" +SSH_CONF=$OEM_DIR/nova-agent/root/.ssh/authorized_keys +while [ ! -e ${SSH_CONF} ]; do + echo waiting... + sleep .1 +done + +SSH_HOME="/home/core/.ssh" +SSH_FILE="${SSH_HOME}/authorized_keys" +mkdir -p ${SSH_HOME} +cp ${SSH_CONF} ${SSH_FILE} +chown -R core:core ${SSH_HOME} + diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/nova-agent.service b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/nova-agent.service new file mode 100644 index 0000000000..48804ab442 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/nova-agent.service @@ -0,0 +1,5 @@ +[Service] +ExecStart=/usr/share/oem/usr/bin/run-nova-agent.sh + +[Install] +WantedBy=multi-user.target diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/oem.target b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/oem.target new file mode 100644 index 0000000000..1d7f429fe4 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/oem.target @@ -0,0 +1,9 @@ +[Unit] +Description=CoreOS Rackspace OEM Target +Wants=nova-agent.service +Wants=setup-networking.service +Wants=setup-ssh.service +Wants=setup-resolvconf.service + +[Install] +WantedBy=multi-user.target diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/setup-networking.service b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/setup-networking.service new file mode 100644 index 0000000000..fa7f02543c --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/setup-networking.service @@ -0,0 +1,7 @@ +[Service] +Type=oneshot +ExecStartPre=/usr/bin/systemctl stop dhcpcd +ExecStart=/usr/bin/timeout 60 /usr/share/oem/usr/bin/net.sh + +[Install] +WantedBy=multi-user.target diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/setup-resolvconf.service b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/setup-resolvconf.service new file mode 100644 index 0000000000..3094ea9c1f --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/setup-resolvconf.service @@ -0,0 +1,7 @@ +[Service] +Type=oneshot +ExecStartPre=/usr/bin/systemctl stop dhcpcd +ExecStart=/usr/bin/timeout 60 /usr/share/oem/usr/bin/resolvconf.sh + +[Install] +WantedBy=multi-user.target diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/setup-ssh.service b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/setup-ssh.service new file mode 100644 index 0000000000..b745fee7f4 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/systemd/setup-ssh.service @@ -0,0 +1,6 @@ +[Service] +Type=oneshot +ExecStart=/usr/bin/timeout 60 /usr/share/oem/usr/bin/ssh.sh + +[Install] +WantedBy=multi-user.target diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/oem-rackspace-0.0.1-r1.ebuild b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/oem-rackspace-0.0.1-r1.ebuild new file mode 120000 index 0000000000..93bd123481 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/oem-rackspace-0.0.1-r1.ebuild @@ -0,0 +1 @@ +oem-rackspace-0.0.1.ebuild \ No newline at end of file diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/oem-rackspace-0.0.1.ebuild b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/oem-rackspace-0.0.1.ebuild new file mode 100644 index 0000000000..50afaa3c74 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/oem-rackspace-0.0.1.ebuild @@ -0,0 +1,34 @@ +# +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# Copyright (c) 2013 CoreOS, Inc.. All rights reserved. +# Distributed under the terms of the GNU General Public License v2 +# $Header:$ +# + +EAPI=5 +inherit git-2 + +DESCRIPTION="oem suite for rackspace images" +HOMEPAGE="" +SRC_URI="" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="amd64 x86" +IUSE="" + +EGIT_REPO_URI="https://github.com/coreos/nova-agent-container.git" +EGIT_COMMIT="44af5608e9a9e43fe83d05f03049a1f66d564930" + +src_install() { + rsync --exclude=".git" -aq ${S}/ ${D}/nova-agent/ + rsync -aq ${FILESDIR}/systemd/ ${D}/system/ + dobin "${FILESDIR}"/ifconfig.sh + dobin "${FILESDIR}"/net.sh + dobin "${FILESDIR}"/ssh.sh + dobin "${FILESDIR}"/run-nova-agent.sh + dobin "${FILESDIR}"/resolvconf.sh + + exeinto "/" + doexe ${FILESDIR}/run +} From 98af20601f4cc6887d94cfbadc2a916d7e55a8b6 Mon Sep 17 00:00:00 2001 From: Alex Polvi Date: Sun, 13 Oct 2013 19:38:54 -0700 Subject: [PATCH 2/5] fix resolvconf.sh --- .../coreos-base/oem-rackspace/files/resolvconf.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/resolvconf.sh b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/resolvconf.sh index 994751751c..61b0f8cc6e 100755 --- a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/resolvconf.sh +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/resolvconf.sh @@ -2,7 +2,7 @@ OEM_DIR="/usr/share/oem" CONF=$OEM_DIR/nova-agent/etc/resolv.conf -while [ ! -e ${SSH_CONF} ]; do +while [ ! -e ${CONF} ]; do echo waiting... sleep .1 done From 4037db2a2a757cdde628dc8d7782ba582890c0e7 Mon Sep 17 00:00:00 2001 From: Alex Polvi Date: Mon, 14 Oct 2013 11:22:52 -0700 Subject: [PATCH 3/5] remove redundant resolv.conf setup --- .../coreos-overlay/coreos-base/oem-rackspace/files/net.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/net.sh b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/net.sh index 49ee7c8904..a80c059436 100755 --- a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/net.sh +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/net.sh @@ -30,7 +30,3 @@ for if in eth0 eth1; do ip route add $route dev $if done done -for ns in $dns_servers_eth0; do - echo nameserver $ns >> /var/run/resolv.conf -done - From 522c846bccdf82655a8d496e5d520de308992372 Mon Sep 17 00:00:00 2001 From: Alex Polvi Date: Mon, 14 Oct 2013 11:32:58 -0700 Subject: [PATCH 4/5] use proper ssh key setup --- .../coreos-overlay/coreos-base/oem-rackspace/files/ssh.sh | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/ssh.sh b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/ssh.sh index 484403a66a..9b933bf194 100755 --- a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/ssh.sh +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/ssh.sh @@ -7,9 +7,4 @@ while [ ! -e ${SSH_CONF} ]; do sleep .1 done -SSH_HOME="/home/core/.ssh" -SSH_FILE="${SSH_HOME}/authorized_keys" -mkdir -p ${SSH_HOME} -cp ${SSH_CONF} ${SSH_FILE} -chown -R core:core ${SSH_HOME} - +/bin/grep ssh- ${SSH_CONF} | /usr/bin/update-ssh-keys -u core From 08c6e55231de2d9204153f85a377a5e5c68a46c9 Mon Sep 17 00:00:00 2001 From: Alex Polvi Date: Mon, 14 Oct 2013 12:06:42 -0700 Subject: [PATCH 5/5] fix ssh handling --- .../coreos-overlay/coreos-base/oem-rackspace/files/ssh.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/ssh.sh b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/ssh.sh index 9b933bf194..518c39fad7 100755 --- a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/ssh.sh +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/ssh.sh @@ -7,4 +7,4 @@ while [ ! -e ${SSH_CONF} ]; do sleep .1 done -/bin/grep ssh- ${SSH_CONF} | /usr/bin/update-ssh-keys -u core +/usr/bin/update-ssh-keys -a nova-agent /usr/share/oem/nova-agent/root/.ssh/authorized_keys