Add python and ruby library scripts (CI Ignore)
This commit is contained in:
Родитель
c879f870ed
Коммит
6bad476be6
|
@ -0,0 +1,115 @@
|
|||
#!/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.
|
||||
#-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
# Syntax: ./python-debian.sh [Python Version] [Python intall path] [PIPX_HOME] [non-root user] [Update rc files flag] [install tools]
|
||||
|
||||
PYTHON_VERSION=${1:-"3.8.3"}
|
||||
PYTHON_INSTALL_PATH=${2:-"/usr/local/python${PYTHON_VERSION}"}
|
||||
export PIPX_HOME=${3:-"/usr/local/py-utils"}
|
||||
USERNAME=${4:-"vscode"}
|
||||
UPDATE_RC=${5:-"true"}
|
||||
INSTALL_PYTHON_TOOLS=${6:-"true"}
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
echo -e 'Script must be run a root. Use sudo, su, or add "USER root" to your Dockerfile before running this script.'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Treat a user name of "none" or non-existant user as root
|
||||
if [ "${USERNAME}" = "none" ] || ! id -u ${USERNAME} > /dev/null 2>&1; then
|
||||
USERNAME=root
|
||||
fi
|
||||
|
||||
function updaterc() {
|
||||
if [ "${UPDATE_RC}" = "true" ]; then
|
||||
RC_SNIPPET="$1"
|
||||
echo -e ${RC_SNIPPET} | tee -a /root/.bashrc /root/.zshrc >> /etc/skel/.bashrc
|
||||
if [ "${USERNAME}" != "root" ]; then
|
||||
echo -e ${RC_SNIPPET} | tee -a /home/${USERNAME}/.bashrc >> /home/${USERNAME}/.zshrc
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Install python from source if needed
|
||||
if [ "${PYTHON_VERSION}" != "none" ]; then
|
||||
|
||||
if [ -d "${PYTHON_INSTALL_PATH}" ]; then
|
||||
echo "Path ${PYTHON_INSTALL_PATH} already exists. Assuming Python already installed."
|
||||
else
|
||||
echo "Building Python ${PYTHON_VERSION} from source..."
|
||||
# Install prereqs if missing
|
||||
PREREQ_PKGS="curl ca-certificates tar make build-essential libffi-dev \
|
||||
libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
|
||||
libncurses5-dev libncursesw5-dev xz-utils tk-dev"
|
||||
if ! dpkg -s ${PREREQ_PKGS} > /dev/null 2>&1; then
|
||||
if [ ! -d "/var/lib/apt/lists" ] || [ "$(ls /var/lib/apt/lists/ | wc -l)" = "0" ]; then
|
||||
apt-get update
|
||||
fi
|
||||
apt-get -y install --no-install-recommends ${PREREQ_PKGS}
|
||||
fi
|
||||
|
||||
# Download and build from src
|
||||
mkdir -p /tmp/python-src "${PYTHON_INSTALL_PATH}"
|
||||
cd /tmp/python-src
|
||||
curl -sSL -o /tmp/python-dl.tgz "https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz"
|
||||
tar -xzf /tmp/python-dl.tgz -C "/tmp/python-src" --strip-components=1
|
||||
./configure --prefix="${PYTHON_INSTALL_PATH}" --enable-optimizations --with-ensurepip=install
|
||||
make -j 8
|
||||
make install
|
||||
rm -rf /tmp/python-dl.tgz /tmp/python-src
|
||||
cd /tmp
|
||||
chown -R ${USERNAME} "${PYTHON_INSTALL_PATH}"
|
||||
ln -s ${PYTHON_INSTALL_PATH}/bin/python3 ${PYTHON_INSTALL_PATH}/bin/python
|
||||
ln -s ${PYTHON_INSTALL_PATH}/bin/pip3 ${PYTHON_INSTALL_PATH}/bin/pip
|
||||
ln -s ${PYTHON_INSTALL_PATH}/bin/idle3 ${PYTHON_INSTALL_PATH}/bin/idle
|
||||
ln -s ${PYTHON_INSTALL_PATH}/bin/pydoc3 ${PYTHON_INSTALL_PATH}/bin/pydoc
|
||||
ln -s ${PYTHON_INSTALL_PATH}/bin/python3-config ${PYTHON_INSTALL_PATH}/bin/python-config
|
||||
updaterc "export PATH=${PYTHON_INSTALL_PATH}/bin:\${PATH}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# If not installing python tools, exit
|
||||
if [ "${INSTALL_PYTHON_TOOLS}" != "true" ]; then
|
||||
echo "Done!"
|
||||
exit 0;
|
||||
fi
|
||||
|
||||
DEFAULT_UTILS="\
|
||||
pylint \
|
||||
flake8 \
|
||||
autopep8 \
|
||||
black \
|
||||
yapf \
|
||||
mypy \
|
||||
pydocstyle \
|
||||
pycodestyle \
|
||||
bandit \
|
||||
pipenv \
|
||||
virtualenv"
|
||||
|
||||
export PIPX_BIN_DIR=${PIPX_HOME}/bin
|
||||
export PATH=${PYTHON_INSTALL_PATH}/bin:${PIPX_BIN_DIR}:${PATH}
|
||||
mkdir -p ${PIPX_BIN_DIR}
|
||||
chown -R ${USERNAME} ${PIPX_HOME} ${PIPX_BIN_DIR}
|
||||
su ${USERNAME} -c "$(cat << EOF
|
||||
set -e
|
||||
echo "Installing Python tools..."
|
||||
export PIPX_HOME=${PIPX_HOME}
|
||||
export PIPX_BIN_DIR=${PIPX_BIN_DIR}
|
||||
export PYTHONUSERBASE=/tmp/pip-tmp
|
||||
export PATH=${PATH}
|
||||
pip3 install --disable-pip-version-check --no-warn-script-location --no-cache-dir --user pipx
|
||||
/tmp/pip-tmp/bin/pipx install --pip-args=--no-cache-dir pipx
|
||||
echo "${DEFAULT_UTILS}" | xargs -n 1 /tmp/pip-tmp/bin/pipx install --system-site-packages --pip-args=--no-cache-dir --pip-args=--force-reinstall
|
||||
chown -R ${USERNAME} ${PIPX_HOME}
|
||||
rm -rf /tmp/pip-tmp
|
||||
EOF
|
||||
)"
|
||||
updaterc "export PIPX_HOME=${PIPX_HOME}\nexport PIPX_BIN_DIR=${PIPX_BIN_DIR}\nexport PATH=\${PATH}:\${PIPX_BIN_DIR}"
|
|
@ -0,0 +1,62 @@
|
|||
#!/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.
|
||||
#-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
# Syntax: ./ruby-debian.sh [Ruby version] [non-root user] [Add rvm to rc files flag]
|
||||
|
||||
RUBY_VERSION=${1:-"stable"}
|
||||
USERNAME=${2:-"vscode"}
|
||||
UPDATE_RC=${3:-"true"}
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
echo -e 'Script must be run a root. Use sudo, su, or add "USER root" to your Dockerfile before running this script.'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Treat a user name of "none" or non-existant user as root
|
||||
if [ "${USERNAME}" = "none" ] || ! id -u ${USERNAME} > /dev/null 2>&1; then
|
||||
USERNAME=root
|
||||
fi
|
||||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Install curl, software-properties-common if missing
|
||||
if ! dpkg -s curl ca-certificates software-properties-common > /dev/null 2>&1; then
|
||||
if [ ! -d "/var/lib/apt/lists" ] || [ "$(ls /var/lib/apt/lists/ | wc -l)" = "0" ]; then
|
||||
apt-get update
|
||||
fi
|
||||
apt-get -y install --no-install-recommends curl ca-certificates software-properties-common
|
||||
fi
|
||||
|
||||
# Just install Ruby if RVM already installed
|
||||
if [ -d "/usr/local/rvm" ]; then
|
||||
echo "Ruby Version Manager already exists. Installing specified Ruby version."
|
||||
su ${USERNAME} -c "source /usr/local/rvm/scripts/rvm && rvm install ${RUBY_VERSION}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Use a temporary locaiton for gpg keys to avoid polluting image
|
||||
export GNUPGHOME="/tmp/rvm-gnupg"
|
||||
mkdir -p ${GNUPGHOME}
|
||||
echo "disable-ipv6" >> ${GNUPGHOME}/dirmngr.conf
|
||||
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB 2>&1 \
|
||||
|
||||
# Install RVM
|
||||
curl -sSL https://get.rvm.io | bash -s "${RUBY_VERSION}" --ruby --with-default-gems="rake ruby-debug-ide debase" 2>&1
|
||||
usermod -aG rvm ${USERNAME}
|
||||
su ${USERNAME} -c "source /usr/local/rvm/scripts/rvm && rvm fix-permissions system"
|
||||
rm -rf ${GNUPGHOME} \
|
||||
|
||||
# Add sourcing of rvm into bashrc/zshrc files (unless disabled)
|
||||
if [ "${UPDATE_RC}" = "true" ]; then
|
||||
RC_SNIPPET="source /usr/local/rvm/scripts/rvm"
|
||||
echo -e ${RC_SNIPPET} | tee -a /root/.bashrc /root/.zshrc >> /etc/skel/.bashrc
|
||||
if [ "${USERNAME}" != "root" ]; then
|
||||
echo -e ${RC_SNIPPET} | tee -a /home/${USERNAME}/.bashrc >> /home/${USERNAME}/.zshrc
|
||||
fi
|
||||
fi
|
||||
echo "Done!"
|
|
@ -35,12 +35,14 @@ if [ "${DISTRO}" = "debian" ]; then
|
|||
runScript ${SCRIPT_DIR}/git-lfs-${DISTRO}.sh
|
||||
runScript ${SCRIPT_DIR}/github-${DISTRO}.sh
|
||||
runScript ${SCRIPT_DIR}/go-${DISTRO}.sh "1.14 /opt/go /go ${USERNAME} false"
|
||||
runScript ${SCRIPT_DIR}/gradle-${DISTRO}.sh "/usr/local/share/gradle ${USERNAME} 7bdbad1e4f54f13c8a78abc00c26d44dd8709d4aedb704d913fb1bb78ac025dc" "5.4.1"
|
||||
runScript ${SCRIPT_DIR}/java-${DISTRO}.sh "8 /usr/local/share/java ${USERNAME} false"
|
||||
runScript ${SCRIPT_DIR}/gradle-${DISTRO}.sh "4.4 /usr/local/sdkman1 ${USERNAME} false"
|
||||
runScript ${SCRIPT_DIR}/java-${DISTRO}.sh "13.0.2.j9-adpt /usr/local/sdkman2 ${USERNAME} false"
|
||||
runScript ${SCRIPT_DIR}/kubectl-helm-${DISTRO}.sh
|
||||
runScript ${SCRIPT_DIR}/maven-${DISTRO}.sh "/usr/local/share/maven ${USERNAME} c35a1803a6e70a126e80b2b3ae33eed961f83ed74d18fcd16909b2d44d7dada3203f1ffe726c17ef8dcca2dcaa9fca676987befeadc9b9f759967a8cb77181c0" "3.6.3"
|
||||
runScript ${SCRIPT_DIR}/maven-${DISTRO}.sh "3.6.3 /usr/local/sdkman3 ${USERNAME} false"
|
||||
runScript ${SCRIPT_DIR}/node-${DISTRO}.sh "/usr/local/share/nvm 10 ${USERNAME}"
|
||||
runScript ${SCRIPT_DIR}/powershell-${DISTRO}.sh
|
||||
runScript ${SCRIPT_DIR}/python-${DISTRO}.sh "3.4.10 /opt/python ${USERNAME} false false"
|
||||
runScript ${SCRIPT_DIR}/ruby-${DISTRO}.sh "2.5 ${USERNAME} false"
|
||||
runScript ${SCRIPT_DIR}/rust-${DISTRO}.sh "/opt/rust/cargo /opt/rust/rustup ${USERNAME} false"
|
||||
runScript ${SCRIPT_DIR}/terraform-${DISTRO}.sh "0.12.16" "0.8.2"
|
||||
fi
|
||||
|
|
Загрузка…
Ссылка в новой задаче