Squash merge latest code to github branch

This commit is contained in:
Qi Luo 2016-07-26 12:01:58 -07:00
parent a79b519618
commit a79966998a
29 changed files with 462 additions and 137 deletions

View File

@ -32,6 +32,9 @@ PASSWORD_ENCRYPTED=$2
## Enable debug output for script
set -x -e
## docker engine version (with platform)
DOCKER_VERSION=1.11.1-0~jessie_amd64
## Working directory to prepare the file system
FILESYSTEM_ROOT=./fsroot
## Hostname for the linux image
@ -127,13 +130,21 @@ sudo chroot $FILESYSTEM_ROOT update-initramfs -u
## Install docker
echo '[INFO] Install docker'
curl -sSL https://get.docker.com/ | sudo LANG=C chroot $FILESYSTEM_ROOT sh
## Remove garbage left by docker installation script
sudo rm $FILESYSTEM_ROOT/etc/apt/sources.list.d/docker.list
## Install apparmor utils since they're missing and apparmor is enabled in the kernel
## Otherwise Docker will fail to start
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install apparmor
docker_deb_url=https://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_${DOCKER_VERSION}.deb
docker_deb_temp=`mktemp`
trap_push "rm -f $docker_deb_temp"
wget $docker_deb_url -qO $docker_deb_temp && { \
sudo dpkg --root=$FILESYSTEM_ROOT -i $docker_deb_temp || \
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f; \
}
sudo chroot $FILESYSTEM_ROOT docker version
sudo chroot $FILESYSTEM_ROOT service docker stop
## Add docker config drop-in to select aufs, otherwise it may other storage driver
## Note: $_ means last argument of last command
sudo mkdir -p $FILESYSTEM_ROOT/etc/systemd/system/docker.service.d/
## Note: $_ means last argument of last command
sudo cp files/docker/docker.service.conf $_
## Create default user
@ -149,6 +160,7 @@ sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install \
## Pre-install the fundamental packages
## Note: gdisk is needed for sgdisk in install.sh
## Note: parted is needed for partprobe in install.sh
## Note: ca-certificates is needed for easy_install
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install \
file \
ifupdown \
@ -167,8 +179,34 @@ sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install \
traceroute \
iputils-ping \
net-tools \
bsdmainutils \
ca-certificates \
i2c-tools \
efibootmgr
## Remove sshd host keys, and will regenerate on first sshd start
sudo rm -f $FILESYSTEM_ROOT/etc/ssh/ssh_host_*_key*
sudo cp files/sshd/host-ssh-keygen.sh $FILESYSTEM_ROOT/usr/local/bin/
sudo cp -f files/sshd/sshd.service $FILESYSTEM_ROOT/lib/systemd/system/ssh.service
## Config sshd
sudo augtool --autosave "set /files/etc/ssh/sshd_config/UseDNS no" -r $FILESYSTEM_ROOT
## Config sysctl
sudo mkdir -p $FILESYSTEM_ROOT/var/core
sudo augtool --autosave "
set /files/etc/sysctl.conf/kernel.core_pattern '|/usr/bin/coredump-compress %e %p'
set /files/etc/sysctl.conf/net.ipv4.conf.default.arp_accept 0
set /files/etc/sysctl.conf/net.ipv4.conf.default.arp_announce 0
set /files/etc/sysctl.conf/net.ipv4.conf.default.arp_filter 0
set /files/etc/sysctl.conf/net.ipv4.conf.default.arp_notify 0
set /files/etc/sysctl.conf/net.ipv4.conf.default.arp_ignore 0
set /files/etc/sysctl.conf/net.ipv4.conf.all.arp_accept 0
set /files/etc/sysctl.conf/net.ipv4.conf.all.arp_announce 1
set /files/etc/sysctl.conf/net.ipv4.conf.all.arp_filter 0
set /files/etc/sysctl.conf/net.ipv4.conf.all.arp_notify 1
set /files/etc/sysctl.conf/net.ipv4.conf.all.arp_ignore 2
" -r $FILESYSTEM_ROOT
## docker-py is needed by Ansible docker module
sudo LANG=C chroot $FILESYSTEM_ROOT easy_install pip
sudo LANG=C chroot $FILESYSTEM_ROOT pip install 'docker-py==1.6.0'

View File

@ -1,10 +1,45 @@
#!/bin/bash
## This script is to automate the preparation for docker images for ACS.
## If registry server and port provided, the images will be pushed there.
## Usage:
## sudo ./build_docker.sh DOCKER_BUILD_DIR [REGISTRY_SERVER REGISTRY_PORT]
set -x -e
set -e
. ./functions.sh
usage() {
cat >&2 <<EOF
Usage:
sudo ./build_docker.sh -i=DOCKER_IMAGE_NAME DOCKER_BUILD_DIR [REGISTRY_SERVER REGISTRY_PORT]
Description:
-i DOCKER_IMAGE_NAME
Specifi the docker images name, by default it is DOCKER_BUILD_DIR
DOCKER_BUILD_DIR
The directory containing Dockerfile
REGISTRY_SERVER
The server name of the docker registry
REGISTRY_PORT
The port of the docker registry
Example:
./build_docker.sh -i docker-orchagent-mlnx docker-orchagent
EOF
}
docker_image_name=''
while getopts ":i:" opt; do
case $opt in
i)
docker_image_name=$OPTARG
;;
\?)
echo "Invalid option: -$OPTARG" >&2
usage
exit 1
;;
esac
done
shift "$((OPTIND - 1))"
## Dockerfile directory
DOCKER_BUILD_DIR=$1
@ -18,36 +53,39 @@ REGISTRY_PASSWD=$5
exit 1
}
## Docker image label, so no need to remember its hash
docker_image_name=$DOCKER_BUILD_DIR
remote_image_name=$REGISTRY_SERVER:$REGISTRY_PORT/$docker_image_name
## File name for docker image
docker_image_gz=$docker_image_name.gz
[ -n "$docker_image_gz" ] || {
echo "Error: Output docker image filename is empty"
exit 1
[ -n "$docker_image_name" ] || {
docker_image_name=$DOCKER_BUILD_DIR
}
function cleanup {
rm -rf $DOCKER_BUILD_DIR/files
rm -rf $DOCKER_BUILD_DIR/deps
docker rmi $remote_image_name || true
[ ${BUILD_NUMBER} ] || {
echo "No BUILD_NUMBER found, setting to 0."
BUILD_NUMBER="0"
}
trap cleanup exit
remote_image_name=$REGISTRY_SERVER:$REGISTRY_PORT/$docker_image_name:latest
timestamp="$(date -u +%Y%m%d)"
build_version="${timestamp}.${BUILD_NUMBER}"
build_remote_image_name=$REGISTRY_SERVER:$REGISTRY_PORT/$docker_image_name:$build_version
## Copy dependencies
## Note: Dockerfile ADD doesn't support reference files outside the folder, so copy it locally
if ls deps/* 1>/dev/null 2>&1; then
trap_push "rm -rf $DOCKER_BUILD_DIR/deps"
mkdir -p $DOCKER_BUILD_DIR/deps
cp -r deps/* $DOCKER_BUILD_DIR/deps
fi
## Copy the suggested Debian sources
## ref: https://wiki.debian.org/SourcesList
trap_push "rm -rf $DOCKER_BUILD_DIR/deps"
cp -r files $DOCKER_BUILD_DIR/files
docker_try_rmi $docker_image_name
## Build the docker image
docker build --no-cache -t $docker_image_name $DOCKER_BUILD_DIR
## Get the ID of the built image
## Note: inspect output has quotation characters, so sed to remove it as an argument
image_id=$(docker inspect --format="{{json .Id}}" $docker_image_name | sed -e 's/^"//' -e 's/"$//')
## Flatten the image by importing an exported container on this image
## Note: it will squash the image with only one layer and lost all metadata such as ENTRYPOINT,
@ -57,18 +95,30 @@ docker build --no-cache -t $docker_image_name $DOCKER_BUILD_DIR
if [ "$docker_image_name" = "docker-base" ]; then
tmp_container=$(docker run -d ${docker_image_name} /bin/bash)
docker export $tmp_container | docker import - ${docker_image_name}
docker rm -f $tmp_container || true
trap_push "docker rmi $image_id"
trap_push "docker rm -f $tmp_container || true"
fi
image_sha=''
if [ -n "$REGISTRY_SERVER" ] && [ -n "$REGISTRY_PORT" ]; then
## Add registry information as tag, so will push as latest
## Add additional tag with build information
## Temporarily add -f option to prevent error message of Docker engine version < 1.10.0
docker tag -f $docker_image_name $remote_image_name
docker tag $docker_image_name $remote_image_name
docker tag $docker_image_name $build_remote_image_name
## Login the docker image registry server
## Note: user name and password are passed from command line, use fake email address to bypass login check
docker login -u $REGISTRY_USERNAME -p "$REGISTRY_PASSWD" -e "@" $REGISTRY_SERVER:$REGISTRY_PORT
docker push $remote_image_name
## Note: user name and password are passed from command line
docker login -u $REGISTRY_USERNAME -p "$REGISTRY_PASSWD" $REGISTRY_SERVER:$REGISTRY_PORT
## Push image to registry server
## And get the image digest SHA256
trap_push "docker rmi $remote_image_name"
trap_push "docker rmi $build_remote_image_name"
image_sha=$(docker push $remote_image_name | sed -n "s/.*: digest: sha256:\([0-9a-f]*\).*/\\1/p")
docker push $build_remote_image_name
fi
docker save $docker_image_name | gzip -c > $docker_image_gz
mkdir -p target
rm -f target/$docker_image_name.*.gz
docker save $docker_image_name | gzip -c > target/$docker_image_name.$image_sha.gz

View File

@ -23,10 +23,6 @@ sudo rm -f $OUTPUT_ONIE_IMAGE
if [ "$TARGET_MACHINE" = "generic" ]; then
## Generate an ONIE installer image
## Note: Don't leave blank between lines. It is single line command.
CONSOLE_SPEED=9600 \
CONSOLE_DEV=0 \
CONSOLE_FLAG=0 \
CONSOLE_PORT=0x3f8 \
./onie-mk-demo.sh $TARGET_PLATFORM $TARGET_MACHINE $TARGET_PLATFORM-$TARGET_MACHINE-$ONIEIMAGE_VERSION \
installer $TARGET_MACHINE/platform.conf $OUTPUT_ONIE_IMAGE OS $GIT_REVISION $ONIE_IMAGE_PART_SIZE \
$ONIE_INSTALLER_PAYLOAD

@ -1 +1 @@
Subproject commit 915f0fc71276e8819107edf605ab891764a01870
Subproject commit dfb5c2f46bf982207c8dbc2c5af589a0ba1b3ddc

View File

@ -1,11 +1,12 @@
FROM docker-base
COPY deps /deps
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/quagga_*.deb
COPY deps/quagga_*.deb /deps/
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } && \
dpkg_apt /deps/quagga_*.deb && \
apt-get clean -y && apt-get autoclean -y && apt-get autoremove -y && \
rm -rf /deps
## Clean up
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
RUN rm -rf /deps
COPY daemons /etc/quagga/
ENTRYPOINT service rsyslog start \
&& service quagga start \

31
docker-bgp/daemons Normal file
View File

@ -0,0 +1,31 @@
# This file tells the quagga package which daemons to start.
#
# Entries are in the format: <daemon>=(yes|no|priority)
# 0, "no" = disabled
# 1, "yes" = highest priority
# 2 .. 10 = lower priorities
# Read /usr/share/doc/quagga/README.Debian for details.
#
# Sample configurations for these daemons can be found in
# /usr/share/doc/quagga/examples/.
#
# ATTENTION:
#
# When activation a daemon at the first time, a config file, even if it is
# empty, has to be present *and* be owned by the user and group "quagga", else
# the daemon will not be started by /etc/init.d/quagga. The permissions should
# be u=rw,g=r,o=.
# When using "vtysh" such a config file is also needed. It should be owned by
# group "quaggavty" and set to ug=rw,o= though. Check /etc/pam.d/quagga, too.
#
# The watchquagga daemon is always started. Per default in monitoring-only but
# that can be changed via /etc/quagga/debian.conf.
#
zebra=yes
bgpd=yes
ospfd=no
ospf6d=no
ripd=no
ripngd=no
isisd=no
babeld=no

View File

@ -1,14 +1,14 @@
FROM docker-base
## Pre-install the fundamental packages
RUN apt-get update && apt-get -y install \
redis-server
## Clean up
RUN apt-get -y install \
redis-server \
&& \
apt-get clean -y && apt-get autoclean -y && apt-get autoremove -y
RUN sed -ri 's/^daemonize yes$/daemonize no/' /etc/redis/redis.conf \
&& sed -ri 's/^logfile .*$/logfile ""/' /etc/redis/redis.conf \
&& sed -ri 's/^# syslog-enabled no$/syslog-enabled no/' /etc/redis/redis.conf
## Clean up
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
ENTRYPOINT service redis-server start

View File

@ -2,20 +2,21 @@ FROM docker-base
RUN apt-get update
COPY deps /deps
COPY ["deps/libhiredis0.13*.deb", "deps/libswsscommon_*.deb", "deps/quagga_*", "/deps/"]
## Get fpmsyncd
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/libhiredis0.13*.deb
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/libswsscommon_*.deb
COPY /deps/fpmsyncd /usr/local/bin/fpmsyncd
COPY deps/fpmsyncd /usr/local/bin/
## Get Quagga
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/quagga_*.deb
COPY start.sh /usr/bin/start.sh
## Clean up
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
RUN rm -rf /deps
ENTRYPOINT service rsyslog start \
&& service quagga start \
&& (fpmsyncd &) \
ENTRYPOINT /usr/bin/start.sh \
&& /bin/bash

5
docker-fpm/start.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash
service rsyslog start
service quagga start
fpmsyncd &

19
docker-lldp/Dockerfile Executable file → Normal file
View File

@ -1,21 +1,18 @@
FROM docker-base
COPY deps/*py2*.whl deps/python-sswsdk_*.deb deps/lldpsyncd_*.deb deps/lldpd_*.deb /deps/
## Pre-install the fundamental packages
RUN apt-get update && apt-get -y install \
lldpd
COPY deps /deps
## Install Python SSWSDK (lldpsyncd dependancy)
## Note: dpkg_apt function has the benefit to detect missing .deb file
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/python-sswsdk_*.deb
## Install LLDP Sync Daemon
## Note: dpkg_apt function has the benefit to detect missing .deb file
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/lldpsyncd_*.deb
## Clean up
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
RUN rm -rf /deps
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } && \
dpkg_apt /deps/lldpd_*.deb && \
dpkg_apt /deps/lldpsyncd_*.deb && \
apt-get clean -y && apt-get autoclean -y && apt-get autoremove -y && \
pip install --no-cache-dir /deps/*.whl && \
rm -rf /deps
## There is a known bug: agetty processes at 100% cpu
## When:

View File

@ -2,21 +2,22 @@ FROM docker-base
RUN apt-get update
COPY deps /deps
COPY ["deps/libhiredis0.13*.deb", "deps/libswsscommon_*.deb", "deps/libsairedis_*.deb", "/deps/"]
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/libhiredis0.13*.deb
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/libswsscommon_*.deb
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/libsairedis_*.deb
## TODO: add ifupdown into Depends
RUN apt-get install -f -y ifupdown
RUN apt-get install -f -y ifupdown bridge-utils
## Copy executable binaries
COPY ["/deps/orchagent","/deps/swssconfig","/deps/portsyncd","/deps/intfsyncd","/deps/neighsyncd","/usr/local/bin/"]
COPY ["deps/orchagent","deps/swssconfig","deps/portsyncd","deps/intfsyncd","deps/neighsyncd","/usr/local/bin/"]
COPY start.sh /usr/bin/start.sh
## Clean up
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
RUN rm -rf /deps
ENTRYPOINT service rsyslog start \
ENTRYPOINT /usr/bin/start.sh \
&& /bin/bash

25
docker-orchagent/start.sh Executable file
View File

@ -0,0 +1,25 @@
#!/bin/bash
. /host/machine.conf
MAC_ADDRESS=`ip link show eth0 | grep ether | awk '{print $2}'`
ORCHAGENT_ARGS=""
PORTSYNCD_ARGS=""
if [ "$onie_platform" == "x86_64-dell_s6000_s1220-r0" ]; then
ORCHAGENT_ARGS+="-m $MAC_ADDRESS"
PORTSYNCD_ARGS+="-p /etc/ssw/ACS-S6000/port_config.ini"
elif [ "$onie_platform" == "x86_64-mlnx_x86-r5.0.1400" ]; then
ORCHAGENT_ARGS+="-p /etc/ssw/ACS-MSN2700/port_config.ini"
fi
service rsyslog start
orchagent $ORCHAGENT_ARGS &
sleep 5
portsyncd $PORTSYNCD_ARGS &
sleep 5
intfsyncd &
sleep 5
neighsyncd &

View File

@ -1,13 +1,12 @@
FROM docker-base
## Pre-install the fundamental packages
RUN apt-get update && apt-get -y install \
smartmontools \
sensord
## Clean up
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
RUN rm -rf /deps
RUN apt-get -y install \
smartmontools \
sensord \
&& \
apt-get clean -y && apt-get autoclean -y && apt-get autoremove -y
ENTRYPOINT service rsyslog start \
&& service lm-sensors start \

53
docker-snmp/Dockerfile Executable file → Normal file
View File

@ -1,21 +1,47 @@
FROM docker-base
COPY deps/snmp_*.deb deps/snmpd_*.deb deps/libsnmp-base_*.deb deps/libsnmp30_*.deb /deps/
COPY deps/python3/*.whl /python3/
# enable -O for all Python calls
ENV PYTHONOPTIMIZE 1
## Pre-install the fundamental packages
RUN apt-get update && apt-get -y install \
snmp \
snmpd
COPY deps /deps
## Install Python SSWSDK (SNMP subagent dependancy)
## Note: dpkg_apt function has the benefit to detect missing .deb file
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/python-sswsdk_*.deb
## Install SNMP subagent
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/acs-snmp-subagent_*.deb
## Note: dpkg_apt function has the benefit to detect missing .deb file
## Clean up
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
RUN rm -rf /deps
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } && \
dpkg_apt /deps/libsnmp-base_*.deb && \
dpkg_apt /deps/libsnmp30_*.deb && \
dpkg_apt /deps/snmp_*.deb && \
dpkg_apt /deps/snmpd_*.deb && \
rm -rf /deps
# install subagent
RUN apt-get -y install build-essential wget libssl-dev openssl && \
rm -rf /var/lib/apt/lists/* && \
wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz && \
tar xvf Python-3.5.2.tgz && cd Python-3.5.2 && \
./configure --without-doc-strings --prefix=/usr --without-pymalloc --enable-shared && \
make && make install && \
ldconfig && \
cd .. && rm -rf Python-3.5.2 && rm Python-3.5.2.tgz && \
pip3 install --no-cache-dir /python3/*py3*.whl hiredis && \
rm -rf /python3 && \
python3 -m pip uninstall -y pip setuptools && \
rm -rf /usr/lib/python3.5/unittest && \
rm -rf /usr/lib/python3.5/lib2to3 && \
rm -rf /usr/lib/python3.5/tkinter && \
rm -rf /usr/lib/python3.5/idlelib && \
rm -rf /usr/lib/python3.5/email && \
rm -rf /usr/lib/python3.5/test && \
apt-get -y remove build-essential wget libssl-dev openssl && \
apt-get clean -y && apt-get autoclean -y && apt-get autoremove -y && \
python3 -m acs_ax_impl install && \
find / | grep -E "__pycache__" | xargs rm -rf && \
rm -rf ~/.cache && \
systemctl enable acs-snmp-subagent.service
## There is a known bug: agetty processes at 100% cpu
## When:
@ -29,8 +55,7 @@ RUN systemctl --no-pager list-unit-files --type=service | grep getty | awk '{pri
RUN systemctl mask getty@tty1.service
## Although exposing ports is not need for host net mode, keep it for possible bridge mode
EXPOSE 161/udp
EXPOSE 162/udp
EXPOSE 161/udp 162/udp
## Specify init as CMD to enable systemd
## Note: don't provide ENTRYPOINT at the same time

View File

@ -1,17 +1,23 @@
FROM docker-base
RUN apt-get update
COPY deps /deps
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/python-tabulate_*.deb
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/libopennsl_*.deb
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/libsaibcm_*.deb
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/libsswsdk_*.deb
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/sswsyncd_*.deb
COPY \
deps/python-tabulate_*.deb \
deps/libopennsl_*.deb \
deps/libsaibcm_*.deb \
deps/libsswsdk_*.deb \
deps/sswsyncd_*.deb \
/deps/
## Install packages
## Clean up
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
RUN rm -rf /deps
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } && \
dpkg_apt /deps/python-tabulate_*.deb && \
dpkg_apt /deps/libopennsl_*.deb && \
dpkg_apt /deps/libsaibcm_*.deb && \
dpkg_apt /deps/libsswsdk_*.deb && \
dpkg_apt /deps/sswsyncd_*.deb && \
apt-get clean -y && apt-get autoclean -y && apt-get autoremove -y && \
rm -rf /deps
ENTRYPOINT service rsyslog start \
&& service sswsyncd start \

View File

@ -0,0 +1,46 @@
FROM docker-syncd-mlnx
## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
## Pre-install the fundamental packages
RUN apt-get update \
&& apt-get -y install \
net-tools \
python-pip \
build-essential \
libssl-dev \
libffi-dev \
python-dev \
wget \
cmake \
&& wget https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz \
&& tar xvfz 1.0.0.tar.gz \
&& cd nanomsg-1.0.0 \
&& mkdir -p build \
&& cmake . \
&& make install \
&& ldconfig \
&& cd .. \
&& rm -fr nanomsg-1.0.0 \
&& pip install cffi \
&& pip install --upgrade cffi \
&& pip install nnpy \
&& mkdir -p /opt \
&& cd /opt \
&& wget https://raw.githubusercontent.com/p4lang/ptf/master/ptf_nn/ptf_nn_agent.py
COPY deps /deps
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } \
&& dpkg -r syncd \
&& dpkg_apt /deps/syncd_*.deb \
&& dpkg_apt /deps/libthrift-0.9.2_*.deb
## Clean up
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
RUN rm -rf /deps
ENTRYPOINT service rsyslog start \
&& service syncd start \
&& /bin/bash

View File

@ -2,23 +2,24 @@ FROM docker-base
RUN apt-get update
COPY deps /deps
COPY ["deps/libhiredis0.13*.deb", "deps/libswsscommon_*.deb", "deps/libopennsl_*.deb", "deps/libsaibcm_*.deb", "deps/libsairedis_*.deb", "deps/syncd_*.deb", "/deps/"]
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/libhiredis0.13*.deb
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/libswsscommon_*.deb
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/libopennsl_*.deb
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/libsaibcm_*.deb
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/libsairedis_*.deb
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /deps/syncd_*.deb
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; \
dpkg_apt /deps/libhiredis0.13*.deb \
&& dpkg_apt /deps/libswsscommon_*.deb \
&& dpkg_apt /deps/libopennsl_*.deb \
&& dpkg_apt /deps/libsaibcm_*.deb \
&& dpkg_apt /deps/libsairedis_*.deb \
&& dpkg_apt /deps/syncd_*.deb
## TODO: add kmod into Depends
RUN apt-get install -f kmod
COPY ["deps/dsserve", "deps/bcmcmd", "start.sh", "/usr/local/bin/"]
## Clean up
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
RUN rm -rf /deps
ENTRYPOINT service rsyslog start \
&& service syncd start \
ENTRYPOINT /usr/local/bin/start.sh \
&& /bin/bash

4
docker-syncd/start.sh Executable file
View File

@ -0,0 +1,4 @@
#!/bin/bash
service rsyslog start
service syncd start

View File

@ -1,17 +1,18 @@
FROM docker-base
COPY deps/vasclnt_*.deb deps/vasgp_*.deb /deps/
COPY user-override /etc/opt/quest/vas/user-override
## Pre-install the fundamental packages
RUN apt-get update && apt-get -y install \
sudo
COPY deps /deps
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; \
dpkg_apt /deps/vasclnt_*.deb && \
dpkg_apt /deps/vasgp_*.deb
## Clean up
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
RUN rm -rf /deps
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } && \
apt-get -y install \
sudo \
&& \
dpkg_apt /deps/vasclnt_*.deb && \
dpkg_apt /deps/vasgp_*.deb && \
apt-get clean -y && apt-get autoclean -y && apt-get autoremove -y && \
rm -rf /deps
## Expose to host, ie. image content will copy to host when container started
## For .so

2
docker-vas/user-override Normal file
View File

@ -0,0 +1,2 @@
# Overrides every member to have the bash shell
::::::/bin/bash

View File

@ -1,3 +1,4 @@
#!/bin/sh
# Copyright (C) 2016 Arista Networks, Inc.
#
# This program is free software: you can redistribute it and/or modify
@ -37,11 +38,33 @@ if [ -d "${swipath}" ]; then
exit 1
fi
## Determine whether installing by hash file in the image
## Check the hash file in the image, and determine to install or just skip
GIT_REVISION=$(unzip -p ${swipath} .imagehash)
LOCAL_IMAGEHASH=$(cat $TARGET_PATH/.imagehash 2>/dev/null || true)
if [ "$GIT_REVISION" != "$LOCAL_IMAGEHASH" ]; then
## Clean old directory for read-write layer
rm -rf ${TARGET_PATH}/rw
## Unzip the image
unzip -oq ${swipath} -x boot0 -d ${TARGET_PATH}
## Detect SKU and create a hardware description file
aboot_version=`grep ^Aboot /etc/cmdline | sed 's/^.*norcal.-//'`
aboot_build_date=`stat -c %y /bin/sysinit | sed 's/ /T/'`
if `grep -q platform=raven /etc/cmdline`; then
aboot_machine=arista_7050_qx32
else
aboot_machine=arista_7050_qx32s
fi
cat <<EOF > ${TARGET_PATH}/machine.conf
aboot_version=$aboot_version
aboot_vendor=arista
aboot_platform=x86_64-$aboot_machine
aboot_machine=$aboot_machine
aboot_arch=x86_64
aboot_build_date=$aboot_build_date
EOF
fi
echo "${append}" >/tmp/append

View File

@ -1,3 +1,3 @@
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --storage-driver=aufs
ExecStart=/usr/bin/docker daemon -H fd:// --storage-driver=aufs --bip=240.127.1.1/24

View File

@ -4,10 +4,15 @@ case $1 in
exit 0
;;
esac
## Mount the aufs file system: rw layer over squashfs
mkdir -p ${rootmnt}/host/rw
mount -n -o dirs=${rootmnt}/host/rw:${rootmnt}=ro -t aufs root-aufs ${rootmnt}
## Mount the raw partition again
mount ${ROOT} ${rootmnt}/host
mkdir -p /root/var/lib/docker
mount --bind /root/host/var/lib/docker /root/var/lib/docker
mkdir -p /root/boot
mount --bind /root/host/boot /root/boot
## Mount the working directory of docker engine in the raw partition, bypass the aufs
mkdir -p ${rootmnt}/var/lib/docker
mount --bind ${rootmnt}/host/var/lib/docker ${rootmnt}/var/lib/docker
## Mount the boot directory in the raw partition, bypass the aufs
mkdir -p ${rootmnt}/boot
mount --bind ${rootmnt}/host/boot ${rootmnt}/boot

10
files/sshd/host-ssh-keygen.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/bash
[ -r /etc/ssh/ssh_host_key ] || {
rm -f /etc/ssh/ssh_host_*_key*
/usr/bin/ssh-keygen -t rsa -N '' -f /etc/ssh/ssh_host_rsa_key
/usr/bin/ssh-keygen -t dsa -N '' -f /etc/ssh/ssh_host_dsa_key
/usr/bin/ssh-keygen -t rsa1 -N '' -f /etc/ssh/ssh_host_key
/usr/bin/ssh-keygen -t ecdsa -N '' -f /etc/ssh/ssh_host_ecdsa_key
/usr/bin/ssh-keygen -t ed25519 -N '' -f /etc/ssh/ssh_host_ed25519_key
}

16
files/sshd/sshd.service Normal file
View File

@ -0,0 +1,16 @@
[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=-/usr/local/bin/host-ssh-keygen.sh
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
Alias=sshd.service

View File

@ -36,3 +36,10 @@ die() {
warn "$message"
exit 1
}
docker_try_rmi() {
local image_name="$1"
## Note: inspect output has quotation characters, so sed to remove it as an argument
local image_id=$(docker inspect --format="{{json .Id}}" $image_name | sed -e 's/^"//' -e 's/"$//')
[ -z "$image_id" ] || docker rmi $image_name
}

View File

@ -0,0 +1,16 @@
#!/bin/sh
echo "Replace ONIE reboot with Dell reset commands"
# set I2C GPIO mux
echo 1 > /sys/class/gpio/export
echo 2 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio1/direction
echo out > /sys/class/gpio/gpio2/direction
echo 0 > /sys/class/gpio/gpio1/value
echo 0 > /sys/class/gpio/gpio2/value
# replace the original reboot binary with the following command
rm /sbin/reboot
echo 'i2cset -y 0 0x31 1 0xfd' > /sbin/reboot
chmod a+x /sbin/reboot

View File

@ -39,6 +39,28 @@ if [ $(id -u) -ne 0 ]
exit 1
fi
# get running machine from conf file
[ -r /etc/machine.conf ] && . /etc/machine.conf
echo "onie_platform: $onie_platform"
# default console settings
CONSOLE_PORT=0x3f8
CONSOLE_DEV=0
CONSOLE_SPEED=9600
# Get platform specific linux kernel command line arguments
ONIE_PLATFORM_EXTRA_CMDLINE_LINUX=""
# platform specific configurations
if [ "$onie_platform" == "x86_64-dell_s6000_s1220-r0" ]; then
`pwd`/dell-s6000-replace-reboot.sh
elif [ "$onie_platform" == "x86_64-mlnx_x86-r5.0.1400" ]; then
ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="acpi_enforce_resources=lax acpi=noirq"
elif [ "$onie_platform" == "x86_64-dell_s6100_c2538-r0" ]; then
CONSOLE_PORT=0x2f8
CONSOLE_DEV=1
fi
# Install demo on same block device as ONIE
onie_dev=$(blkid | grep ONIE-BOOT | head -n 1 | awk '{print $1}' | sed -e 's/:.*$//')
blk_dev=$(echo $onie_dev | sed -e 's/[1-9][0-9]*$//' | sed -e 's/\([0-9]\)\(p\)/\1/')
@ -180,6 +202,7 @@ create_demo_gpt_partition()
--attributes=${demo_part}:=:$attr_bitmask \
--change-name=${demo_part}:$demo_volume_revision_label $blk_dev \
|| {
echo "Warning: The first trial of creating partition failed, trying the largest aligned available block of sectors on the disk"
begin=$(sgdisk -F $blk_dev)
end=$(sgdisk -E $blk_dev)
sgdisk --new=${demo_part}:$begin:$end \
@ -379,7 +402,10 @@ ${onie_bin} mount -t ext4 -o defaults,rw $demo_dev $demo_mnt || {
# Decompress the file for the file system directly to the partition
unzip $ONIE_INSTALLER_PAYLOAD -d $demo_mnt
# store installation log in demo file system
# Store machine description in target file system
cp /etc/machine.conf $demo_mnt
# Store installation log in target file system
rm -f $onie_initrd_tmp/tmp/onie-support.tar.bz2
${onie_bin} onie-support /tmp
mv $onie_initrd_tmp/tmp/onie-support.tar.bz2 $demo_mnt
@ -408,8 +434,8 @@ trap_push "rm $grub_cfg || true"
[ -r ./platform.conf ] && . ./platform.conf
DEFAULT_GRUB_SERIAL_COMMAND="serial --port=%%CONSOLE_PORT%% --speed=%%CONSOLE_SPEED%% --word=8 --parity=no --stop=1"
DEFAULT_GRUB_CMDLINE_LINUX="console=tty0 console=ttyS%%CONSOLE_DEV%%,%%CONSOLE_SPEED%%n8 quiet"
DEFAULT_GRUB_SERIAL_COMMAND="serial --port=${CONSOLE_PORT} --speed=${CONSOLE_SPEED} --word=8 --parity=no --stop=1"
DEFAULT_GRUB_CMDLINE_LINUX="console=tty0 console=ttyS${CONSOLE_DEV},${CONSOLE_SPEED}n8 quiet"
GRUB_SERIAL_COMMAND=${GRUB_SERIAL_COMMAND:-"$DEFAULT_GRUB_SERIAL_COMMAND"}
GRUB_CMDLINE_LINUX=${GRUB_CMDLINE_LINUX:-"$DEFAULT_GRUB_CMDLINE_LINUX"}
export GRUB_SERIAL_COMMAND
@ -460,7 +486,7 @@ menuentry '$demo_grub_entry' {
insmod ext2
linux /boot/vmlinuz-3.16.0-4-amd64 root=$demo_dev rw $GRUB_CMDLINE_LINUX \
loop=$FILESYSTEM_SQUASHFS loopfstype=squashfs \
apparmor=1 security=apparmor
apparmor=1 security=apparmor $ONIE_PLATFORM_EXTRA_CMDLINE_LINUX
echo 'Loading $demo_volume_revision_label $demo_type initial ramdisk ...'
initrd /boot/initrd.img-3.16.0-4-amd64
}
@ -474,3 +500,5 @@ mkdir -p $onie_initrd_tmp/$demo_mnt/grub
cp $grub_cfg $onie_initrd_tmp/$demo_mnt/grub/grub.cfg
cd /
echo "Installed SONiC base image $demo_volume_revision_label successfully"

View File

@ -39,11 +39,6 @@ fi
exit 1
}
[ -n "$CONSOLE_SPEED" ] || {
echo "Error: Invalid CONSOLE_SPEED"
exit 1
}
[ -r "$platform_conf" ] || {
echo "Error: Unable to read installer platform configuration file: $platform_conf"
exit 1
@ -81,7 +76,7 @@ tmp_dir=$(mktemp --directory)
tmp_installdir="$tmp_dir/installer"
mkdir $tmp_installdir || clean_up 1
cp $installer_dir/$arch/install.sh $tmp_installdir || clean_up 1
cp $installer_dir/$arch/* $tmp_installdir || clean_up 1
cp onie-image.conf $tmp_installdir
# Escape special chars in the user provide kernel cmdline string for use in
@ -92,10 +87,6 @@ EXTRA_CMDLINE_LINUX=`echo $EXTRA_CMDLINE_LINUX | sed -e 's/[\/&]/\\\&/g'`
sed -i -e "s/%%DEMO_TYPE%%/$demo_type/g" \
-e "s/%%GIT_REVISION%%/$git_revision/g" \
-e "s/%%ONIE_IMAGE_PART_SIZE%%/$onie_image_part_size/" \
-e "s/%%CONSOLE_SPEED%%/$CONSOLE_SPEED/g" \
-e "s/%%CONSOLE_DEV%%/$CONSOLE_DEV/g" \
-e "s/%%CONSOLE_FLAG%%/$CONSOLE_FLAG/g" \
-e "s/%%CONSOLE_PORT%%/$CONSOLE_PORT/g" \
-e "s/%%EXTRA_CMDLINE_LINUX%%/$EXTRA_CMDLINE_LINUX/" \
$tmp_installdir/install.sh || clean_up 1
echo -n "."