🫒Using OliveTin to Provide a Dashboard for Debian🐧

🫒Using OliveTin to Provide a Dashboard for Debian🐧

OliveTin offers secure, easy-to-use web access for pre-set shell commands.

·

5 min read

I have created a dashboard using Olive Tin which can be downloaded from github:

Its in the list of tools that I use:

Here is my example configuration file for OliveTin:

listenAddressSingleHTTPFrontend: 0.0.0.0:1337
pageTitle: Fusion Edge Panel
showFooter: false

# Choose from INFO (default), WARN and DEBUG
logLevel: "INFO"

actions:

  - title: Node Information
    shell: fastfetch -c /etc/fastfetch/fusion.jsonc --pipe false
    icon: "🚨"
    popupOnStart: execution-dialog-stdout-only

  - title: Node IP Addresses
    shell: displayedgeIPs.sh
    icon: "📚"
    popupOnStart: execution-dialog-stdout-only


  - title: Test the Internet
    shell: TERM=xterm prettyping --last 20 --rttmin 1 --rttmax 40 -c 60 1.1.1.1
    icon: "🫠"
    popupOnStart: execution-dialog

  - title: Check disk space
    icon: disk
    shell: df -h /media
    popupOnStart: execution-dialog-stdout-only

  - title: check console logs
    shell: dmesg | tail
    icon: logs
    popupOnStart: execution-dialog

  - title: Display Bonding Logs
    shell: timeout 5s bondlog -f -n 100
    icon: "🪵"
    timeout: 10
    popupOnStart: execution-dialog-stdout-only

  - title: Display Netify Agent
    shell: netifyd -s
    icon: "🥅"
    popupOnStart: execution-dialog-stdout-only

  - title: Ping host
    shell: ping {{ host }} -c {{ count }}
    icon: ping
    timeout: 100
    popupOnStart: execution-dialog-stdout-only
    arguments:
      - name: host
        title: Host
        type: ascii_identifier
        default: example.com
        description: The host that you want to ping

      - name: count
        title: Count
        type: int
        default: 3
        description: How many times to do you want to ping?

  - title: Start the Remote Access for eports
    shell: systemctl eport@client1 stop
    icon: "🚀"
    popupOnStart: execution-dialog-stdout-only

  - title: Stop the Remote Access for eports
    shell: systemctl eport@client1 stop
    icon: "🛑"
    popupOnStart: execution-dialog-stdout-only

  - title: Speedtest on Node
    shell: speedtest --simple --share 
    icon: "🏃"
    popupOnStart: execution-dialog

  - title: Speedtest on WAN interface
    shell: speedtest --simple --share -a {{ WAN }}
    icon: "🏃"
    popupOnStart: execution-dialog-stdout-only
    arguments:
      - name: WAN
        title: WAN interface
        type: ascii_identifier
        description: Select appropriate interface.
        choices:
        - title: WAN1
          value: eth1
        - title: WAN2
          value: eth2
        - title: WAN3
          value: eth3

  - title: MTR on Node
    shell: mtr -r 1.1.1.1
    icon: "👷"
    popupOnStart: execution-dialog

  - title: MTR on WAN Interface
    shell:  mtr -T -r -a mtr -a $(ip -4 addr show {{ WAN }} | grep -oP '(?<=inet\s)\d+(\.\d+){3}') {{ target }}
    icon: "&#128119;"
    popupOnStart: execution-dialog-stdout-only
    arguments:
      - name: target
        title: Target IP
        type: ascii_identifier
        default: 1.1.1.1
        description: The target IP address

      - name: WAN
        title: WAN interface
        type: ascii_identifier
        description: Select appropriate interface.
        choices:
        - title: WAN1
          value: eth1
        - title: WAN2
          value: eth2
        - title: WAN3
          value: eth3

  - title: Test DNS on Connected IP
    shell: dig @$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | sed -n '2p') {{ dhost }}
    icon: "&#129495;"
    popupOnStart: execution-dialog
    arguments:
      - name: dhost
        title: Target DNS name
        type: ascii_identifier
        default: fusionsdwan.co.za
        description: The target DNS name

  - title: Show IP Neighbors (Phones, APs, switches, routers, etc.)
    shell: lldpcli show neighbors summary
    icon: "&#128679;"
    popupOnStart: execution-dialog

  - title: Nmap scan of the LAN
    shell: nmap -sn $(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}/\d+' | sed -n '2p' | awk -F'[/.]' '{printf "%d.%d.%d.0/%d\n", $1, $2, $3, $5}')
    icon: "&#128083;"
    popupOnStart: execution-dialog

  - title: Nmap scan of a host
    shell: nmap -sV --script=smb* fusionsdwan.co.za {{ nhost }}
    icon: "&#129659;"
    popupOnStart: execution-dialog
    arguments:
      - name: nhost
        title: Target for scan
        type: ascii_identifier
        default: 8.8.8.8
        description: IP address (or subnet)

  - title: Devices connected on LAN
    shell: arp-scan -I eth0 $(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}/\d+' | sed -n '2p' | awk -F'[/.]' '{printf "%d.%d.%d.0/%d\n", $1, $2, $3, $5}')
    icon: "&#129399;"
    popupOnStart: execution-dialog-stdout-only

