Trying to install glances to pve9 - urllib3 problem

fribse

Member
Feb 2, 2022
13
1
8
57
Hi All

I did a completely painless update from pve 8 to 9 the other day.
Or at least I thought so :)
Now I see that glances that I had installed on the host, is defunct.

So I tried doing a new install on debian 13, but when I do that I get this message:
Code:
  Attempting uninstall: urllib3

    Found existing installation: urllib3 2.3.0
error: uninstall-no-record-file
× Cannot uninstall urllib3 2.3.0
╰─> The package's contents are unknown: no RECORD file was found for urllib3.
hint: The package was installed by debian. You should check if it can uninstall the package.
root@pve:~# apt remove urllib3
Error: Unable to locate package urllib3
root@pve:~# pip uninstall urllib3
Found existing installation: urllib3 2.3.0
error: uninstall-no-record-file
× Cannot uninstall urllib3 2.3.0
╰─> The package's contents are unknown: no RECORD file was found for urllib3.

hint: The package was installed by debian. You should check if it can uninstall the package.

So it complains that debian installed it, and it can't install it, but at the same time I get a message that it can't be found?
What to do?
 
Last edited:
I tried installing it with
Code:
pip install glances[all]

If I do the
Code:
apt install glances
then I get a message that the file doesn't exist:
Code:
glances.service: Failed at step EXEC spawning /usr/local/bin/glances: No such file or directory

I can see the files in usr/bin/glances, so it's a bit weird.
 
Last edited:
That's because you have an old service unit for the one you compiled yourself (Debian never puts anything in /usr/local, that's strictly for the admin). I would uninstall both versions and reinstall the Debain one.

This is why you never install things manually if it can be helped.

ETA: Never having used glances I can't help with finding all of the things that got installed by "pip".
 
  • Like
Reactions: UdoB and Johannes S
Hi @BobhWasatch
Thankyou very much for your help.
Ahh, got it, it was so many years ago, so I had forgotten that I had made the service unit myself, so I uninstalled glances, purged it, did autoremove, removed the service unit, and then installed it again.
It starts now in servermode and localip, but if I ask it to start in webmode then I get these errors:
Aug 15 22:35:03 pve glances[430635]: ~~~~~~~~~~~~^^
Aug 15 22:35:03 pve glances[430635]: File "/usr/lib/python3/dist-packages/glances/outputs/glances_restful_api.py", line 285, in _router
Aug 15 22:35:03 pve glances[430635]: self._app.mount(self.url_prefix + '/static', StaticFiles(directory=self.STATIC_PATH), name="static")
Aug 15 22:35:03 pve glances[430635]: ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Aug 15 22:35:03 pve glances[430635]: File "/usr/lib/python3/dist-packages/starlette/staticfiles.py", line 56, in __init__
Aug 15 22:35:03 pve glances[430635]: raise RuntimeError(f"Directory '{directory}' does not exist")
Aug 15 22:35:03 pve glances[430635]: RuntimeError: Directory '/usr/lib/python3/dist-packages/glances/outputs/static/public' does not exist
Aug 15 22:35:05 pve systemd[1]: glances.service: Main process exited, code=exited, status=1/FAILURE
Aug 15 22:35:05 pve systemd[1]: glances.service: Failed with result 'exit-code'.
Aug 15 22:35:05 pve systemd[1]: glances.service: Consumed 439ms CPU time, 67.9M memory peak.

I know you didn't know glances, so I will investigate this further, now at least I can start it, now I just have to find out why the webinterface doesn't work.
 
Ahh, the package in debian is broken for the web version :-(
That is why I was directed to the pip3 install...
 
Ok, so removing everything again.
Then
pip3 install --upgrade glances[web]
pip3 install netifaces

Then I can make my service unit for that version
:)
 
Just for ppl running into problems with installing Glances on Proxmox 9

This solved it for me in ONE CLICK

Code:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/glances.sh)"

Source:
https://community-scripts.github.io/ProxmoxVE/scripts?id=glances

Just run in main PVE Shell or SSH whatever you prefer.

#!/usr/bin/env bash

# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) | MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
________
/ ____/ /___ _____ ________ _____
/ / __/ / __ `/ __ \/ ___/ _ \/ ___/
/ /_/ / / /_/ / / / / /__/ __(__ )
\____/_/\__,_/_/ /_/\___/\___/____/

EOF
}

APP="Glances"
YW=$(echo "\033[33m")
GN=$(echo "\033[1;92m")
RD=$(echo "\033[01;31m")
BL=$(echo "\033[36m")
CL=$(echo "\033[m")
CM="${GN}✔️${CL}"
CROSS="${RD}✖️${CL}"
INFO="${BL}ℹ️${CL}"

function msg_info() { echo -e "${INFO} ${YW}$1...${CL}"; }
function msg_ok() { echo -e "${CM} ${GN}$1${CL}"; }
function msg_error() { echo -e "${CROSS} ${RD}$1${CL}"; }

get_local_ip() {
if command -v hostname >/dev/null 2>&1 && hostname -I 2>/dev/null; then
hostname -I | awk '{print $1}'
elif command -v ip >/dev/null 2>&1; then
ip -4 addr show scope global | awk '/inet / {print $2}' | cut -d/ -f1 | head -n1
else
echo "127.0.0.1"
fi
}
IP=$(get_local_ip)

install_glances_debian() {
msg_info "Installing dependencies"
apt-get update >/dev/null 2>&1
apt-get install -y gcc lm-sensors wireless-tools >/dev/null 2>&1
msg_ok "Installed dependencies"

msg_info "Setting up Python + uv"
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/tools.func)
setup_uv PYTHON_VERSION="3.12"
msg_ok "Setup Python + uv"

msg_info "Installing $APP (with web UI)"
cd /opt
mkdir -p glances
cd glances
uv venv
source .venv/bin/activate >/dev/null 2>&1
uv pip install --upgrade pip wheel setuptools >/dev/null 2>&1
uv pip install "glances[web]" >/dev/null 2>&1
deactivate
msg_ok "Installed $APP"

msg_info "Creating systemd service"
cat <<EOF >/etc/systemd/system/glances.service
[Unit]
Description=Glances - An eye on your system
After=network.target

[Service]
Type=simple
ExecStart=/opt/glances/.venv/bin/glances -w
Restart=on-failure
WorkingDirectory=/opt/glances

[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now glances
msg_ok "Created systemd service"

echo -e "\n$APP is now running at: http://$IP:61208\n"
}

# update on Debian/Ubuntu
update_glances_debian() {
if [[ ! -d /opt/glances/.venv ]]; then
msg_error "$APP is not installed"
exit 1
fi
msg_info "Updating $APP"
cd /opt/glances
source .venv/bin/activate
uv pip install --upgrade "glances[web]" >/dev/null 2>&1
deactivate
systemctl restart glances
msg_ok "Updated $APP"
}

# uninstall on Debian/Ubuntu
uninstall_glances_debian() {
msg_info "Uninstalling $APP"
systemctl disable -q --now glances || true
rm -f /etc/systemd/system/glances.service
rm -rf /opt/glances
msg_ok "Removed $APP"
}

# install on Alpine
install_glances_alpine() {
msg_info "Installing dependencies"
apk update >/dev/null 2>&1
$STD apk add --no-cache \
gcc musl-dev linux-headers python3-dev \
python3 py3-pip py3-virtualenv lm-sensors wireless-tools >/dev/null 2>&1
msg_ok "Installed dependencies"

msg_info "Setting up Python + uv"
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/tools.func)
setup_uv PYTHON_VERSION="3.12"
msg_ok "Setup Python + uv"

msg_info "Installing $APP (with web UI)"
cd /opt
mkdir -p glances
cd glances
uv venv
source .venv/bin/activate
uv pip install --upgrade pip wheel setuptools >/dev/null 2>&1
uv pip install "glances[web]" >/dev/null 2>&1
deactivate
msg_ok "Installed $APP"

msg_info "Creating OpenRC service"
cat <<'EOF' >/etc/init.d/glances
#!/sbin/openrc-run
command="/opt/glances/.venv/bin/glances"
command_args="-w"
command_background="yes"
pidfile="/run/glances.pid"
name="glances"
description="Glances monitoring tool"
EOF
chmod +x /etc/init.d/glances
rc-update add glances default
rc-service glances start
msg_ok "Created OpenRC service"

echo -e "\n$APP is now running at: http://$IP:61208\n"
}

# update on Alpine
update_glances_alpine() {
if [[ ! -d /opt/glances/.venv ]]; then
msg_error "$APP is not installed"
exit 1
fi
msg_info "Updating $APP"
cd /opt/glances
source .venv/bin/activate
uv pip install --upgrade "glances[web]" >/dev/null 2>&1
deactivate
rc-service glances restart
msg_ok "Updated $APP"
}

# uninstall on Alpine
uninstall_glances_alpine() {
msg_info "Uninstalling $APP"
rc-service glances stop || true
rc-update del glances || true
rm -f /etc/init.d/glances
rm -rf /opt/glances
msg_ok "Removed $APP"
}

# options menu
OPTIONS=(Install "Install $APP"
Update "Update $APP"
Uninstall "Uninstall $APP")

CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "$APP" --menu "Select an option:" 12 58 3 \
"${OPTIONS[@]}" 3>&1 1>&2 2>&3 || true)

# OS detection
if grep -qi "alpine" /etc/os-release; then
case "$CHOICE" in
Install) install_glances_alpine ;;
Update) update_glances_alpine ;;
Uninstall) uninstall_glances_alpine ;;
*) exit 0 ;;
esac
else
case "$CHOICE" in
Install) install_glances_debian ;;
Update) update_glances_debian ;;
Uninstall) uninstall_glances_debian ;;
*) exit 0 ;;
esac
fi
 
Last edited:
Just for ppl running into problems with installing Glances on Proxmox 9

This solved it for me in ONE CLICK

Code:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/glances.sh)"

Calling "running a script as root from the internet" a solution is a little bit of stretch in my book. In the end the script do following: Installing dependencies and afterwards glances, you can (and should) do this yourself. Even worse: It does this with pythons package manger pip so you won't get any updates over the usual system mechanism but need to do this for your self. apt install glances should always work and if doesn't you should fix the cause for it, not working around with some hellish script
 
  • Like
Reactions: janus57 and UdoB