diff --git a/docker-builder-data/build/script/common/manager b/docker-builder-data/build/script/common/manager new file mode 100755 index 0000000..7150de4 --- /dev/null +++ b/docker-builder-data/build/script/common/manager @@ -0,0 +1,284 @@ +#!/bin/bash + +# root + +ROOT_DIR=`realpath "$0"` +ROOT_DIR=`dirname "$ROOT_DIR"` +ROOT_DIR=`dirname "$ROOT_DIR"` +ROOT_DIR=`dirname "$ROOT_DIR"` + +# dirs + +SCRIPT_DIR=$ROOT_DIR/script +COMMON_SCRIPT_DIR=$SCRIPT_DIR/common +PACKET_SCRIPT_DIR=$SCRIPT_DIR/packet +PACKET_DIR=$ROOT_DIR/packet +ENV_DIR=$ROOT_DIR/env +ENVFLAGS_DIR=$ROOT_DIR/envflags + +# vars + +INITIAL_LD_LIBRARY_PATH=$LD_LIBRARY_PATH +INITIAL_PATH=$PATH +INITIAL_LDFLAGS=$LDFLAGS +INITIAL_CPPFLAGS=$CPPFLAGS + + +clean_packet_directory() { + if [ ! -z "$DRY_RUN" ]; then + return 0 + fi + rm -f -r "$PACKET_DIR/$1/$2" || true + rm -f "$PACKET_DIR/$1/$2.done" || true +} + +check_packet_function() { + if [ ! -f "$PACKET_DIR/$1/$2.done" ]; then + return 1 + fi +} + +prepare_build() { + if ! cp -r $2/* "$1/"; then + return 1 + fi +} + +call_packet_function() { + local NAME=$1 + local FUNC=$2 + local PREV_FUNC=$3 + local NEXT_FUNC=$4 + local PREPARE_FUNC=$5 + local FINALIZE_FUNC=$6 + + local FUNC_NAME=pk$FUNC + local CURRENT_PACKET_DIR=$PACKET_DIR/$NAME + local DONE_FILE=$CURRENT_PACKET_DIR/$FUNC.done + local FUNC_CURRENT_PACKET_DIR=$CURRENT_PACKET_DIR/$FUNC + local PREV_FUNC_CURRENT_PACKET_DIR=$CURRENT_PACKET_DIR/$PREV_FUNC + local NEXT_FUNC_CURRENT_PACKET_DIR=$CURRENT_PACKET_DIR/$NEXT_FUNC + + echo "$FUNC $NAME" + if [ ! -z "$DRY_RUN" ]; then + return 0 + fi + + rm -f "$DONE_FILE" || true + + mkdir -p $FUNC_CURRENT_PACKET_DIR + cd $FUNC_CURRENT_PACKET_DIR + source "$PACKET_SCRIPT_DIR/$NAME.sh" + + if [ ! -z "$PREPARE_FUNC" ]; then + if ! "$PREPARE_FUNC" "$FUNC_CURRENT_PACKET_DIR" "$PREV_FUNC_CURRENT_PACKET_DIR" "$NEXT_FUNC_CURRENT_PACKET_DIR"; then + return 1 + fi + fi + + if ! "$FUNC_NAME" "$FUNC_CURRENT_PACKET_DIR" "$PREV_FUNC_CURRENT_PACKET_DIR" "$NEXT_FUNC_CURRENT_PACKET_DIR"; then + return 1 + fi + + if [ ! -z "$FINALIZE_FUNC" ]; then + if ! "$FINALIZE_FUNC" "$FUNC_CURRENT_PACKET_DIR" "$PREV_FUNC_CURRENT_PACKET_DIR" "$NEXT_FUNC_CURRENT_PACKET_DIR"; then + return 1 + fi + fi + + echo 1 > "$DONE_FILE" +} + +clean_download() { + clean_packet_directory $1 download +} + +clean_unpack() { + clean_packet_directory $1 download +} + +clean_build() { + clean_packet_directory $1 build +} + +clean_install() { + clean_packet_directory $1 install +} + +clean() { + clean_download $1 + clean_unpack $1 + clean_build $1 + clean_install $1 +} + +download() { + if ! (check_packet_function $1 download || call_packet_function $1 download "" unpack); then + return 1 + fi +} + +unpack() { + if ! (check_packet_function $1 unpack || (download $1 && call_packet_function $1 unpack download build)); then + return 1 + fi +} + +build() { + if check_packet_function $1 build; then + return 0 + fi + + if ! unpack $1; then + return 1 + fi + + set_environment_deps $1 + if [ ! "$?" -eq "0" ]; then + return 1 + fi + + if ! call_packet_function $1 build unpack install prepare_build; then + return 1 + fi +} + +install() { + if ! (install_deps $1 && (check_packet_function $1 install || (build $1 && call_packet_function $1 install build))); then + return 1 + fi +} + +download_with_deps() { + source $PACKET_SCRIPT_DIR/$1.sh + local CURRENT_DEPS=$DEPS + for DEP in $CURRENT_DEPS; do + if [ ! -z "$DEP"]; then + if ! download $DEP; then + return 1 + fi + fi + done + if ! download $1; then + return 1 + fi +} + +unpack_with_deps() { + source $PACKET_SCRIPT_DIR/$1.sh + local CURRENT_DEPS=$DEPS + for DEP in $CURRENT_DEPS; do + if [ ! -z "$DEP"]; then + if ! unpack $DEP; then + return 1 + fi + fi + done + if ! unpack $1; then + return 1 + fi +} + +install_deps() { + source $PACKET_SCRIPT_DIR/$1.sh + local CURRENT_DEPS=$DEPS + for DEP in $CURRENT_DEPS; do + if [ ! -z "$DEP"]; then + if ! install $DEP; then + return 1 + fi + fi + done +} + +clear_environment() { + if [ ! -z "$DRY_RUN" ]; then + return 0 + fi + rm -r -f "$ENVFLAGS_DIR" + rm -r -f "$ENV_DIR" +} + +add_environment_deps() { + if ! install_deps $1; then + return 1 + fi + + export LD_LIBRARY_PATH="$ENV_DIR/lib:$INITIAL_LD_LIBRARY_PATH" + export PATH="$ENV_DIR/bin:$INITIAL_PATH" + export LDFLAGS="-L$ENV_DIR/lib $INITIAL_LDFLAGS" + export CPPFLAGS="-I$ENV_DIR/include $INITIAL_CPPFLAGS -fpermissive" + + source $PACKET_SCRIPT_DIR/$1.sh + local CURRENT_DEPS=$DEPS + for DEP in $CURRENT_DEPS; do + if [ ! -z "$DEP"]; then + if ! add_environment $DEP; then + return 1 + fi + fi + done +} + +add_environment() { + local NAME=$1 + local DONE_FILE=$ENVFLAGS_DIR/$NAME.done + + if [ -f "$DONE_FILE" ]; then + return 0 + fi + + if ! install $NAME; then + return 1 + fi + + add_environment_deps $NAME + if [ ! "$?" -eq "0" ]; then + return 1 + fi + + if [ ! -z "$DRY_RUN" ]; then + return 0 + fi + + mkdir -p $ENV_DIR + if ! cp -r "$PACKET_DIR/$NAME/install/*" "$WORK_ENV_DIR/"; then + return 1 + fi + + mkdir -p "$ENVFLAGS_DIR" + echo 1 > "$DONE_FILE" +} + +set_environment_deps() { + clear_environment + add_environment_deps $1 + if [ ! "$?" -eq "0" ]; then + return 1 + fi + + if [ "$2" = "shell" ]; then + cd $PACKET_DIR/$1/build + /bin/bash -i + fi +} + +set_environment() { + clear_environment + add_environment $1 + if [ ! "$?" -eq "0" ]; then + return 1 + fi + + if [ "$2" = "shell" ]; then + cd $PACKET_DIR/$1/build + /bin/bash -i + fi +} + +dry_run() { + DRY_RUN=1 + "$@" +} + +"$@" diff --git a/docker-builder-data/build/script/common/test b/docker-builder-data/build/script/common/test new file mode 100755 index 0000000..307fd52 --- /dev/null +++ b/docker-builder-data/build/script/common/test @@ -0,0 +1,14 @@ +#!/bin/sh + +myfunc() { + echo "This is myfunc with arg $1" +} + +FUNCNAME="myfunc" + +"$FUNCNAME" fuflon + +DEPS="asdf qwer zxcv tyii fgjg" +for DEP in $DEPS; do + myfunc "$DEP" +done \ No newline at end of file diff --git a/docker-builder-data/build/script/packet/glew-2.0.0.sh b/docker-builder-data/build/script/packet/glew-2.0.0.sh new file mode 100755 index 0000000..1c2ae3a --- /dev/null +++ b/docker-builder-data/build/script/packet/glew-2.0.0.sh @@ -0,0 +1,29 @@ +DEPS="" + +PK_DIRNAME="glew-2.0.0" + +pkdownload() { + if ! wget "https://sourceforge.net/projects/glew/files/glew/2.0.0/$PK_DIRNAME.tgz/download"; then + return 1 + fi +} + +pkunpack() { + if ! tar -xzf "$2/$PK_DIRNAME.tgz"; then + return 1 + fi +} + +pkbuild() { + cd "$1/$PK_DIRNAME" + if ! ./configure "-prefix=$3" && make; then + return 1 + fi +} + +pkinstall() { + cd $2 + if ! make install; then + return 1 + fi +} diff --git a/docker-builder-data/build/script/packet/glib-2.50.sh b/docker-builder-data/build/script/packet/glib-2.50.sh new file mode 100755 index 0000000..68c60b5 --- /dev/null +++ b/docker-builder-data/build/script/packet/glib-2.50.sh @@ -0,0 +1,29 @@ +DEPS="" + +PK_DIRNAME="glib-2.50.0" + +pkdownload() { + if ! wget "https://download.gnome.org/sources/glib/2.50/$PK_DIRNAME.tar.xz"; then + return 1 + fi +} + +pkunpack() { + if ! tar -xf "$2/$PK_DIRNAME.tar.xz"; then + return 1 + fi +} + +pkbuild() { + cd "$1/$PK_DIRNAME" + if ! ./configure "-prefix=$3" && make; then + return 1 + fi +} + +pkinstall() { + cd $2 + if ! make install; then + return 1 + fi +} diff --git a/docker-builder-data/build/script/packet/jpeg-9b.sh b/docker-builder-data/build/script/packet/jpeg-9b.sh new file mode 100755 index 0000000..f8fc805 --- /dev/null +++ b/docker-builder-data/build/script/packet/jpeg-9b.sh @@ -0,0 +1,29 @@ +DEPS="" + +PK_DIRNAME="jpegsrc.v9b" + +pkdownload() { + if ! wget "http://ijg.org/files/$PK_DIRNAME.tar.gz"; then + return 1 + fi +} + +pkunpack() { + if ! tar -xzf "$2/$PK_DIRNAME.tar.gz"; then + return 1 + fi +} + +pkbuild() { + cd "$1/$PK_DIRNAME" + if ! ./configure "-prefix=$3" && make; then + return 1 + fi +} + +pkinstall() { + cd $2 + if ! make install; then + return 1 + fi +} diff --git a/docker-builder-data/build/script/packet/lz4.sh b/docker-builder-data/build/script/packet/lz4.sh new file mode 100755 index 0000000..7495f3a --- /dev/null +++ b/docker-builder-data/build/script/packet/lz4.sh @@ -0,0 +1,37 @@ +DEPS="" + +PK_DIRNAME="lz4" + +pkdownload() { + if [ -d "lz4/.git" ]; then + if ! git clone https://github.com/Cyan4973/$PK_DIRNAME.git; then + return 1 + fi + else + cd "$PK_DIRNAME" + if ! git pull; then + return 1 + fi + fi +} + +pkunpack() { + cd "$2/$PK_DIRNAME" + if ! git checkout-index "--prefix=$1/$PK_DIRNAME/" -f -a; then + return 1 + fi +} + +pkbuild() { + cd "$1/$PK_DIRNAME" + if ! ./configure "-prefix=$3" && make; then + return 1 + fi +} + +pkinstall() { + cd "$2" + if ! make install; then + return 1 + fi +} diff --git a/docker-builder-data/build/script/packet/png-1.6.25.sh b/docker-builder-data/build/script/packet/png-1.6.25.sh new file mode 100755 index 0000000..a705074 --- /dev/null +++ b/docker-builder-data/build/script/packet/png-1.6.25.sh @@ -0,0 +1,29 @@ +DEPS="" + +PK_DIRNAME="libpng-1.6.25" + +pkdownload() { + if ! wget "ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng16/libpng-1.6.25.tar.xz"; then + return 1 + fi +} + +pkunpack() { + if ! tar -xf "$2/$PK_DIRNAME.tar.xz"; then + return 1 + fi +} + +pkbuild() { + cd "$1/$PK_DIRNAME" + if ! ./configure "-prefix=$3" && make; then + return 1 + fi +} + +pkinstall() { + cd $2 + if ! make install; then + return 1 + fi +} diff --git a/docker-builder-data/build/script/packet/qt-5.7.sh b/docker-builder-data/build/script/packet/qt-5.7.sh new file mode 100755 index 0000000..2b055aa --- /dev/null +++ b/docker-builder-data/build/script/packet/qt-5.7.sh @@ -0,0 +1,29 @@ +DEPS="" + +PK_DIRNAME="qt-everywhere-opensource-src-5.7.0" + +pkdownload() { + if ! wget "http://download.qt.io/official_releases/qt/5.7/5.7.0/single/$PK_DIRNAME.tar.gz"; then + return 1 + fi +} + +pkunpack() { + if ! tar -xzf "$2/$PK_DIRNAME.tar.gz"; then + return 1 + fi +} + +pkbuild() { + cd "$1/$PK_DIRNAME" + if ! (./configure -prefix "$3" -opensource -confirm-license -qt-xcb -no-compile-examples -nomake examples && make); then + return 1 + fi +} + +pkinstall() { + cd "$2/$PK_DIRNAME" + if ! make install; then + return 1 + fi +} diff --git a/docker-builder-data/build/script/packet/tiff-4.0.6.sh b/docker-builder-data/build/script/packet/tiff-4.0.6.sh new file mode 100755 index 0000000..d8892d8 --- /dev/null +++ b/docker-builder-data/build/script/packet/tiff-4.0.6.sh @@ -0,0 +1,29 @@ +DEPS="" + +PK_DIRNAME="tiff-4.0.6" + +pkdownload() { + if ! wget "http://download.osgeo.org/libtiff/$PK_DIRNAME.tar.gz"; then + return 1 + fi +} + +pkunpack() { + if ! tar -xzf "$2/$PK_DIRNAME.tar.gz"; then + return 1 + fi +} + +pkbuild() { + cd "$1/$PK_DIRNAME" + if ! ./configure "-prefix=$3" && make; then + return 1 + fi +} + +pkinstall() { + cd $2 + if ! make install; then + return 1 + fi +} diff --git a/docker-builder/Dockerfile b/docker-builder/Dockerfile new file mode 100644 index 0000000..779be4a --- /dev/null +++ b/docker-builder/Dockerfile @@ -0,0 +1,85 @@ +FROM debian:7 + +# Update +RUN apt-get -yq update + +# Upgrade +RUN apt-get -yq upgrade + +# Install compilers +RUN apt-get -yq install \ + g++ \ + make + +# Install base libs +RUN apt-get -yq install \ + sudo \ + multiarch-support \ + libpng12-dev \ + libfreetype6-dev \ + libxml2-dev \ + libjasper-dev \ + libffi-dev \ + libasound2-dev \ + libdirectfb-dev \ + x11proto-xext-dev \ + libxfixes-dev \ + libxinerama-dev \ + libxdamage-dev \ + libxcomposite-dev \ + libxcursor-dev \ + libxft-dev \ + libxrender-dev \ + libxt-dev \ + libxrandr-dev \ + libxi-dev \ + libxext-dev \ + libx11-dev \ + libxtst-dev \ + x11proto-gl-dev \ + libx11-xcb-dev \ + libpthread-stubs0-dev \ + libxml-parser-perl \ + libdb-dev uuid-dev \ + libdbus-1-dev \ + python-dev \ + gettext \ + autopoint \ + libpciaccess-dev \ + libudev-dev \ + bzip2 + +# qt deps see: http://doc.qt.io/qt-5/linux-requirements.html +RUN apt-get -yq install \ + libxrender-dev \ + libxcb1-dev \ + libxcb-render0-dev \ + libxcb-render-util0-dev \ + libxcb-shape0-dev \ + libxcb-randr0-dev \ + libxcb-sync0-dev \ + libxcb-shm0-dev \ + libxcb-icccm4-dev \ + libxcb-keysyms1-dev \ + libxcb-image0-dev \ + libxcb-glx0-dev \ + libfontconfig1-dev \ + libfreetype6-dev \ + libxi-dev \ + libxext-dev \ + libx11-dev \ + libx11-xcb-dev \ + libsm-dev \ + libice-dev \ + libglib2.0-dev \ + libglu1-mesa-dev + +# additional tools +RUN apt-get -yq install \ + realpath \ + libxcb-xfixes0-dev \ + bash + +# Launcher +ADD conf/launch.sh / +CMD /bin/bash -c /launch.sh diff --git a/docker-builder/build.sh b/docker-builder/build.sh new file mode 100755 index 0000000..01888dc --- /dev/null +++ b/docker-builder/build.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +docker build -t my/builder . + diff --git a/docker-builder/conf/launch.sh b/docker-builder/conf/launch.sh new file mode 100755 index 0000000..a4cb043 --- /dev/null +++ b/docker-builder/conf/launch.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# Set permissions to external files +#chown -R root:root /build + +# Work +/bin/bash -i diff --git a/docker-builder/exec.sh b/docker-builder/exec.sh new file mode 100755 index 0000000..1782756 --- /dev/null +++ b/docker-builder/exec.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +docker exec builder "$@" + diff --git a/docker-builder/manager.sh b/docker-builder/manager.sh new file mode 100755 index 0000000..d1a10d4 --- /dev/null +++ b/docker-builder/manager.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +docker exec -i builder /build/script/common/manager "$@" + diff --git a/docker-builder/restore_owner.sh b/docker-builder/restore_owner.sh new file mode 100755 index 0000000..6836f8f --- /dev/null +++ b/docker-builder/restore_owner.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +SCRIPT_FILE=`realpath "$0"` +SCRIPT_DIR=`dirname "$SCRIPT_FILE"` +BASE_DIR=`dirname "$SCRIPT_DIR"` +DATA_DIR="$BASE_DIR/docker-builder-data" + +sudo chown -R `id -un`:`id -gn` $DATA_DIR diff --git a/docker-builder/run.sh b/docker-builder/run.sh new file mode 100755 index 0000000..b254c9d --- /dev/null +++ b/docker-builder/run.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +SCRIPT_FILE=`realpath "$0"` +SCRIPT_DIR=`dirname "$SCRIPT_FILE"` +BASE_DIR=`dirname "$SCRIPT_DIR"` +DATA_DIR="$BASE_DIR/docker-builder-data" + +BUILD_DIR=$DATA_DIR/build + +$SCRIPT_DIR/stop.sh + +docker run -itd \ + --name "builder" \ + -v "$BUILD_DIR:/build" \ + my/builder + diff --git a/docker-builder/stop.sh b/docker-builder/stop.sh new file mode 100755 index 0000000..61861be --- /dev/null +++ b/docker-builder/stop.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +docker stop "builder" || true +docker rm "builder" || true