Here OliveTin displays the result from the fastfetch tool:

The configuration file used for fastfetch is:

{
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
    "logo": {
        "padding": {
            "top": 2
        }
    },
    "modules": [
        "title",
        "separator",
        "os",
        "host",
        "bios",
        "bootmgr",
        "board",
        "chassis",
        "kernel",
        "initsystem",
        "uptime",
        "loadavg",
        "processes",
        "packages",
        "lm",
        "de",
        "wm",
        {
            "type": "cpu",
            "showPeCoreCount": true,
            "temp": true
        },
        "cpucache",
        "cpuusage",
        "memory",
        "physicalmemory",
        "swap",
        "disk",
        "battery",
        "poweradapter",
        "player",
        "media",
        "publicip",
        {
            "type": "localip",
            "showMac": true
        },
        "wifi",
        "datetime",
        "locale",
        "vulkan",
        "opengl",
        "opencl",
        "users",
        "bluetooth",
        "sound",
        "camera",
        "gamepad",
        {
          "type": "weather",
          "timeout": 1000
        },
        "netio",
        "diskio",
        {
            "type": "physicaldisk",
            "temp": true
        },
        "version",
        "break",
        "colors"
    ]
}

The fastfetch binary used for Debian Buster is:

👉 https://github.com/fastfetch-cli/fastfetch/releases/download/2.16.0/fastfetch-linux-amd64.tar.gz

fastfetch is a replacement of neofetch which is a great tool but it has been sunsetted hence the use of fastfetch.

Here are the IPs on the device:

The command to display that is too long so a script is used:

#!/bin/bash
echo "WAN1 IP Address: $(ip -4 addr show eth1 | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | head -1)"; echo "WAN2 IP Address: $(ip -4 addr show eth2 | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | head -1)"; echo "WAN3 IP Address: $(ip -4 addr show eth3 | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | head -1)"; echo "LAN Local: $(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | head -1)"; echo "LAN Gateway: $(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | sed -n '2p')"; echo "Public IP Address: $(curl -s ifconfig.me)"

This is a one minute test to the Internet and this case I'm using Cloudflare's 1.1.1.1 as the target. The tool being used is prettyping, which provides the same look and feels as the extended ping of the Cisco cli.

The tool displays the disk space on the device:

The tool displays the console log:

Display from 3rd party networking logs:

Status from 3rd party tool:

Results of speedtest on WAN interface:

IPs and devices on the LAN:

Ronald Bartels ensures that Internet inhabiting things are connected reliably online at Fusion Broadband South Africa - the leading specialized SD-WAN provider in South Africa. 👉 Contact Fusion