2019-10-14 22:08:03 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
#
|
|
|
|
# envs.net - generate sysinfo.json and sysinfo.php
|
|
|
|
# - this script is called by /etc/cron.d/envs_sysinfo
|
|
|
|
#
|
|
|
|
WWW_PATH='/var/www/envs.net'
|
|
|
|
DOMAIN='envs.net'
|
|
|
|
|
2019-12-18 20:53:27 +00:00
|
|
|
[ "$(id -u)" -ne 0 ] && printf 'Please run as root!\n' && exit 1
|
2019-10-14 22:08:03 +00:00
|
|
|
|
|
|
|
###
|
|
|
|
|
|
|
|
# define packages by category for sysinfo.php Page
|
2021-07-26 11:17:13 +00:00
|
|
|
services=(0x0 bbj cryptpad drone element-web getwtxt gitea gophernicus hedgedoc hydrogen-web ipinfo jetforce
|
2020-11-03 11:24:37 +00:00
|
|
|
mariadb-server matrix nginx openssh-server pleroma privatebin searx tt-rss thelounge znc)
|
2019-10-14 22:08:03 +00:00
|
|
|
readarray -t sorted_services < <(printf '%s\n' "${services[@]}" | sort)
|
|
|
|
|
|
|
|
|
|
|
|
shells=(bash csh dash elvish fish ksh mksh sash tcsh xonsh yash zsh)
|
|
|
|
readarray -t sorted_shells < <(printf '%s\n' "${shells[@]}" | sort)
|
|
|
|
|
|
|
|
|
2020-03-09 12:03:38 +00:00
|
|
|
editors=(ed emacs micro nano neovim vim)
|
2019-10-14 22:08:03 +00:00
|
|
|
readarray -t sorted_editors < <(printf '%s\n' "${editors[@]}" | sort)
|
|
|
|
|
|
|
|
|
2020-05-10 18:35:59 +00:00
|
|
|
inet_clients=(alpine av98 bombadillo curl gomuks irssi lynx neomutt meli mutt mosh openssh-client pb toot weechat wget vf1)
|
2019-10-14 22:08:03 +00:00
|
|
|
readarray -t sorted_inet_clients < <(printf '%s\n' "${inet_clients[@]}" | sort)
|
|
|
|
|
|
|
|
|
2020-10-08 18:14:03 +00:00
|
|
|
coding_pkg=(cargo clang clisp clojure crystal default-jdk default-jre dmd-compiler elixir erlang flex
|
|
|
|
g++ gcc gcl gdc gforth ghc go golang guile-2.2 inform julia lua5.1 lua5.2 lua5.3 mono-complete
|
2020-10-28 19:14:03 +00:00
|
|
|
nasm nim nodejs octave perl php picolisp ponyc python python2.7 python3 python3.8 racket ruby rustc scala tcl yasm vlang)
|
2019-10-14 22:08:03 +00:00
|
|
|
readarray -t sorted_coding_pkg < <(printf '%s\n' "${coding_pkg[@]}" | sort)
|
|
|
|
|
|
|
|
|
2019-12-09 09:43:13 +00:00
|
|
|
coding_tools=(ack bison build-essential cl-launch cvs devscripts ecl gawk git gron initscripts jq latex-mk latexmk
|
2020-05-18 11:26:41 +00:00
|
|
|
make mawk mercurial rake ripgrep sbcl shellcheck subversion tcc texlive-full virtualenv yarn)
|
2019-10-14 22:08:03 +00:00
|
|
|
readarray -t sorted_coding_tools < <(printf '%s\n' "${coding_tools[@]}" | sort)
|
|
|
|
|
|
|
|
|
2020-03-09 12:03:38 +00:00
|
|
|
misc=(aria2 bc busybox burrow byobu clinte dict gfu goaccess hugo jekyll mariadb-client mandoc mathomatic mathtex mkdocs
|
|
|
|
pandoc pelican sagemath screen sqlite3 tmux todotxt-cli twtxt txtnish zola)
|
2019-10-14 22:08:03 +00:00
|
|
|
readarray -t sorted_misc < <(printf '%s\n' "${misc[@]}" | sort)
|
|
|
|
|
2020-02-16 11:48:57 +00:00
|
|
|
#
|
2020-02-16 21:18:00 +00:00
|
|
|
# do not add services!
|
|
|
|
service_pkgs=(mariadb-server nginx openssh-server)
|
|
|
|
FULL_PKG_LIST=("${service_pkgs[@]}" "${shells[@]}" "${editors[@]}" "${inet_clients[@]}" "${coding_pkg[@]}" "${coding_tools[@]}" "${misc[@]}")
|
|
|
|
|
2019-10-14 22:08:03 +00:00
|
|
|
|
|
|
|
custom_pkg_desc() {
|
2020-01-18 14:27:32 +00:00
|
|
|
local pkg="$1"
|
|
|
|
case "$pkg" in
|
|
|
|
# packages
|
2020-02-16 21:18:00 +00:00
|
|
|
crystal) pkg_desc='Compiler for the Crystal language';;
|
|
|
|
# custom packages
|
2020-01-18 14:27:32 +00:00
|
|
|
av98) pkg_desc='Command line gemini client. High speed, low drag';;
|
|
|
|
bombadillo) pkg_desc='Bombadillo is a non-web browser for the terminal';;
|
|
|
|
burrow) pkg_desc='a helper for building and managing a gopher hole';;
|
|
|
|
clinte) pkg_desc='a community notices system';;
|
|
|
|
gfu) pkg_desc='A utility for formatting gophermaps';;
|
|
|
|
go) pkg_desc='tool for managing Go source code';;
|
|
|
|
goaccess) pkg_desc='fast web log analyzer and interactive viewer';;
|
|
|
|
micro) pkg_desc='a new modern terminal-based text editor';;
|
|
|
|
pb) pkg_desc='a helper utility for using 0x0 pastebin services';;
|
2020-10-28 19:14:03 +00:00
|
|
|
python3.8) pkg_desc="$(get_pkg_desc python3)";;
|
2020-01-18 14:27:32 +00:00
|
|
|
twtxt) pkg_desc='Decentralised, minimalist microblogging service for hackers';;
|
|
|
|
txtnish) pkg_desc='A twtxt client with minimal dependencies';;
|
|
|
|
vf1) pkg_desc='Command line gopher client. High speed, low drag.';;
|
|
|
|
vlang) pkg_desc='Simple, fast, safe, compiled programming language';;
|
|
|
|
zola) pkg_desc='single-binary static site generator written in rust';;
|
2020-02-16 21:18:00 +00:00
|
|
|
|
|
|
|
*) _no_custom_pkg='1' ;;
|
2020-01-18 14:27:32 +00:00
|
|
|
esac
|
2019-10-14 22:08:03 +00:00
|
|
|
}
|
|
|
|
|
2020-10-28 19:14:03 +00:00
|
|
|
get_pkg_desc() {
|
|
|
|
local pkg="$1"
|
|
|
|
[ -z "$pkg_desc" ] && pkg_desc="$(apt-cache show "$pkg" | awk '/Description-en/ {print substr($0, index($0,$2))}' | head -1)"
|
|
|
|
[ -z "$pkg_desc" ] && pkg_desc="$(apt-cache search ^"$pkg"$ | awk '{print substr($0, index($0,$3))}' | head -1)"
|
|
|
|
[ -z "$pkg_desc" ] && pkg_desc='n.a.'
|
|
|
|
}
|
|
|
|
|
2020-02-16 21:18:00 +00:00
|
|
|
|
|
|
|
#
|
|
|
|
# SYSINFO.JSON
|
|
|
|
#
|
|
|
|
JSON_FILE="$WWW_PATH/sysinfo.json"
|
|
|
|
TMP_JSON='/tmp/sysinfo.json_tmp'
|
|
|
|
|
2019-10-14 22:08:03 +00:00
|
|
|
print_pkg_version() {
|
2020-01-18 14:27:32 +00:00
|
|
|
local pkg_version
|
2020-02-16 21:18:00 +00:00
|
|
|
#for pkg in $(dpkg-query -f '${binary:Package}\n' -W); do
|
|
|
|
for pkg in "${FULL_PKG_LIST[@]}"; do
|
|
|
|
_no_custom_pkg='0' ; custom_pkg_desc "$pkg"
|
|
|
|
|
|
|
|
if [ "$_no_custom_pkg" -eq '1' ] || [ "$pkg" = 'crystal' ]; then
|
|
|
|
pkg_version="$(dpkg-query -f '${Version}\n' -W "$pkg")"
|
2019-10-14 22:08:03 +00:00
|
|
|
|
2020-02-16 21:18:00 +00:00
|
|
|
printf ' "%s": "%s",\n' "$pkg" "$pkg_version"
|
|
|
|
fi
|
2020-01-18 14:27:32 +00:00
|
|
|
done
|
2019-10-14 22:08:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
cat<<EOM > "$TMP_JSON"
|
|
|
|
{
|
2020-01-18 14:27:32 +00:00
|
|
|
"timestamp": "$(date +'%s')",
|
|
|
|
"data": {
|
|
|
|
"info": {
|
|
|
|
"name": "envs",
|
|
|
|
"description": "envs.net is a minimalist, non-commercial shared linux system and will always be free to use.",
|
|
|
|
"located": "germany",
|
|
|
|
"maintainer": "Sven Kinne (~creme) - creme@envs.net",
|
|
|
|
"website": "https://$DOMAIN",
|
|
|
|
"signup_url": "https://$DOMAIN/signup/",
|
2020-11-29 14:00:06 +00:00
|
|
|
"gopher": "gopher://$DOMAIN/",
|
|
|
|
"gemini": "gemini://$DOMAIN/",
|
2020-01-18 14:27:32 +00:00
|
|
|
"email": "hostmaster@$DOMAIN",
|
|
|
|
"admin_email": "sudoers@$DOMAIN",
|
|
|
|
"user_count": $(find /home -mindepth 1 -maxdepth 1 | wc -l)
|
|
|
|
},
|
|
|
|
"SSHFP": {
|
|
|
|
"RSA": "SHA256:7dB470mfzlyhhtqmjnXciIxp+jWLACiYKC3EE/Z0lFg",
|
|
|
|
"ECDSA": "SHA256:U0C6SKGXUflve16m2l4KWBdLLARW6O8TiGWZsXAU2i4",
|
|
|
|
"ED25519": "SHA256:V+mXTsRJ+jfJMxxPlD/28dpWouuns3Wuqwppv6ykVC8"
|
|
|
|
},
|
|
|
|
"system": {
|
2020-11-29 14:00:06 +00:00
|
|
|
"core.$DOMAIN": {
|
|
|
|
"os": "$(/opt/sysinfo.sh get os)",
|
|
|
|
"uptime": "$(/opt/sysinfo.sh get uptime)",
|
|
|
|
"uname": "$(/opt/sysinfo.sh get uname)",
|
|
|
|
"board": "$(/opt/sysinfo.sh get board)",
|
|
|
|
"cpuinfo": "$(/opt/sysinfo.sh get cpuinfo)",
|
|
|
|
"cpucount": "$(/opt/sysinfo.sh get cpucount)"
|
|
|
|
},
|
|
|
|
"srv01.$DOMAIN": {
|
|
|
|
"os": "$(ssh srv01.$DOMAIN '/opt/sysinfo.sh get os')",
|
|
|
|
"uptime": "$(ssh srv01.$DOMAIN '/opt/sysinfo.sh get uptime')",
|
|
|
|
"uname": "$(ssh srv01.$DOMAIN '/opt/sysinfo.sh get uname')",
|
|
|
|
"board": "$(ssh srv01.$DOMAIN '/opt/sysinfo.sh get board')",
|
|
|
|
"cpuinfo": "$(ssh srv01.$DOMAIN '/opt/sysinfo.sh get cpuinfo')",
|
|
|
|
"cpucount": "$(ssh srv01.$DOMAIN '/opt/sysinfo.sh get cpucount')"
|
|
|
|
}
|
2020-01-18 14:27:32 +00:00
|
|
|
},
|
|
|
|
"services": {
|
|
|
|
"0x0": {
|
|
|
|
"desc": "the null pointer - file hosting and url shortener",
|
|
|
|
"version": "-",
|
2020-11-03 11:24:37 +00:00
|
|
|
"url": "https://envs.sh/",
|
2020-11-29 14:00:06 +00:00
|
|
|
"server": "core.$DOMAIN"
|
2020-01-18 14:27:32 +00:00
|
|
|
},
|
|
|
|
"bbj": {
|
|
|
|
"desc": "bulletin butter & jelly: an http bulletin board server for small communities",
|
|
|
|
"version": "-",
|
2020-11-29 14:00:06 +00:00
|
|
|
"url": "https://bbj.$DOMAIN/",
|
|
|
|
"server": "core.$DOMAIN"
|
2020-11-03 11:24:37 +00:00
|
|
|
},
|
2020-01-18 14:27:32 +00:00
|
|
|
"cryptpad": {
|
|
|
|
"desc": "collaborative real time editing",
|
2020-02-08 12:43:25 +00:00
|
|
|
"version": "$(curl -fs https://pad."$DOMAIN"/api/config | awk -F= '/ver=/ {print $2}' | sed '$ s/"$//')",
|
2020-11-29 14:00:06 +00:00
|
|
|
"url": "https://pad.$DOMAIN/",
|
|
|
|
"server": "core.$DOMAIN"
|
2020-01-18 14:27:32 +00:00
|
|
|
},
|
2020-05-23 18:58:43 +00:00
|
|
|
"drone": {
|
|
|
|
"desc": "continuous delivery platform",
|
|
|
|
"version": "$(curl -fs https://drone."$DOMAIN"/version | jq -Mr .version)",
|
2020-11-29 14:00:06 +00:00
|
|
|
"url": "https://drone.$DOMAIN/",
|
|
|
|
"server": "core.$DOMAIN"
|
2020-05-23 18:58:43 +00:00
|
|
|
},
|
2020-07-16 18:42:02 +00:00
|
|
|
"element-web": {
|
|
|
|
"desc": "universal secure chat app for matrix (web-client)",
|
2020-10-28 19:14:03 +00:00
|
|
|
"version": "$(curl -fs https://element."$DOMAIN"/version)",
|
2020-11-29 14:00:06 +00:00
|
|
|
"url": "https://element.$DOMAIN/",
|
|
|
|
"server": "srv01.$DOMAIN"
|
2020-07-16 18:42:02 +00:00
|
|
|
},
|
2020-01-18 14:27:32 +00:00
|
|
|
"getwtxt": {
|
2020-06-03 11:47:36 +00:00
|
|
|
"desc": "twtxt registry service - microblogging for hackers",
|
2021-07-26 12:03:14 +00:00
|
|
|
"version": "$(curl -fs https://twtxt."$DOMAIN"/api/plain/version | awk '{print $2}')",
|
2020-11-29 14:00:06 +00:00
|
|
|
"url": "https://twtxt.$DOMAIN/",
|
|
|
|
"server": "core.$DOMAIN"
|
2020-01-18 14:27:32 +00:00
|
|
|
},
|
|
|
|
"gitea": {
|
2020-06-03 11:47:36 +00:00
|
|
|
"desc": "painless self-hosted git service written in go",
|
2020-10-28 19:14:03 +00:00
|
|
|
"version": "$(curl -fs https://git."$DOMAIN"/api/v1/version | jq -Mr .version)",
|
2020-11-29 14:00:06 +00:00
|
|
|
"url": "https://git.$DOMAIN/",
|
|
|
|
"server": "core.$DOMAIN"
|
2020-01-18 14:27:32 +00:00
|
|
|
},
|
|
|
|
"gophernicus": {
|
2020-06-03 11:47:36 +00:00
|
|
|
"desc": "modern full-featured (and hopefully) secure gopher daemon",
|
2021-01-10 09:34:40 +00:00
|
|
|
"version": "$(/usr/local/sbin/gophernicus -v | sed 's/Gophernicus\///' | awk '{print $1}')",
|
2020-11-29 14:00:06 +00:00
|
|
|
"url": "gopher://$DOMAIN/",
|
|
|
|
"server": "core.$DOMAIN"
|
2020-02-02 09:21:11 +00:00
|
|
|
},
|
2020-12-22 07:39:16 +00:00
|
|
|
"hedgedoc": {
|
|
|
|
"desc": "collaborative real time markdown",
|
2021-07-26 12:03:14 +00:00
|
|
|
"version": "$(curl -vs https://hedgedoc."$DOMAIN"/ | grep 'hedgedoc-version:' | awk '{print $3}')",
|
2020-12-22 07:39:16 +00:00
|
|
|
"url": "https://hedgedoc.$DOMAIN/",
|
|
|
|
"server": "core.$DOMAIN"
|
|
|
|
},
|
2021-07-26 11:16:07 +00:00
|
|
|
"hydrogen-web": {
|
|
|
|
"desc": "lightweight matrix client with legacy and mobile browser support",
|
2021-07-26 12:03:14 +00:00
|
|
|
"version": "$(curl -fs https://hydrogen."$DOMAIN" | grep HYDROGEN_VERSION | awk '{print $3}' | sed -e 's/"//' -e 's/";//g')",
|
2021-07-26 11:16:07 +00:00
|
|
|
"url": "https://hydrogen.$DOMAIN/",
|
|
|
|
"server": "srv01.$DOMAIN"
|
|
|
|
},
|
2020-01-19 11:04:17 +00:00
|
|
|
"ipinfo": {
|
|
|
|
"desc": "ip address info",
|
2020-04-10 14:05:25 +00:00
|
|
|
"version": "-",
|
2020-11-29 14:00:06 +00:00
|
|
|
"url": "https://ip.$DOMAIN/",
|
|
|
|
"server": "core.$DOMAIN"
|
2020-01-19 11:10:00 +00:00
|
|
|
},
|
2020-01-18 14:27:32 +00:00
|
|
|
"jetforce": {
|
2020-06-03 11:47:36 +00:00
|
|
|
"desc": "tcp server for the gemini protocol",
|
2020-01-18 14:27:32 +00:00
|
|
|
"version": "$(/usr/local/bin/jetforce -V | awk '{printf $2}')",
|
2021-07-10 18:25:13 +00:00
|
|
|
"url": "https://gemini.$DOMAIN/",
|
2020-11-29 14:00:06 +00:00
|
|
|
"server": "core.$DOMAIN"
|
|
|
|
},
|
2020-01-18 14:27:32 +00:00
|
|
|
"matrix": {
|
2020-06-03 11:47:36 +00:00
|
|
|
"desc": "open network for secure, decentralized communication",
|
2020-02-08 12:43:25 +00:00
|
|
|
"version": "$(curl -fs https://matrix."$DOMAIN"/_matrix/federation/v1/version | jq -Mr .server.version)",
|
2020-11-29 14:00:06 +00:00
|
|
|
"url": "https://matrix.$DOMAIN/",
|
|
|
|
"server": "srv01.$DOMAIN"
|
2020-01-18 14:27:32 +00:00
|
|
|
},
|
2020-01-21 12:00:24 +00:00
|
|
|
"pleroma": {
|
2020-01-23 13:44:17 +00:00
|
|
|
"desc": "federated social network - microblogging",
|
2020-02-08 12:43:25 +00:00
|
|
|
"version": "$(curl -fs https://pleroma."$DOMAIN"/api/v1/instance | jq -Mr .version | awk '{print $4}' | sed '$ s/)//')",
|
2020-11-29 14:00:06 +00:00
|
|
|
"url": "https://pleroma.$DOMAIN/",
|
|
|
|
"server": "srv01.$DOMAIN"
|
2020-01-21 12:00:24 +00:00
|
|
|
},
|
2020-01-18 14:27:32 +00:00
|
|
|
"privatebin": {
|
2020-06-03 11:47:36 +00:00
|
|
|
"desc": "graphical pastebin",
|
2021-07-26 12:03:14 +00:00
|
|
|
"version": "$(lxc-attach -n pb -- bash -c "awk '/Current version:/ {print \$3}' /var/www/PrivateBin/README.md | sed 's/*$//'")",
|
2020-11-29 14:00:06 +00:00
|
|
|
"url": "https://pb.$DOMAIN/",
|
|
|
|
"server": "core.$DOMAIN"
|
2020-01-18 14:27:32 +00:00
|
|
|
},
|
|
|
|
"searx": {
|
2020-06-03 11:47:36 +00:00
|
|
|
"desc": "privacy-respecting metasearch engine",
|
2020-02-08 12:43:25 +00:00
|
|
|
"version": "$(curl -fs https://searx."$DOMAIN"/config | jq -Mr .version)",
|
2020-11-29 14:00:06 +00:00
|
|
|
"url": "https://searx.$DOMAIN/",
|
|
|
|
"server": "core.$DOMAIN"
|
2020-01-18 14:27:32 +00:00
|
|
|
},
|
|
|
|
"thelounge": {
|
2020-06-03 11:47:36 +00:00
|
|
|
"desc": "self-hosted web irc client",
|
2020-02-08 12:43:25 +00:00
|
|
|
"version": "$(sudo -u thelounge /srv/thelounge/.yarn/bin/thelounge -v | awk -Fv '{print $2}')",
|
2020-11-29 14:00:06 +00:00
|
|
|
"url": "https://webirc.$DOMAIN/",
|
|
|
|
"server": "core.$DOMAIN"
|
2020-01-18 14:27:32 +00:00
|
|
|
},
|
|
|
|
"tt-rss": {
|
|
|
|
"desc": "tiny tiny rss - web-based news feed (rss/atom) aggregator",
|
|
|
|
"version": "$(lxc-attach -n rss -- bash -c "dpkg -s tt-rss | awk '/Version:/ {print \$2}' | head -n1")",
|
2020-11-29 14:00:06 +00:00
|
|
|
"url": "https://rss.$DOMAIN/",
|
|
|
|
"server": "core.$DOMAIN"
|
2020-01-18 14:27:32 +00:00
|
|
|
},
|
|
|
|
"znc": {
|
|
|
|
"desc": "advanced modular irc bouncer",
|
|
|
|
"version": "$(dpkg -s znc | awk '/Version:/ {print $2}' | head -n1)",
|
2020-11-29 14:00:06 +00:00
|
|
|
"url": "https://znc.$DOMAIN/",
|
|
|
|
"server": "core.$DOMAIN"
|
2020-01-18 14:27:32 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
"packages": {
|
|
|
|
"av98": "$(/usr/local/bin/av98 --version | awk '{print $2}')",
|
|
|
|
"bombadillo": "$(/usr/local/bin/bombadillo -v | awk '/Bombadillo/ {print $2}')",
|
2020-02-08 12:43:25 +00:00
|
|
|
"burrow": "$(/usr/local/bin/burrow -v | awk -Fv '{print $2}')",
|
2020-01-18 14:27:32 +00:00
|
|
|
"clinte": "$(/usr/local/bin/clinte -V | awk '/clinte/ {print $2}')",
|
|
|
|
"gfu": "$(/usr/local/bin/gfu -v | sed '/version/s/.*version \([^ ][^ ]*\)[ ]*.*/\1/')",
|
2020-02-08 12:43:25 +00:00
|
|
|
"go": "$(awk -Fgo '{print $2}' /usr/local/go/VERSION)",
|
2020-01-18 14:27:32 +00:00
|
|
|
"goaccess": "$(/usr/bin/goaccess -V | awk '/GoAccess/ {print $3}')",
|
|
|
|
"micro": "$(/usr/local/bin/micro -version | awk '/Version/ {print $2}')",
|
|
|
|
"pb": "$(/usr/local/bin/pb -v)",
|
2020-10-28 19:14:03 +00:00
|
|
|
"python3.8": "$(/usr/local/bin/python3.8 --version | awk '{print $2}')",
|
2020-01-18 14:27:32 +00:00
|
|
|
"twtxt": "$(/usr/local/bin/twtxt --version | awk '/version/ {printf $3}')",
|
|
|
|
"txtnish": "$(/usr/local/bin/txtnish -V)",
|
|
|
|
"vf1": "$(/usr/local/bin/vf1 --version | awk '/VF-1/ {print $2}')",
|
|
|
|
"vlang": "$(/usr/local/bin/v --version | awk '/V/ {print $2}')",
|
|
|
|
"zola": "$(/usr/local/bin/zola -V | awk '/zola/ {print $2}')",
|
2019-10-14 22:08:03 +00:00
|
|
|
$(print_pkg_version)
|
|
|
|
EOM
|
2020-01-18 14:27:32 +00:00
|
|
|
# remove trailing ',' on last line
|
|
|
|
sed -i '$ s/,$//' "$TMP_JSON"
|
2019-10-14 22:08:03 +00:00
|
|
|
|
|
|
|
cat<<EOM >> "$TMP_JSON"
|
2020-01-18 14:27:32 +00:00
|
|
|
}
|
|
|
|
}
|
2019-10-14 22:08:03 +00:00
|
|
|
}
|
|
|
|
EOM
|
|
|
|
|
|
|
|
mv "$TMP_JSON" "$JSON_FILE"
|
2020-05-24 08:36:23 +00:00
|
|
|
chown www-data:www-data "$JSON_FILE"
|
2019-10-14 22:08:03 +00:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# SYSINFO.PHP
|
|
|
|
#
|
|
|
|
print_pkg_info() {
|
2020-01-18 14:27:32 +00:00
|
|
|
local pkg="$1"
|
|
|
|
|
|
|
|
local pkg_version
|
|
|
|
pkg_version="$(jq -Mr '.data.packages."'"$pkg"'"|select (.!=null)' "$JSON_FILE")"
|
|
|
|
[ -z "$pkg_version" ] && pkg_version='n.a.'
|
|
|
|
|
|
|
|
local pkg_desc
|
|
|
|
custom_pkg_desc "$pkg"
|
2020-10-28 19:14:03 +00:00
|
|
|
get_pkg_desc "$pkg"
|
2020-01-18 14:27:32 +00:00
|
|
|
# remove description-en string
|
|
|
|
pkg_desc="${pkg_desc//Description-en: /}"
|
|
|
|
# replace double qoutes with single qoute
|
|
|
|
pkg_desc="${pkg_desc//\"/\'}"
|
|
|
|
# string to lowercase
|
|
|
|
pkg_desc="${pkg_desc,,}"
|
|
|
|
|
2020-01-20 11:02:19 +00:00
|
|
|
printf '\t\t<tr> <td>%s</td> <td>%s</td> <td>%s</td> </tr>\n' "$pkg" "$pkg_version" "$pkg_desc"
|
2019-10-14 22:08:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
print_pkg_info_services() {
|
2020-01-18 14:27:32 +00:00
|
|
|
local pkg="$1"
|
2019-10-14 22:08:03 +00:00
|
|
|
|
2020-01-18 14:27:32 +00:00
|
|
|
local pkg_desc
|
|
|
|
pkg_desc="$(jq -Mr '.data.services."'"$pkg"'".desc|select (.!=null)' "$JSON_FILE")"
|
2019-10-14 22:08:03 +00:00
|
|
|
|
2020-01-18 14:27:32 +00:00
|
|
|
local pkg_version
|
|
|
|
pkg_version="$(jq -Mr '.data.services."'"$pkg"'".version|select (.!=null)' "$JSON_FILE")"
|
2019-10-14 22:08:03 +00:00
|
|
|
|
2020-01-18 14:27:32 +00:00
|
|
|
local s_url
|
|
|
|
s_url="$(jq -Mr '.data.services."'"$pkg"'".url|select (.!=null)' "$JSON_FILE")"
|
2019-10-14 22:08:03 +00:00
|
|
|
|
2020-01-20 11:02:19 +00:00
|
|
|
printf '\t\t<tr> <td><a href="%s" target="_blank">%s</a></td> <td>%s</td> <td>%s</td> </tr>\n' "$s_url" "$pkg" "$pkg_version" "$pkg_desc"
|
2019-10-14 22:08:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
print_category() {
|
2020-01-18 14:27:32 +00:00
|
|
|
local category="$1"
|
|
|
|
shift
|
|
|
|
local arr=("$@")
|
|
|
|
|
|
|
|
if [ "$category" = 'services' ]; then
|
|
|
|
printf '<details open=""><summary class="menu" id="%s"><strong># %s</strong></summary>\n' "$category" "${category//_/ }"
|
|
|
|
else
|
|
|
|
printf '<details><summary class="menu" id="%s"><strong># %s</strong></summary>\n' "$category" "${category//_/ }"
|
|
|
|
fi
|
|
|
|
|
2020-01-20 11:02:19 +00:00
|
|
|
printf '\t<table class="table_pkg">\n'
|
|
|
|
printf '\t\t<tr> <th class="tw140">Package</th> <th class="tw280">Version</th> <th>Description</th> </tr>\n'
|
2020-01-18 14:27:32 +00:00
|
|
|
|
|
|
|
if [ "$category" = 'services' ]; then
|
|
|
|
for pkg in "${arr[@]}"; do
|
2020-02-16 11:48:57 +00:00
|
|
|
# check service in sysinfo.json
|
2020-01-18 14:27:32 +00:00
|
|
|
s_in_j="$(jq -Mr '.data.services."'"$pkg"'"|select (.!=null)' "$JSON_FILE")"
|
|
|
|
if [ -n "$s_in_j" ]; then
|
|
|
|
print_pkg_info_services "$pkg"
|
|
|
|
else
|
|
|
|
print_pkg_info "$pkg"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
else
|
|
|
|
for pkg in "${arr[@]}"; do print_pkg_info "$pkg"; done
|
|
|
|
fi
|
|
|
|
|
2020-01-20 11:02:19 +00:00
|
|
|
printf '\t</table>\n</details>\n<p></p>\n'
|
2019-10-14 22:08:03 +00:00
|
|
|
}
|
|
|
|
|
2020-11-03 11:24:37 +00:00
|
|
|
print_srv_services() {
|
|
|
|
local srv="${1}.envs.net"
|
|
|
|
shift
|
|
|
|
local arr=("$@")
|
|
|
|
|
|
|
|
for service in "${arr[@]}"; do
|
|
|
|
local srv_service
|
|
|
|
srv_service="$(jq -Mr '.data.services."'"$service"'".server|select (.!=null)' "$JSON_FILE")"
|
|
|
|
|
|
|
|
local s_url
|
|
|
|
s_url="$(jq -Mr '.data.services."'"$service"'".url|select (.!=null)' "$JSON_FILE")"
|
|
|
|
|
|
|
|
if [ "$srv_service" = "$srv" ]; then
|
|
|
|
printf '<a href="%s" target="_blank">%s</a> ' "$s_url" "$service"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2019-10-14 22:08:03 +00:00
|
|
|
|
|
|
|
cat<<EOM > /tmp/sysinfo.php_tmp
|
|
|
|
<?php
|
|
|
|
// do not touch
|
2019-10-27 11:42:03 +00:00
|
|
|
// this files is generated by /usr/local/bin/envs.net/envs_sysinfo.sh
|
2019-10-14 22:08:03 +00:00
|
|
|
\$title = "$DOMAIN | sysinfo";
|
|
|
|
\$desc = "$DOMAIN | sysinfo";
|
|
|
|
|
2020-11-03 11:32:16 +00:00
|
|
|
\$date = new DateTime(null, new DateTimeZone('Etc/UTC'));
|
|
|
|
\$datetime = \$date->format('l, d. F Y - h:i:s A (e)');
|
|
|
|
|
|
|
|
\$local_hostname = shell_exec("hostname");
|
|
|
|
\$local_os = shell_exec("lsb_release -ds");
|
2020-11-03 11:24:37 +00:00
|
|
|
|
2019-10-14 22:08:03 +00:00
|
|
|
include 'header.php';
|
|
|
|
?>
|
|
|
|
|
|
|
|
<body id="body" class="dark-mode">
|
2020-01-18 14:27:32 +00:00
|
|
|
<div>
|
2019-10-14 22:08:03 +00:00
|
|
|
|
2020-01-18 14:27:32 +00:00
|
|
|
<div class="button_back">
|
|
|
|
<pre class="clean"><strong><a href="/">< back</a></strong></pre>
|
|
|
|
</div>
|
2019-10-14 22:08:03 +00:00
|
|
|
|
2020-01-20 01:31:05 +00:00
|
|
|
<div id="main">
|
2019-10-14 22:08:03 +00:00
|
|
|
<div class="block">
|
|
|
|
<h1><em>sysinfo</em></h1>
|
2020-01-20 01:31:05 +00:00
|
|
|
<pre>
|
2019-10-14 22:08:03 +00:00
|
|
|
<em>full data source: <a href="/sysinfo.json">https://$DOMAIN/sysinfo.json</a></em>
|
2020-08-03 10:24:05 +00:00
|
|
|
<em>status page: <a href="https://status.envs.net/" target="_blank">https://status.envs.net/</a></em>
|
2019-10-14 22:08:03 +00:00
|
|
|
|
|
|
|
<em>server admin: <a href="/~creme/">~creme</a></em>
|
|
|
|
</pre>
|
2020-01-20 01:31:05 +00:00
|
|
|
<p></p>
|
2019-10-14 22:08:03 +00:00
|
|
|
</div>
|
|
|
|
|
2020-11-03 11:24:37 +00:00
|
|
|
<div class="block">
|
|
|
|
<pre><strong><i class="fa fa-gear fa-fw" aria-hidden="true"></i> SYSTEM INFO</strong></pre>
|
|
|
|
<table>
|
|
|
|
<tr><th class="tw110"></th> <th></th></tr>
|
|
|
|
<tr><td>time:</td> <td><?=\$datetime?></td></tr>
|
|
|
|
<tr><td> </td> <td></td></tr>
|
|
|
|
<tr><td><strong><?=\$local_hostname?></strong></td> <td></td></tr>
|
|
|
|
<tr><td>os:</td> <td><?=\$local_os?></td></tr>
|
|
|
|
<tr><td>disk space:</td> <td>2x1TB ssd</td></tr>
|
|
|
|
<tr><td>services:</td> <td>$(print_srv_services 'core' "${sorted_services[@]}")</td></tr>
|
|
|
|
<tr><td><hr></td> <td><hr></td></tr>
|
|
|
|
<tr><td><strong>srv01.envs.net</strong></td> <td></td></tr>
|
|
|
|
<tr><td>os:</td> <td>Debian GNU/Linux 10 (buster)</td></tr>
|
|
|
|
<tr><td>disk space:</td> <td>2x1TB ssd-nvme | 2x8TB hdd (media storage)</td></tr>
|
|
|
|
<tr><td>services:</td> <td>$(print_srv_services 'srv01' "${sorted_services[@]}")</td></tr>
|
|
|
|
</table>
|
|
|
|
<p></p>
|
|
|
|
</div>
|
|
|
|
|
2019-10-14 22:08:03 +00:00
|
|
|
<pre>
|
|
|
|
this is a static list of the package informations. it updates once per day.
|
|
|
|
|
|
|
|
<strong># can i get [package] installed?</strong>
|
|
|
|
probably! send an email with your suggestion to <a href="mailto:sudoers@$DOMAIN">sudoers@$DOMAIN</a>.
|
2020-01-19 18:08:04 +00:00
|
|
|
|
2020-01-14 12:23:43 +00:00
|
|
|
</pre>
|
2020-01-19 18:08:04 +00:00
|
|
|
|
2019-10-14 22:08:03 +00:00
|
|
|
$(print_category 'services' "${sorted_services[@]}")
|
|
|
|
$(print_category 'shells' "${sorted_shells[@]}")
|
|
|
|
$(print_category 'editors' "${sorted_editors[@]}")
|
|
|
|
$(print_category 'online_browser_and_clients' "${sorted_inet_clients[@]}")
|
|
|
|
$(print_category 'coding_packages' "${sorted_coding_pkg[@]}")
|
|
|
|
$(print_category 'coding_tools' "${sorted_coding_tools[@]}")
|
|
|
|
$(print_category 'misc' "${sorted_misc[@]}")
|
2020-01-18 14:27:32 +00:00
|
|
|
</div>
|
2019-10-14 22:08:03 +00:00
|
|
|
|
|
|
|
<?php include 'footer.php'; ?>
|
|
|
|
|
|
|
|
EOM
|
|
|
|
|
|
|
|
mv /tmp/sysinfo.php_tmp "$WWW_PATH"/sysinfo.php
|
2020-05-24 08:36:23 +00:00
|
|
|
chown www-data:www-data "$WWW_PATH"/sysinfo.php
|
2019-10-14 22:08:03 +00:00
|
|
|
|
|
|
|
#
|
|
|
|
exit 0
|