Skip to content

Instantly share code, notes, and snippets.

@jessenich
Last active November 8, 2022 18:04
Show Gist options
  • Save jessenich/7fc97570ddd91b5e88aa4c4f1298691e to your computer and use it in GitHub Desktop.
Save jessenich/7fc97570ddd91b5e88aa4c4f1298691e to your computer and use it in GitHub Desktop.
Linux Installs with Debian, Ubuntu, and Alpine Support
#!/bin/sh
if [ ! -f /etc/os-release ]; then
echo "Unable to determine ditribution" >&2
exit 1;
fi
. /etc/os-release
export NAME VERSION ID PRETTY_NAME
COMMON_PACKAGES="bash zsh curl man-db jq wget sudo moreutils"
COMMON_DOC_PACKAGES="bash-doc zsh-doc"
case "$ID" in
debian || ubuntu)
apt-get update && apt-get upgrade -y;
apt-get install -y "$COMMON_PACKAGES" "$COMMON_DOC_PACKAGES";
;;
alpine)
apk update && apk upgrade;
apk add "$COMMON_PACKAGES" shadow "$COMMON_DOC_PACKAGES" man-db-doc curl-doc jq-doc wget-doc sudo-doc moreutils-doc;
;;
*)
echo "Distributions not supported yet" >&2;
exit 1;
;;
esac
SUDO="$(command -v sudo || echo '')"
function __install_gh_cli() {
if command -v gh > /dev/null; then
echo "gh is already installed. Skipping..."
return 0
fi
case "$ID" in
debian || ubuntu)
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | "$SUDO" sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \
&& "$SUDO" chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | "$SUDO" tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& "$SUDO" apt-get update \
&& "$SUDO" apt-get install gh -y
;;
alpine)
apk update && apk add github-cli;
;;
*)
echo "Distributions not supported yet" >&2;
return 1;
;;
esac
}
function __install_docker() {
if command -v docker > /dev/null; then
echo "docker is already installed. Skipping..."
return 0
fi
echo "Installing docker..."
curl -sSL https://get.docker.com | "$SUDO" sh
}
function __install-docker-bash-completion() {
if [[ -f /etc/bash_completion.d/docker ]]; then
echo "docker completions already installed. Skipping..."
return 0
fi
echo "Installing docker-bash-completion..."
"$SUDO" curl -fsSL \
https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker \
-o /etc/bash_completion.d/docker
}
function __install-docker-zsh-completion() {
if [[ -f /usr/share/zsh/vendor-completions/_docker ]]; then
echo "docker completions already installed. Skipping..."
return 0
fi
echo "Installing docker-zsh-completion..."
"$SUDO" curl -fsSL \
https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/zsh/_docker \
-o /usr/share/zsh/vendor-completions/_docker
}
function __alias-docker-compose() {
if ! command -v docker-compose >/dev/null && docker compose >/dev/null 2>&1; then
ALIAS_CMD='alias docker-compose="docker compose"';
eval "$ALIAS_CMD" && \
echo "$ALIAS_CMD" | \
tee -a ~/.bashrc | \
tee -a ~/.zshrc >/dev/null;
fi
}
function __install-docker-compose() {
__alias-docker-compose
if command -v docker-compose >/dev/null; then
echo "docker-compose is already installed. Skipping..."
return 0
fi
echo "Installing docker-compose..."
COMPOSE_VERSION="$(curl -fsSL \
-H "Accept: application/vnd.github+json" \
https://api.github.com/repos/docker/compose/releases/latest | \
jq .tag_name || echo -1)"
if [ "$COMPOSE_VERSION" = "-1" ]; then
echo "Failed to find latest docker compose version" >&2;
return -1;
fi
"$SUDO" curl -fsSL \
"https://github.com/docker/compose/releases/download/$COMPOSE_VERSION/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
"$SUDO" chmod +x /usr/local/bin/docker-compose
}
function __install-docker-compose-bash-completions() {
__alias-docker-compose
if command -v bash >/dev/null; then
echo "Setting up bash completions for docker CLI..."
"$SUDO" mkdir -p /etc/bash_completion.d
"$SUDO" curl -fsSL \
https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose \
-o /etc/bash_completion.d/docker-compose
fi
}
function __install-docker-compose-zsh-completions-no-plugins() {
__alias-docker-compose
if command -v zsh >/dev/null && command -v docker-compose; then
"$SUDO" curl -fsSL \
https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/zsh/_docker-compose \
-o /usr/share/zsh/vendor-completions/_docker-compose
fi
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment