diff --git a/.gitmodules b/.gitmodules index 267fb94359..88123322f0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,15 @@ [submodule "docker-base"] - path = docker-base + path = dockers/docker-base url = https://github.com/Azure/sonic-docker-base.git +[submodule "sonic-swss-common"] + path = src/sonic-swss-common + url = https://github.com/Azure/sonic-swss-common +[submodule "sonic-linux-kernel"] + path = src/sonic-linux-kernel + url = https://github.com/Azure/sonic-linux-kernel +[submodule "sonic-sairedis"] + path = src/sonic-sairedis + url = https://github.com/Azure/sonic-sairedis +[submodule "sonic-swss"] + path = src/sonic-swss + url = https://github.com/Azure/sonic-swss diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..743cb4e768 --- /dev/null +++ b/Makefile @@ -0,0 +1,111 @@ +## TODO: if install dev package really happens, rebuild the depending project + +## Arguments from make command line +USERNAME= +PASSWORD_ENCRYPTED= + +## Select bash for commands +SHELL := /bin/bash + +## Capture all the files in SDK directories +MLNX-SDK-DEBS=$(notdir $(wildcard src/mlnx-sdk/*.deb)) +BRCM-SDK-DEBS=$(notdir $(wildcard src/brcm-sdk/*.deb)) + +## Function: build_docker, image_name save_file +## build a docker image and save to a file +define build_docker + docker build --no-cache -t $(1) dockers/$(1) + mkdir -p `dirname $(2)` + docker save $(1) | gzip -c > $(2) +endef + +## Rules +.phony : brcm-all mlnx-all + +src/%: + $(MAKE) -C src $(subst src/,,$@) + +dockers/docker-fpm/deps/fpmsyncd: src/fpmsyncd + mkdir -p `dirname $@` && cp $< $@ + +dockers/docker-fpm/deps/%.deb: src/%.deb + mkdir -p `dirname $@` && cp $< $@ + +dockers/docker-orchagent-mlnx/deps/%.deb: src/%.deb + mkdir -p `dirname $@` && cp $< $@ + +dockers/docker-orchagent-mlnx/deps/%: src/mlnx/% + mkdir -p `dirname $@` && cp $< $@ + +dockers/docker-orchagent/deps/%.deb: src/%.deb + mkdir -p `dirname $@` && cp $< $@ + +dockers/docker-orchagent/deps/%: src/brcm/% + mkdir -p `dirname $@` && cp $< $@ + +dockers/docker-%-mlnx/deps/syncd_1.0.0_amd64.deb: src/mlnx/syncd_1.0.0_amd64.deb + mkdir -p `dirname $@` && cp $< $@ + +dockers/docker-%/deps/syncd_1.0.0_amd64.deb: src/brcm/syncd_1.0.0_amd64.deb + mkdir -p `dirname $@` && cp $< $@ + +dockers/docker-%-mlnx/deps/libsairedis_1.0.0_amd64.deb: src/mlnx/syncd_1.0.0_amd64.deb + mkdir -p `dirname $@` && cp $< $@ + +dockers/docker-%/deps/libsairedis_1.0.0_amd64.deb: src/brcm/syncd_1.0.0_amd64.deb + mkdir -p `dirname $@` && cp $< $@ + +$(addprefix dockers/docker-syncd-mlnx/deps/,$(MLNX-SDK-DEBS)) : dockers/docker-syncd-mlnx/deps/%.deb : src/mlnx-sdk/%.deb + mkdir -p `dirname $@` && cp $< $@ + +$(addprefix dockers/docker-syncd/deps/,$(BRCM-SDK-DEBS)) : dockers/docker-syncd/deps/%.deb : src/brcm-sdk/%.deb + mkdir -p `dirname $@` && cp $< $@ + +dockers/docker-syncd-mlnx/deps/%.deb: src/%.deb + mkdir -p `dirname $@` && cp $< $@ + +dockers/docker-syncd/deps/%.deb: src/%.deb + mkdir -p `dirname $@` && cp $< $@ + +deps/linux-image-3.16.0-4-amd64_%.deb: src/sonic-linux-kernel/linux-image-3.16.0-4-amd64_%.deb + mkdir -p `dirname $@` && cp $< $@ + +deps/initramfs-tools_%.deb: src/initramfs-tools/initramfs-tools_%.deb + mkdir -p `dirname $@` && cp $< $@ + +target/docker-base.gz: + $(call build_docker,$(patsubst target/%.gz,%,$@),$@) + +target/docker-syncd.gz: target/docker-base.gz $(addprefix dockers/docker-syncd/deps/,$(BRCM-SDK-DEBS) libhiredis0.13_0.13.3-2_amd64.deb libswsscommon_1.0.0_amd64.deb libsairedis_1.0.0_amd64.deb syncd_1.0.0_amd64.deb) + ## TODO: remove placeholders for the dependencies + touch dockers/docker-syncd/deps/{dsserve,bcmcmd} + docker load < $< + $(call build_docker,$(patsubst target/%.gz,%,$@),$@) + +target/docker-syncd-mlnx.gz: target/docker-base.gz $(addprefix dockers/docker-syncd-mlnx/deps/,$(MLNX-SDK-DEBS) applibs_1.mlnx.4.2.2100_amd64.deb libhiredis0.13_0.13.3-2_amd64.deb libswsscommon_1.0.0_amd64.deb syncd_1.0.0_amd64.deb libsairedis_1.0.0_amd64.deb) + docker load < $< + $(call build_docker,$(patsubst target/%.gz,%,$@),$@) + +target/docker-orchagent.gz: target/docker-base.gz $(addprefix dockers/docker-orchagent/deps/,libhiredis0.13_0.13.3-2_amd64.deb libswsscommon_1.0.0_amd64.deb libsairedis_1.0.0_amd64.deb orchagent swssconfig portsyncd intfsyncd neighsyncd) + docker load < $< + $(call build_docker,$(patsubst target/%.gz,%,$@),$@) + +target/docker-orchagent-mlnx.gz: target/docker-base.gz $(addprefix dockers/docker-orchagent-mlnx/deps/,libhiredis0.13_0.13.3-2_amd64.deb libswsscommon_1.0.0_amd64.deb libsairedis_1.0.0_amd64.deb orchagent swssconfig portsyncd intfsyncd neighsyncd) + docker load < $< + $(call build_docker,$(patsubst target/%.gz,%,$@),$@) + +target/docker-fpm.gz: target/docker-base.gz $(addprefix dockers/docker-fpm/deps/,libswsscommon_1.0.0_amd64.deb libhiredis0.13_0.13.3-2_amd64.deb quagga_0.99.24.1-2_amd64.deb fpmsyncd) + docker load < $< + $(call build_docker,$(patsubst target/%.gz,%,$@),$@) + +target/acs-generic.bin: deps/linux-image-3.16.0-4-amd64_3.16.7-ckt11-2+acs8u2_amd64.deb deps/initramfs-tools_0.120_all.deb + ./build_debian.sh "$(USERNAME)" "$(PASSWORD_ENCRYPTED)" && TARGET_MACHINE=generic ./build_image.sh + +target/acs-aboot.bin: deps/linux-image-3.16.0-4-amd64_3.16.7-ckt11-2+acs8u2_amd64.deb deps/initramfs-tools_0.120_all.deb + ./build_debian.sh "$(USERNAME)" "$(PASSWORD_ENCRYPTED)" && TARGET_MACHINE=aboot ./build_image.sh + +## Note: docker-fpm.gz must be the last to build the implicit dependency fpmsyncd +brcm-all: target/acs-generic.bin $(addprefix target/,docker-syncd.gz docker-orchagent.gz docker-fpm.gz) + +## Note: docker-fpm.gz must be the last to build the implicit dependency fpmsyncd +mlnx-all: target/acs-generic.bin $(addprefix target/,docker-syncd-mlnx.gz docker-orchagent-mlnx.gz docker-fpm.gz) diff --git a/README.md b/README.md index 27171d288c..736990f111 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,42 @@ -# Build Switch Images - buildimage +# Build SONiC Switch Images - buildimage # Description Build an [Open Network Install Environment (ONIE)](https://github.com/opencomputeproject/onie) compatiable network operating system (NOS) installer image for network switches, and also build docker images running inside the NOS. # Prerequisite -## 1. Build environment -Preferably use [the Dockerfile](https://github.com/Azure/sonic-build-tools/blob/master/sonic-slave/Dockerfile), or use Debian Jessie and manually install packages appearing in the Dockerfile. -## 2. Linux kernel with switch drivers -Build the [Azure/sonic-linux-kernel](https://github.com/Azure/sonic-linux-kernel) project and copy the output .deb file into ./deps directory. +## 1. Clone or fetch the code repository with all git submodules +To clone the code repository recursively, assuming git version 1.9 or newer -## 3. initramfs-tools with loop device support -Run the script to build the .deb file into ./deps directory. + git clone --recursive https://github.com/Azure/sonic-buildimage.git - ./get_deps.sh - -## 4. Fetch the git submodule -If there is no files under ./docker-base, manually fetch them. +If it is already cloned, however there is no files under ./dockers/docker-base/ or ./src/sonic-linux-kernel/, manually fetch all the git submodules. git submodule update --init --recursive +## 2. Build environment +Build a docker image by [the Dockerfile](https://github.com/Azure/sonic-build-tools/blob/master/sonic-slave/Dockerfile) and build all remains in the docker container. + # Usage -## Build NOS installer image +## Build NOS installer image and docker images - ./build_debian USERNAME PASSWORD_ENCRYPTED && ./build_image.sh - -For example, the user name is 'admin' and the password is 'YourPaSsWoRd'. + make [VENDOR]-all USERNAME=[USERNAME] PASSWORD_ENCRYPTED=[PASSWORD_ENCRYPTED] - ./build_debian.sh "admin" "$(perl -e 'print crypt("YourPaSsWoRd", "salt"),"\n"')" && ./build_image.sh +Supported VENDOR are: +- brcm: Broadcom +- mlnx: Mellanox + +For example, the user name is 'admin' and the password is 'YourPaSsWoRd'. To build all the images for Broadcom platform, use the command: + + make brcm-all USERNAME="admin" PASSWORD_ENCRYPTED="$(perl -e 'print crypt("YourPaSsWoRd", "salt"),"\n"')" The root is disabled, but the created user could sudo. - -## Build docker images - - ./build_docker.sh docker-sswsyncd - ./build_docker.sh docker-database - ./build_docker.sh docker-bgp - ./build_docker.sh docker-snmp - ./build_docker.sh docker-lldp - ./build_docker.sh docker-basic_router +The target directory is ./target, containing the NOS installer image and docker images. +- acs-generic.bin: SONiC switch installer image (ONIE compatiable) +- docker-base.gz: base docker image where others are built from (gzip tar archive) +- docker-fpm.gz: docker image for quagga with fpm module enabled (gzip tar archive) +- docker-orchagent.gz: docker image for SWitch State Service (SWSS) +- docker-syncd.gz: docker image for the daemon to sync database and switch ASIC # Contribution guide diff --git a/build_debian.sh b/build_debian.sh index e283e5965e..5ad7c7d466 100755 --- a/build_debian.sh +++ b/build_debian.sh @@ -89,7 +89,7 @@ trap_push clean_sys sudo LANG=C chroot $FILESYSTEM_ROOT mount sysfs /sys -t sysfs ## Pointing apt to public apt mirrors and getting latest packages, needed for latest security updates -sudo cp docker-base/sources.list $FILESYSTEM_ROOT/etc/apt/ +sudo cp dockers/docker-base/sources.list $FILESYSTEM_ROOT/etc/apt/ sudo cp files/apt/apt.conf.d/81norecommends $FILESYSTEM_ROOT/etc/apt/apt.conf.d/ sudo LANG=C chroot $FILESYSTEM_ROOT bash -c 'apt-mark auto `apt-mark showmanual`' @@ -142,7 +142,7 @@ wget $docker_deb_url -qO $docker_deb_temp && { } 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 +## Add docker config drop-in to select aufs, otherwise it may select other storage driver 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 $_ diff --git a/build_docker.sh b/build_docker.sh index 14a545bfc7..0088a72e27 100755 --- a/build_docker.sh +++ b/build_docker.sh @@ -42,19 +42,19 @@ done shift "$((OPTIND - 1))" ## Dockerfile directory -DOCKER_BUILD_DIR=$1 +DOCKER_BUILD_DIR=dockers/$1 REGISTRY_SERVER=$2 REGISTRY_PORT=$3 REGISTRY_USERNAME=$4 REGISTRY_PASSWD=$5 -[ -d "$DOCKER_BUILD_DIR" ] || { +[ -f "$DOCKER_BUILD_DIR"/Dockerfile ] || { echo "Invalid DOCKER_BUILD_DIR directory" >&2 exit 1 } [ -n "$docker_image_name" ] || { - docker_image_name=$DOCKER_BUILD_DIR + docker_image_name=$(basename $DOCKER_BUILD_DIR) } [ ${BUILD_NUMBER} ] || { @@ -93,10 +93,14 @@ image_id=$(docker inspect --format="{{json .Id}}" $docker_image_name | sed -e 's ## TODO: wait docker-squash supporting Docker 1.10+ ## ref: https://github.com/jwilder/docker-squash/issues/45 if [ "$docker_image_name" = "docker-base" ]; then + ## Run old image in a container tmp_container=$(docker run -d ${docker_image_name} /bin/bash) + ## Export the container's filesystem, then import as a new image docker export $tmp_container | docker import - ${docker_image_name} - trap_push "docker rmi $image_id" - trap_push "docker rm -f $tmp_container || true" + ## Remove the container + docker rm -f $tmp_container || true + ## Remove the old image + docker rmi -f $image_id || true fi image_sha='' @@ -113,8 +117,8 @@ if [ -n "$REGISTRY_SERVER" ] && [ -n "$REGISTRY_PORT" ]; then ## 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" + trap_push "docker rmi $remote_image_name || true" + trap_push "docker rmi $build_remote_image_name || true" image_sha=$(docker push $remote_image_name | sed -n "s/.*: digest: sha256:\([0-9a-f]*\).*/\\1/p") docker push $build_remote_image_name fi diff --git a/build_image.sh b/build_image.sh index e4a93d8dfb..887d63ae04 100755 --- a/build_image.sh +++ b/build_image.sh @@ -19,6 +19,7 @@ } GIT_REVISION=$(git rev-parse --short HEAD) +mkdir -p `dirname $OUTPUT_ONIE_IMAGE` sudo rm -f $OUTPUT_ONIE_IMAGE if [ "$TARGET_MACHINE" = "generic" ]; then ## Generate an ONIE installer image diff --git a/docker-ptf/Dockerfile b/docker-ptf/Dockerfile deleted file mode 100644 index 6c35e524a9..0000000000 --- a/docker-ptf/Dockerfile +++ /dev/null @@ -1,48 +0,0 @@ -FROM debian:jessie - -MAINTAINER Pavel Shirshov - -## Copy dependencies -COPY deps /root/deps - -## Make apt-get non-interactive -ENV DEBIAN_FRONTEND=noninteractive - -## Set the apt source, update package cache and install necessary packages -RUN echo "deb http://ftp.us.debian.org/debian/ jessie main contrib non-free" > /etc/apt/sources.list \ - && apt-get update \ - && apt-get upgrade -y \ - && apt-get dist-upgrade -y \ - && apt-get install -y --no-install-recommends \ - openssh-server \ - vim-tiny \ - python \ - python-scapy \ - net-tools \ - python-setuptools \ - supervisor \ - traceroute \ - lsof \ - tcpdump \ - && dpkg -i /root/deps/python-ptf_*.deb \ - && dpkg -i --force-depends /root/deps/libthrift-0.9.2_*.deb \ - && dpkg -i --force-depends /root/deps/python-thrift_*.deb \ - && apt-get -y install -f \ - && rm -rf /root/deps \ - && apt-get -y autoclean \ - && apt-get -y autoremove \ - && rm -rf /var/lib/apt/lists/* - -## Adjust sshd settings -RUN mkdir /var/run/sshd \ - && echo 'root:root' | chpasswd \ - && sed -ri 's/^PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config \ - && sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config \ - && sed -i '$aUseDNS no' /etc/ssh/sshd_config \ - && mkdir /root/deps - -COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf - -EXPOSE 22 - -ENTRYPOINT ["/usr/bin/supervisord"] diff --git a/docker-base b/dockers/docker-base similarity index 100% rename from docker-base rename to dockers/docker-base diff --git a/docker-basic_router/Dockerfile b/dockers/docker-basic_router/Dockerfile similarity index 100% rename from docker-basic_router/Dockerfile rename to dockers/docker-basic_router/Dockerfile diff --git a/docker-bgp/Dockerfile b/dockers/docker-bgp/Dockerfile similarity index 100% rename from docker-bgp/Dockerfile rename to dockers/docker-bgp/Dockerfile diff --git a/docker-bgp/daemons b/dockers/docker-bgp/daemons similarity index 100% rename from docker-bgp/daemons rename to dockers/docker-bgp/daemons diff --git a/docker-database/Dockerfile b/dockers/docker-database/Dockerfile similarity index 100% rename from docker-database/Dockerfile rename to dockers/docker-database/Dockerfile diff --git a/docker-fpm/Dockerfile b/dockers/docker-fpm/Dockerfile similarity index 100% rename from docker-fpm/Dockerfile rename to dockers/docker-fpm/Dockerfile diff --git a/docker-fpm/start.sh b/dockers/docker-fpm/start.sh similarity index 100% rename from docker-fpm/start.sh rename to dockers/docker-fpm/start.sh diff --git a/docker-lldp/Dockerfile b/dockers/docker-lldp/Dockerfile similarity index 87% rename from docker-lldp/Dockerfile rename to dockers/docker-lldp/Dockerfile index bcfd378a73..aa66c24b65 100644 --- a/docker-lldp/Dockerfile +++ b/dockers/docker-lldp/Dockerfile @@ -1,6 +1,6 @@ FROM docker-base -COPY deps/*py2*.whl deps/python-sswsdk_*.deb deps/lldpsyncd_*.deb deps/lldpd_*.deb /deps/ +COPY deps/*py2*.whl deps/lldpsyncd_*.deb deps/lldpd_*.deb /deps/ ## Pre-install the fundamental packages ## Install Python SSWSDK (lldpsyncd dependancy) @@ -10,8 +10,10 @@ COPY deps/*py2*.whl deps/python-sswsdk_*.deb deps/lldpsyncd_*.deb deps/lldpd_*.d 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 install -y python-pip && \ + pip install /deps/*.whl && \ + apt-get remove -y python-pip && \ 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 diff --git a/docker-mlnx-sswsyncd-rpc/Dockerfile b/dockers/docker-mlnx-sswsyncd-rpc/Dockerfile similarity index 100% rename from docker-mlnx-sswsyncd-rpc/Dockerfile rename to dockers/docker-mlnx-sswsyncd-rpc/Dockerfile diff --git a/docker-mlnx-sswsyncd/Dockerfile b/dockers/docker-mlnx-sswsyncd/Dockerfile similarity index 100% rename from docker-mlnx-sswsyncd/Dockerfile rename to dockers/docker-mlnx-sswsyncd/Dockerfile diff --git a/docker-orchagent-mlnx b/dockers/docker-orchagent-mlnx similarity index 100% rename from docker-orchagent-mlnx rename to dockers/docker-orchagent-mlnx diff --git a/docker-orchagent/Dockerfile b/dockers/docker-orchagent/Dockerfile similarity index 100% rename from docker-orchagent/Dockerfile rename to dockers/docker-orchagent/Dockerfile diff --git a/docker-orchagent/start.sh b/dockers/docker-orchagent/start.sh similarity index 88% rename from docker-orchagent/start.sh rename to dockers/docker-orchagent/start.sh index a5155e0513..5eca68ed4e 100755 --- a/docker-orchagent/start.sh +++ b/dockers/docker-orchagent/start.sh @@ -12,7 +12,7 @@ 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" + PORTSYNCD_ARGS+="-p /etc/ssw/ACS-MSN2700/port_config.ini" fi service rsyslog start diff --git a/docker-platform-monitor/Dockerfile b/dockers/docker-platform-monitor/Dockerfile similarity index 100% rename from docker-platform-monitor/Dockerfile rename to dockers/docker-platform-monitor/Dockerfile diff --git a/dockers/docker-ptf/Dockerfile b/dockers/docker-ptf/Dockerfile new file mode 100644 index 0000000000..dff8f7196a --- /dev/null +++ b/dockers/docker-ptf/Dockerfile @@ -0,0 +1,75 @@ +FROM debian:jessie + +MAINTAINER Pavel Shirshov + +## Copy dependencies +COPY deps /root/deps + +## Make apt-get non-interactive +ENV DEBIAN_FRONTEND=noninteractive + +## Set the apt source, update package cache and install necessary packages +RUN echo "deb http://ftp.us.debian.org/debian/ jessie main contrib non-free" > /etc/apt/sources.list \ + && apt-get update \ + && apt-get upgrade -y \ + && apt-get dist-upgrade -y \ + && apt-get install -y --no-install-recommends \ + openssh-server \ + vim \ + python \ + python-scapy \ + net-tools \ + python-setuptools \ + supervisor \ + traceroute \ + lsof \ + tcpdump \ + unzip \ + pkg-config \ + binutils \ + net-tools \ + python-pip \ + build-essential \ + libssl-dev \ + libffi-dev \ + python-dev \ + wget \ + cmake \ + && dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } \ + && dpkg_apt /root/deps/python-ptf_*.deb \ + && dpkg_apt /root/deps/libthrift-0.9.2_*.deb \ + && dpkg_apt /root/deps/python-thrift_*.deb \ + && rm -rf /root/deps \ + && apt-get -y autoclean \ + && apt-get -y autoremove \ + && rm -rf /var/lib/apt/lists/* \ + && 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 \ + && rm -f 1.0.0.tar.gz \ + && 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 + +## Adjust sshd settings +RUN mkdir /var/run/sshd \ + && echo 'root:root' | chpasswd \ + && sed -ri 's/^PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config \ + && sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config \ + && sed -i '$aUseDNS no' /etc/ssh/sshd_config \ + && mkdir /root/deps + +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf + +EXPOSE 22 + +ENTRYPOINT ["/usr/bin/supervisord"] diff --git a/docker-ptf/supervisord.conf b/dockers/docker-ptf/supervisord.conf similarity index 100% rename from docker-ptf/supervisord.conf rename to dockers/docker-ptf/supervisord.conf diff --git a/docker-snmp/Dockerfile b/dockers/docker-snmp/Dockerfile similarity index 100% rename from docker-snmp/Dockerfile rename to dockers/docker-snmp/Dockerfile diff --git a/docker-sswsyncd/Dockerfile b/dockers/docker-sswsyncd/Dockerfile similarity index 100% rename from docker-sswsyncd/Dockerfile rename to dockers/docker-sswsyncd/Dockerfile diff --git a/docker-syncd-mlnx-rpc/Dockerfile b/dockers/docker-syncd-mlnx-rpc/Dockerfile similarity index 100% rename from docker-syncd-mlnx-rpc/Dockerfile rename to dockers/docker-syncd-mlnx-rpc/Dockerfile diff --git a/docker-syncd-mlnx/Dockerfile b/dockers/docker-syncd-mlnx/Dockerfile similarity index 100% rename from docker-syncd-mlnx/Dockerfile rename to dockers/docker-syncd-mlnx/Dockerfile diff --git a/docker-syncd/Dockerfile b/dockers/docker-syncd/Dockerfile similarity index 86% rename from docker-syncd/Dockerfile rename to dockers/docker-syncd/Dockerfile index a3d45eb71f..16b70961a4 100755 --- a/docker-syncd/Dockerfile +++ b/dockers/docker-syncd/Dockerfile @@ -15,11 +15,11 @@ RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return ## TODO: add kmod into Depends RUN apt-get install -f kmod -COPY ["deps/dsserve", "deps/bcmcmd", "start.sh", "/usr/local/bin/"] +COPY ["deps/dsserve", "deps/bcmcmd", "start.sh", "/usr/bin/"] ## Clean up RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y RUN rm -rf /deps -ENTRYPOINT /usr/local/bin/start.sh \ +ENTRYPOINT /usr/bin/start.sh \ && /bin/bash diff --git a/docker-syncd/start.sh b/dockers/docker-syncd/start.sh similarity index 100% rename from docker-syncd/start.sh rename to dockers/docker-syncd/start.sh diff --git a/docker-vas/Dockerfile b/dockers/docker-vas/Dockerfile similarity index 100% rename from docker-vas/Dockerfile rename to dockers/docker-vas/Dockerfile diff --git a/docker-vas/user-override b/dockers/docker-vas/user-override similarity index 100% rename from docker-vas/user-override rename to dockers/docker-vas/user-override diff --git a/functions.sh b/functions.sh index 99dfcb9db3..b808f72727 100644 --- a/functions.sh +++ b/functions.sh @@ -41,5 +41,11 @@ 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 + [ -z "$image_id" ] || { + ## Remove all the exited containers from this image + docker ps -a -q -f "status=exited" -f "ancestor=$1" | xargs --no-run-if-empty docker rm + ## Note: If there are running containers from this image, the build system is in an + ## unexpected state. The 'rmi' will fail and we need investigate the build environment. + docker rmi $image_name + } } diff --git a/get_deps.sh b/get_deps.sh deleted file mode 100755 index 145caf620a..0000000000 --- a/get_deps.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -## This script is to build the dependencies of an ONIE installer image -## -## USAGE: -## ./get_deps.sh - -# Obtaining the initramfs-tools -rm -rf deps/initramfs-tools -git clone --branch v0.120 https://anonscm.debian.org/git/kernel/initramfs-tools.git deps/initramfs-tools - -# Patch -pushd deps/initramfs-tools -patch -p1 < $OLDPWD/patch/initramfs-tools/loopback-file-system-support.patch - -# Build the package -fakeroot debian/rules clean -fakeroot debian/rules binary - -popd diff --git a/onie-image.conf b/onie-image.conf index 25c631563c..b7e43b6a0a 100644 --- a/onie-image.conf +++ b/onie-image.conf @@ -1,5 +1,5 @@ ## DESCRIPTION: -## partition related config +## config for ONIE image ## ## Partition size in MB @@ -19,4 +19,4 @@ FILESYSTEM_SQUASHFS=fs.squashfs ONIE_INSTALLER_PAYLOAD=fs.zip ## Output file name for onie installer -OUTPUT_ONIE_IMAGE=acs-$TARGET_MACHINE.bin +OUTPUT_ONIE_IMAGE=target/acs-$TARGET_MACHINE.bin diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000000..09e1152dec --- /dev/null +++ b/src/Makefile @@ -0,0 +1,67 @@ +## TODO: if install dev package really happens, rebuild the depending project + +.ONESHELL: +SHELL := /bin/bash + +## Function: build_project, directory +## Build the project and save the .deb target in the same directory +## TRICK: clean dh state so it will force recreating .deb later +define build_project + rm -f $(1)/debian/*.debhelper.log + pushd $(1) + [ ! -f ./autogen.sh ] || ./autogen.sh + dpkg-buildpackage -rfakeroot -b -us -uc + popd +endef + +## Function: install_deb, debfile +install_deb = \ + [ -f $(1) ] && { sudo dpkg -i $(1) || sudo apt-get -y install -f; } || return 1; + +## Rules +quagga_0.99.24.1-2_amd64.deb: + pushd quagga; ./build.sh; popd + +redis-server_3.0.7-2_amd64.deb redis-tools_3.0.7-2_amd64.deb redis-sentinel_3.0.7-2_amd64.deb: + pushd redis; ./build.sh; popd + +libhiredis0.13_0.13.3-2_amd64.deb libhiredis-dbg_0.13.3-2_amd64.deb libhiredis-dev_0.13.3-2_amd64.deb: redis-server_3.0.7-2_amd64.deb redis-tools_3.0.7-2_amd64.deb redis-sentinel_3.0.7-2_amd64.deb + pushd hiredis; ./build.sh; popd + +libswsscommon_1.0.0_amd64.deb libswsscommon-dev_1.0.0_amd64.deb: redis-server_3.0.7-2_amd64.deb redis-tools_3.0.7-2_amd64.deb libhiredis0.13_0.13.3-2_amd64.deb libhiredis-dev_0.13.3-2_amd64.deb + $(foreach dep, $^, $(call install_deb, $(dep))) + $(call build_project, sonic-swss-common) + +brcm/syncd_1.0.0_amd64.deb brcm/libsairedis_1.0.0_amd64.deb brcm/libsairedis-dev_1.0.0_amd64.deb: libswsscommon_1.0.0_amd64.deb libswsscommon-dev_1.0.0_amd64.deb brcm-sdk/libopennsl_*_amd64.deb brcm-sdk/libsaibcm_1.0.2*_amd64.deb brcm-sdk/libsaibcm-dev_1.0.2*_amd64.deb + $(foreach dep, $^, $(call install_deb, $(dep))) + $(call build_project, sonic-sairedis) + mkdir -p brcm + cp syncd_1.0.0_amd64.deb libsairedis_1.0.0_amd64.deb libsairedis-dev_1.0.0_amd64.deb brcm/ + +mlnx/syncd_1.0.0_amd64.deb mlnx/libsairedis_1.0.0_amd64.deb mlnx/libsairedis-dev_1.0.0_amd64.deb: libswsscommon_1.0.0_amd64.deb libswsscommon-dev_1.0.0_amd64.deb mlnx-sdk/applibs_1.mlnx.4.2.2100_amd64.deb mlnx-sdk/*.deb + $(foreach dep, $^, $(call install_deb, $(dep))) + $(call build_project, sonic-sairedis) + mkdir -p mlnx + cp syncd_1.0.0_amd64.deb libsairedis_1.0.0_amd64.deb libsairedis-dev_1.0.0_amd64.deb mlnx/ + +## Note: fpmsyncd is one implicit target +brcm/swss_1.0.0_amd64.deb brcm/intfsyncd brcm/neighsyncd brcm/orchagent brcm/portsyncd brcm/routeresync brcm/swssconfig: brcm/syncd_1.0.0_amd64.deb brcm/libsairedis_1.0.0_amd64.deb brcm/libsairedis-dev_1.0.0_amd64.deb + $(foreach dep, $^, $(call install_deb, $(dep))) + $(call build_project, sonic-swss) + cp swss_1.0.0_amd64.deb brcm/ + cp sonic-swss/debian/swss/usr/bin/* brcm/ + cp sonic-swss/debian/swss/usr/bin/fpmsyncd . + +## Note: fpmsyncd is one implicit target +mlnx/swss_1.0.0_amd64.deb mlnx/intfsyncd mlnx/neighsyncd mlnx/orchagent mlnx/portsyncd mlnx/routeresync mlnx/swssconfig: mlnx/syncd_1.0.0_amd64.deb mlnx/libsairedis_1.0.0_amd64.deb mlnx/libsairedis-dev_1.0.0_amd64.deb + $(foreach dep, $^, $(call install_deb, $(dep))) + $(call build_project, sonic-swss) + cp swss_1.0.0_amd64.deb mlnx/ + cp sonic-swss/debian/swss/usr/bin/* mlnx/ + cp sonic-swss/debian/swss/usr/bin/fpmsyncd . + +$(addprefix sonic-linux-kernel/,linux-headers-3.16.0-4-amd64_3.16.7-ckt11-2+acs8u2_amd64.deb linux-headers-3.16.0-4-common_3.16.7-ckt11-2+acs8u2_amd64.deb linux-image-3.16.0-4-amd64-dbg_3.16.7-ckt11-2+acs8u2_amd64.deb linux-image-3.16.0-4-amd64_3.16.7-ckt11-2+acs8u2_amd64.deb xen-linux-system-3.16.0-4-amd64_3.16.7-ckt11-2+acs8u2_amd64.deb): + pushd sonic-linux-kernel; sudo ./build.sh; popd + +initramfs-tools/initramfs-tools_0.120_all.deb: + pushd initramfs-tools; ./build.sh; popd diff --git a/src/brcm-sdk/filelist.txt b/src/brcm-sdk/filelist.txt new file mode 100644 index 0000000000..2117594365 --- /dev/null +++ b/src/brcm-sdk/filelist.txt @@ -0,0 +1,4 @@ +libopennsl_6.4.11-1+0~20160719212144.23~1.gbp8ec2d1_amd64.deb +libsaibcm-dbg_1.0.2~20160727172452.52_amd64.deb +libsaibcm-dev_1.0.2~20160727172452.52_amd64.deb +libsaibcm_1.0.2~20160727172452.52_amd64.deb diff --git a/src/hiredis/build.sh b/src/hiredis/build.sh new file mode 100755 index 0000000000..de8ab036f0 --- /dev/null +++ b/src/hiredis/build.sh @@ -0,0 +1,14 @@ +#!/bin/bash -x + +sudo apt-get install -y libjemalloc-dev + +# Install redis-server +sudo dpkg -i redis/*.deb + +wget http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.13.3.orig.tar.gz +wget http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.13.3-2.debian.tar.xz +wget http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.13.3-2.dsc +dpkg-source -x hiredis_0.13.3-2.dsc +pushd hiredis-0.13.3; fakeroot debian/rules binary; popd + +cp *.deb .. diff --git a/src/initramfs-tools/build.sh b/src/initramfs-tools/build.sh new file mode 100755 index 0000000000..335b834a53 --- /dev/null +++ b/src/initramfs-tools/build.sh @@ -0,0 +1,19 @@ +#!/bin/bash +## This script is to build the initramfs-tools with patches +## +## USAGE: +## ./build.sh + +# Obtaining the initramfs-tools +rm -rf ./initramfs-tools +git clone --branch v0.120 https://anonscm.debian.org/git/kernel/initramfs-tools.git ./initramfs-tools + +# Patch +pushd ./initramfs-tools +patch -p1 < $OLDPWD/loopback-file-system-support.patch + +# Build the package +rm -f debian/*.debhelper.log +dpkg-buildpackage -rfakeroot -b -us -uc + +popd diff --git a/patch/initramfs-tools/loopback-file-system-support.patch b/src/initramfs-tools/loopback-file-system-support.patch similarity index 100% rename from patch/initramfs-tools/loopback-file-system-support.patch rename to src/initramfs-tools/loopback-file-system-support.patch diff --git a/src/mlnx-sdk/filelist.txt b/src/mlnx-sdk/filelist.txt new file mode 100644 index 0000000000..16f482f334 --- /dev/null +++ b/src/mlnx-sdk/filelist.txt @@ -0,0 +1,32 @@ +applibs-dev_1.mlnx.4.2.2100_amd64.deb +applibs_1.mlnx.4.2.2100_amd64.deb +iproute2-dev_1.mlnx.4.2.2100_amd64.deb +iproute2_1.mlnx.4.2.2100_amd64.deb +mft_4.1.0-28_amd64.deb +mlnx-sai_1.mlnx.160712_amd64.deb +python-sdk-api_1.mlnx.4.2.2100_amd64.deb +sx-acl-rm-dev_1.mlnx.4.2.2100_amd64.deb +sx-acl-rm_1.mlnx.4.2.2100_amd64.deb +sx-complib-dev-static_1.mlnx.4.2.2100_amd64.deb +sx-complib-dev_1.mlnx.4.2.2100_amd64.deb +sx-complib_1.mlnx.4.2.2100_amd64.deb +sx-examples-dev_1.mlnx.4.2.2100_amd64.deb +sx-examples_1.mlnx.4.2.2100_amd64.deb +sx-gen-utils-dev_1.mlnx.4.2.2100_amd64.deb +sx-gen-utils_1.mlnx.4.2.2100_amd64.deb +sx-kernel-dev_1.mlnx.4.2.2100_amd64.deb +sx-kernel_1.mlnx.4.2.2100_amd64.deb +sx-libnl-dev-static_1.mlnx.4.2.2100_amd64.deb +sx-libnl-dev_1.mlnx.4.2.2100_amd64.deb +sx-libnl_1.mlnx.4.2.2100_amd64.deb +sx-scew-dev-static_1.mlnx.4.2.2100_amd64.deb +sx-scew-dev_1.mlnx.4.2.2100_amd64.deb +sx-scew_1.mlnx.4.2.2100_amd64.deb +sx-sdn-hal-dev-static_1.mlnx.4.2.2100_amd64.deb +sx-sdn-hal-dev_1.mlnx.4.2.2100_amd64.deb +sx-sdn-hal_1.mlnx.4.2.2100_amd64.deb +sxd-libs-dev-static_1.mlnx.4.2.2100_amd64.deb +sxd-libs-dev_1.mlnx.4.2.2100_amd64.deb +sxd-libs_1.mlnx.4.2.2100_amd64.deb +testx-dev_1.mlnx.4.2.2100_amd64.deb +testx_1.mlnx.4.2.2100_amd64.deb diff --git a/src/quagga/build.sh b/src/quagga/build.sh new file mode 100755 index 0000000000..03ea3bf5cd --- /dev/null +++ b/src/quagga/build.sh @@ -0,0 +1,36 @@ +#!/bin/bash -x + +mkdir quagga + +# Get debian source for 0.9.24.1-2 +wget -O quagga_0.99.24.1.orig.tar.gz 'https://sonicstorage.blob.core.windows.net/packages/quagga_0.99.24.1.orig.tar.gz?sv=2015-04-05&sr=b&sig=7g3AC%2FkoX3wYztJYtXFt6Wl7zj%2BYwLkbXVNaSaRvUDU%3D&se=2026-07-21T00%3A07%3A31Z&sp=r' +tar -xzf quagga_0.99.24.1.orig.tar.gz --strip-components=1 -C quagga +ls -lrt + +# Get debian packaging for 0.99.24.1-2 +wget -O quagga_0.99.24.1-2.debian.tar.xz 'https://sonicstorage.blob.core.windows.net/packages/quagga_0.99.24.1-2.debian.tar.xz?sv=2015-04-05&sr=b&sig=VFEq4ec99OjVaypAx14DkO5I8N4CIBIPOuSw79qHUXg%3D&se=2026-07-21T00%3A03%3A10Z&sp=r' +tar -xJf quagga_0.99.24.1-2.debian.tar.xz -C quagga +ls -lrt + +cd quagga +ls -lrt + +# Enable FPM in debian/rules +awk '/--with-libpam/ { print; print " --enable-fpm \\"; next }1' debian/rules > tmp && mv tmp debian/rules + +# Update changelog +#echo 'quagga (0.99.24.1-2.1) unstable; urgency=medium +# +# * Non-maintainer upload. +# * enable fpm +# +# -- Guohan Lu Sat, 18 Jul 2015 16:10:47 -0700 +#' > tmp && cat debian/changelog >> tmp && mv tmp debian/changelog + +#./configure --enable-fpm +#make + +sudo chmod a+x debian/rules +dpkg-buildpackage -rfakeroot -b -us -uc +cd .. +cp *.deb .. diff --git a/src/redis/build.sh b/src/redis/build.sh new file mode 100755 index 0000000000..44f3e06018 --- /dev/null +++ b/src/redis/build.sh @@ -0,0 +1,14 @@ +#!/bin/bash -x + +export REDIS_DOWNLOAD_URL=http://http.debian.net/debian/pool/main/r/redis/redis_3.0.7.orig.tar.gz +export REDIS_PACKAGING_URL=http://http.debian.net/debian/pool/main/r/redis/redis_3.0.7-2.debian.tar.xz + +wget -O redis_3.0.7-2.dsc 'https://sonicstorage.blob.core.windows.net/packages/redis_3.0.7-2.dsc?sv=2015-04-05&sr=b&sig=evQtsWTIUFlgWbzLLifS1lDgop%2BzlqIP8ehZl3p%2FCKI%3D&se=2026-07-24T01%3A48%3A19Z&sp=r' +wget -O redis_3.0.7.orig.tar.gz 'https://sonicstorage.blob.core.windows.net/packages/redis_3.0.7.orig.tar.gz?sv=2015-04-05&sr=b&sig=0ht16%2Fi8%2FPZQHp1PrDPYW0iRwcLfUPw1JpKUapizu8o%3D&se=2026-07-24T01%3A48%3A49Z&sp=r' +wget -O redis_3.0.7-2.debian.tar.xz 'https://sonicstorage.blob.core.windows.net/packages/redis_3.0.7-2.debian.tar.xz?sv=2015-04-05&sr=b&sig=4a33ECTvURfNUEDkS436ZlSsIpLIC9QdJrBBRIoWpW0%3D&se=2026-07-24T01%3A49%3A22Z&sp=r' + +dpkg-source -x redis_3.0.7-2.dsc + +pushd redis-3.0.7; fakeroot debian/rules binary; popd + +cp *.deb .. diff --git a/src/sonic-linux-kernel b/src/sonic-linux-kernel new file mode 160000 index 0000000000..9794d29a08 --- /dev/null +++ b/src/sonic-linux-kernel @@ -0,0 +1 @@ +Subproject commit 9794d29a08a4f81fbcd900e03072561f42b81074 diff --git a/src/sonic-sairedis b/src/sonic-sairedis new file mode 160000 index 0000000000..68b0a9b914 --- /dev/null +++ b/src/sonic-sairedis @@ -0,0 +1 @@ +Subproject commit 68b0a9b914c3a3816c809d7951de70136d09dc27 diff --git a/src/sonic-swss b/src/sonic-swss new file mode 160000 index 0000000000..b56c9cc507 --- /dev/null +++ b/src/sonic-swss @@ -0,0 +1 @@ +Subproject commit b56c9cc507cdfc473d6d0d1159f134dfd83a96df diff --git a/src/sonic-swss-common b/src/sonic-swss-common new file mode 160000 index 0000000000..38b461a168 --- /dev/null +++ b/src/sonic-swss-common @@ -0,0 +1 @@ +Subproject commit 38b461a168a6154aad978d3a97f08c2c933e943a