From 545a55b0778024be65a27b640850c5aa3e3f873e Mon Sep 17 00:00:00 2001 From: Devin Dice Date: Sat, 21 Jan 2023 00:23:51 -0500 Subject: [PATCH] No desktop option --- .semaphore/pipeline_2.yml | 5 + Dockerfile | 4 +- configuration/Dockerfile.j2 | 204 ++++++++++++++++++ configuration/configure.py | 14 ++ rootfs/etc/nginx/sites-enabled/default | 46 +++- rootfs/etc/supervisor/conf.d/supervisord.conf | 11 +- 6 files changed, 281 insertions(+), 3 deletions(-) create mode 100644 configuration/Dockerfile.j2 diff --git a/.semaphore/pipeline_2.yml b/.semaphore/pipeline_2.yml index 69d727b..808b04e 100644 --- a/.semaphore/pipeline_2.yml +++ b/.semaphore/pipeline_2.yml @@ -21,6 +21,11 @@ blocks: - '# Create the test version' - 'docker image tag devindice/cloud9-ide-vdi:latest devindice/cloud9-ide-vdi:testing' - 'docker push $DOCKER_USERNAME/cloud9-ide-vdi:testing' + - 'cd ./configuration && python configure.py --desktop enabled --ubuntu 22' + - 'cd ../' + - 'docker build --cache-from=$DOCKER_USERNAME/cloud9-ide-vdi:latest -t devindice/cloud9-ide-vdi .' + - 'docker image tag devindice/cloud9-ide-vdi:latest devindice/cloud9-ide-vdi:testing' + - 'docker push $DOCKER_USERNAME/cloud9-ide-vdi:testing-22' - 'cd ./configuration && python configure.py --desktop disabled' - 'cd ../' - '# Create the test version without the desktop' diff --git a/Dockerfile b/Dockerfile index 75ee45a..11662b5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,9 @@ # base system ################################################################################ -FROM ubuntu:20.04 as system + +FROM ubuntu:22.04 as system + RUN sed -i 's#http://archive.ubuntu.com/ubuntu/#mirror://mirrors.ubuntu.com/mirrors.txt#' /etc/apt/sources.list; diff --git a/configuration/Dockerfile.j2 b/configuration/Dockerfile.j2 new file mode 100644 index 0000000..8220d67 --- /dev/null +++ b/configuration/Dockerfile.j2 @@ -0,0 +1,204 @@ +# Built with arch: amd64 flavor: lxde image: ubuntu:20.04 +# +################################################################################ +# base system +################################################################################ + +{% if version == "22" %} +FROM ubuntu:22.04 as system +{% else %} +FROM ubuntu:20.04 as system +{% endif %} + +RUN sed -i 's#http://archive.ubuntu.com/ubuntu/#mirror://mirrors.ubuntu.com/mirrors.txt#' /etc/apt/sources.list; + +# Ca-Certificates +RUN apt update \ + && apt install -y -o Dpkg::Options::='--force-confold' --no-install-recommends --allow-unauthenticated \ + ca-certificates \ + && apt autoclean -y \ + && apt autoremove -y \ + && rm -rf /var/lib/apt/lists/* + + +# built-in packages +ENV DEBIAN_FRONTEND noninteractive +RUN apt update \ + && apt install -y -o Dpkg::Options::='--force-confold' --no-install-recommends apt-utils software-properties-common curl \ + apache2-utils man-db manpages-posix manpages-dev manpages-posix-dev \ + && apt update \ + && apt install -y -o Dpkg::Options::='--force-confold' --no-install-recommends --allow-unauthenticated \ + supervisor nginx sudo net-tools zenity xz-utils \ + dbus-x11 x11-utils alsa-utils \ + mesa-utils libgl1-mesa-dri \ + && apt autoclean -y \ + && apt autoremove -y \ + && rm -rf /var/lib/apt/lists/* + +# install debs error if combine together +RUN apt update \ + && apt install -y -o Dpkg::Options::='--force-confold' --no-install-recommends --allow-unauthenticated \ + xvfb x11vnc ttf-ubuntu-font-family ttf-wqy-zenhei \ + && apt autoclean -y \ + && apt autoremove -y \ + && rm -rf /var/lib/apt/lists/* + +#RUN apt update \ +# && apt install -y gpg-agent \ +# && curl -LO https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \ +# && (dpkg -i ./google-chrome-stable_current_amd64.deb || apt-get install -fy) \ +# && curl -sSL https://dl.google.com/linux/linux_signing_key.pub | apt-key add \ +# && rm google-chrome-stable_current_amd64.deb \ +# && rm -rf /var/lib/apt/lists/* + +# Install Desktop +RUN apt update \ + && apt install -y -o Dpkg::Options::='--force-confold' --no-install-recommends --allow-unauthenticated \ + xubuntu-desktop gtk2-engines-murrine gnome-themes-standard gtk2-engines-pixbuf gtk2-engines-murrine arc-theme \ + && apt autoclean -y \ + && apt autoremove -y \ + && rm -rf /var/lib/apt/lists/* + +# tini service manager +ARG TINI_VERSION=v0.18.0 +ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /bin/tini +RUN chmod +x /bin/tini + +# ffmpeg +RUN apt update \ + && apt install -y -o Dpkg::Options::='--force-confold' --no-install-recommends --allow-unauthenticated \ + ffmpeg \ + && rm -rf /var/lib/apt/lists/* \ + && mkdir /usr/local/ffmpeg \ + && ln -s /usr/bin/ffmpeg /usr/local/ffmpeg/ffmpeg + +# python library +COPY rootfs/usr/local/lib/web/backend/requirements.txt /tmp/ +RUN apt-get update \ + && dpkg-query -W -f='${Package}\n' > /tmp/a.txt \ + && apt-get install -y python3-pip python3-dev build-essential \ + && pip3 install setuptools wheel && pip3 install -r /tmp/requirements.txt \ + && ln -s /usr/bin/python3 /usr/local/bin/python \ + && dpkg-query -W -f='${Package}\n' > /tmp/b.txt \ + && apt-get remove -y `diff --changed-group-format='%>' --unchanged-group-format='' /tmp/a.txt /tmp/b.txt | xargs` \ + && apt-get autoclean -y \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* \ + && rm -rf /var/cache/apt/* /tmp/a.txt /tmp/b.txt + +# Install Additonal Packages +RUN mkdir /cloud9 +COPY rootfs/cloud9/apt-requirements.txt /cloud9/apt-requirements.txt +RUN apt update \ + && grep -v '^#' /cloud9/apt-requirements.txt | xargs apt install -y -o Dpkg::Options::='--force-confold' --no-install-recommends --allow-unauthenticated \ + && apt autoclean -y \ + && apt autoremove -y \ + && rm -rf /var/lib/apt/lists/* + +#RUN mkdir /workspace + +# Clone and install cloud9 +RUN git clone https://github.com/c9/core.git /cloud9/c9sdk +#RUN mkdir -p /cloud9/c9sdk/build /workspace/.ubuntu/.standalone +#RUN ln -sf /workspace/.ubuntu/.standalone /cloud9/c9sdk/build/standalone +RUN /cloud9/c9sdk/scripts/install-sdk.sh +RUN cd /cloud9/c9sdk && git reset --hard +RUN wget -O user-install.sh https://raw.githubusercontent.com/c9/install/master/install.sh && mv user-install.sh /cloud9/ + + +################################################################################ +# builder +################################################################################ +FROM ubuntu:20.04 as builder + + +RUN sed -i 's#http://archive.ubuntu.com/ubuntu/#mirror://mirrors.ubuntu.com/mirrors.txt#' /etc/apt/sources.list; + + +RUN apt-get update \ + && apt-get install -y --no-install-recommends ca-certificates + +RUN apt-get update \ + && apt-get install -y --no-install-recommends curl gnupg patch + +# nodejs +RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - \ + && apt-get install -y nodejs + +# yarn +RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ + && apt-get update \ + && apt-get install -y yarn + +# build frontend +COPY web /src/web +RUN cd /src/web \ + && yarn \ + && yarn build +RUN sed -i 's#app/locale/#novnc/app/locale/#' /src/web/dist/static/novnc/app/ui.js + + + +################################################################################ +# merge +################################################################################ +FROM system +LABEL maintainer="info@devindice.com" + +COPY --from=builder /src/web/dist/ /usr/local/lib/web/frontend/ + +RUN ln -sf /usr/local/lib/web/frontend/static/websockify /usr/local/lib/web/frontend/static/novnc/utils/websockify && \ + chmod +x /usr/local/lib/web/frontend/static/websockify/run + +EXPOSE 6080 +EXPOSE 9999 + +WORKDIR /workspace +ENV HOME=/home/ubuntu \ + SHELL=/bin/bash +HEALTHCHECK --interval=30s --timeout=5s CMD curl --fail http://127.0.0.1:6079/api/health +ENTRYPOINT ["/startup.sh"] + +# Install Docker +RUN groupadd -g 281 docker +RUN mkdir -p /etc/apt/keyrings +RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg +RUN echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null +RUN apt-get update +RUN apt-get -y install nautilus menulibre python3-pip keychain python3.8-venv strace gedit gvfs-backends +RUN apt-get -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin + +RUN wget -O beyond-compare.deb https://www.scootersoftware.com/$(curl -sd "platform=linux" https://www.scootersoftware.com/download.php | grep amd64.deb | awk -F\" '{print $2}' | sed 's/\///g') +RUN wget -O sublime-text.deb $(curl -s https://www.sublimetext.com/download_thanks?target=x64-deb#direct-downloads | grep amd64.deb | grep url | awk -F'"' '{print $2}') +RUN wget -O sublime-merge.deb $(curl -s https://www.sublimemerge.com/download_thanks?target=x64-deb#direct-downloads | grep amd64.deb | grep url | awk -F'"' '{print $2}') +RUN wget -O chrome.deb wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb || true +RUN apt install -y ./beyond-compare.deb ./sublime-text.deb ./sublime-merge.deb ./chrome.deb + +RUN npm -g install sass yuglify + +RUN apt -y remove thunar + +# Copy files +COPY rootfs / + +# Extras +RUN apt -y install osmctools osmosis whiptail +RUN systemctl disable systemd-resolved + +#RUN rm -rf /workspace/* + +RUN useradd -d /home/ubuntu -u 99 -G sudo -ms /bin/bash ubuntu +#RUN adduser ubuntu sudo +RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers +RUN chown ubuntu:ubuntu /home/ubuntu + +# Install from user (not doing) +USER ubuntu +CMD /bin/bash + +run bash /cloud9/user-install.sh + +user root \ No newline at end of file diff --git a/configuration/configure.py b/configuration/configure.py index 0332411..15d6c03 100755 --- a/configuration/configure.py +++ b/configuration/configure.py @@ -4,6 +4,7 @@ import argparse parser = argparse.ArgumentParser() parser.add_argument("--desktop", help="Accepts 'enabled' or 'disabled'") +parser.add_argument("--ubuntu", help="Accepts '20' or '22'") args = parser.parse_args() # Default Nginx @@ -26,6 +27,19 @@ filename = f"../rootfs/etc/supervisor/conf.d/supervisord.conf" content = template.render( desktop=args.desktop, ) +with open(filename, mode="w", encoding="utf-8") as message: + message.write(content) + print(f"... wrote {filename}") + + +# Supervisor Conf +environment = Environment(loader=FileSystemLoader("./")) +template = environment.get_template("Dockerfile.j2") +filename = f"../Dockerfile" + +content = template.render( + version=args.ubuntu, +) with open(filename, mode="w", encoding="utf-8") as message: message.write(content) print(f"... wrote {filename}") \ No newline at end of file diff --git a/rootfs/etc/nginx/sites-enabled/default b/rootfs/etc/nginx/sites-enabled/default index 9e4c971..9259e50 100644 --- a/rootfs/etc/nginx/sites-enabled/default +++ b/rootfs/etc/nginx/sites-enabled/default @@ -1,7 +1,51 @@ server { listen 6080 default_server; - root /usr/local/lib/web/disabled/; + #_SSL_PORT_#listen 443 ssl default_server; + #_SSL_PORT_#listen [::]:443 ssl default_server ipv6only=on; + #_SSL_PORT_#ssl_certificate /etc/nginx/ssl/nginx.crt; + #_SSL_PORT_#ssl_certificate_key /etc/nginx/ssl/nginx.key; + + #_HTTP_PASSWORD_#auth_basic "Private Property"; + #_HTTP_PASSWORD_#auth_basic_user_file /etc/nginx/.htpasswd; + + root /usr/local/lib/web/frontend/; index index.html index.htm; + + #_RELATIVE_URL_ROOT_location /_RELATIVE_URL_ROOT_/ { + #_RELATIVE_URL_ROOT_ rewrite /_RELATIVE_URL_ROOT_/(.*) /$1 break; + #_RELATIVE_URL_ROOT_ root /usr/local/lib/web/frontend/; + #_RELATIVE_URL_ROOT_} + + location ~ .*/(api/.*|websockify) { + try_files $uri @api$http_upgrade; + } + + location / { + rewrite /approot/(.*) /$1 break; + root /usr/local/lib/web/frontend/; + } + + location @apiwebsocket { + #_RELATIVE_URL_ROOT_rewrite /_RELATIVE_URL_ROOT_/(.*) $1 break; + proxy_connect_timeout 7d; + proxy_send_timeout 7d; + proxy_read_timeout 7d; + proxy_buffering off; + + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_pass http://127.0.0.1:6081; + } + + location @api { + #_RELATIVE_URL_ROOT_rewrite /_RELATIVE_URL_ROOT_/(.*) $1 break; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header Host $host; + max_ranges 0; + proxy_pass http://127.0.0.1:6079; + } } \ No newline at end of file diff --git a/rootfs/etc/supervisor/conf.d/supervisord.conf b/rootfs/etc/supervisor/conf.d/supervisord.conf index bea2dc8..71368eb 100644 --- a/rootfs/etc/supervisor/conf.d/supervisord.conf +++ b/rootfs/etc/supervisor/conf.d/supervisord.conf @@ -9,8 +9,17 @@ priority=10 command=nginx -c /etc/nginx/nginx.conf -g 'daemon off;' +[program:web] +priority=10 +directory=/usr/local/lib/web/backend +command=/usr/local/lib/web/backend/run.py +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/fd/1 +stderr_logfile_maxbytes=0 + [group:x] -programs=cloud9 +programs=xfce4,xvfb,x11vnc,novnc,cloud9,desktop [program:xfce4]