From 6f4a9dfdc7878157002ec044f3fad3f36e7540b1 Mon Sep 17 00:00:00 2001 From: Chuck Lantz Date: Wed, 30 Sep 2020 02:04:01 +0000 Subject: [PATCH] Switch to a image for the dev container --- .devcontainer/Dockerfile | 122 ------------------------ .devcontainer/README.md | 44 ++++++--- .devcontainer/bin/init-dev-container.sh | 91 ------------------ .devcontainer/bin/set-resolution | 25 ----- .devcontainer/devcontainer.json | 36 ++----- .devcontainer/fluxbox/apps | 9 -- .devcontainer/fluxbox/init | 9 -- .devcontainer/fluxbox/menu | 16 ---- .nvmrc | 2 +- 9 files changed, 41 insertions(+), 313 deletions(-) delete mode 100644 .devcontainer/Dockerfile delete mode 100644 .devcontainer/bin/init-dev-container.sh delete mode 100644 .devcontainer/bin/set-resolution delete mode 100644 .devcontainer/fluxbox/apps delete mode 100644 .devcontainer/fluxbox/init delete mode 100644 .devcontainer/fluxbox/menu diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index 504e4cebfe9..00000000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,122 +0,0 @@ -#------------------------------------------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information. -#------------------------------------------------------------------------------------------------------------- - -FROM mcr.microsoft.com/vscode/devcontainers/typescript-node:0-12 - -ARG TARGET_DISPLAY=":1" - -# VNC options -ARG MAX_VNC_RESOLUTION=1920x1080x16 -ARG TARGET_VNC_RESOLUTION=1920x1080 -ARG TARGET_VNC_DPI=72 -ARG TARGET_VNC_PORT=5901 -ARG VNC_PASSWORD="vscode" - -# noVNC (VNC web client) options -ARG INSTALL_NOVNC="true" -ARG NOVNC_VERSION=1.1.0 -ARG TARGET_NOVNC_PORT=6080 -ARG WEBSOCKETIFY_VERSION=0.9.0 - -# Firefox is useful for testing things like browser launch events, but optional -ARG INSTALL_FIREFOX="false" - -# Expected non-root username from base image -ARG USERNAME=node - -# Core environment variables for X11, VNC, and fluxbox -ENV DBUS_SESSION_BUS_ADDRESS="autolaunch:" \ - MAX_VNC_RESOLUTION="${MAX_VNC_RESOLUTION}" \ - VNC_RESOLUTION="${TARGET_VNC_RESOLUTION}" \ - VNC_DPI="${TARGET_VNC_DPI}" \ - VNC_PORT="${TARGET_VNC_PORT}" \ - NOVNC_PORT="${TARGET_NOVNC_PORT}" \ - DISPLAY="${TARGET_DISPLAY}" \ - LANG="en_US.UTF-8" \ - LANGUAGE="en_US.UTF-8" \ - VISUAL="nano" \ - EDITOR="nano" - -# Configure apt and install packages -RUN apt-get update \ - && export DEBIAN_FRONTEND=noninteractive \ - # - # Install the Cascadia Code fonts - https://github.com/microsoft/cascadia-code - && curl -sSL https://github.com/microsoft/cascadia-code/releases/download/v2004.30/CascadiaCode_2004.30.zip -o /tmp/cascadia-fonts.zip \ - && unzip /tmp/cascadia-fonts.zip -d /tmp/cascadia-fonts \ - && mkdir -p /usr/share/fonts/truetype/cascadia \ - && mv /tmp/cascadia-fonts/ttf/* /usr/share/fonts/truetype/cascadia/ \ - && rm -rf /tmp/cascadia-fonts.zip /tmp/cascadia-fonts \ - # - # Install X11, fluxbox and VS Code dependencies - && apt-get -y install --no-install-recommends \ - xvfb \ - x11vnc \ - fluxbox \ - dbus-x11 \ - x11-utils \ - x11-xserver-utils \ - xdg-utils \ - fbautostart \ - xterm \ - eterm \ - gnome-terminal \ - gnome-keyring \ - seahorse \ - nautilus \ - libx11-dev \ - libxkbfile-dev \ - libsecret-1-dev \ - libnotify4 \ - libnss3 \ - libxss1 \ - libasound2 \ - libgbm1 \ - xfonts-base \ - xfonts-terminus \ - fonts-noto \ - fonts-wqy-microhei \ - fonts-droid-fallback \ - vim-tiny \ - nano \ - # - # [Optional] Install noVNC - && if [ "${INSTALL_NOVNC}" = "true" ]; then \ - mkdir -p /usr/local/novnc \ - && curl -sSL https://github.com/novnc/noVNC/archive/v${NOVNC_VERSION}.zip -o /tmp/novnc-install.zip \ - && unzip /tmp/novnc-install.zip -d /usr/local/novnc \ - && cp /usr/local/novnc/noVNC-${NOVNC_VERSION}/vnc_lite.html /usr/local/novnc/noVNC-${NOVNC_VERSION}/index.html \ - && rm /tmp/novnc-install.zip \ - && curl -sSL https://github.com/novnc/websockify/archive/v${WEBSOCKETIFY_VERSION}.zip -o /tmp/websockify-install.zip \ - && unzip /tmp/websockify-install.zip -d /usr/local/novnc \ - && apt-get -y install --no-install-recommends python-numpy \ - && ln -s /usr/local/novnc/websockify-${WEBSOCKETIFY_VERSION} /usr/local/novnc/noVNC-${NOVNC_VERSION}/utils/websockify \ - && rm /tmp/websockify-install.zip; \ - fi \ - # - # [Optional] Install Firefox - && if [ "${INSTALL_FIREFOX}" = "true" ]; then \ - apt-get -y install --no-install-recommends firefox-esr; \ - fi \ - # - # Clean up - && apt-get autoremove -y \ - && apt-get clean -y \ - && rm -rf /var/lib/apt/lists/* - -COPY bin/init-dev-container.sh /usr/local/share/ -COPY bin/set-resolution /usr/local/bin/ -COPY fluxbox/* /root/.fluxbox/ -COPY fluxbox/* /home/${USERNAME}/.fluxbox/ - -# Update privs, owners of config files -RUN mkdir -p /var/run/dbus /root/.vnc /home/${USERNAME}/.vnc \ - && touch /root/.Xmodmap /home/${USERNAME}/.Xmodmap \ - && echo "${VNC_PASSWORD}" | tee /root/.vnc/passwd > /home/${USERNAME}/.vnc/passwd \ - && chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/.Xmodmap /home/${USERNAME}/.fluxbox /home/${USERNAME}/.vnc \ - && chmod +x /usr/local/share/init-dev-container.sh /usr/local/bin/set-resolution - -ENTRYPOINT ["/usr/local/share/init-dev-container.sh"] -CMD ["sleep", "infinity"] diff --git a/.devcontainer/README.md b/.devcontainer/README.md index a0f3b2f75f1..8de0ffeffac 100644 --- a/.devcontainer/README.md +++ b/.devcontainer/README.md @@ -1,8 +1,8 @@ # Code - OSS Development Container -This repository includes configuration for a development container for working with Code - OSS in an isolated local container or using [Visual Studio Codespaces](https://aka.ms/vso). +This repository includes configuration for a development container for working with Code - OSS in an isolated local container or using [GitHub Codespaces](https://github.com/features/codespaces). -> **Tip:** The default VNC password is `vscode`. The VNC server runs on port `5901` with a web client at `6080`. For better performance, we recommend using a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/). Applications like the macOS Screen Sharing app will not perform as well. [Chicken](https://sourceforge.net/projects/chicken/) is a good macOS alternative. +> **Tip:** The default VNC password is `vscode`. The VNC server runs on port `5901` with a web client at `6080`. For better performance, we recommend using a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/). Applications like the macOS Screen Sharing app will not perform as well. ## Quick start - local @@ -18,9 +18,9 @@ This repository includes configuration for a development container for working w > Note that the Remote - Containers extension requires the Visual Studio Code distribution of Code - OSS. See the [FAQ](https://aka.ms/vscode-remote/faq/license) for details. -4. Press Ctrl/Cmd + Shift + P and select **Remote-Containers: Clone Repository in Container Volume...**. +4. Press Ctrl/Cmd + Shift + P and select **Remote - Containers: Open Repository in Container...**. - > **Tip:** While you can use your local source tree instead, operations like `yarn install` can be slow on macOS or using the Hyper-V engine on Windows. We recommend the "clone repository in container" approach instead since it uses "named volume" rather than the local filesystem. + > **Tip:** While you can use your local source tree instead, operations like `yarn install` can be slow on macOS or using the Hyper-V engine on Windows. We recommend the "open repository" approach instead since it uses "named volume" rather than the local filesystem. 5. Type `https://github.com/microsoft/vscode` (or a branch or PR URL) in the input box and press Enter. @@ -30,25 +30,41 @@ Anything you start in VS Code or the integrated terminal will appear here. Next: **[Try it out!](#try-it)** -## Quick start - Codespaces +## Quick start - GitHub Codespaces ->Note that the Codespaces browser-based editor cannot currently access the desktop environment in this container (due to a [missing feature](https://github.com/MicrosoftDocs/vsonline/issues/117)). We recommend using Visual Studio Code from the desktop to connect instead in the near term. +> **IMPORTANT:** The current user beta for GitHub Codespaces uses a "Basic" sized codespace which is too small to run a full build of VS Code. You'll soon be able to use a "Standard" sized codespace (4-core, 8GB) that will be better suited for this purpose. -1. Install [Visual Studio Code Stable](https://code.visualstudio.com/) or [Insiders](https://code.visualstudio.com/insiders/) and the [Visual Studio Codespaces](https://aka.ms/vscs-ext-vscode) extension. +1. From the [microsoft/vscode GitHub repository](https://github.com/microsoft/vscode), click on the **Code** dropdown, select **Open with Codespaces**, and the **New codespace** - ![Image of VS Codespaces extension](https://microsoft.github.io/vscode-remote-release/images/codespaces-extn.png) + > Note that you will not see these options if you are not in the beta yet. - > Note that the Visual Studio Codespaces extension requires the Visual Studio Code distribution of Code - OSS. +2. After the codespace is up and running in your browser, press Ctrl/Cmd + Shift + P and select **View: Show Remote Explorer**. -2. Sign in by pressing Ctrl/Cmd + Shift + P and selecting **Codespaces: Sign In**. You may also need to use the **Codespaces: Create Plan** if you do not have a plan. See the [Codespaces docs](https://aka.ms/vso-docs/vscode) for details. +3. You should see port `6080` under **Forwarded Ports**. Select the line and click on the globe icon to open it in a browser tab. -3. Press Ctrl/Cmd + Shift + P and select **Codespaces: Create New Codespace**. + > If you do not see port `6080`, press Ctrl/Cmd + Shift + P, select **Forward a Port** and enter port `6080`. -4. Use default settings (which should include **Standard** 4 core, 8 GB RAM Codespace), select a plan, and then enter the repository URL `https://github.com/microsoft/vscode` (or a branch or PR URL) in the input box when prompted. +4. In the new tab, you should see noVNC. Click **Connect** and enter `vscode` as the password. -5. After the container is running, open a web browser and go to [http://localhost:6080](http://localhost:6080) or use a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to connect to `localhost:5901` and enter `vscode` as the password. +Anything you start in VS Code or the integrated terminal will appear here. -6. Anything you start in VS Code or the integrated terminal will appear here. +Next: **[Try it out!](#try-it)** + +### Using VS Code with GitHub Codespaces + +You will likely see better performance when accessing the codespace you created from VS Code since you can use a[VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/). Here's how to do it. + +1. [Create a codespace](#quick-start---github-codespaces) if you have not already. + +2. Set up [VS Code for use with GitHub Codespaces](https://docs.github.com/github/developing-online-with-codespaces/using-codespaces-in-visual-studio-code) + +3. After the VS Code is up and running, press Ctrl/Cmd + Shift + P, choose **Codespaces: Connect to Codespace**, and select the codespace you created. + +4. After you've connected to the codespace, use a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to connect to `localhost:5901` and enter `vscode` as the password. + +5. Anything you start in VS Code or the integrated terminal will appear here. + +Next: **[Try it out!](#try-it)** ## Try it! diff --git a/.devcontainer/bin/init-dev-container.sh b/.devcontainer/bin/init-dev-container.sh deleted file mode 100644 index 260cc275922..00000000000 --- a/.devcontainer/bin/init-dev-container.sh +++ /dev/null @@ -1,91 +0,0 @@ -#!/bin/bash - -NONROOT_USER=node -LOG=/tmp/container-init.log - -# Execute the command it not already running -startInBackgroundIfNotRunning() -{ - log "Starting $1." - echo -e "\n** $(date) **" | sudoIf tee -a /tmp/$1.log > /dev/null - if ! pidof $1 > /dev/null; then - keepRunningInBackground "$@" - while ! pidof $1 > /dev/null; do - sleep 1 - done - log "$1 started." - else - echo "$1 is already running." | sudoIf tee -a /tmp/$1.log > /dev/null - log "$1 is already running." - fi -} - -# Keep command running in background -keepRunningInBackground() -{ - ($2 sh -c "while :; do echo [\$(date)] Process started.; $3; echo [\$(date)] Process exited!; sleep 5; done 2>&1" | sudoIf tee -a /tmp/$1.log > /dev/null & echo "$!" | sudoIf tee /tmp/$1.pid > /dev/null) -} - -# Use sudo to run as root when required -sudoIf() -{ - if [ "$(id -u)" -ne 0 ]; then - sudo "$@" - else - "$@" - fi -} - -# Use sudo to run as non-root user if not already running -sudoUserIf() -{ - if [ "$(id -u)" -eq 0 ]; then - sudo -u ${NONROOT_USER} "$@" - else - "$@" - fi -} - -# Log messages -log() -{ - echo -e "[$(date)] $@" | sudoIf tee -a $LOG > /dev/null -} - -log "** SCRIPT START **" - -# Start dbus. -log 'Running "/etc/init.d/dbus start".' -if [ -f "/var/run/dbus/pid" ] && ! pidof dbus-daemon > /dev/null; then - sudoIf rm -f /var/run/dbus/pid -fi -sudoIf /etc/init.d/dbus start 2>&1 | sudoIf tee -a /tmp/dbus-daemon-system.log > /dev/null -while ! pidof dbus-daemon > /dev/null; do - sleep 1 -done - -# Set up Xvfb. -startInBackgroundIfNotRunning "Xvfb" sudoIf "Xvfb ${DISPLAY:-:1} +extension RANDR -screen 0 ${MAX_VNC_RESOLUTION:-1920x1080x16}" - -# Start fluxbox as a light weight window manager. -startInBackgroundIfNotRunning "fluxbox" sudoUserIf "dbus-launch startfluxbox" - -# Start x11vnc -startInBackgroundIfNotRunning "x11vnc" sudoIf "x11vnc -display ${DISPLAY:-:1} -rfbport ${VNC_PORT:-5901} -localhost -no6 -xkb -shared -forever -passwdfile $HOME/.vnc/passwd" - -# Set resolution -/usr/local/bin/set-resolution ${VNC_RESOLUTION:-1280x720} ${VNC_DPI:-72} - - -# Spin up noVNC if installed and not runnning. -if [ -d "/usr/local/novnc" ] && [ "$(ps -ef | grep /usr/local/novnc/noVNC*/utils/launch.sh | grep -v grep)" = "" ]; then - keepRunningInBackground "noVNC" sudoIf "/usr/local/novnc/noVNC*/utils/launch.sh --listen ${NOVNC_PORT:-6080} --vnc localhost:${VNC_PORT:-5901}" - log "noVNC started." -else - log "noVNC is already running or not installed." -fi - -# Run whatever was passed in -log "Executing \"$@\"." -"$@" -log "** SCRIPT EXIT **" diff --git a/.devcontainer/bin/set-resolution b/.devcontainer/bin/set-resolution deleted file mode 100644 index 5b4ca79f518..00000000000 --- a/.devcontainer/bin/set-resolution +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -RESOLUTION=${1:-${VNC_RESOLUTION:-1920x1080}} -DPI=${2:-${VNC_DPI:-72}} -if [ -z "$1" ]; then - echo -e "**Current Settings **\n" - xrandr - echo -n -e "\nEnter new resolution (WIDTHxHEIGHT, blank for ${RESOLUTION}, Ctrl+C to abort).\n> " - read NEW_RES - if [ "${NEW_RES}" != "" ]; then - RESOLUTION=${NEW_RES} - fi - if [ -z "$2" ]; then - echo -n -e "\nEnter new DPI (blank for ${DPI}, Ctrl+C to abort).\n> " - read NEW_DPI - if [ "${NEW_DPI}" != "" ]; then - DPI=${NEW_DPI} - fi - fi -fi - -xrandr --fb ${RESOLUTION} --dpi ${DPI} > /dev/null 2>&1 - -echo -e "\n**New Settings **\n" -xrandr -echo diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 722bace6df7..3c0cab4da28 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,42 +1,26 @@ { "name": "Code - OSS", - "build": { - "dockerfile": "Dockerfile", - "args": { - "MAX_VNC_RESOLUTION": "1920x1080x16", - "TARGET_VNC_RESOLUTION": "1280x768", - "TARGET_VNC_PORT": "5901", - "TARGET_NOVNC_PORT": "6080", - "VNC_PASSWORD": "vscode", - "INSTALL_FIREFOX": "true" - } - }, + + // Image contents: https://github.com/microsoft/vscode-dev-containers/blob/master/repository-containers/images/github.com/microsoft/vscode/.devcontainer/base.Dockerfile + "image": "mcr.microsoft.com/vscode/devcontainers/repos/microsoft/vscode:dev", + + "workspaceMount": "source=${localWorkspaceFolder},target=/home/node/workspace/vscode,type=bind,consistency=cached", + "workspaceFolder": "/home/node/workspace/vscode", "overrideCommand": false, - "runArgs": [ - "--init", - // seccomp=unconfined is required for Chrome sandboxing - "--security-opt", "seccomp=unconfined" - ], + "runArgs": [ "--init", "--security-opt", "seccomp=unconfined"], "settings": { - // zsh is also available "terminal.integrated.shell.linux": "/bin/bash", "resmon.show.battery": false, - "resmon.show.cpufreq": false, - "remote.extensionKind": { - "ms-vscode.js-debug-nightly": "workspace", - "msjsdiag.debugger-for-chrome": "workspace" - }, - "debug.chrome.useV3": true + "resmon.show.cpufreq": false }, - // noVNC, VNC ports - "forwardPorts": [6080, 5901], + // noVNC, VNC ports, debug + "forwardPorts": [6080, 5901, 9222], "extensions": [ "dbaeumer.vscode-eslint", "EditorConfig.EditorConfig", - "msjsdiag.debugger-for-chrome", "mutantdino.resourcemonitor", "GitHub.vscode-pull-request-github" ], diff --git a/.devcontainer/fluxbox/apps b/.devcontainer/fluxbox/apps deleted file mode 100644 index d43f05e9e20..00000000000 --- a/.devcontainer/fluxbox/apps +++ /dev/null @@ -1,9 +0,0 @@ -[app] (name=code-oss-dev) - [Position] (CENTER) {0 0} - [Maximized] {yes} - [Dimensions] {100% 100%} -[end] -[transient] (role=GtkFileChooserDialog) - [Position] (CENTER) {0 0} - [Dimensions] {70% 70%} -[end] diff --git a/.devcontainer/fluxbox/init b/.devcontainer/fluxbox/init deleted file mode 100644 index a6b8d73fa73..00000000000 --- a/.devcontainer/fluxbox/init +++ /dev/null @@ -1,9 +0,0 @@ -session.menuFile: ~/.fluxbox/menu -session.keyFile: ~/.fluxbox/keys -session.styleFile: /usr/share/fluxbox/styles//Squared_for_Debian -session.configVersion: 13 -session.screen0.workspaces: 1 -session.screen0.workspacewarping: false -session.screen0.toolbar.widthPercent: 100 -session.screen0.strftimeFormat: %d %b, %a %02k:%M:%S -session.screen0.toolbar.tools: prevworkspace, workspacename, nextworkspace, clock, prevwindow, nextwindow, iconbar, systemtray diff --git a/.devcontainer/fluxbox/menu b/.devcontainer/fluxbox/menu deleted file mode 100644 index ff5955a2fe7..00000000000 --- a/.devcontainer/fluxbox/menu +++ /dev/null @@ -1,16 +0,0 @@ -[begin] ( Code - OSS Development Container ) - [exec] (File Manager) { nautilus ~ } <> - [exec] (Terminal) {/usr/bin/gnome-terminal --working-directory=~ } <> - [exec] (Start Code - OSS) { x-terminal-emulator -T "Code - OSS Build" -e bash /workspaces/vscode*/scripts/code.sh } <> - [submenu] (System >) {} - [exec] (Set Resolution) { x-terminal-emulator -T "Set Resolution" -e bash /usr/local/bin/set-resolution } <> - [exec] (Passwords and Keys) { seahorse } <> - [exec] (Top) { x-terminal-emulator -T "Top" -e /usr/bin/top } <> - [exec] (Editres) {editres} <> - [exec] (Xfontsel) {xfontsel} <> - [exec] (Xkill) {xkill} <> - [exec] (Xrefresh) {xrefresh} <> - [end] - [config] (Configuration >) - [workspaces] (Workspaces >) -[end] diff --git a/.nvmrc b/.nvmrc index f599e28b8ab..48082f72f08 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -10 +12