vrcx: i18n (en/ru), config.ini, clickable update check, prettier README

Adds first-run language prompt + persistent config.ini with bilingual
inline comments. Update check now returns just the tag; app.py renders
it as a clickable [link=...] in the header (matches dhcpsrv/netswitch
pattern). Strips all 'made by engelgardt' lines.

- new dev/src/vrcx/i18n.py (RU/EN translation table)
- new dev/src/vrcx/config.py (config.ini next to the exe)
- update_check.py: returns tag, no console writes
- app.py: load config, set lang, render clickable header, use config
  defaults for BMC/SDS user and parallel_hosts; pass cfg.ping_sweep to
  discover_sds_ip
- ui.py: all visible strings via t()
- README.md / README.ru.md: rewritten under the vrcx name and brief
This commit is contained in:
Engelgardt23
2026-05-18 17:57:29 +03:00
parent 93cc775e80
commit b923b9ebe7
11 changed files with 713 additions and 109 deletions
+69 -19
View File
@@ -1,48 +1,98 @@
# bmccollect
# vrcx
[![Latest release](https://img.shields.io/github/v/release/Engelgardt23/bmccollect)](https://github.com/Engelgardt23/bmccollect/releases/latest)
[![Latest release](https://img.shields.io/github/v/release/Engelgardt23/vrcx?include_prereleases&label=release)](https://github.com/Engelgardt23/vrcx/releases/latest)
[![Build](https://img.shields.io/github/actions/workflow/status/Engelgardt23/vrcx/release.yml?label=build)](https://github.com/Engelgardt23/vrcx/actions)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Lang: en \| ru](https://img.shields.io/badge/lang-en%20%7C%20ru-blue)](#)
A portable collector of YADRO BMC diagnostic logs. Re-implementation of the original VRC tool, packaged as a maintainable Python project — same output structure expected by YADRO support, but readable source, modular layout, CI-built releases.
🇺🇸 English | [🇷🇺 Русский](README.ru.md)
> **Made by engelgardt.**
**vrcx***Vegman Remote Collect (extended)*. A portable, scripted replacement for YADRO's `VRC.exe` that pulls diagnostic logs from a Vegman server **and** (optionally) from its SDS service OS, in parallel, into a single archive ready to send to support.
The original VRC only touches the BMC. In real incidents support almost always asks for OS-side logs too (`lsiget`, `storcli`, `smartctl`, journals). With vrcx that's one double-click instead of a USB-stick run.
---
## What it does
- Connects to **N BMCs in parallel**. Per host, also opens a **second** SSH session to the SDS service OS and runs both branches concurrently.
- SDS IP is discovered automatically: vrcx asks the BMC over Redfish for the host NIC's MAC, then matches it against the laptop's ARP table (warming it with a quick `/24` ping-sweep when needed).
- Each host gets a clean `bmc/` and `os/` sub-folder; all per-host tarballs land in a shared `archives/` folder and an outer bundle wraps the whole session.
- BMC-only mode (when *Collect OS logs too?* is answered *no*) produces an artefact set 1:1 compatible with the original VRC support flow.
## Download
Grab the latest release: [**releases page**](https://github.com/Engelgardt23/bmccollect/releases/latest).
The asset is `bmccollect-portable-vX.Y.Z.zip`.
Grab the latest release: [**releases page**](https://github.com/Engelgardt23/vrcx/releases/latest).
The asset is `vrcx-portable-vX.Y.Z.zip`.
## Run
1. Unzip anywhere.
2. Double-click `bmccollect.exe`.
3. Paste one or more BMC IPs (whitespace / comma / newline separated). End input with an empty line.
4. Enter username (default `admin`) and password.
5. Watch the live progress table while the tool collects each BMC in parallel.
6. When it's done you get a single `out/<DDMMYYYY_HHMMSS>/<stamp>.tar.gz` ready to send to support.
2. Double-click `vrcx.exe`. On the very first launch pick a language; the choice is saved into `config.ini` next to the exe.
3. Paste one or more **BMC** IPs (whitespace, comma, or newline separated). End input with an empty line.
4. Enter the BMC user (default `admin`) and password.
5. Answer **Collect OS logs too?** — if `yes`, enter SDS user/password (defaults `sds`/`sds`). vrcx will discover each SDS IP via Redfish→ARP, falling back to a manual prompt when needed.
6. Watch the live progress table — each row shows `BMC ok/total | OS ok/total` while collection runs.
`Ctrl+C` aborts. The output folder is kept regardless — you can pack it manually if needed.
`Ctrl+C` aborts and removes the incomplete session folder.
## What it collects
## Output
For each BMC: `inventory.json`, `lsinventory.json`, `sensors.log`, `sellog.log`, `bmc-state.txt`, `host-state.txt`, `bmc-net-cfg.log`, `cpuinfo`, `meminfo`, `osrelease`, `disk-usage.log`, `failed-services.log`, `top.log`, `bmc-journal_full_date.log`, journals for `obmc-console` and `obmc-yadro-vrm-setter`, a Redfish `/redfish/v1/Systems` dump, and others — see [`commands.py`](src/bmccollect/commands.py) for the full command table. Adding a new artefact is one line in that table.
```
out/<DDMMYYYY_HHMMSS>/
├── <bmc_ip>/
│ ├── bmc/ BMC commands (inventory, sensors, sellog, Redfish, …)
│ └── os/ SDS host commands (lsiget, storcli, smartctl, journal, …)
├── <bmc_ip_2>/
│ ├── bmc/
│ └── os/
├── archives/
│ ├── dump_<bmc_ip>.tar.gz
│ └── dump_<bmc_ip_2>.tar.gz
├── vrc.log
└── err_out.log
out/<DDMMYYYY_HHMMSS>.tar.gz ← one-click bundle for support
```
## Configuration
`config.ini` lives next to the exe and is created on first run. Every option carries an inline description (EN + RU). Typical knobs:
| Section | Key | Default | What |
|--- |--- |--- |--- |
| `General` | `language` | (asked) | `en` / `ru` |
| `BMC` | `default_user` | `admin` | Hit Enter on the BMC user prompt to accept this |
| `OS` | `collect_by_default` | `no` | Pre-tick the *Collect OS logs too?* answer |
| `OS` | `default_user` | `sds` | Default SDS user |
| `Discovery` | `ping_sweep` | `yes` | Warm the ARP table with a `/24` ping-sweep when SDS IP is unknown |
| `Run` | `parallel_hosts` | `8` | Max BMCs collected in parallel |
## What gets collected
| Side | Where it comes from |
|---|---|
| **BMC** | Per-spec table in [`commands.py`](dev/src/vrcx/commands.py): BMC CLI commands (`bmc info version`, `lsinventory -j`, `health logs show sellog`), `journalctl` units, file reads (`/proc/cpuinfo`, `/etc/os-release`, …), Redfish `/redfish/v1/Systems`. |
| **SDS host** | Per-spec table in [`os_commands.py`](dev/src/vrcx/os_commands.py): `lsigetlinux.sh`, `storcli64 /call show all`, `nvme list`, `smartctl -x` per drive, `dmidecode`, `dmesg -T`, `journalctl -b`, `/var/log/messages`, `lspci`, `lsblk`. |
Adding a new artefact = one line in the relevant table.
## Compatibility
- Output structure mirrors VRC v1.1b — YADRO support flow is unchanged.
- Tested against `vegman-sx20` BMC firmware.
- Windows 10 / 11 host (the only place this tool runs).
- Output structure mirrors VRC v1.1b — YADRO support flow is unchanged for the BMC side.
- Targets: YADRO Vegman servers with OpenBMC + the SDS service OS (CentOS Stream 10 base).
- Host: Windows 10 / 11. No Python required on the laptop or on the server.
## Build from source
```
git clone https://github.com/Engelgardt23/vrcx.git
cd vrcx
python -m pip install rich paramiko pyinstaller
python -m PyInstaller --onefile --console --name bmccollect --paths src bmccollect-launcher.py
python -m PyInstaller --onefile --console --name vrcx --icon dev/assets/icon.ico --paths dev/src dev/vrcx-launcher.py
```
See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the full layout and release flow.
See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the full repo layout (`dev/` / `prod/` / `old/`) and release flow.
## License