Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ONEScripts

Independent, reviewed Bash modules for occasional Linux, VPS, cPanel, and system checks, plus an optional master CLI for selecting and running the installed catalog.

Every module remains standalone: download only the check you need, verify its checksum, and run it with one copyable command. Users who keep the complete catalog can use onescript as a non-interactive CLI or interactive terminal menu. The master executes modules; it does not duplicate their diagnostic logic.

Safety contract

  • Active scripts are read-only checks. They do not install packages, restart services, delete mail, modify firewall rules, or rewrite configuration.
  • Default script output does not intentionally display credentials, message contents, machine identifiers, or unredacted public network addresses. Explicit --show-mounts, --show-units, --show-names, and --show-paths options reveal only the selected local metadata.
  • The master uses the checked-in catalog.tsv allowlist. It never sources modules, evaluates argument strings, downloads code, installs packages, or performs remediation.
  • Catalog paths are constrained to regular executable files under a real, non-linked scripts/ directory; linked catalogs, module directories, and module files are rejected.
  • Remote commands download a version-tagged file, verify SHA-256, and execute only after verification succeeds.
  • Never use curl -k, --insecure, or an unverified curl | bash pipeline.
  • Run with root privileges only when a check needs complete service, process, or mail-queue visibility.

Master onescript CLI

The v2.1.0 release provides the complete verified catalog: onescript, catalog.tsv, SHA256SUMS, and all 14 standalone modules under scripts/. The four original v2.0.0 modules remain unchanged while the launcher and ten Linux server diagnostics are added in v2.1.0.

Version-pinned verified checkout:

git clone --depth 1 --branch v2.1.0 https://github.com/RomeoRaven/ONEScripts.git &&
cd ONEScripts &&
sha256sum -c --strict SHA256SUMS &&
./onescript doctor

Verify the installed catalog:

./onescript doctor

List or inspect modules without opening a menu:

./onescript list
./onescript info exim-queue-health

Run one module. Module arguments must follow -- and are passed without shell evaluation:

./onescript run directory-sizes -- --all /var

Run several modules with their allowlisted safe defaults:

./onescript batch exim-queue-health cpanel-followup-triage

Open the interactive menu:

./onescript menu

Running ./onescript without arguments also opens the menu when both input and output are terminals. Non-interactive automation must use an explicit command.

run returns the selected module's status. batch preflights every selection, runs them in order, continues after module failures, and returns the first nonzero module status. Launcher usage errors return 2; catalog, installation, and lookup failures return 1.

Module catalog

vps-profile.sh

Collects a privacy-reduced profile covering OS, resources, filesystems, cPanel, Exim, PHP, database, DNS, services, listeners, security tooling, and available administrative commands. Results are written to a local file for review before sharing.

One-line invocation:

(tmp_dir="$(mktemp -d)" && chmod 700 "$tmp_dir" && trap 'rm -rf "$tmp_dir"' EXIT && curl -fsSLo "$tmp_dir/vps-profile.sh" 'https://raw.githubusercontent.com/RomeoRaven/ONEScripts/v2.1.0/scripts/vps-profile.sh' && printf '%s  %s\n' 'd260a50a2fb3fa0af09edf310da8006246924cf4319a05ad2935c19fd91911ed' "$tmp_dir/vps-profile.sh" | sha256sum -c - && chmod 700 "$tmp_dir/vps-profile.sh" && "$tmp_dir/vps-profile.sh" ./vps-profile.txt)

cpanel-followup-triage.sh

Reports failed systemd units, privacy-safe Exim queue counts, and bind scope for selected sensitive listeners on a cPanel VPS.

One-line invocation:

(tmp_dir="$(mktemp -d)" && chmod 700 "$tmp_dir" && trap 'rm -rf "$tmp_dir"' EXIT && curl -fsSLo "$tmp_dir/cpanel-followup-triage.sh" 'https://raw.githubusercontent.com/RomeoRaven/ONEScripts/v2.1.0/scripts/cpanel-followup-triage.sh' && printf '%s  %s\n' '5bb1e14491437c42cf6d5169186a2545176dcbbf5ba4367d84aabf0e851f0a23' "$tmp_dir/cpanel-followup-triage.sh" | sha256sum -c - && chmod 700 "$tmp_dir/cpanel-followup-triage.sh" && "$tmp_dir/cpanel-followup-triage.sh")

