Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c7c21e8
commit 5211cb0
Showing
23 changed files
with
2,764 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
#------------------------------------------------------------------------------------------------------------- | ||
# Modified from Codespaces default container image: https://github.com/microsoft/vscode-dev-containers/blob/main/containers/codespaces-linux/history/1.6.3.md | ||
# - Remove PHP, Ruby, Dotnet, Java, powershell, rust dependencies | ||
# - Remove fish shell | ||
# - Remove Oryx | ||
# - Remove git-lfs | ||
# - Change shell to zsh | ||
# | ||
# TODO (dans): find a better way to pull in library script dynamically from vscode repo | ||
# TODO (dans): AWS CLI - make a common script in the dev-containers repo | ||
# TODO (dans): Gcloud CLI - make a common script in the dev-containers repo | ||
# TODO (dans): add gcommands alias | ||
# TODO (dans): terraform | ||
#------------------------------------------------------------------------------------------------------------- | ||
FROM mcr.microsoft.com/oryx/build:vso-focal-20210902.1 as replicated | ||
|
||
ARG USERNAME=codespace | ||
ARG USER_UID=1000 | ||
ARG USER_GID=$USER_UID | ||
ARG HOMEDIR=/home/$USERNAME | ||
|
||
ARG GO_VERSION="latest" | ||
|
||
# Default to bash shell (other shells available at /usr/bin/fish and /usr/bin/zsh) | ||
ENV SHELL=/bin/bash \ | ||
ORYX_ENV_TYPE=vsonline-present \ | ||
NODE_ROOT="${HOMEDIR}/.nodejs" \ | ||
PYTHON_ROOT="${HOMEDIR}/.python" \ | ||
HUGO_ROOT="${HOMEDIR}/.hugo" \ | ||
NVM_SYMLINK_CURRENT=true \ | ||
NVM_DIR="/home/${USERNAME}/.nvm" \ | ||
NVS_HOME="/home/${USERNAME}/.nvs" \ | ||
NPM_GLOBAL="/home/${USERNAME}/.npm-global" \ | ||
KREW_HOME="/home/${USERNAME}/.krew/bin" \ | ||
PIPX_HOME="/usr/local/py-utils" \ | ||
PIPX_BIN_DIR="/usr/local/py-utils/bin" \ | ||
GOROOT="/usr/local/go" \ | ||
GOPATH="/go" | ||
|
||
ENV PATH="${PATH}:${KREW_HOME}:${NVM_DIR}/current/bin:${NPM_GLOBAL}/bin:${ORIGINAL_PATH}:${GOROOT}/bin:${GOPATH}/bin:${PIPX_BIN_DIR}:/opt/conda/condabin:${NODE_ROOT}/current/bin:${PYTHON_ROOT}/current/bin:${HUGO_ROOT}/current/bin:${ORYX_PATHS}" | ||
|
||
COPY library-scripts/* first-run-notice.txt /tmp/scripts/ | ||
COPY ./config/* /etc/replicated/ | ||
COPY ./lifecycle-scripts/* /var/lib/replicated/scripts/ | ||
|
||
# Install needed utilities and setup non-root user. Use a separate RUN statement to add your own dependencies. | ||
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ | ||
# Restore man command | ||
&& yes | unminimize 2>&1 \ | ||
# Run common script and setup user | ||
&& bash /tmp/scripts/common-debian.sh "true" "${USERNAME}" "${USER_UID}" "${USER_GID}" "true" "true" "true" \ | ||
&& bash /tmp/scripts/setup-user.sh "${USERNAME}" "${PATH}" \ | ||
# Change owner of opt contents since Oryx can dynamically install and will run as "codespace" | ||
&& chown ${USERNAME} /opt/* \ | ||
&& chsh -s /bin/bash ${USERNAME} \ | ||
# Verify expected build and debug tools are present | ||
&& apt-get -y install build-essential cmake python3-dev \ | ||
# Install tools and shells not in common script | ||
&& apt-get install -yq vim vim-doc xtail software-properties-common libsecret-1-dev \ | ||
# Install additional tools (useful for 'puppeteer' project) | ||
&& apt-get install -y --no-install-recommends libnss3 libnspr4 libatk-bridge2.0-0 libatk1.0-0 libx11-6 libpangocairo-1.0-0 \ | ||
libx11-xcb1 libcups2 libxcomposite1 libxdamage1 libxfixes3 libpango-1.0-0 libgbm1 libgtk-3-0 \ | ||
&& bash /tmp/scripts/sshd-debian.sh \ | ||
&& bash /tmp/scripts/github-debian.sh \ | ||
&& bash /tmp/scripts/azcli-debian.sh \ | ||
# Install Moby CLI and Engine | ||
&& /bin/bash /tmp/scripts/docker-debian.sh "true" "/var/run/docker-host.sock" "/var/run/docker.sock" "${USERNAME}" "true" \ | ||
# && bash /tmp/scripts/docker-in-docker-debian.sh "true" "${USERNAME}" "true" \ | ||
&& bash /tmp/scripts/kubectl-helm-debian.sh \ | ||
# Build latest git from source | ||
&& bash /tmp/scripts/git-from-src-debian.sh "latest" \ | ||
# Clean up | ||
&& apt-get autoremove -y && apt-get clean -y \ | ||
# Move first run notice to right spot | ||
&& mkdir -p /usr/local/etc/vscode-dev-containers/ \ | ||
&& mv -f /tmp/scripts/first-run-notice.txt /usr/local/etc/vscode-dev-containers/ | ||
|
||
# Install Python | ||
RUN bash /tmp/scripts/python-debian.sh "none" "/opt/python/latest" "${PIPX_HOME}" "${USERNAME}" "true" \ | ||
&& apt-get clean -y | ||
|
||
# Setup Node.js, install NVM and NVS | ||
RUN bash /tmp/scripts/node-debian.sh "${NVM_DIR}" "none" "${USERNAME}" \ | ||
&& (cd ${NVM_DIR} && git remote get-url origin && echo $(git log -n 1 --pretty=format:%H -- .)) > ${NVM_DIR}/.git-remote-and-commit \ | ||
# Install nvs (alternate cross-platform Node.js version-management tool) | ||
&& sudo -u ${USERNAME} git clone -c advice.detachedHead=false --depth 1 https://github.com/jasongin/nvs ${NVS_HOME} 2>&1 \ | ||
&& (cd ${NVS_HOME} && git remote get-url origin && echo $(git log -n 1 --pretty=format:%H -- .)) > ${NVS_HOME}/.git-remote-and-commit \ | ||
&& sudo -u ${USERNAME} bash ${NVS_HOME}/nvs.sh install \ | ||
&& rm ${NVS_HOME}/cache/* \ | ||
# Set npm global location | ||
&& sudo -u ${USERNAME} npm config set prefix ${NPM_GLOBAL} \ | ||
&& npm config -g set prefix ${NPM_GLOBAL} \ | ||
# Clean up | ||
&& rm -rf ${NVM_DIR}/.git ${NVS_HOME}/.git | ||
|
||
# Install Go | ||
RUN bash /tmp/scripts/go-debian.sh "${GO_VERSION}" "${GOROOT}" "${GOPATH}" "${USERNAME}" | ||
|
||
# Install Replicated Tools | ||
RUN bash /tmp/scripts/replicated-debian.sh \ | ||
&& rm -rf /tmp/scripts \ | ||
&& apt-get clean -y | ||
|
||
# Userspace | ||
ENV SHELL=/bin/zsh | ||
USER ${USERNAME} | ||
COPY --chown=${USERNAME}:root library-scripts/replicated-userspace.sh /tmp/scripts/ | ||
RUN bash /usr/local/share/docker-init.sh \ | ||
&& bash /tmp/scripts/replicated-userspace.sh \ | ||
&& rm -rf /tmp/scripts/scripts | ||
|
||
# Fire Docker/Moby script if needed along with Oryx's benv | ||
ENTRYPOINT [ "/usr/local/share/docker-init.sh", "/usr/local/share/ssh-init.sh", "benv" ] | ||
CMD [ "sleep", "infinity" ] | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
# Replicated KOTS Codespace Container | ||
|
||
Most of the code here is borrowed from this [Microsoft repo of base images](https://github.com/microsoft/vscode-dev-containers), except for replicated specific things. | ||
|
||
## Notes | ||
* k3d *DOES NOT* work with DinD. You have to use the docker with docker install instead. | ||
* Might be faster to install kubectl plugins on the `$PATH` in the `Dockerfile` instead of downloading them `onCreate.sh`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
apiVersion: k3d.io/v1alpha3 | ||
kind: Simple | ||
name: replicated | ||
servers: 1 | ||
image: rancher/k3s:v1.21.4-k3s1 # v1.21.3-k3s1 default is broken | ||
registries: | ||
create: | ||
name: k3d-replicated-registry.localhost | ||
host: "0.0.0.0" | ||
hostPort: "5000" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: | ||
// https://github.com/microsoft/vscode-dev-containers/tree/v0.162.0/containers/javascript-node | ||
{ | ||
"name": "Replicated Codeserver", | ||
"build": { | ||
"dockerfile": "Dockerfile", | ||
"args": { | ||
"GO_VERSION": "1.16", | ||
} | ||
}, | ||
|
||
// Set *default* container specific settings.json values on container create. | ||
"settings": { | ||
"terminal.integrated.shell.linux": "/usr/bin/zsh", | ||
"go.toolsManagement.checkForUpdates": "local", | ||
"go.useLanguageServer": true, | ||
"go.gopath": "/go", | ||
"go.goroot": "/usr/local/go", | ||
"python.pythonPath": "/opt/python/latest/bin/python", | ||
"python.linting.enabled": true, | ||
"python.linting.pylintEnabled": true, | ||
"python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8", | ||
"python.formatting.blackPath": "/usr/local/py-utils/bin/black", | ||
"python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf", | ||
"python.linting.banditPath": "/usr/local/py-utils/bin/bandit", | ||
"python.linting.flake8Path": "/usr/local/py-utils/bin/flake8", | ||
"python.linting.mypyPath": "/usr/local/py-utils/bin/mypy", | ||
"python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle", | ||
"python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle", | ||
"python.linting.pylintPath": "/usr/local/py-utils/bin/pylint", | ||
"lldb.executable": "/usr/bin/lldb", | ||
"files.watcherExclude": { | ||
"**/target/**": true | ||
} | ||
}, | ||
"remoteUser": "codespace", | ||
"overrideCommand": false, | ||
"runArgs": [ | ||
"--privileged", | ||
"--init" | ||
], | ||
"mounts": [ | ||
"source=/var/run/docker.sock,target=/var/run/docker-host.sock,type=bind", | ||
], | ||
// Add the IDs of extensions you want installed when the container is created. | ||
"extensions": [ | ||
"dbaeumer.vscode-eslint", | ||
"GitHub.vscode-pull-request-github", | ||
"golang.go", | ||
"github.copilot", | ||
"lizebang.bash-extension-pack", | ||
"streetsidesoftware.code-spell-checker", | ||
], | ||
|
||
// Use 'postCreateCommand' to run commands after the container is created. | ||
"postCreateCommand": "bash /var/lib/replicated/scripts/onCreate.sh", | ||
|
||
// Use 'postStartCommand' to run commands after the container is created like starting minikube. | ||
"postStartCommand": "bash /var/lib/replicated/scripts/onStart.sh", | ||
|
||
// Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. | ||
// "remoteUser": "node" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
👋 Welcome to your Replicated Codespace! | ||
|
||
There's a local Kubernetes cluster set up for you. | ||
|
||
Drivers Manual: | ||
* `k` alias is available for `kubectl` with auto-completion for your pleasure | ||
* This is a `zsh` terminal with Oh My Zsh installed. Just thought you should know. | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
#!/usr/bin/env bash | ||
#------------------------------------------------------------------------------------------------------------- | ||
# Copyright (c) Microsoft Corporation. All rights reserved. | ||
# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information. | ||
#------------------------------------------------------------------------------------------------------------- | ||
# | ||
# Docs: https://github.com/microsoft/vscode-dev-containers/blob/main/script-library/docs/azcli.md | ||
# Maintainer: The VS Code and Codespaces Teams | ||
# | ||
# Syntax: ./azcli-debian.sh | ||
|
||
set -e | ||
|
||
MICROSOFT_GPG_KEYS_URI="https://packages.microsoft.com/keys/microsoft.asc" | ||
|
||
if [ "$(id -u)" -ne 0 ]; then | ||
echo -e 'Script must be run as root. Use sudo, su, or add "USER root" to your Dockerfile before running this script.' | ||
exit 1 | ||
fi | ||
|
||
# Get central common setting | ||
get_common_setting() { | ||
if [ "${common_settings_file_loaded}" != "true" ]; then | ||
curl -sfL "https://aka.ms/vscode-dev-containers/script-library/settings.env" 2>/dev/null -o /tmp/vsdc-settings.env || echo "Could not download settings file. Skipping." | ||
common_settings_file_loaded=true | ||
fi | ||
if [ -f "/tmp/vsdc-settings.env" ]; then | ||
local multi_line="" | ||
if [ "$2" = "true" ]; then multi_line="-z"; fi | ||
local result="$(grep ${multi_line} -oP "$1=\"?\K[^\"]+" /tmp/vsdc-settings.env | tr -d '\0')" | ||
if [ ! -z "${result}" ]; then declare -g $1="${result}"; fi | ||
fi | ||
echo "$1=${!1}" | ||
} | ||
|
||
# Function to run apt-get if needed | ||
apt_get_update_if_needed() | ||
{ | ||
if [ ! -d "/var/lib/apt/lists" ] || [ "$(ls /var/lib/apt/lists/ | wc -l)" = "0" ]; then | ||
echo "Running apt-get update..." | ||
apt-get update | ||
else | ||
echo "Skipping apt-get update." | ||
fi | ||
} | ||
|
||
# Checks if packages are installed and installs them if not | ||
check_packages() { | ||
if ! dpkg -s "$@" > /dev/null 2>&1; then | ||
apt_get_update_if_needed | ||
apt-get -y install --no-install-recommends "$@" | ||
fi | ||
} | ||
|
||
export DEBIAN_FRONTEND=noninteractive | ||
|
||
# Install dependencies | ||
check_packages apt-transport-https curl ca-certificates lsb-release gnupg2 | ||
|
||
# Import key safely (new 'signed-by' method rather than deprecated apt-key approach) and install | ||
. /etc/os-release | ||
get_common_setting MICROSOFT_GPG_KEYS_URI | ||
curl -sSL ${MICROSOFT_GPG_KEYS_URI} | gpg --dearmor > /usr/share/keyrings/microsoft-archive-keyring.gpg | ||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/repos/azure-cli/ ${VERSION_CODENAME} main" > /etc/apt/sources.list.d/azure-cli.list | ||
apt-get update | ||
apt-get install -y azure-cli | ||
echo "Done!" |
Oops, something went wrong.