Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

VSCode on O2

...

Before starting make sure to have all the requirements as described in https://code.visualstudio.com/docs/remote/sshhave all the requirements as described in https://code.visualstudio.com/docs/remote/ssh

Note for Windows users: depending on how you have VSCode installed, you may need to follow a slightly different procedure than what is outlined below. If you are using WSL, and VSCode is installed into WSL, you can follow all instructions in this section as if you are a Linux/Mac OS machine. However, if your VSCode installation is installed “normally” (e.g., it exists as a standard Windows application that you’d normally double click, etc. to start), you will need to access a different .ssh directory, which will usually live at %UserProfile% (C:\Users\{Username}). If you also have WSL installed, you can navigate to this directory by typing cd /mnt/c/Users/{Username}/.ssh. If not, you should still be able to navigate to your %UserProfile%\.ssh directory in Powershell, where you can also generate your SSH keys. You can read more about this arrangement in the VSCode documentation/blog.

SSH Keys

The first step is to set up SSH keys from your local machine to O2. This step is optional as VSCode should support password-based authentication. An example of how to set up SSH keys would be:

...

The final step is to create an entry in your local SSH configuration file ~/.ssh/configto be used with VSCode. This configuration needs to be done in your computer not O2. Windows users should see the above note for configuration nuances.

Inside the file ~/.ssh/config you need to add the lines:

...

After completing the steps above to use the VSCode remote extension you first need to start configure and submit a job on the O2 cluster allocating the resources you foresee necessary for your VSCode work.

Any sbatch job that can work as a placehold placeholder would work, we recommend something like the following submission script:

Code Block
#!/bin/bash

#SBATCH -p priority
#SBATCH -c 1
#SBATCH --mem=4G
#SBATCH -t 6:00:00
#SBATCH --job-name="vscodetunnel"

sleep 6h

and adjust the resources as needed making sure to match the sleep time with your desired WallTime. Submit this job via standard sbatch procedures.
If you used the above template, you can then check the job status using the command

...

This page shows you how to install and run VS Code using your local browser. Let us know if you have any questions.

Connect to O2

Please review the How to Login to O2 and the Using Slurm Basic wiki pages for more details. If using a Windows computer, we recommend to download/install https://mobaxterm.mobatek.net/and open a new terminal. If using a Mac computer, you can open the ‘Terminal’ app and use the ssh command as follow:

...

Info

Newer versions of code-server aren't compatible with CentOS 7. Therefore, a container is necessary to circumvent the compatibility issue.

Run the latest version (4.20.0) using a container

Code Block
# Export the port number
export PORT=51234 

# Launch an interactive job (resources: 2 hours and 3 GiB of RAM) 
srun --pty -p priority -t 0-2 --mem=3G --tunnel $PORT:$PORT bash

# Start code-server using the singularity container
singularity exec /n/app/singularity/containers/code-server-v4.20.0.sif /app/code-server/bin/code-server

# In theory, you should see something similar to:
singularity exec /n/app/singularity/containers/code-server-v4.20.0.sif /app/code-server/bin/code-server
[2024-01-11T17:15:54.233Z] info  code-server 4.20.0 
[2024-01-11T17:15:54.237Z] info  Using user-data-dir /home/<HMS_ID>/.local/share/code-server
[2024-01-11T17:15:54.264Z] info  Using config file /home/<HMS_ID/.config/code-server/config.yaml
[2024-01-11T17:15:54.265Z] info  HTTP server listening on http://127.0.0.1:50003/
[2024-01-11T17:15:54.265Z] info    - Authentication is enabled
[2024-01-11T17:15:54.266Z] info      - Using password from /home/<HMS_ID>/.config/code-server/config.yaml
[2024-01-11T17:15:54.266Z] info    - Not serving HTTPS
[2024-01-11T17:15:54.267Z] info  Session server listening on /home/<HMS_ID/.local/share/code-server/code-server-ipc.sock