directory-sizes.sh

Lists immediate subdirectories by allocated disk usage, largest first. Hidden directories are excluded unless --all is supplied.

One-line invocation for the current directory:

(tmp_dir="$(mktemp -d)" && chmod 700 "$tmp_dir" && trap 'rm -rf "$tmp_dir"' EXIT && curl -fsSLo "$tmp_dir/directory-sizes.sh" 'https://raw.githubusercontent.com/RomeoRaven/ONEScripts/v2.1.0/scripts/directory-sizes.sh' && printf '%s  %s\n' '156ea405829ec5c27ed7a462a23e2fe9752704467c93fbc652aef205d24ca65d' "$tmp_dir/directory-sizes.sh" | sha256sum -c - && chmod 700 "$tmp_dir/directory-sizes.sh" && "$tmp_dir/directory-sizes.sh" .)

exim-queue-health.sh

Prints only total, frozen, older-than-one-hour, and older-than-one-day Exim queue counts. It does not display sender, recipient, headers, or message bodies.

One-line invocation:

(tmp_dir="$(mktemp -d)" && chmod 700 "$tmp_dir" && trap 'rm -rf "$tmp_dir"' EXIT && curl -fsSLo "$tmp_dir/exim-queue-health.sh" 'https://raw.githubusercontent.com/RomeoRaven/ONEScripts/v2.1.0/scripts/exim-queue-health.sh' && printf '%s  %s\n' 'cf4606e3cd496dd9d8ca9db1281488507e3abeb2f45f460f1af070297a3fec22' "$tmp_dir/exim-queue-health.sh" | sha256sum -c - && chmod 700 "$tmp_dir/exim-queue-health.sh" && "$tmp_dir/exim-queue-health.sh")

Linux server diagnostics wave (v2.1.0)

These modules are published in v2.1.0. Findings use concise key=value output. A successful collection returns 0 even when status=warning|critical|stale; usage errors return 2, and collection failures return 1.

filesystem-health.sh

Reports mounted-filesystem capacity and inode pressure by index, without device or mount names by default. Default warning and critical thresholds are 85% and 95%; use --show-mounts for local diagnosis.

./scripts/filesystem-health.sh

Version-pinned one-line invocation:

(tmp_dir="$(mktemp -d)" && chmod 700 "$tmp_dir" && trap 'rm -rf "$tmp_dir"' EXIT && curl -fsSLo "$tmp_dir/filesystem-health.sh" 'https://raw.githubusercontent.com/RomeoRaven/ONEScripts/v2.1.0/scripts/filesystem-health.sh' && printf '%s  %s\n' '0b4608698315cf1ed19b532e453ff08fe9aeab93a0a8492793217c9002c5a12f' "$tmp_dir/filesystem-health.sh" | sha256sum -c - && chmod 700 "$tmp_dir/filesystem-health.sh" && "$tmp_dir/filesystem-health.sh")

memory-pressure.sh

Reports memory and swap use, one-minute load normalized by online CPU count, and Linux PSI values when available. It does not list processes or command lines.

./scripts/memory-pressure.sh

Version-pinned one-line invocation:

(tmp_dir="$(mktemp -d)" && chmod 700 "$tmp_dir" && trap 'rm -rf "$tmp_dir"' EXIT && curl -fsSLo "$tmp_dir/memory-pressure.sh" 'https://raw.githubusercontent.com/RomeoRaven/ONEScripts/v2.1.0/scripts/memory-pressure.sh' && printf '%s  %s\n' '859fcefc6b631f9b63e28db8c2f58372e55adfe567e70c3d2317e609b5543d59' "$tmp_dir/memory-pressure.sh" | sha256sum -c - && chmod 700 "$tmp_dir/memory-pressure.sh" && "$tmp_dir/memory-pressure.sh")

service-health.sh

Reports aggregate systemd state and failed-unit count. Unit names remain omitted unless --show-units is explicitly supplied.

./scripts/service-health.sh

Version-pinned one-line invocation:

(tmp_dir="$(mktemp -d)" && chmod 700 "$tmp_dir" && trap 'rm -rf "$tmp_dir"' EXIT && curl -fsSLo "$tmp_dir/service-health.sh" 'https://raw.githubusercontent.com/RomeoRaven/ONEScripts/v2.1.0/scripts/service-health.sh' && printf '%s  %s\n' 'c35c04f1f5f54eb945b46cbd6ebecb05146f02baf8f7de5bbe967c494ec5bb56' "$tmp_dir/service-health.sh" | sha256sum -c - && chmod 700 "$tmp_dir/service-health.sh" && "$tmp_dir/service-health.sh")

listener-exposure.sh

Lists listener protocol, port, and bind scope (loopback, specific-address, or all-interfaces) without displaying literal addresses or process details.

./scripts/listener-exposure.sh

Version-pinned one-line invocation:

(tmp_dir="$(mktemp -d)" && chmod 700 "$tmp_dir" && trap 'rm -rf "$tmp_dir"' EXIT && curl -fsSLo "$tmp_dir/listener-exposure.sh" 'https://raw.githubusercontent.com/RomeoRaven/ONEScripts/v2.1.0/scripts/listener-exposure.sh' && printf '%s  %s\n' 'a12029e59604066a57edf0bd12668a34031779d59838957d7991973580ea8c2f' "$tmp_dir/listener-exposure.sh" | sha256sum -c - && chmod 700 "$tmp_dir/listener-exposure.sh" && "$tmp_dir/listener-exposure.sh")

update-posture.sh

Counts updates visible in existing APT or DNF metadata, reports deferred/kept-back APT candidates as a privacy-safe aggregate, and checks the reboot-required marker. It never refreshes metadata, lists package names, installs updates, or reboots.

./scripts/update-posture.sh

Version-pinned one-line invocation:

(tmp_dir="$(mktemp -d)" && chmod 700 "$tmp_dir" && trap 'rm -rf "$tmp_dir"' EXIT && curl -fsSLo "$tmp_dir/update-posture.sh" 'https://raw.githubusercontent.com/RomeoRaven/ONEScripts/v2.1.0/scripts/update-posture.sh' && printf '%s  %s\n' '2bcf1ab868d6055c61b507407b424cd753894bc8d0b190e06c9a156281dbeb59' "$tmp_dir/update-posture.sh" | sha256sum -c - && chmod 700 "$tmp_dir/update-posture.sh" && "$tmp_dir/update-posture.sh")

backup-freshness.sh

Finds the newest regular file among explicit files and immediate directory entries. It does not recurse and reports age/count only; use --show-names or --show-paths explicitly for local diagnosis.

./scripts/backup-freshness.sh --max-hours 24 /srv/backups

Version-pinned one-line invocation:

(tmp_dir="$(mktemp -d)" && chmod 700 "$tmp_dir" && trap 'rm -rf "$tmp_dir"' EXIT && curl -fsSLo "$tmp_dir/backup-freshness.sh" 'https://raw.githubusercontent.com/RomeoRaven/ONEScripts/v2.1.0/scripts/backup-freshness.sh' && printf '%s  %s\n' 'fe3e47781e5694ebcc2c260df97bb3421fa5e13fa353c0e25e00c9ecffaf2a8b' "$tmp_dir/backup-freshness.sh" | sha256sum -c - && chmod 700 "$tmp_dir/backup-freshness.sh" && "$tmp_dir/backup-freshness.sh" /srv/backups)

endpoint-health.sh

Probes explicit HTTP(S) endpoints and reports status and latency by input index. URLs, query strings, headers, and response bodies are omitted.

./scripts/endpoint-health.sh https://example.com/health

Version-pinned one-line invocation:

(tmp_dir="$(mktemp -d)" && chmod 700 "$tmp_dir" && trap 'rm -rf "$tmp_dir"' EXIT && curl -fsSLo "$tmp_dir/endpoint-health.sh" 'https://raw.githubusercontent.com/RomeoRaven/ONEScripts/v2.1.0/scripts/endpoint-health.sh' && printf '%s  %s\n' '46d3961f9364b9ccf7cda154dcef52810855aaf6040ac08a416d641b014e84fb' "$tmp_dir/endpoint-health.sh" | sha256sum -c - && chmod 700 "$tmp_dir/endpoint-health.sh" && "$tmp_dir/endpoint-health.sh" https://example.com/health)

tls-expiry.sh

Verifies explicit TLS targets and reports certificate lifetime by input index. Hostnames, addresses, subjects, and issuers are omitted.

./scripts/tls-expiry.sh example.com:443

Version-pinned one-line invocation:

(tmp_dir="$(mktemp -d)" && chmod 700 "$tmp_dir" && trap 'rm -rf "$tmp_dir"' EXIT && curl -fsSLo "$tmp_dir/tls-expiry.sh" 'https://raw.githubusercontent.com/RomeoRaven/ONEScripts/v2.1.0/scripts/tls-expiry.sh' && printf '%s  %s\n' 'ea624496235f3d78cd38be3173f6bb18d898d7cc25b71fe36d678459691b61f0' "$tmp_dir/tls-expiry.sh" | sha256sum -c - && chmod 700 "$tmp_dir/tls-expiry.sh" && "$tmp_dir/tls-expiry.sh" example.com:443)

container-health.sh

Reports aggregate Docker or Podman running, stopped, and unhealthy counts. Names, images, IDs, ports, labels, and commands are omitted. If Docker is installed but unavailable, a usable Podman runtime is tried.

./scripts/container-health.sh

Version-pinned one-line invocation:

(tmp_dir="$(mktemp -d)" && chmod 700 "$tmp_dir" && trap 'rm -rf "$tmp_dir"' EXIT && curl -fsSLo "$tmp_dir/container-health.sh" 'https://raw.githubusercontent.com/RomeoRaven/ONEScripts/v2.1.0/scripts/container-health.sh' && printf '%s  %s\n' '6166f768a4f242db8e077438ebdc2736ffbafd5306dd0d1adbb1da7b0b75b26b' "$tmp_dir/container-health.sh" | sha256sum -c - && chmod 700 "$tmp_dir/container-health.sh" && "$tmp_dir/container-health.sh")

log-storage.sh

Measures allocated size for explicit log directories, defaulting to /var/log, without reading log contents. Paths are omitted unless --show-paths is supplied. If permissions hide a child directory but du still returns a numeric total, the result is retained and marked collection_complete=no.

./scripts/log-storage.sh

Version-pinned one-line invocation:

(tmp_dir="$(mktemp -d)" && chmod 700 "$tmp_dir" && trap 'rm -rf "$tmp_dir"' EXIT && curl -fsSLo "$tmp_dir/log-storage.sh" 'https://raw.githubusercontent.com/RomeoRaven/ONEScripts/v2.1.0/scripts/log-storage.sh' && printf '%s  %s\n' '3eb2acfbbaf9643ebf50b7822fa6e6d7908f421abb7edfc2521ac5ebafa0422a' "$tmp_dir/log-storage.sh" | sha256sum -c - && chmod 700 "$tmp_dir/log-storage.sh" && "$tmp_dir/log-storage.sh" /var/log)

Each version-pinned command downloads into a private temporary directory, verifies the exact v2.1.0 checksum, and executes only after verification succeeds.

Direct module use

After completing the version-pinned verified checkout above, run a script directly:

./scripts/vps-profile.sh ./vps-profile.txt

Every module supports --help and --version and remains directly executable without the master.

Validation

Run the behavioral suites and verify the complete installed catalog:

./tests/test-scripts.sh && ./onescript doctor

Run ShellCheck:

shellcheck scripts/*.sh tests/*.sh onescript

GitHub Actions runs both checks for every push and pull request.

Adding scripts

A new active module must:

  1. Be standalone and read-only by default.
  2. Support --help and --version.
  3. Avoid credentials, private environment data, insecure TLS, and unverified remote execution.
  4. Include behavioral coverage where practical.
  5. Add one valid catalog.tsv row with a stable ID, category, display name, description, requirements summary, path, and yes|no safe-default flag.
  6. Pass Bash parsing, ShellCheck, the repository test suite, launcher tests, and checksum verification.
  7. Add the module checksum to SHA256SUMS, document direct checkout use, and add a version-pinned checksum-bound remote invocation when the containing release is published.

Ordinary module additions do not require launcher code changes. Use menu_safe=no when a module cannot run meaningfully or safely without explicit arguments; it remains available through direct execution and onescript run.

Mutating or remediation scripts require an explicit design review, safe preview behavior, failure handling, and rollback evidence before inclusion.

Legacy history

The original CentOS 6/7/8-era scripts are retired and are not present in the active tree. Their historical state is preserved under tag legacy-centos-archive-2026-07-24. Do not use those scripts as current tooling.

License

MIT — see LICENSE.

About

One script to rule them all, one script to find them, One script to bring them all and in the darkness bind them.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages