From 2568f6919826525a5b7171fbad8480e7e0653391 Mon Sep 17 00:00:00 2001
From: Jakob Olsson <Jakob Olsson>
Date: Fri, 18 Oct 2019 09:50:03 +0200
Subject: [PATCH] add docker image for development

---
 Dockerfile       | 118 +++++++++++++++++++++++++++++++++++++++++++++++
 entrypoint.sh    |  16 +++++++
 supervisord.conf |  11 +++++
 3 files changed, 145 insertions(+)
 create mode 100644 Dockerfile
 create mode 100755 entrypoint.sh
 create mode 100644 supervisord.conf

diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..0660266
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,118 @@
+FROM ubuntu:16.04
+
+LABEL maintainer="jakob.olsson@iopsys.eu"
+LABEL build="docker build -t iopsys/json-editor ."
+LABEL run="docker run -d --name json-editor --privileged --rm -v ${PWD}:/opt/work -p 12345:22 -e LOCAL_USER_ID=`id -u $USER` iopsys/json-editor:latest"
+LABEL exec="docker exec --user=user -it json-editor bash"
+LABEL stop="docker stop json-editor"
+
+RUN \
+      apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+      # general tools
+      git \
+      cmake \
+      wget \
+      build-essential \
+      lcov \
+      apt-utils \
+      autoconf \
+      automake \
+      pkg-config \
+      libtool \
+      vim \
+      valgrind \
+      gdb \
+      cppcheck \
+      python3 \
+      python3-setuptools \
+      openssh-server \
+      clang-format \
+      sudo \
+      strace \
+      supervisor \
+      net-tools \
+      iputils-ping
+
+# Configure OpenSSH server
+RUN mkdir /var/run/sshd
+RUN echo 'root:root' | chpasswd
+RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
+RUN sed -i 's/PermitEmptyPasswords no/PermitEmptyPasswords yes/' /etc/ssh/sshd_config
+RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
+
+# Configure gdb-dashboard
+RUN \
+      easy_install3 pip && \
+      pip3 install Pygments
+RUN wget -P ~ git.io/.gdbinit
+RUN \
+      mkdir ~/.gdbinit.d && \
+      touch ~/.gdbinit.d/init && \
+      echo "dashboard -layout source" >> ~/.gdbinit.d/init && \
+      echo "dashboard source -style context 20" >> ~/.gdbinit.d/init && \
+      echo "dashboard -style syntax_highlighting 'monokai'" >> ~/.gdbinit.d/init
+
+# Install dependent libraries
+RUN \
+      apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+      lua5.1-dev \
+      lua5.1 \
+      #libjson0 \
+      #libjson0-dev \
+      libssl-dev \
+      libuv1-dev \
+      cmocka-doc \
+      libcmocka-dev \
+      libcmocka0
+
+
+# Install CMocka
+#RUN \
+#      git clone --branch cmocka-1.1.1 git://git.cryptomilk.org/projects/cmocka.git && \
+#      cd cmocka && \
+#      mkdir build && \
+#      cd build && \
+#      cmake .. && \
+#      make && \
+#      make install
+
+# Remove cached packages.
+RUN rm -rf /var/lib/apt/lists/*
+
+RUN mkdir /opt/dev
+
+# Install JSON-C
+RUN \
+      cd /opt/dev && \
+      git clone https://github.com/json-c/json-c.git && \
+      cd json-c && \
+      sh autogen.sh && \
+      ./configure && \
+      make && \
+      make install && \
+      sudo ldconfig
+
+# ubox
+RUN \
+      cd /opt/dev && \
+      git clone  git://git.openwrt.org/project/libubox.git && \
+      cd libubox && mkdir build && cd build && \
+      git checkout fd57eea9f37e447814afbf934db626288aac23c4 && \
+      cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE:String="Release" .. && \
+      make -j2 && \
+      make install
+
+RUN mkdir /etc/config
+
+WORKDIR /opt/work
+
+# Expose ports
+EXPOSE 22
+
+# Prepare supervisor
+RUN mkdir -p /var/log/supervisor
+COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
+
+# Start entrypoint
+COPY entrypoint.sh /usr/local/bin/entrypoint.sh
+ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
diff --git a/entrypoint.sh b/entrypoint.sh
new file mode 100755
index 0000000..b288b03
--- /dev/null
+++ b/entrypoint.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Create user
+USER_ID=${LOCAL_USER_ID:-9001}
+useradd --shell /bin/bash -u $USER_ID -G sudo -o -c "" -m user
+adduser --disabled-password user
+export HOME=/home/user
+echo "user ALL = NOPASSWD : ALL" >> /etc/sudoers
+
+# Configure OpenSSH to allow login without password
+sed -i -re 's/^user:[^:]+:/user::/' /etc/passwd /etc/shadow
+pam_config="auth [success=1 default=ignore] pam_unix.so nullok\nauth requisite pam_deny.so\nauth required pam_permit.so"
+sed -i "s/@include common-auth/$pam_config/" /etc/pam.d/sshd
+
+# Start supervisor
+/usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf -l /var/log/supervisord.log -j /var/run/supervisord.pid
diff --git a/supervisord.conf b/supervisord.conf
new file mode 100644
index 0000000..76187b4
--- /dev/null
+++ b/supervisord.conf
@@ -0,0 +1,11 @@
+[supervisord]
+nodaemon=true
+
+[program:ubusd]
+command=/bin/bash -c "/usr/sbin/ubusd"
+
+[program:rpcd]
+command=/bin/bash -c "/usr/sbin/rpcd"
+
+[program:sshd]
+command=/usr/sbin/sshd -D
\ No newline at end of file
-- 
GitLab