# To see the password on /home/<HMS_ID>/.config/code-server/config.yaml
# You'll need to open a new terminal, connect to O2, and paste the following command:
cat ~/.config/code-server/config.yaml

Installing and Testing an Older Version Locally

Code Block
export PORT=51234 
srun --pty -p priority -t 8:0:0 --tunnel $PORT:$PORT bash 

mkdir -p ~/.local/lib ~/.local/bin
curl -fL https://github.com/cdr/code-server/releases/download/v4.7.0/code-server-4.7.0-linux-amd64.tar.gz | tar -C ~/.local/lib -xz
mv ~/.local/lib/code-server-4.7.0-linux-amd64 ~/.local/lib/code-server-4.7.0

# Start code server
~/.local/lib/code-server-4.7.0/bin/code-server 

# You should see output: 
$ [2021-10-05T13:58:56.961Z] info  code-server 4.7.0 4cd55f94c0a72f05c18cea070e10b969996614d2
[2021-10-05T13:58:56.962Z] info  Using user-data-dir ~/.local/share/code-server
[2021-10-05T13:58:56.995Z] info  Using config file ~/.config/code-server/config.yaml
[2021-10-05T13:58:56.995Z] info  HTTP server listening on http://127.0.0.1:51234
[2021-10-05T13:58:56.995Z] info    - Authentication is enabled
[2021-10-05T13:58:56.995Z] info      - Using password from ~/.config/code-server/config.yaml
[2021-10-05T13:58:56.995Z] info    - Not serving HTTPS

# Command + click the "http://127.0.0.1:51234" to open the link
# Then copy and paste the password to browser
cat ~/.config/code-server/config.yaml

Create an Alias to login, start an interactive job, and launch code-server from a local machine

Code Block
# Set DUO default to push if you didn’t do it yet. 
# Run this command on O2:  
echo export DUO_PASSCODE=push >> $HOME/.bashrc

# On your local machine
# set up alias. You could add one of the following two lines to your ~/.bash_profile

# If using an older version:
alias vscode_old='PORT=51234; CLUSTER_USER=YourHMSID; ssh -L $PORT:127.0.0.1:$PORT $CLUSTER_USER@o2.hms.harvard.edu -t "hostname; echo port is: $PORT; kill -9 $(/usr/sbin/lsof -t -i:$PORT) 2>/dev/null; srun --pty -p priority -t 8:0:0 --tunnel $PORT:$PORT bash -c \"hostname; echo port is: $PORT; kill -9 $(/usr/sbin/lsof -t -i:$PORT) 2>/dev/null; export PORT=$PORT; ~/.local/lib/code-server-4.7.0/bin/code-server & bash;\""'

# If using the latest version (4.20.0)
alias vscode='PORT=50234; CLUSTER_USER=YourHMSID; ssh -L $PORT:127.0.0.1:$PORT $CLUSTER_USER@o2.hms.harvard.edu -t "hostname; echo port is: $PORT; kill -9 $(/usr/sbin/lsof -t -i:$PORT) 2>/dev/null; srun --pty -p priority -t 8:0:0 --tunnel $PORT:$PORT bash -c \"hostname; echo port is: $PORT; kill -9 $(/usr/sbin/lsof -t -i:$PORT) 2>/dev/null; export PORT=$PORT; singularity exec -B '/n' /n/app/singularity/containers/code-server-v4.20.0.sif /app/code-server/bin/code-server & bash;\""'

# login to O2, start interative job and run vs code server
vscode

...

Note: You don't have to use the number 51234 for the PORT; you can choose any number within the range of 50,000 for the PORT value.

Frequently Asked Questions (FAQ)

Why I see “port 51234 is in use or unavailable" when launching code-server?

Please select a different port number in the 50,000 range.

Why am I encountering the message “channel #: open failed: connect failed: Connection refused" in the terminal?

You have a code-server tab open in your browser. The solution is to simply close the tab or tabs.