summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Dockerfile33
-rw-r--r--README.md51
-rw-r--r--tools/submod-mk84
3 files changed, 168 insertions, 0 deletions
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 00000000..924ddb12
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,33 @@
+# Must be run with --privileged flag
+# Recommended to run the container with a volume mapped
+# in order to easy exprort images built to "external" world
+FROM debian:jessie
+
+RUN apt-get update &&\
+ apt-get install -y \
+ vim \
+ git \
+ make \
+ live-build \
+ pbuilder \
+ devscripts \
+ python3-pystache \
+ squashfs-tools \
+ autoconf \
+ dpkg-dev \
+ syslinux \
+ genisoimage \
+ lsb-release \
+ fakechroot \
+ kernel-package \
+ libtool \
+ libglib2.0-dev \
+ libboost-filesystem-dev \
+ libapt-pkg-dev \
+ flex \
+ bison \
+ libperl-dev \
+ libnfnetlink-dev \
+ && rm -rf /var/lib/apt/lists/*
+
+WORKDIR ~
diff --git a/README.md b/README.md
index 3e7c713a..484484e3 100644
--- a/README.md
+++ b/README.md
@@ -56,6 +56,57 @@ $ sudo chroot vyos-chroot
Several packages are required for building the ISO and all packages, namely python3, live-build, pbuilder, python3-pystache and devscripts.
Individual packages may have other build dependencies. If some packages are missing, build scripts will tell you.
+## Building the ISO image inside a docker container
+
+Using Dockerfile you can create your own docker container that can be used to build a VyOS ISO image.
+The Dockerfile contains some of the most used packages needed for a VyOs build ISO process.
+
+```
+squashfs-tools # Required for squashfs file system
+git # Required, for cloning the source
+autoconf # Required, for generating build scripts
+dpkg-dev # Required, used in build scripts
+live-helper # Required, for ISO build
+syslinux # Required, for ISO build
+genisoimage # Required, for ISO build
+make # Required, for ISO build
+lsb-release # Required, used by configure script
+fakechroot # Required, for ISO build
+devscripts # Optional, for building submodules (kernel etc)
+kernel-package # Optional, for building the kernel
+libtool # Optional, for building certain packages (eg vyatta-op-vpn)
+libglib2.0-dev # Optional, for building vyatta-cfg
+libboost-filesystem-dev # Optional, for building vyatta-cfg
+libapt-pkg-dev # Optional, for building vyatta-cfg
+flex # Optional, for building vyatta-cfg
+bison # Optional, for building vyatta-cfg
+libperl-dev # Optional, for building vyatta-cfg
+libnfnetlink-dev # Optional, for building vyatta-cfg-vpn
+vim # Optional, vim, vi, nano or other text editor
+```
+
+To build the docker image
+
+```
+docker build -t vyos-builder $PATH_TO_Dockerfile
+```
+
+To run the docker image:
+
+```
+docker run --privileged -v /HOST_PATH/images:/vyos --name=vyos_node_builder -d vyos-builder bash
+```
+* docker container must be run with --privileged flag
+* is recommended to run the container with a volume mapped in order to easy export built VyOs ISO images
+to the "external" world
+
+To connect to the docker image once is running:
+```
+docker exec -it vyos_node_builder bash
+```
+
+After the docker container is running you can git clone the vyos-build repository inside the container
+and follow up the bellow instructions in order to build the VyOs ISO image
## Building the ISO image
diff --git a/tools/submod-mk b/tools/submod-mk
new file mode 100644
index 00000000..eb61da18
--- /dev/null
+++ b/tools/submod-mk
@@ -0,0 +1,84 @@
+#!/bin/bash
+#
+# **** License ****
+#
+# Copyright (C) 2013 Vyatta, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# 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, see <http://www.gnu.org/licenses/>.
+#
+# **** End License ****
+
+progname=${0##*/}
+shopt -s nullglob
+shopt -s extglob
+cd packages
+
+info=echo
+trace=
+noclean="-nc"
+build="debuild -i -b -uc -us"
+
+declare -a submodule
+declare -a debs
+for debian in !(installer|linux-kernel-di-i386-2.6)/debian ; do
+ smod=${debian%/*}
+ debs=( ${smod}_*.deb )
+ if [ ${#debs[@]} -eq 0 ] ; then
+ submodule+=( $smod )
+ fi
+done
+
+while [ $# -gt 0 ] ; do
+ case "$1" in
+ -h | --help )
+ cat <<-EOF
+Usage: $progname [Options] [ SUBMODULE... ]
+Options:
+ -n | --do-nothing DonĀ“t actually remove or build anything,
+ just show what would be done
+ -q | --quiet Quiet, don't print progress info
+ -c | --clean Clean build
+ -b | --binary Skip source package build (default)
+ -s | --source Build binary and source packages
+ -S | --signed-source Build and sign packages
+
+If no SUBMODULE(s) given, build all checked-out submodules w/o debs.
+EOF
+ exit 0;;
+ -n | --do-nothing )
+ trace=echo
+ shift;;
+ -q | --quiet )
+ info='#'
+ shift;;
+ -c | --clean )
+ noclean=
+ shift;;
+ -b | --binary )
+ shift ;; # default
+ -s | --source )
+ build="git buildpackage -uc -us"
+ shift;;
+ -S | --signed-source )
+ build="git buildpackage"
+ shift;;
+ * )
+ submodule=( $@ )
+ break;;
+ esac
+done
+
+for (( i=0; i<${#submodule[@]}; i++)) ; do
+ eval $info P: ${submodule[i]}
+ ( cd ${submodule[i]} && eval $trace $build $noclean ) || exit $?
+done