Compare commits

..

No commits in common. "master" and "2.0.54" have entirely different histories.

7 changed files with 83 additions and 380 deletions

118
.bashrc
View File

@ -1,118 +0,0 @@
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
export LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:"

View File

@ -1,30 +0,0 @@
name: Build and Push Docker Image ARM64
on:
push:
branches: [ master ]
jobs:
docker:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: aleleba/vscode:latest
platforms: linux/amd64,linux/arm64

View File

@ -1,27 +0,0 @@
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi

View File

@ -1,7 +1,8 @@
FROM ubuntu:22.04 FROM ubuntu:22.04
# Update the package list, install sudo, create a non-root user, and grant password-less sudo permissions # Update the package list, install sudo, create a non-root user, and grant password-less sudo permissions
RUN apt update && apt install -y sudo RUN apt update
RUN apt install -y sudo
RUN sudo apt-get update RUN sudo apt-get update
#Instalando Curl #Instalando Curl
@ -12,10 +13,13 @@ RUN sudo apt-get install -y wget
RUN sudo apt-get install -y jq RUN sudo apt-get install -y jq
RUN sudo apt-get update RUN sudo apt-get update
RUN sudo apt-get install -y dumb-init RUN sudo apt-get install dumb-init
RUN adduser --gecos '' --disabled-password vscode \
&& echo "vscode ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/nopasswd
RUN ARCH="$(dpkg --print-architecture)" \ RUN ARCH="$(dpkg --print-architecture)" \
&& curl -fsSL "https://github.com/boxboat/fixuid/releases/download/v0.6.0/fixuid-0.6.0-linux-${ARCH}.tar.gz" | tar -C /usr/local/bin -xzf - \ && curl -fsSL "https://github.com/boxboat/fixuid/releases/download/v0.6.0/fixuid-0.6.0-linux-$ARCH.tar.gz" | tar -C /usr/local/bin -xzf - \
&& chown root:root /usr/local/bin/fixuid \ && chown root:root /usr/local/bin/fixuid \
&& chmod 4755 /usr/local/bin/fixuid \ && chmod 4755 /usr/local/bin/fixuid \
&& mkdir -p /etc/fixuid \ && mkdir -p /etc/fixuid \
@ -28,25 +32,23 @@ RUN ARCH="$(dpkg --print-architecture)" \
RUN curl -sL https://aka.ms/DevTunnelCliInstall | bash RUN curl -sL https://aka.ms/DevTunnelCliInstall | bash
#Instalando VSCode #Instalando VSCode
RUN ARCH="$(dpkg --print-architecture)" \ RUN sudo apt-get update && sudo apt-get install -y gnupg2
&& sudo apt-get update \ RUN sudo apt-get install -y software-properties-common
&& sudo apt-get install -y gnupg2 \ RUN sudo wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -
&& sudo apt-get install -y software-properties-common \ RUN sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"
&& sudo wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add - \ RUN sudo apt update
&& sudo add-apt-repository "deb [arch=${ARCH}] https://packages.microsoft.com/repos/vscode stable main" \ RUN sudo apt install code -y
&& sudo apt-get update \
&& sudo DEBIAN_FRONTEND=noninteractive apt-get install -y code
#Making home writable #Making home writteable
RUN sudo chmod -R a+rwX /home RUN sudo chmod -R a+rwX /home
RUN sudo sysctl -w fs.inotify.max_user_watches=524288 RUN sudo sysctl -w fs.inotify.max_user_watches=524288
ADD ./.bashrc /usr/bin/.bashrc
RUN sudo chmod +x /usr/bin/.bashrc
ADD ./.profile /usr/bin/.profile
RUN sudo chmod +x /usr/bin/.profile
ADD ./entrypoint.sh /usr/bin/entrypoint.sh ADD ./entrypoint.sh /usr/bin/entrypoint.sh
RUN sudo chmod +x /usr/bin/entrypoint.sh RUN sudo chmod +x /usr/bin/entrypoint.sh
USER 1000
ENV USER=vscode
WORKDIR /home/vscode
ENTRYPOINT ["/usr/bin/entrypoint.sh"] ENTRYPOINT ["/usr/bin/entrypoint.sh"]

View File

@ -5,119 +5,73 @@ if [[ -z "${HOME_USER-}" ]]; then
HOME_USER="vscode" HOME_USER="vscode"
fi fi
if ! grep -q "HOME_USER=" /etc/environment; then # We do this first to ensure sudo works below when renaming the user.
sudo bash -c "echo HOME_USER=$HOME_USER >> /etc/environment" # Otherwise the current container UID may not exist in the passwd database.
fi eval "$(fixuid -q)"
if [[ -v VSCODE_TUNNEL_NAME && -n "${VSCODE_TUNNEL_NAME}" ]]; then if [ "${HOME_USER-}" ]; then
if ! grep -q "VSCODE_TUNNEL_NAME=" /etc/environment; then USER="$HOME_USER"
sudo bash -c "echo VSCODE_TUNNEL_NAME=$VSCODE_TUNNEL_NAME >> /etc/environment" if [ "$HOME_USER" != "$(whoami)" ]; then
fi if ! id -u $HOME_USER > /dev/null 2>&1; then
fi sudo adduser --disabled-password --gecos "" ${HOME_USER}
sudo echo "$HOME_USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/nopasswd > /dev/null
# List all environment variables
printenv |
# Filter variables that start with GLOBAL_ENV_
grep -E '^GLOBAL_ENV_' |
# Exclude GLOBAL_ENV_HOME_USER and GLOBAL_ENV_VSCODE_TUNNEL_NAME
grep -vE '^(GLOBAL_ENV_HOME_USER|GLOBAL_ENV_VSCODE_TUNNEL_NAME)=' |
# Remove the GLOBAL_ENV_ prefix
sed 's/^GLOBAL_ENV_//' |
# Append the result to /etc/environment if not already present
while IFS= read -r line
do
if ! grep -q "^${line%=*}=" /etc/environment; then
echo "" >> /etc/environment
echo "export $line" >> /etc/environment
fi
done
# List all environment variables
printenv |
# Filter variables that start with USER_ENV_
grep -E '^USER_ENV_' |
# Remove the USER_ENV_ prefix
sed 's/^USER_ENV_//' |
# Append the result to /usr/bin/.bashrc
while IFS= read -r line
do
# Check if the current user is root
if [ "$(id -u)" = "0" ]; then
echo "" >> /usr/bin/.bashrc
echo "export $line" >> /usr/bin/.bashrc
else
echo "" >> /home/${HOME_USER}/.bashrc
echo "export $line" >> /home/${HOME_USER}/.bashrc
fi
done
USER="$HOME_USER"
if ! id -u $HOME_USER > /dev/null 2>&1; then
sudo adduser --disabled-password --gecos "" --uid 1000 ${HOME_USER}
sudo echo "$HOME_USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/nopasswd > /dev/null
# Creating .vscode folder if it doesn't exist
if [ ! -d "/home/${HOME_USER}/.vscode" ]; then
sudo mkdir -p /home/${HOME_USER}/.vscode
fi
# Changing the property of the directory /home/${HOME_USER}/.vscode
sudo chown -R ${HOME_USER} /home/${HOME_USER}/.vscode
fi
# Then execute entrypoint.sh
if [ "$HOME_USER" != "$(whoami)" ]; then
exec sudo -u $HOME_USER bash -c "source /etc/environment; /usr/bin/entrypoint.sh"
else
sudo chown -R ${HOME_USER} /home/${HOME_USER}
if [ -d "/home/${HOME_USER}/.ssh" ]; then
sudo chmod 755 /home/${HOME_USER}/.ssh
sudo chmod -R 600 /home/${HOME_USER}/.ssh/*
# Check if any .pub files exist in the .ssh directory
for file in /home/${HOME_USER}/.ssh/*.pub; do
if [ -f "$file" ]; then
sudo chmod 644 "$file"
fi
done
# Check if the known_hosts file exists in the .ssh directory
if [ -f "/home/${HOME_USER}/.ssh/known_hosts" ]; then
sudo chmod 644 /home/${HOME_USER}/.ssh/known_hosts
fi fi
fi
fi
# Move the .bashrc file to the user's home directory if it doesn't exist sudo cp -R /home/vscode/. /home/${HOME_USER}/
if [ ! -f "/home/${HOME_USER}/.bashrc" ]; then
sudo mv /usr/bin/.bashrc /home/${HOME_USER}/.bashrc
sudo chown ${HOME_USER} /home/${HOME_USER}/.bashrc
else
sudo rm -f /usr/bin/.bashrc
fi
# Move the .profile file to the user's home directory if it doesn't exist # Check if .bashrc file exists
if [ ! -f "/home/${HOME_USER}/.profile" ]; then if [ ! -f "/home/${HOME_USER}/.bashrc" ]; then
sudo mv /usr/bin/.profile /home/${HOME_USER}/.profile # If not, create it
sudo chown ${HOME_USER} /home/${HOME_USER}/.profile sudo touch /home/${HOME_USER}/.bashrc
else fi
sudo rm -f /usr/bin/.profile
fi
# Find .sh files in /usr/bin/custom-scripts and execute them in order # Change the owner of the .bashrc file to HOME_USER
for script in $(find /usr/bin/custom-scripts -name "*.sh" | sort); do sudo chown ${HOME_USER} /home/${HOME_USER}/.bashrc
chmod +x $script
if [[ $script == *"sudo"* ]]; then # Copy environment variables from vscode user to HOME_USER
sudo -u $HOME_USER bash -c "source /etc/environment; sudo $script" env | grep -v 'HOME_USER' | while read -r line; do
sudo su - ${HOME_USER} -c "echo 'export $line' >> ~/.bashrc"
done
# Copy the .bashrc file from vscode user to HOME_USER
sudo su - ${HOME_USER} -c "cat /home/vscode/.bashrc >> ~/.bashrc"
# Creating .vscode folder if it doesn't exist
if [ ! -d "/home/${HOME_USER}/.vscode" ]; then
sudo mkdir -p /home/${HOME_USER}/.vscode
fi
# Changing the property of the directory /home/${HOME_USER}/.vscode
sudo chown -R ${HOME_USER}: /home/${HOME_USER}/.vscode
# Changing the HOME_USER in the .bashrc file
sudo su - ${HOME_USER} -c "sudo sed -i \"s|/home/vscode|/home/${HOME_USER}|g\" ~/.bashrc"
# Switch to the user specified by $HOME_USER and start an interactive shell session.
sudo su -l ${HOME_USER}
# Copy the HOME variable from vscode user to HOME_USER
sudo su -l ${HOME_USER} -c "echo \"export HOME=/home/${HOME_USER}\" >> ~/.bashrc"
# Source the .bashrc file to apply the changes immediately
sudo su -l ${HOME_USER} -c "source ~/.bashrc"
# Delete the vscode user
if id "vscode" &>/dev/null; then
sudo chown -R vscode:vscode /home/vscode
sudo pkill -u vscode
sleep 2 # wait for processes to terminate
sudo -u root bash -c 'userdel -r vscode'
fi
else else
sudo -u $HOME_USER bash -c "source /etc/environment; $script" # Switch to the user specified by $HOME_USER and start an interactive shell session.
sudo su -l ${HOME_USER}
fi fi
done fi
# Add LS_COLORS variable to .bashrc
LS_COLORS_VALUE="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:"
sudo su - ${HOME_USER} -c "echo 'export LS_COLORS=\"$LS_COLORS_VALUE\"' >> ~/.bashrc"
#Creating extensions folder #Creating extensions folder
if [ ! -d "/home/${HOME_USER}/.config/Code" ]; then if [ ! -d "/home/${HOME_USER}/.config/Code" ]; then
@ -146,7 +100,7 @@ if [ -f "/home/extensions.json" ]; then
# Loop through the extensions and process each element # Loop through the extensions and process each element
for extension in $extensions; do for extension in $extensions; do
echo "Installing extension: $extension" echo "Installing extension: $extension"
sudo su ${HOME_USER} -c "code --install-extension $extension" sudo su - ${HOME_USER} -c "code --install-extension $extension"
done done
sudo cp -R /home/${HOME_USER}/.vscode/* /home/${HOME_USER}/.vscode-server sudo cp -R /home/${HOME_USER}/.vscode/* /home/${HOME_USER}/.vscode-server
sudo cp -R /home/${HOME_USER}/.vscode/* /home/${HOME_USER}/.vscode-server-insiders sudo cp -R /home/${HOME_USER}/.vscode/* /home/${HOME_USER}/.vscode-server-insiders
@ -157,8 +111,8 @@ else
echo "File extensions.json not found" echo "File extensions.json not found"
fi fi
if [[ -v VSCODE_TUNNEL_NAME && -n "${VSCODE_TUNNEL_NAME}" ]]; then if [[ -z "${VSCODE_TUNNEL_NAME}" ]]; then
sudo su ${HOME_USER} -c "code tunnel --accept-server-license-terms --name ${VSCODE_TUNNEL_NAME}" sudo su - ${HOME_USER} -c "code tunnel --accept-server-license-terms"
else else
sudo su ${HOME_USER} -c "code tunnel --accept-server-license-terms" sudo su - ${HOME_USER} -c "code tunnel --accept-server-license-terms --name ${VSCODE_TUNNEL_NAME}"
fi fi

View File

@ -17,28 +17,6 @@ The following environment variables can be set when running the Docker container
- `HOME_USER`: The username of the user running the container. This is used to set the correct permissions on files created in the container. - `HOME_USER`: The username of the user running the container. This is used to set the correct permissions on files created in the container.
- `VSCODE_TUNNEL_NAME`: The name of the SSH tunnel used by Visual Studio Code to connect to the container. - `VSCODE_TUNNEL_NAME`: The name of the SSH tunnel used by Visual Studio Code to connect to the container.
### Custom Environment Variables
You can set custom environment variables for the `HOME_USER` by using the `USER_ENV_` prefix when running the Docker container. These environment variables will be created in the `/home/${HOME_USER}/.bashrc` file without the `USER_ENV_` prefix.
For example, if you want to set a custom environment variable named `MY_VARIABLE` for the `HOME_USER`, you can do so by setting the `USER_ENV_MY_VARIABLE` environment variable when running the Docker container:
```bash
docker run -it -e HOME_USER=custom-home-user -e USER_ENV_MY_VARIABLE=my_value -e VSCODE_TUNNEL_NAME=vscode-ssh-remote-server -v /path/to/extensions.json:/home/extensions.json aleleba/vscode
```
In this example, MY_VARIABLE will be set to my_value in the /home/${HOME_USER}/.bashrc file.
### Global Environment Variables
You can set global environment variables by using the `GLOBAL_ENV_` prefix when running the Docker container. These environment variables will be created in the `/etc/environment` file without the `GLOBAL_ENV_` prefix.
For example, if you want to set a global environment variable named `MY_GLOBAL_VARIABLE`, you can do so by setting the `GLOBAL_ENV_MY_GLOBAL_VARIABLE` environment variable when running the Docker container:
```bash
docker run -it -e HOME_USER=custom-home-user -e GLOBAL_ENV_MY_GLOBAL_VARIABLE=my_global_value -e VSCODE_TUNNEL_NAME=vscode-ssh-remote-server -v /path/to/extensions.json:/home/extensions.json aleleba/vscode
```
In this example, MY_GLOBAL_VARIABLE will be set to my_global_value in the /etc/environment file.
### Adding VSCode Extensions ### Adding VSCode Extensions
To add VSCode extensions to the container, create a JSON file with an array of objects containing the extension details you want to install, the only Mandatory field is uniqueIdentifier and follow this structure. For example: To add VSCode extensions to the container, create a JSON file with an array of objects containing the extension details you want to install, the only Mandatory field is uniqueIdentifier and follow this structure. For example:
@ -103,48 +81,6 @@ You can run this `docker-compose.yml` file by navigating to the directory where
This will start the container in the background and output the container ID. You can then use the `docker ps` command to view the running container. This will start the container in the background and output the container ID. You can then use the `docker ps` command to view the running container.
## Adding Custom Scripts
In this project, you can add custom scripts that will be automatically executed when the application starts. The `/usr/bin/custom-scripts` directory in the Docker container is a volume that maps to a directory on your host machine. Here's how you can add a custom script:
### 1. Create a new script file
Create a new file with a `.sh` extension in the directory on your host machine that maps to the `/usr/bin/custom-scripts` volume in the Docker container. For example, if the `/usr/bin/custom-scripts` volume maps to the `./custom-scripts` directory on your host machine, you can create a file named `install_node.sh` in the `./custom-scripts` directory.
```bash
touch ./custom-scripts/install_node.sh
```
### 2. Write your script
Open the file in a text editor and write your script. Here's an example that installs Node.js using NVM:
```bash
#!/bin/bash
# Installing Node.js with NVM
sudo curl -O https://raw.githubusercontent.com/creationix/nvm/master/install.sh
bash install.sh
source ~/.nvm/nvm.sh
nvm install --lts
nvm alias default lts/*
nvm use default && npm install -g yo generator-code
nvm use default && npm install -g @vscode/vsce
```
The #!/bin/bash line at the top of the script tells the system that this script should be run with the Bash shell.
#### Note on sudo privileges
If the script name includes the word "sudo", the script will be run with root privileges. This is useful if your script needs to perform operations that require superuser privileges.
For instance, if you have a script named `install_sudo_package.sh`, this script will be run with root privileges due to the inclusion of "sudo" in the file name.
Please be aware of the security implications when running scripts with root privileges. Ensure that your script does not perform any unsafe or destructive operations when run with these privileges.
### 3. Run your Docker container
When you start your Docker container, all .sh files in the /usr/bin/custom-scripts directory will be automatically executed in alphabetical order. The environment variables from the /etc/environment file will be loaded before each script is executed.
Remember to replace install_node.sh with the name of your script and ./custom-scripts with the actual path to the directory on your host machine that maps to the /usr/bin/custom-scripts volume in the Docker container.
## Using this image as a base image in a Dockerfile ## Using this image as a base image in a Dockerfile
To use this image as a base image in a Dockerfile, you can add the following line to the top of your Dockerfile and you can install any additional packages you need, here an example installing nvm and nodejs in a `Dockerfile`: To use this image as a base image in a Dockerfile, you can add the following line to the top of your Dockerfile and you can install any additional packages you need, here an example installing nvm and nodejs in a `Dockerfile`:
@ -152,14 +88,6 @@ To use this image as a base image in a Dockerfile, you can add the following lin
``` ```
FROM aleleba/vscode:latest FROM aleleba/vscode:latest
ENV HOME_USER=vscode
RUN sudo adduser --disabled-password --gecos "" --uid 1000 ${HOME_USER}
RUN sudo echo "$HOME_USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/nopasswd > /dev/null
USER ${HOME_USER}
WORKDIR /home/${HOME_USER}
# Installing node.js and NVM # Installing node.js and NVM
SHELL ["/bin/bash", "--login", "-i", "-c"] SHELL ["/bin/bash", "--login", "-i", "-c"]
RUN curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash RUN curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
@ -171,12 +99,6 @@ RUN echo 'source ~/.nvm/nvm.sh' >> ~/.bashrc
``` ```
> **Note:** If you are using this image as a base image in a Dockerfile, ensure that the value of `HOME_USER` is the same as the one you will use when creating the container. This is necessary to ensure that all configurations and packages are installed in the correct user directory.
> **Note:** To grant access to the server, please log into https://github.com/login/device and use the code XXXX-XXXX. You can view the container logs to get the code.
## Contributing ## Contributing
If you'd like to contribute to this project, please fork the repository and create a pull request. If you'd like to contribute to this project, please fork the repository and create a pull request.

View File

@ -1 +1 @@
3.2.7 2.0.54