Compare commits
22 Commits
Author | SHA1 | Date |
---|---|---|
Vladimir Protsenko | 32e1aeca89 | 9 months ago |
Vladimir Protsenko | 1019666122 | 9 months ago |
Vladimir Protsenko | 21caf98d27 | 9 months ago |
Vladimir Protsenko | 0e9309dc70 | 10 months ago |
Vladimir Protsenko | 1c3e45e858 | 10 months ago |
Vladimir Protsenko | fefb3ef46b | 1 year ago |
Vladimir Protsenko | b7ef654c51 | 1 year ago |
Vladimir Protsenko | d0b2d5d833 | 1 year ago |
Vladimir Protsenko | c1262a932b | 1 year ago |
Vladimir Protsenko | a360d0c3df | 1 year ago |
Vladimir Protsenko | 867ddf9a6e | 1 year ago |
Vladimir Protsenko | 0c520df93f | 1 year ago |
Vladimir Protsenko | b2593abf48 | 1 year ago |
Vladimir Protsenko | f71f16dc01 | 1 year ago |
Vladimir Protsenko | bd0fd0b410 | 1 year ago |
Vladimir Protsenko | 493febf4b5 | 1 year ago |
Vladimir Protsenko | 002c231acc | 1 year ago |
Vladimir Protsenko | 8838f0eae9 | 1 year ago |
Vladimir Protsenko | ac8f3b2e5a | 1 year ago |
Vladimir Protsenko | bed15d8e6b | 1 year ago |
Vladimir Protsenko | 26e96b0189 | 1 year ago |
Vladimir Protsenko | e8a339ea30 | 1 year ago |
@ -1,23 +1,39 @@
|
|||||||
FROM pytorch/pytorch:2.0.0-cuda11.7-cudnn8-runtime
|
FROM pytorch/pytorch:2.2.0-cuda12.1-cudnn8-runtime
|
||||||
#FROM tensorflow/tensorflow:2.12.0-gpu
|
ENV TZ=Europe/Samara
|
||||||
|
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||||
|
|
||||||
ARG USER
|
ARG USER
|
||||||
ARG GROUP
|
ARG GROUP
|
||||||
ARG UID
|
ARG UID
|
||||||
ARG GID
|
ARG GID
|
||||||
|
|
||||||
|
RUN apt update
|
||||||
|
RUN apt install sudo -y
|
||||||
|
RUN sed -i 's/^%sudo.*/%sudo ALL=(ALL) NOPASSWD: ALL/' /etc/sudoers
|
||||||
|
|
||||||
RUN groupadd --gid ${GID} ${GROUP}
|
RUN groupadd --gid ${GID} ${GROUP}
|
||||||
RUN useradd --shell /bin/bash --uid ${UID} --gid ${GID} --create-home ${USER}
|
RUN useradd --shell /bin/bash --uid ${UID} --gid ${GID} -G sudo --create-home ${USER}
|
||||||
RUN mkdir /wd
|
RUN mkdir /wd
|
||||||
RUN chown ${USER}:${GROUP} /wd
|
RUN chown ${USER}:${GROUP} /wd
|
||||||
|
|
||||||
# SYSTEM INITIALIZATION
|
# SYSTEM CONFIGURATION
|
||||||
# RUN pip install jupyter
|
RUN apt install vim htop mc curl wget git tree -y
|
||||||
|
RUN curl -fsSL https://code-server.dev/install.sh | sh
|
||||||
|
RUN /opt/conda/bin/conda install -n base ipykernel --update-deps --force-reinstall -y
|
||||||
|
|
||||||
USER ${USER}
|
USER ${USER}
|
||||||
|
|
||||||
# USER INITIALIZATION
|
# USER CONFIGURATION
|
||||||
# RUN ...
|
# RUN ...
|
||||||
|
|
||||||
|
RUN openssl req -x509 -newkey rsa:4096 -keyout /home/${USER}/key.pem -out /home/${USER}/cert.pem -sha256 -nodes -days 365 -subj "/C=RU/ST=SamaraRegion/L=Samara/O=SSAU/OU=LIAV/CN=vscode.ssau.ru/"
|
||||||
|
RUN mkdir -p /home/${USER}/.config/code-server
|
||||||
|
RUN echo 'bind-addr: 0.0.0.0:8443' >> /home/${USER}/.config/code-server/config.yaml
|
||||||
|
RUN echo "cert: /home/${USER}/cert.pem" >> /home/${USER}/.config/code-server/config.yaml
|
||||||
|
RUN echo "cert-key: /home/${USER}/key.pem" >> /home/${USER}/.config/code-server/config.yaml
|
||||||
|
|
||||||
|
RUN code-server --install-extension ms-python.python
|
||||||
|
|
||||||
|
ENV SHELL=/bin/bash
|
||||||
SHELL ["/bin/bash", "--login", "-i", "-c"]
|
SHELL ["/bin/bash", "--login", "-i", "-c"]
|
||||||
WORKDIR /wd
|
WORKDIR /wd
|
@ -0,0 +1,618 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
# code-server's automatic install script.
|
||||||
|
# See https://coder.com/docs/code-server/latest/install
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
arg0="$0"
|
||||||
|
if [ "$0" = sh ]; then
|
||||||
|
arg0="curl -fsSL https://code-server.dev/install.sh | sh -s --"
|
||||||
|
else
|
||||||
|
not_curl_usage="The latest script is available at https://code-server.dev/install.sh
|
||||||
|
"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cath << EOF
|
||||||
|
Installs code-server.
|
||||||
|
It tries to use the system package manager if possible.
|
||||||
|
After successful installation it explains how to start using code-server.
|
||||||
|
|
||||||
|
Pass in user@host to install code-server on user@host over ssh.
|
||||||
|
The remote host must have internet access.
|
||||||
|
${not_curl_usage-}
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
$arg0 [--dry-run] [--version X.X.X] [--edge] [--method detect] \
|
||||||
|
[--prefix ~/.local] [--rsh ssh] [user@host]
|
||||||
|
|
||||||
|
--dry-run
|
||||||
|
Echo the commands for the install process without running them.
|
||||||
|
|
||||||
|
--version X.X.X
|
||||||
|
Install a specific version instead of the latest.
|
||||||
|
|
||||||
|
--edge
|
||||||
|
Install the latest edge version instead of the latest stable version.
|
||||||
|
|
||||||
|
--method [detect | standalone]
|
||||||
|
Choose the installation method. Defaults to detect.
|
||||||
|
- detect detects the system package manager and tries to use it.
|
||||||
|
Full reference on the process is further below.
|
||||||
|
- standalone installs a standalone release archive into ~/.local
|
||||||
|
Add ~/.local/bin to your \$PATH to use it.
|
||||||
|
|
||||||
|
--prefix <dir>
|
||||||
|
Sets the prefix used by standalone release archives. Defaults to ~/.local
|
||||||
|
The release is unarchived into ~/.local/lib/code-server-X.X.X
|
||||||
|
and the binary symlinked into ~/.local/bin/code-server
|
||||||
|
To install system wide pass --prefix=/usr/local
|
||||||
|
|
||||||
|
--rsh <bin>
|
||||||
|
Specifies the remote shell for remote installation. Defaults to ssh.
|
||||||
|
|
||||||
|
The detection method works as follows:
|
||||||
|
- Debian, Ubuntu, Raspbian: install the deb package from GitHub.
|
||||||
|
- Fedora, CentOS, RHEL, openSUSE: install the rpm package from GitHub.
|
||||||
|
- Arch Linux: install from the AUR (which pulls releases from GitHub).
|
||||||
|
- FreeBSD, Alpine: install from npm.
|
||||||
|
- macOS: install using Homebrew if installed otherwise install from GitHub.
|
||||||
|
- All others: install the release from GitHub.
|
||||||
|
|
||||||
|
We only build releases on GitHub for amd64 and arm64 on Linux and amd64 for
|
||||||
|
macOS. When the detection method tries to pull a release from GitHub it will
|
||||||
|
fall back to installing from npm when there is no matching release for the
|
||||||
|
system's operating system and architecture.
|
||||||
|
|
||||||
|
The standalone method will force installion using GitHub releases. It will not
|
||||||
|
fall back to npm so on architectures without pre-built releases this will error.
|
||||||
|
|
||||||
|
The installer will cache all downloaded assets into ~/.cache/code-server
|
||||||
|
|
||||||
|
More installation docs are at https://coder.com/docs/code-server/latest/install
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
echo_latest_version() {
|
||||||
|
if [ "${EDGE-}" ]; then
|
||||||
|
version="$(curl -fsSL https://api.github.com/repos/coder/code-server/releases | awk 'match($0,/.*"html_url": "(.*\/releases\/tag\/.*)".*/)' | head -n 1 | awk -F '"' '{print $4}')"
|
||||||
|
else
|
||||||
|
# https://gist.github.com/lukechilds/a83e1d7127b78fef38c2914c4ececc3c#gistcomment-2758860
|
||||||
|
version="$(curl -fsSLI -o /dev/null -w "%{url_effective}" https://github.com/coder/code-server/releases/latest)"
|
||||||
|
fi
|
||||||
|
version="${version#https://github.com/coder/code-server/releases/tag/}"
|
||||||
|
version="${version#v}"
|
||||||
|
echo "$version"
|
||||||
|
}
|
||||||
|
|
||||||
|
echo_npm_postinstall() {
|
||||||
|
echoh
|
||||||
|
cath << EOF
|
||||||
|
npm package has been installed.
|
||||||
|
|
||||||
|
Extend your path to use code-server:
|
||||||
|
PATH="$NPM_BIN_DIR:\$PATH"
|
||||||
|
Then run with:
|
||||||
|
code-server
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
echo_standalone_postinstall() {
|
||||||
|
echoh
|
||||||
|
cath << EOF
|
||||||
|
Standalone release has been installed into $STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION
|
||||||
|
|
||||||
|
Extend your path to use code-server:
|
||||||
|
PATH="$STANDALONE_INSTALL_PREFIX/bin:\$PATH"
|
||||||
|
Then run with:
|
||||||
|
code-server
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
echo_brew_postinstall() {
|
||||||
|
echoh
|
||||||
|
cath << EOF
|
||||||
|
Brew release has been installed.
|
||||||
|
|
||||||
|
Run with:
|
||||||
|
code-server
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
echo_systemd_postinstall() {
|
||||||
|
echoh
|
||||||
|
cath << EOF
|
||||||
|
$1 package has been installed.
|
||||||
|
|
||||||
|
To have systemd start code-server now and restart on boot:
|
||||||
|
sudo systemctl enable --now code-server@\$USER
|
||||||
|
Or, if you don't want/need a background service you can run:
|
||||||
|
code-server
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
echo_coder_postinstall() {
|
||||||
|
echoh
|
||||||
|
echoh "Deploy code-server for your team with Coder: https://github.com/coder/coder"
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
if [ "${TRACE-}" ]; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
|
||||||
|
unset \
|
||||||
|
DRY_RUN \
|
||||||
|
METHOD \
|
||||||
|
OPTIONAL \
|
||||||
|
ALL_FLAGS \
|
||||||
|
RSH_ARGS \
|
||||||
|
EDGE \
|
||||||
|
RSH
|
||||||
|
|
||||||
|
ALL_FLAGS=""
|
||||||
|
while [ "$#" -gt 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
-*)
|
||||||
|
ALL_FLAGS="${ALL_FLAGS} $1"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
--dry-run)
|
||||||
|
DRY_RUN=1
|
||||||
|
;;
|
||||||
|
--method)
|
||||||
|
METHOD="$(parse_arg "$@")"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--method=*)
|
||||||
|
METHOD="$(parse_arg "$@")"
|
||||||
|
;;
|
||||||
|
--prefix)
|
||||||
|
STANDALONE_INSTALL_PREFIX="$(parse_arg "$@")"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--prefix=*)
|
||||||
|
STANDALONE_INSTALL_PREFIX="$(parse_arg "$@")"
|
||||||
|
;;
|
||||||
|
--version)
|
||||||
|
VERSION="$(parse_arg "$@")"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--version=*)
|
||||||
|
VERSION="$(parse_arg "$@")"
|
||||||
|
;;
|
||||||
|
--edge)
|
||||||
|
EDGE=1
|
||||||
|
;;
|
||||||
|
--rsh)
|
||||||
|
RSH="$(parse_arg "$@")"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--rsh=*)
|
||||||
|
RSH="$(parse_arg "$@")"
|
||||||
|
;;
|
||||||
|
-h | --h | -help | --help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
shift
|
||||||
|
# We remove the -- added above.
|
||||||
|
ALL_FLAGS="${ALL_FLAGS% --}"
|
||||||
|
RSH_ARGS="$*"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
echoerr "Unknown flag $1"
|
||||||
|
echoerr "Run with --help to see usage."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
RSH_ARGS="$*"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "${RSH_ARGS-}" ]; then
|
||||||
|
RSH="${RSH-ssh}"
|
||||||
|
echoh "Installing remotely with $RSH $RSH_ARGS"
|
||||||
|
curl -fsSL https://code-server.dev/install.sh | prefix "$RSH_ARGS" "$RSH" "$RSH_ARGS" sh -s -- "$ALL_FLAGS"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
METHOD="${METHOD-detect}"
|
||||||
|
if [ "$METHOD" != detect ] && [ "$METHOD" != standalone ]; then
|
||||||
|
echoerr "Unknown install method \"$METHOD\""
|
||||||
|
echoerr "Run with --help to see usage."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# These are used by the various install_* functions that make use of GitHub
|
||||||
|
# releases in order to download and unpack the right release.
|
||||||
|
CACHE_DIR=$(echo_cache_dir)
|
||||||
|
STANDALONE_INSTALL_PREFIX=${STANDALONE_INSTALL_PREFIX:-$HOME/.local}
|
||||||
|
VERSION=${VERSION:-$(echo_latest_version)}
|
||||||
|
# These can be overridden for testing but shouldn't normally be used as it can
|
||||||
|
# result in a broken code-server.
|
||||||
|
OS=${OS:-$(os)}
|
||||||
|
ARCH=${ARCH:-$(arch)}
|
||||||
|
|
||||||
|
distro_name
|
||||||
|
|
||||||
|
# Standalone installs by pulling pre-built releases from GitHub.
|
||||||
|
if [ "$METHOD" = standalone ]; then
|
||||||
|
if has_standalone; then
|
||||||
|
install_standalone
|
||||||
|
echo_coder_postinstall
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echoerr "There are no standalone releases for $ARCH"
|
||||||
|
echoerr "Please try again without '--method standalone'"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# DISTRO can be overridden for testing but shouldn't normally be used as it
|
||||||
|
# can result in a broken code-server.
|
||||||
|
DISTRO=${DISTRO:-$(distro)}
|
||||||
|
|
||||||
|
case $DISTRO in
|
||||||
|
# macOS uses brew when available and falls back to standalone. We only have
|
||||||
|
# amd64 for macOS so for anything else use npm.
|
||||||
|
macos)
|
||||||
|
BREW_PATH="${BREW_PATH-brew}"
|
||||||
|
if command_exists "$BREW_PATH"; then
|
||||||
|
install_brew
|
||||||
|
else
|
||||||
|
echoh "Homebrew not installed."
|
||||||
|
echoh "Falling back to standalone installation."
|
||||||
|
npm_fallback install_standalone
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
# The .deb and .rpm files are pulled from GitHub and we only have amd64 and
|
||||||
|
# arm64 there and need to fall back to npm otherwise.
|
||||||
|
debian) npm_fallback install_deb ;;
|
||||||
|
fedora | opensuse) npm_fallback install_rpm ;;
|
||||||
|
# Arch uses the AUR package which only supports amd64 and arm64 since it
|
||||||
|
# pulls releases from GitHub so we need to fall back to npm.
|
||||||
|
arch) npm_fallback install_aur ;;
|
||||||
|
# We don't have GitHub releases that work on Alpine or FreeBSD so we have no
|
||||||
|
# choice but to use npm here.
|
||||||
|
alpine | freebsd) install_npm ;;
|
||||||
|
# For anything else we'll try to install standalone but fall back to npm if
|
||||||
|
# we don't have releases for the architecture.
|
||||||
|
*)
|
||||||
|
echoh "Unsupported package manager."
|
||||||
|
echoh "Falling back to standalone installation."
|
||||||
|
npm_fallback install_standalone
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo_coder_postinstall
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_arg() {
|
||||||
|
case "$1" in
|
||||||
|
*=*)
|
||||||
|
# Remove everything after first equal sign.
|
||||||
|
opt="${1%%=*}"
|
||||||
|
# Remove everything before first equal sign.
|
||||||
|
optarg="${1#*=}"
|
||||||
|
if [ ! "$optarg" ] && [ ! "${OPTIONAL-}" ]; then
|
||||||
|
echoerr "$opt requires an argument"
|
||||||
|
echoerr "Run with --help to see usage."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "$optarg"
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "${2-}" in
|
||||||
|
"" | -*)
|
||||||
|
if [ ! "${OPTIONAL-}" ]; then
|
||||||
|
echoerr "$1 requires an argument"
|
||||||
|
echoerr "Run with --help to see usage."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "$2"
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch() {
|
||||||
|
URL="$1"
|
||||||
|
FILE="$2"
|
||||||
|
|
||||||
|
if [ -e "$FILE" ]; then
|
||||||
|
echoh "+ Reusing $FILE"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
sh_c mkdir -p "$CACHE_DIR"
|
||||||
|
sh_c curl \
|
||||||
|
-#fL \
|
||||||
|
-o "$FILE.incomplete" \
|
||||||
|
-C - \
|
||||||
|
"$URL"
|
||||||
|
sh_c mv "$FILE.incomplete" "$FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_brew() {
|
||||||
|
echoh "Installing latest from Homebrew."
|
||||||
|
echoh
|
||||||
|
|
||||||
|
sh_c "$BREW_PATH" install code-server
|
||||||
|
|
||||||
|
echo_brew_postinstall
|
||||||
|
}
|
||||||
|
|
||||||
|
install_deb() {
|
||||||
|
echoh "Installing v$VERSION of the $ARCH deb package from GitHub."
|
||||||
|
echoh
|
||||||
|
|
||||||
|
fetch "https://github.com/coder/code-server/releases/download/v$VERSION/code-server_${VERSION}_$ARCH.deb" \
|
||||||
|
"$CACHE_DIR/code-server_${VERSION}_$ARCH.deb"
|
||||||
|
sudo_sh_c dpkg -i "$CACHE_DIR/code-server_${VERSION}_$ARCH.deb"
|
||||||
|
|
||||||
|
echo_systemd_postinstall deb
|
||||||
|
}
|
||||||
|
|
||||||
|
install_rpm() {
|
||||||
|
echoh "Installing v$VERSION of the $ARCH rpm package from GitHub."
|
||||||
|
echoh
|
||||||
|
|
||||||
|
fetch "https://github.com/coder/code-server/releases/download/v$VERSION/code-server-$VERSION-$ARCH.rpm" \
|
||||||
|
"$CACHE_DIR/code-server-$VERSION-$ARCH.rpm"
|
||||||
|
sudo_sh_c rpm -U "$CACHE_DIR/code-server-$VERSION-$ARCH.rpm"
|
||||||
|
|
||||||
|
echo_systemd_postinstall rpm
|
||||||
|
}
|
||||||
|
|
||||||
|
install_aur() {
|
||||||
|
echoh "Installing latest from the AUR."
|
||||||
|
echoh
|
||||||
|
|
||||||
|
sh_c mkdir -p "$CACHE_DIR/code-server-aur"
|
||||||
|
sh_c "curl -#fsSL https://aur.archlinux.org/cgit/aur.git/snapshot/code-server.tar.gz | tar -xzC $CACHE_DIR/code-server-aur --strip-components 1"
|
||||||
|
echo "+ cd $CACHE_DIR/code-server-aur"
|
||||||
|
if [ ! "${DRY_RUN-}" ]; then
|
||||||
|
cd "$CACHE_DIR/code-server-aur"
|
||||||
|
fi
|
||||||
|
sh_c makepkg -si --noconfirm
|
||||||
|
|
||||||
|
echo_systemd_postinstall AUR
|
||||||
|
}
|
||||||
|
|
||||||
|
install_standalone() {
|
||||||
|
echoh "Installing v$VERSION of the $ARCH release from GitHub."
|
||||||
|
echoh
|
||||||
|
|
||||||
|
fetch "https://github.com/coder/code-server/releases/download/v$VERSION/code-server-$VERSION-$OS-$ARCH.tar.gz" \
|
||||||
|
"$CACHE_DIR/code-server-$VERSION-$OS-$ARCH.tar.gz"
|
||||||
|
|
||||||
|
# -w only works if the directory exists so try creating it first. If this
|
||||||
|
# fails we can ignore the error as the -w check will then swap us to sudo.
|
||||||
|
sh_c mkdir -p "$STANDALONE_INSTALL_PREFIX" 2> /dev/null || true
|
||||||
|
|
||||||
|
sh_c="sh_c"
|
||||||
|
if [ ! -w "$STANDALONE_INSTALL_PREFIX" ]; then
|
||||||
|
sh_c="sudo_sh_c"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e "$STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION" ]; then
|
||||||
|
echoh
|
||||||
|
echoh "code-server-$VERSION is already installed at $STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION"
|
||||||
|
echoh "Remove it to reinstall."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
"$sh_c" mkdir -p "$STANDALONE_INSTALL_PREFIX/lib" "$STANDALONE_INSTALL_PREFIX/bin"
|
||||||
|
"$sh_c" tar -C "$STANDALONE_INSTALL_PREFIX/lib" -xzf "$CACHE_DIR/code-server-$VERSION-$OS-$ARCH.tar.gz"
|
||||||
|
"$sh_c" mv -f "$STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION-$OS-$ARCH" "$STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION"
|
||||||
|
"$sh_c" ln -fs "$STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION/bin/code-server" "$STANDALONE_INSTALL_PREFIX/bin/code-server"
|
||||||
|
|
||||||
|
echo_standalone_postinstall
|
||||||
|
}
|
||||||
|
|
||||||
|
install_npm() {
|
||||||
|
echoh "Installing latest from npm."
|
||||||
|
echoh
|
||||||
|
|
||||||
|
NPM_PATH="${YARN_PATH-npm}"
|
||||||
|
|
||||||
|
if command_exists "$NPM_PATH"; then
|
||||||
|
sh_c="sh_c"
|
||||||
|
if [ ! "${DRY_RUN-}" ] && [ ! -w "$(NPM_PATH config get prefix)" ]; then
|
||||||
|
sh_c="sudo_sh_c"
|
||||||
|
fi
|
||||||
|
echoh "Installing with npm."
|
||||||
|
echoh
|
||||||
|
"$sh_c" "$NPM_PATH" install -g code-server --unsafe-perm
|
||||||
|
NPM_BIN_DIR="\$($NPM_PATH bin -g)" echo_npm_postinstall
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
echoerr "Please install npm to install code-server!"
|
||||||
|
echoerr "You will need at least node v12 and a few C dependencies."
|
||||||
|
echoerr "See the docs https://coder.com/docs/code-server/latest/install#npm"
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Run $1 if we have a standalone otherwise run install_npm.
|
||||||
|
npm_fallback() {
|
||||||
|
if has_standalone; then
|
||||||
|
$1
|
||||||
|
else
|
||||||
|
echoh "No standalone releases for $ARCH."
|
||||||
|
echoh "Falling back to installation from npm."
|
||||||
|
install_npm
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Determine if we have standalone releases on GitHub for the system's arch.
|
||||||
|
has_standalone() {
|
||||||
|
case $ARCH in
|
||||||
|
amd64) return 0 ;;
|
||||||
|
# We only have amd64 for macOS.
|
||||||
|
arm64)
|
||||||
|
[ "$(distro)" != macos ]
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
*) return 1 ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
os() {
|
||||||
|
uname="$(uname)"
|
||||||
|
case $uname in
|
||||||
|
Linux) echo linux ;;
|
||||||
|
Darwin) echo macos ;;
|
||||||
|
FreeBSD) echo freebsd ;;
|
||||||
|
*) echo "$uname" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Print the detected Linux distro, otherwise print the OS name.
|
||||||
|
#
|
||||||
|
# Example outputs:
|
||||||
|
# - macos -> macos
|
||||||
|
# - freebsd -> freebsd
|
||||||
|
# - ubuntu, raspbian, debian ... -> debian
|
||||||
|
# - amzn, centos, rhel, fedora, ... -> fedora
|
||||||
|
# - opensuse-{leap,tumbleweed} -> opensuse
|
||||||
|
# - alpine -> alpine
|
||||||
|
# - arch, manjaro, endeavouros, ... -> arch
|
||||||
|
#
|
||||||
|
# Inspired by https://github.com/docker/docker-install/blob/26ff363bcf3b3f5a00498ac43694bf1c7d9ce16c/install.sh#L111-L120.
|
||||||
|
distro() {
|
||||||
|
if [ "$OS" = "macos" ] || [ "$OS" = "freebsd" ]; then
|
||||||
|
echo "$OS"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f /etc/os-release ]; then
|
||||||
|
(
|
||||||
|
. /etc/os-release
|
||||||
|
if [ "${ID_LIKE-}" ]; then
|
||||||
|
for id_like in $ID_LIKE; do
|
||||||
|
case "$id_like" in debian | fedora | opensuse | arch)
|
||||||
|
echo "$id_like"
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$ID"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Print a human-readable name for the OS/distro.
|
||||||
|
distro_name() {
|
||||||
|
if [ "$(uname)" = "Darwin" ]; then
|
||||||
|
echo "macOS v$(sw_vers -productVersion)"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f /etc/os-release ]; then
|
||||||
|
(
|
||||||
|
. /etc/os-release
|
||||||
|
echo "$PRETTY_NAME"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Prints something like: Linux 4.19.0-9-amd64
|
||||||
|
uname -sr
|
||||||
|
}
|
||||||
|
|
||||||
|
arch() {
|
||||||
|
uname_m=$(uname -m)
|
||||||
|
case $uname_m in
|
||||||
|
aarch64) echo arm64 ;;
|
||||||
|
x86_64) echo amd64 ;;
|
||||||
|
*) echo "$uname_m" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
command_exists() {
|
||||||
|
if [ ! "$1" ]; then return 1; fi
|
||||||
|
command -v "$@" > /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
sh_c() {
|
||||||
|
echoh "+ $*"
|
||||||
|
if [ ! "${DRY_RUN-}" ]; then
|
||||||
|
sh -c "$*"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
sudo_sh_c() {
|
||||||
|
if [ "$(id -u)" = 0 ]; then
|
||||||
|
sh_c "$@"
|
||||||
|
elif command_exists doas; then
|
||||||
|
sh_c "doas $*"
|
||||||
|
elif command_exists sudo; then
|
||||||
|
sh_c "sudo $*"
|
||||||
|
elif command_exists su; then
|
||||||
|
sh_c "su root -c '$*'"
|
||||||
|
else
|
||||||
|
echoh
|
||||||
|
echoerr "This script needs to run the following command as root."
|
||||||
|
echoerr " $*"
|
||||||
|
echoerr "Please install doas, sudo, or su."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
echo_cache_dir() {
|
||||||
|
if [ "${XDG_CACHE_HOME-}" ]; then
|
||||||
|
echo "$XDG_CACHE_HOME/code-server"
|
||||||
|
elif [ "${HOME-}" ]; then
|
||||||
|
echo "$HOME/.cache/code-server"
|
||||||
|
else
|
||||||
|
echo "/tmp/code-server-cache"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
echoh() {
|
||||||
|
echo "$@" | humanpath
|
||||||
|
}
|
||||||
|
|
||||||
|
cath() {
|
||||||
|
humanpath
|
||||||
|
}
|
||||||
|
|
||||||
|
echoerr() {
|
||||||
|
echoh "$@" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
# humanpath replaces all occurrences of " $HOME" with " ~"
|
||||||
|
# and all occurrences of '"$HOME' with the literal '"$HOME'.
|
||||||
|
humanpath() {
|
||||||
|
sed "s# $HOME# ~#g; s#\"$HOME#\"\$HOME#g"
|
||||||
|
}
|
||||||
|
|
||||||
|
# We need to make sure we exit with a non zero exit if the command fails.
|
||||||
|
# /bin/sh does not support -o pipefail unfortunately.
|
||||||
|
prefix() {
|
||||||
|
PREFIX="$1"
|
||||||
|
shift
|
||||||
|
fifo="$(mktemp -d)/fifo"
|
||||||
|
mkfifo "$fifo"
|
||||||
|
sed -e "s#^#$PREFIX: #" "$fifo" &
|
||||||
|
"$@" > "$fifo" 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
@ -1,4 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
CURDIRNAME=${PWD##*/}
|
|
||||||
|
|
||||||
docker run -d --gpus "device=0" -p 8888:8888 -v $(pwd):/wd --name ${USER}_${CURDIRNAME} ${USER}_${CURDIRNAME}
|
|
@ -1,4 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
CURDIRNAME=${PWD##*/}
|
|
||||||
|
|
||||||
docker run -it --rm --gpus "device=0" -p 8888:8888 -v $(pwd):/wd --name ${USER}_${CURDIRNAME} ${USER}_${CURDIRNAME}
|
|
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
CURDIRNAME=${PWD##*/}
|
||||||
|
|
||||||
|
docker stop ${USER}_${CURDIRNAME}_vscode
|
@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
CURDIRNAME=${PWD##*/}
|
||||||
|
|
||||||
|
VSCODE_PORT=8400
|
||||||
|
YOURAPP_INSIDE_DOCKER_PORT=24000
|
||||||
|
PASSWORD=$(openssl rand -base64 45)
|
||||||
|
docker run \
|
||||||
|
-d \
|
||||||
|
--rm \
|
||||||
|
--gpus "device=0" \
|
||||||
|
-p ${VSCODE_PORT}:8443 \
|
||||||
|
-p ${YOURAPP_INSIDE_DOCKER_PORT}:443 \
|
||||||
|
-v $(pwd):/wd \
|
||||||
|
--shm-size=10gb \
|
||||||
|
--name ${USER}_${CURDIRNAME}_vscode \
|
||||||
|
-e PASSWORD="${PASSWORD}" \
|
||||||
|
${USER}_${CURDIRNAME}_vscode \
|
||||||
|
code-server
|
||||||
|
sleep 1
|
||||||
|
docker logs ${USER}_${CURDIRNAME}_vscode
|
||||||
|
echo ""
|
||||||
|
echo "Address: https://$(hostname -i | awk '{ print $1; }'):${VSCODE_PORT}"
|
||||||
|
echo "Password: $PASSWORD"
|
||||||
|
echo ""
|
||||||
|
echo "You can use this port for application you develop: $YOURAPP_INSIDE_DOCKER_PORT"
|
Loading…
Reference in New Issue