Skip to content

Instantly share code, notes, and snippets.

@shripadk
Last active March 28, 2024 04:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shripadk/9d8db539e3d030579b81763549bb1a20 to your computer and use it in GitHub Desktop.
Save shripadk/9d8db539e3d030579b81763549bb1a20 to your computer and use it in GitHub Desktop.
Installing DigitalOcean Metrics Agent for Oracle Linux

Just run the following command in your Terminal to install the Agent:

curl -sSL https://gist.githubusercontent.com/shripadk/9d8db539e3d030579b81763549bb1a20/raw/d12a8ac8bd2941f8d02bc28a6ed5a90c22ef1433/install.sh | sudo bash
#!/bin/bash
#
# This script is meant for quick & easy install via:
# curl -sSL https://repos.insights.digitalocean.com/install.sh | sudo bash
# or:
# wget -qO- https://repos.insights.digitalocean.com/install.sh | sudo bash
#
# To use the BETA branch of do-agent pass the BETA=1 flag to the script
# curl -sSL https://repos.insights.digitalocean.com/install.sh | sudo BETA=1 bash
#
# vim: noexpandtab
set -ueo pipefail
UNSTABLE=${UNSTABLE:-0}
BETA=${BETA:-0}
REPO_HOST=https://repos.insights.digitalocean.com
REPO_GPG_KEY=${REPO_HOST}/sonar-agent.asc
repo="do-agent"
[ "${UNSTABLE}" != 0 ] && repo="do-agent-unstable"
[ "${BETA}" != 0 ] && repo="do-agent-beta"
dist="unknown"
deb_list=/etc/apt/sources.list.d/digitalocean-agent.list
deb_keyfile=/usr/share/keyrings/digitalocean-agent-keyring.gpg
rpm_repo=/etc/yum.repos.d/digitalocean-agent.repo
function main() {
[ "$(id -u)" != "0" ] && \
abort "This script must be executed as root."
clean
check_do
check_dist
case "${dist}" in
debian|ubuntu)
install_apt
;;
centos|cloudlinux|fedora|almalinux|rocky|ol)
install_rpm
;;
*)
not_supported
;;
esac
}
function wait_for_apt() {
while fuser /var/{lib/{dpkg,apt/lists},cache/apt/archives}/lock >/dev/null 2>&1; do
echo "Waiting on apt.."
sleep 2
done
}
function install_apt() {
export DEBIAN_FRONTEND=noninteractive
# forcefully remove any existing installations
wait_for_apt && ( apt-get purge -y do-agent >/dev/null 2>&1 || : )
echo "Installing apt repository..."
wait_for_apt && ( apt-get -qq update || true )
wait_for_apt && apt-get -qq install -y ca-certificates gnupg2 apt-utils apt-transport-https curl
echo "deb [signed-by=${deb_keyfile}] ${REPO_HOST}/apt/${repo} main main" >"${deb_list}"
echo -n "Installing gpg key..."
curl -sL "${REPO_GPG_KEY}" | gpg --dearmor >"${deb_keyfile}"
wait_for_apt && apt-get -qq update -o Dir::Etc::SourceParts=/dev/null -o APT::Get::List-Cleanup=no -o Dir::Etc::SourceList="sources.list.d/digitalocean-agent.list"
wait_for_apt && apt-get -qq install -y do-agent
}
function install_rpm() {
echo "Installing yum repository..."
# forcefully remove any existing installations
yum remove -y do-agent || :
yum install -y gpgme ca-certificates
cat <<-EOF > /etc/yum.repos.d/digitalocean-agent.repo
[digitalocean-agent]
name=DigitalOcean Agent
baseurl=${REPO_HOST}/yum/${repo}/\$basearch
repo_gpgcheck=0
gpgcheck=1
enabled=1
gpgkey=${REPO_GPG_KEY}
sslverify=0
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOF
yum --disablerepo="*" --enablerepo="digitalocean-agent" makecache
yum install -y do-agent
}
function clean() {
echo -n "Cleaning up old sources..."
if [ -f "$deb_list" ]; then
rm -f "${deb_list}"
elif [ -f "$rpm_repo" ]; then
rm -f "${rpm_repo}"
fi
echo "OK"
}
function check_dist() {
echo -n "Verifying compatibility with script..."
if [ -f /etc/os-release ]; then
dist=$(awk -F= '$1 == "ID" {gsub("\"", ""); print$2}' /etc/os-release)
elif [ -f /etc/redhat-release ]; then
dist=$(awk '{print tolower($1)}' /etc/redhat-release)
else
not_supported
fi
dist=$(echo "${dist}" | tr '[:upper:]' '[:lower:]')
case "${dist}" in
debian|ubuntu|centos|fedora|rocky|ol)
echo "OK"
;;
cloudlinux|almalinux)
echo "WARN ${dist} is not officially supported. Attempting RPM install"
;;
*)
not_supported
;;
esac
}
function check_do() {
echo -n "Verifying machine compatibility..."
# DigitalOcean embedded platform information in the DMI data.
read -r sys_vendor < /sys/devices/virtual/dmi/id/bios_vendor
if ! [ "$sys_vendor" = "DigitalOcean" ]; then
cat <<-EOF
The DigitalOcean Agent is only supported on DigitalOcean machines.
If you are seeing this message on an older droplet, you may need to power-off
and then power-on at http://cloud.digitalocean.com. After power-cycling,
please re-run this script.
EOF
exit 1
fi
echo "OK"
}
function not_supported() {
cat <<-EOF
This script does not support the OS/Distribution on this machine.
If you feel that this is an error contact support@digitalocean.com
or create an issue at https://github.com/digitalocean/do-agent/issues/new.
EOF
exit 1
}
# abort with an error message
function abort() {
read -r line func file <<< "$(caller 0)"
echo "ERROR in $file:$func:$line: $1" > /dev/stderr
exit 1
}
# leave this last to prevent any partial execution
main
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment