Releases: tuxxin/iNetPanel
v1.24.2 — Installer cascade fix (#14, #15) + per-domain disk cache
Bug Fixes
- Installer fails on fresh Debian 12 (closes #15). The installer's
exec_cmdhelper ran commands in a backgrounded subshell that didn't have/usr/sbinin PATH, soa2enmodfailed. Added a global PATH export near the top ofinstall_LAMP.shand switcheda2enmod/a2ensite/a2dissite/a2disconfto absolute/usr/sbin/paths. - Unusable MariaDB / phpMyAdmin on fresh install (closes #14). Same root cause as #15: when
a2enmodexited early, the installer skipped the sudoers file, phpMyAdmin storage DB, and panel deploy. Without the sudoers rulewww-datacouldn't read the MariaDB root password — producing "Access denied for user 'root'@'localhost' (using password: NO)". Fix #15 resolves the cascade. - Same disk usage shown on every domain for multi-domain users.
accountDisk()was summing/home/<user>(the whole home dir) and the user's DB total on every row. Now a newdisk_cacheSQLite table tracks per-domain file usage,disk_cache_usertracks the per-user DB total, and the Accounts page shows each domain's actual files size plus a single Total: badge per user (files across all their domains + MariaDB total).
Performance
- /admin/accounts load time. With 30+ domains and 100 GB+ data the page hung for seconds while
du -sbran live for every user. Newscripts/system/disk_cache_scan.shpopulates the SQLite cache every 10 minutes via cron, and fires immediately after add/remove/create/delete via backgroundinetpcalls. The API now reads cached rows — O(ms) regardless of dataset size.
Docs / Packaging
- README install command now pre-installs
curlfor fresh Debian 12 installs (apt-get install -y curl && bash <(curl -s …/latest)). build_release.shnow also generateslatest-betaalongsidelatest— same installer, just with the download URL swapped to the main-branch zipball so beta testers pull the latest code instead of the tagged release zip.
v1.24.1 — Dashboard speed + www ServerAlias hotfix
Performance
- Dashboard load time —
/api/accounts?action=listwas runningdu -sb+inetp db_sizefor every hosting user on every dashboard load (5+ seconds with 31 domains), even though the dashboard only displays 6 rows and doesn't use disk usage. Added?limit=Nand?skip_disk=1query params; dashboard now requestslimit=6&skip_disk=1. Accounts page unchanged — still shows disk usage.
Bug Fixes
- Apache vhost missing www ServerAlias — Apex domains (
example.com) had the DNSwwwCNAME auto-created by the Cloudflare tunnel logic, but the Apache vhost only declaredServerName ${DOMAIN}, sowww.{domain}requests fell through to the default vhost.add_domain.shandrestore_account.shnow addServerAlias www.${DOMAIN}for apex domains (dot-count heuristic: exactly 1 dot, not already prefixed withwww.).
v1.24 — Backup Restore with CF Migration Support
New Features
- Backup Restore — Full account restore from backup archives with 4-step wizard: Upload (web with progress bar, FTP, SSH/SCP) → Review (username, domains, ports, databases) → Cloudflare routing check with override → Execute with progress and credential summary.
- Domain availability checker —
inetp check_domainsuses RDAP (free, no API key) for single, bulk, and auto-generated variant checks. - CF tunnel migration — Restore override adds route to new tunnel and removes from old tunnel automatically. Searches all account tunnels for domain conflicts, not just the current server's tunnel.
Bug Fixes
- Tunnel creation fails on fresh install — Removed invalid
tunnel_secretfrom API-managed tunnel creation. - Beta channel update detection — Was always showing "up to date"; now compares commit SHAs.
- Beta version string stacking — Stripped
-beta.x-beta.ychains to just base + latest hash. - Domain deletion "Connection error" — FPM reload in
remove_domain.shkilled panel worker; deferred to after response. - Restore connection reset at 95% — Same FPM reload issue in
restore_account.sh. - Restore FTP login — Fixed nologin shell, sudo permissions, password (now copies root's shadow hash).
- Restore parse on large backups — Replaced full
tar -tzfbuffering with streaming grep pipes (constant memory). - CF CNAME safety —
removeTunnelHostname()now only deletes CNAME if it points to the specific tunnel being cleaned up, preventing breakage when domains are migrated between servers. - CF domain conflict detection —
check_domainandadd_domainnow search all account tunnels, not just the current server's.
v1.23.3 — Fix tunnel creation, beta update detection, add domain checker
Bug Fixes
- Tunnel creation fails on fresh install — Removed
tunnel_secretfromcreateTunnel(). API-managed tunnels (config_src: cloudflare) reject client-side secrets; Cloudflare's Rust serde threw a JSON deserialize error. Token is already retrieved separately viagetTunnelToken(). - Beta channel update detection broken —
update_check.phpandsettings.phpcheck_updatesaction only queried GitHub releases API, never checking main branch commits. Beta channel now compares latest commit SHA against installed SHA to properly detect available updates.
New Features
- Domain availability checker — Added
check_domains.sh(inetp check_domains). Uses RDAP (free, no API key). Supports single domain, bulk file (-f), and auto-generated variant checks (-g keyword).
v1.23.2
Hotfix
- Installer fails to download panel source —
install_LAMP.shwas pointing atinetpanel.tuxxin.com/inetpanel-latest.zip(404). The zip is a GitHub release asset, not hosted on the website. Fixed URL togithub.com/tuxxin/iNetPanel/releases/latest/download/inetpanel-latest.zip.
Install / Update
bash <(curl -s https://inetpanel.tuxxin.com/latest)v1.23.1
Hotfix
- Multi-PHP install fails silently on fresh installs — The
/var/www/inetpanel/storage/directory wasn't created during deployment, causing status files and logs to never be written. The API now creates the directory if missing and returns a clear error if it can't.
Install / Update
bash <(curl -s https://inetpanel.tuxxin.com/latest)Existing installs: run inetp panel_update from the admin panel or CLI.
v1.23
New: Release Channels (Stable vs Beta)
- Installer now uses release tarballs instead of
git clone— the repo (mainbranch) is now beta code, while GitHub Releases are stable.inetpanel.tuxxin.com/latest— stable installer (downloads release zip)inetpanel.tuxxin.com/latest-beta— beta installer (clonesmainbranch)
- Settings → Updates → Release Channel — toggle between stable and beta without reinstalling. Stable pulls from tagged releases, beta pulls the latest commit from
main.
Fixes
- Multi-PHP install broken on all environments —
systemd-run --scopefails silently in LXC/Proxmox containers with no fallback, leaving the status file stuck at "running" forever. Added direct background execution fallback when systemd-run fails. Simplified the API exec() call and set a 3-minute timeout.
Install / Update
bash <(curl -s https://inetpanel.tuxxin.com/latest)Existing installs: run inetp panel_update from the admin panel or CLI.
v1.22.3
Fixes
- Dashboard disk stats inflated —
disk_free_space()excludes ext4 reserved blocks (~5%), making "used" appear ~10 GB higher than reality. Now usesdfoutput for accurate numbers matching what the OS reports. - PHP 5.6 install timeout — Polling timeout increased from 120s to 360s. Older PHP versions take longer to install via apt.
- SSH port fix for LXC containers — Previous fix only checked
is-activeonssh.socket, which misses cases where the socket is enabled but not yet active (common in LXC). Now checkslist-unit-filesandmasks the socket unit to prevent reactivation.
Install / Update
curl -o latest https://inetpanel.tuxxin.com/latest && bash latestExisting installs: run inetp panel_update from the admin panel or CLI.
v1.22.2
Fixes
- SSH port ignored on Debian 12 — Installer now disables
ssh.socket(systemd socket activation hardcodes port 22, overridingsshd_config Port 1022) - SSL cert reissue blocked after self-signed fallback — Cleans up non-LE certs from
/etc/letsencrypt/live/before certbot retry - CertBot DNS propagation timeout — Added
--dns-cloudflare-propagation-seconds 30(default 10s was too short) - Dashboard graph empty on fresh install —
inetpanel_statswas missing frommanage_cron.shallowed list, so the stats collector cron was never created
New
inetp optimize_server— Auto-tunes Apache2mpm_eventand MariaDB InnoDB/buffers based on detected RAM, CPU cores, disk type (SSD/HDD), and hosted domain count. Dry-run by default,--applyto write changes with automatic config backups.
Install / Update
curl -o latest https://inetpanel.tuxxin.com/latest && bash latestExisting installs: run inetp panel_update from the admin panel or CLI.
v1.22.1
Logo rebrand & dark mode fixes (v1.22.1)
New branding
- New logo — redesigned iNetPanel logo (PNG with transparency), replaces old
.webp - Favicon — new
Logo-Icon.webpfavicon added to admin and account portals - Logo automatically inverts to white in dark mode via CSS filter
- Account portal logo resized to 28px for cleaner navigation fit
Dark mode — root-level fix
The core issue with dark mode was that Bootstrap 5.3 uses internal CSS variables (--bs-body-color, --bs-table-color, --bs-border-color, etc.) that our custom [data-theme="dark"] wasn't overriding. This caused all Bootstrap components to inherit dark text colors regardless of theme.
Fix: Override all Bootstrap 5.3 internal CSS variables at the [data-theme="dark"] root level. This makes every Bootstrap component — tables, cards, headings, links, borders — automatically inherit correct dark mode colors without needing per-component overrides.
Specific fixes
- Table headers —
.table-light<thead>elements now display light text (previously black on dark background) - Nav tabs — dark mode styling for tabbed interfaces (multi-php, firewall pages)
- Bootstrap 5.3 subtle utilities —
bg-success-subtle,bg-primary-subtle,bg-warning-subtle,bg-danger-subtlewith proper dark variants - Close button — filter inversion for visibility on dark backgrounds
- Warning badges — retain dark text for contrast on yellow background
- Table borders — consistent border color in dark mode
Pages fixed
Accounts, DNS, Email, SSL, Firewall, Multi-PHP, Services, and all other pages that use Bootstrap tables, cards, or badges.
Closes #10