vicigeeksimple guides
Browse
All guides

Running your system · Platform decision

Installing VICIdial on AlmaLinux 9 or Rocky Linux 9

What genuinely differs between the RHEL family and the Debian family for a VICIdial install, why SELinux and PHP 8.2 are the two decisions that actually matter, where a community-maintained AlmaLinux 9 or Rocky Linux 9 installer worth trusting lives, and a straight decision rule for choosing between ViciBox's lab-only appliance path, a from-scratch RHEL-family build, or the scratch-install instructions posted on the VICIdial forum for the Debian family.

Reader setup

Before you choose

List your constraints, required evidence and stop rules before you score options.

  1. A clear reason you are considering the RHEL family at all: an organizational standard, a support contract, or a genuinely free choice of distribution
  2. Root or sudo access to the candidate server, so you can run this article's read-only checks before committing to a path
  3. Willingness to read a community installer's own documentation in full before running it, since nothing here substitutes for that
What you will prove
You will know exactly what differs on AlmaLinux 9 or Rocky Linux 9 versus this publication's other install paths, where to find a community-maintained installer worth trusting, and which of the three paths actually fits your situation.
Safety boundary
This article contains no install command sequence for AlmaLinux 9 or Rocky Linux 9, on purpose: no official, vendor-verified procedure was available to check one against, and a wrong command here can cost a server an afternoon or worse. Every command below only reads state; none of them changes anything.

Reader path

How to use this article

  • Use it when: You are comparing options and need decision evidence before approval.
  • Expected result: Turn options into explicit acceptance criteria and documented stop conditions.
  • Start here: Score what is mandatory, keep unknowns visible, then decide only when risks are understood.

A platform decision, not a step-by-step

Fast answer: this publication has not run, checked, or pinned a VICIdial install on AlmaLinux 9 or Rocky Linux 9, so this article does not hand you a command sequence for either one. What it gives you instead is what genuinely differs on the Red Hat Enterprise Linux (RHEL) family versus the Debian family for VICIdial specifically, why Security-Enhanced Linux (SELinux) has to come off, why PHP 8.2 breaks older VICIdial code, where a community-maintained installer worth trusting actually lives, and a straight decision rule for choosing between AlmaLinux 9 or Rocky Linux 9, this publication's ViciBox appliance path, and the scratch-install instructions posted on the VICIdial forum for the Debian family.

None of the platform choice below changes what words like agent, campaign, carrier, trunk, channel or DID mean — see VICIdial terminology for complete beginners: users, phones, campaigns and leads if any of those are new. This article only changes how much of the road to get there is already paved.

AlmaLinux 9 and Rocky Linux 9 are both free, binary-compatible rebuilds of Red Hat Enterprise Linux 9, and both are the current RHEL-family targets teams reach for when standardizing on that lineage. Everything below applies equally to either one; nothing in VICIdial's own requirements favors one rebuild over the other.

  • No install command sequence for AlmaLinux 9 or Rocky Linux 9 appears anywhere below.
  • This publication's most detailed install path is the ViciBox appliance (lab-only, not a from-scratch build) — see ViciBox 12 installation: from bare metal to first dial.
  • Everything below is read-only checks, real platform differences and a decision rule.
Trace path · read left to right
01SELinux, PHP and package differences02Community installers, read in full03ViciBox, RHEL-family, or Debian-family from scratch

Visual walkthrough

Follow three real demo screens

Captured on an isolated VICIdial demo: Administration screens on September 24, 2026, and the idle Agent screen on August 11, 2026. Each caption states its own capture time, and every sanitized image helps you recognize a related screen; none proves that this article's call, command, or result occurred.
Step 1 · Find the main areas

Start at Administration home

Sanitized VICIdial Administration home page with navigation and aggregate system counts
Captured September 24, 2026 at 21:54:37 UTC on the authorized isolated demo. This is an orientation page with aggregate counts only; it is not a report and does not prove production activity or a completed call.
Step 2 · Map system administration

Use the Administration menu as a map

Sanitized VICIdial Administration menu showing phones, carriers, servers, system settings, and system statuses
Captured September 24, 2026 at 21:34:11 UTC on the authorized isolated demo. This menu is a navigation map only; it does not show that any system-wide setting was changed or verified.
Step 3 · Read platform identity

Confirm version and system-wide context

Sanitized VICIdial Modify System Settings page showing revision, schema, interface, SIP-stack, and API-related controls
Captured August 11, 2026 at 16:22:08 UTC on the authorized isolated demo. This is a read-only view of system-wide settings with no credentials or addresses; it does not prove that a setting was changed or that an API request succeeded.

What actually differs on the RHEL family versus the Debian family

Four things change when you move the same VICIdial build from Ubuntu or Debian to AlmaLinux 9 or Rocky Linux 9, and none of them are cosmetic. SELinux ships enabled and enforcing by default on the RHEL family; Debian-family systems do not ship it at all. Package names and the repositories they come from diverge almost completely, because AlmaLinux 9 and Rocky Linux 9 draw from Red Hat's own package set, reached through EPEL (Extra Packages for Enterprise Linux) and third-party Asterisk/dialer repositories, rather than Debian's archive. PHP arrives as version 8.2 by default on both families at this point, but how you pin, switch or roll back a PHP version differs: the RHEL family typically uses `dnf module` streams or the Remi repository, while the Debian family uses `apt` with a versioned package name. And the firewall tool itself is different software with a different mental model: `firewalld`, with its named zones and services, on the RHEL family, versus Uncomplicated Firewall (UFW), with its simple allow/deny rule list, on the Debian family.

None of these differences are exotic to VICIdial. They are exactly the differences anyone moving any Apache/PHP/database-driven application between the two families runs into. What makes VICIdial specifically painful is that its own install tooling, community documentation and forum knowledge base grew up almost entirely on the Debian family and older CentOS releases, so RHEL-family package names, SELinux contexts and firewalld zones get worked out by individual community authors project by project, rather than shipped as VICIdial's own tested default.

  • SELinux, package source, firewall tool and PHP version handling all differ from the Debian-family path.
  • None of these differences are unique to VICIdial; they apply to any similar application moved to the RHEL family.
  • The real gap is community tooling maturity, not Linux capability itself.
RHEL-family versus Debian-family, side by side
SELinux                      | RHEL-family: enforcing by default        | Debian-family: not presentPackage source                | RHEL-family: EPEL plus third-party repos | Debian-family: Debian archive plus third-party reposFirewall tool                 | RHEL-family: firewalld (zones/services)  | Debian-family: UFW (allow/deny rules)PHP version handling          | RHEL-family: dnf module streams or Remi  | Debian-family: apt with a pinned package name Detailed, step-by-step guide on this site: ViciBox only (openSUSE-based appliance, lab-only) -- neither a from-scratch RHEL-family nor Debian-family build is currently pinned here.
Not executed · worksheet or reference text

This sample is a template or reading aid, not a terminal command. There is no output to show.

Before you run it
Read this before deciding which family to target. It summarizes public community guidance plus this publication's own verification status; it is not a command to run.
Success looks like
You can name which of these four differences would actually block or slow your own team down, before you touch a server.
Stop if
If you cannot say which package model or firewall tool your organization already supports elsewhere, that is a reason to slow down, not a reason to guess.

Why SELinux has to come off, not just get tuned

SELinux is a kernel-level access-control layer that enforces which process can read, write or execute which file, socket or port, on top of ordinary Linux permissions. AlmaLinux 9 and Rocky Linux 9 ship it enabled and set to `enforcing`. Community guidance for VICIdial on the RHEL family is consistent on one point: SELinux has to be disabled, not carefully tuned with a custom policy module, before VICIdial will run.

The reason is not that SELinux is bad practice in general; it is that VICIdial was never written with it in mind. Its Perl scripts write and rewrite configuration files, spawn processes and open sockets in ways that assume unrestricted file access. Asterisk, the open-source telephony engine underneath VICIdial that actually places and receives calls, writes recordings, generates PJSIP (a SIP channel implementation) configuration, and reads and writes voicemail and spool directories in places SELinux's default policy was never taught to allow for that binary. Apache's own configuration, and the paths VICIdial's web screens read and write under it, assume the same freedom.

Writing a correct custom SELinux policy for all of that is possible in principle. In practice, no VICIdial-specific policy module is maintained anywhere in the ecosystem, official or community, so every reviewed guide disables SELinux outright, either by setting it to `permissive` or by turning it off entirely in `/etc/selinux/config` and at the kernel command line. Confirm which state a candidate server is actually in before you plan around it; do not assume from the distribution name alone.

  • SELinux ships enforcing by default on AlmaLinux 9 and Rocky Linux 9.
  • VICIdial's Perl scripts, Asterisk's file operations and Apache's configuration all assume it is off.
  • No maintained VICIdial-specific SELinux policy exists; every reviewed guide disables it rather than writing one.
Read-only checks: distribution, SELinux state and PHP version
cat /etc/os-releasegetenforcesestatus 2>/dev/null | head -n 5php -v
Evidence · ViciBox 12 demo capture

Captured demo response · 2026-09-24 22:25 UTC. The displayed command is the command that ran; a safe subset label means it was filtered, redacted, or fixture-scoped. Replays only after you select Replay transcript.

Command output line: cat /etc/os-release
NAME="openSUSE Leap"
VERSION="15.6"
ID="opensuse-leap"
ID_LIKE="suse opensuse"
VERSION_ID="15.6"
PRETTY_NAME="openSUSE Leap 15.6"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:15.6"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"
DOCUMENTATION_URL="https://en.opensuse.org/Portal:Leap"
LOGO="distributor-logo-Leap"
Command output line: getenforce
bash: getenforce: command not found
Command output line: sestatus 2>/dev/null | head -n 5
(no output)
Command output line: php -v
PHP 8.2.30 (cli) (built: Jan 7 2026 12:00:00) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.30, Copyright (c) Zend Technologies
with Zend OPcache v8.2.30, Copyright (c), by Zend Technologies
Before you run it
Run these four commands on the candidate server over SSH. None of them changes anything; getenforce and sestatus only report the current SELinux mode, and php -v only reports the installed version.
Success looks like
You can state, in one line, which distribution and version this server actually runs, whether SELinux reports Enforcing, Permissive or Disabled, and which PHP version is installed, before any install decision gets made from a guess.
Stop if
If getenforce is not found, SELinux tooling was never installed and the system may not be a RHEL-family host; confirm the distribution with /etc/os-release before assuming anything about SELinux at all. On our ViciBox 12 lab, which runs openSUSE Leap 15.6 rather than a RHEL-family distribution, that is exactly what this capture shows: os-release names the distribution, getenforce is reported as not installed, and sestatus prints nothing — the expected result for this non-RHEL host, not a fault in the checks themselves.

The PHP 8.2 reality: old VICIdial code was not written for it

PHP (PHP: Hypertext Preprocessor) is the scripting language behind VICIdial's admin and agent web screens, and 8.2 is the version that ships by default on both AlmaLinux 9/Rocky Linux 9 and current Debian-family releases at this point. That, by itself, is not a RHEL-versus-Debian problem. The real problem is VICIdial's own code age: any VICIdial revision more than roughly four years old was written against PHP 7.x, and PHP 8.x removed or changed enough language behavior that older code throws deprecation warnings at best and fails outright at worst, on either family.

This becomes a RHEL-specific decision because of how each family lets you manage that mismatch. On the Debian family, pinning an older PHP version alongside 8.2, or holding a package at a known-working version, is a well-worn `apt` pattern with mature third-party repositories behind it. On the RHEL family, the equivalent tools are `dnf module` streams, which switch the whole system's default PHP stream, or the Remi repository, which offers multiple PHP versions side by side with its own naming and configuration conventions. Community guides for VICIdial on AlmaLinux 9 lean on Remi specifically, because `dnf module` alone often cannot reach far enough back for an older VICIdial revision's actual PHP requirement.

Before deciding anything, find out which PHP version the VICIdial revision you intend to run actually needs, and which PHP version the candidate server already has. A brand-new revision on 8.2 may need nothing at all; an older one will need a specific, deliberately chosen PHP version, not whatever the distribution happened to install.

  • PHP 8.2 is current on both families now; the age of your VICIdial revision matters more than which family you pick.
  • VICIdial code older than roughly four years was written for PHP 7.x and breaks or warns under 8.x.
  • Pinning an older PHP version uses dnf module streams or the Remi repository on the RHEL family, versus a pinned apt package on the Debian family.
Read-only check: which PHP is actually installed
php -vphp -m | grep -i mysqlirpm -q php 2>/dev/null || echo 'no rpm package named php: this may not be a RHEL-family host'
Evidence · ViciBox 12 demo capture

Captured demo response · 2026-09-24 22:25 UTC. The displayed command is the command that ran; a safe subset label means it was filtered, redacted, or fixture-scoped. Replays only after you select Replay transcript.

Command output line: php -v
PHP 8.2.30 (cli) (built: Jan 7 2026 12:00:00) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.30, Copyright (c) Zend Technologies
with Zend OPcache v8.2.30, Copyright (c), by Zend Technologies
Command output line: php -m | grep -i mysqli
mysqli
Command output line: rpm -q php 2>/dev/null || echo 'no rpm package named php: this may not be a RHEL-family host'
package php is not installed
no rpm package named php: this may not be a RHEL-family host
Before you run it
Run these on the candidate server. php -v and php -m only read the running interpreter's version and loaded modules; rpm -q only queries the installed package database and changes nothing.
Success looks like
You know the exact PHP version and whether the mysqli extension VICIdial depends on is loaded, before deciding whether this revision needs a different PHP version pinned.
Stop if
If php -v reports 8.x and your VICIdial revision predates PHP 8 support, expect deprecation warnings or outright failures on either family; that is a reason to pin an older PHP version deliberately, not a reason to patch around individual warnings as they appear.

Where to get a procedure you can actually trust

This publication is not the place to get a step-by-step AlmaLinux 9 or Rocky Linux 9 install sequence, because it has not run one and will not invent one to fill the shape of a how-to. Two kinds of source are worth naming instead, and they are not the same kind of authority.

The VICIdial project's own scratch-install instructions are the first stop, and the closest thing to vendor guidance that exists for building VICIdial from individual packages on any Linux distribution, RHEL-family included. Read them in full before running anything; they describe the components VICIdial needs, Asterisk, a database server, Apache, Perl and PHP among them, and the order they go in, without assuming any one distribution's package names.

The actively maintained community auto-installer for AlmaLinux 9 and Rocky Linux 9 with Asterisk 18 is the script maintained by carpenox at dialer.one, the CyburDial project. It specifically addresses the DAHDI (Digium/Asterisk Hardware Device Interface) and PHP 7 packaging problems that used to block a clean AlmaLinux 9 build, and it is the installer named consistently across independent community sources as the current, working option for this platform. KingAsterisk and ViciStack each publish their own separate manual walkthroughs covering the same ground. All three of these are community-maintained: written, tested and updated by individuals and small teams outside the VICIdial project, not by VICIdial itself and not verified by this publication.

  • VICIdial's own scratch-install instructions describe components and order for any distribution, RHEL-family included.
  • The carpenox / CyburDial auto-installer at dialer.one is the actively maintained community installer for AlmaLinux 9 and Rocky Linux 9 with Asterisk 18.
  • KingAsterisk and ViciStack publish separate community walkthroughs; read any of these in full, including their own caveats, before running anything.

What this publication has verified, and what it has not

Say the gap plainly, once: this publication has not verified a from-scratch install on AlmaLinux 9 or Rocky Linux 9. It has never been run, checked or pinned here, and nothing in this article should be read as changing that.

This publication's most detailed, vendor-doc-backed install path is ViciBox 12 installation: from bare metal to first dial — a prebuilt appliance, not a from-scratch build, and currently lab-only. See ViciBox version status: why ViciBox 12 and ViciBox 13 are lab-only lessons for why (openSUSE Leap 15.6 has been end-of-life since April 30, 2026).

Whichever family you land on, hardening the server is a separate job from installing it, and this publication already covers that ground without repeating firewall specifics here: see Secure your VICIdial server: SSH, firewall and access control for SSH lockdown, fail2ban and the exact port list VICIdial needs open, then apply it through whichever firewall tool your server actually runs — firewalld on the RHEL family and on ViciBox, UFW on the Debian family.

Decide: ViciBox, RHEL-family, or Debian-family from scratch

Three situations cover most real decisions here. If you have a genuinely free choice of distribution and a prebuilt appliance is acceptable rather than a from-scratch build, pick ViciBox 12 installation: from bare metal to first dial — the most detailed, vendor-doc-backed path on this site, though it is currently lab-only (see ViciBox version status: why ViciBox 12 and ViciBox 13 are lab-only lessons).

If you need a from-scratch build and your organization has already standardized on the RHEL family, or a support contract or compliance auditor names Red Hat Enterprise Linux or one of its rebuilds specifically, pick AlmaLinux 9 or Rocky Linux 9 and use the scratch-install instructions posted on the VICIdial forum or the carpenox / CyburDial installer, read in full first — that requirement is not something an install guide can argue you out of.

If you need a from-scratch build on the Debian family specifically, go straight to the scratch-install instructions posted on the VICIdial forum; this publication no longer maintains its own pinned installer for that path.

If you are still unsure which situation you are in, the read-only checks earlier in this article, distribution, SELinux state and installed PHP version, tell you what you are actually starting from. Run them on the candidate server before you commit to any path, so the decision rests on the server in front of you rather than on a distribution's reputation.

  • Free choice of distribution, appliance model acceptable: choose ViciBox 12 installation: from bare metal to first dial — lab-only, not yet a production path.
  • From-scratch build, standardized or compliance-bound to the RHEL family: choose AlmaLinux 9 or Rocky Linux 9, using the scratch-install instructions posted on the VICIdial forum or the carpenox / CyburDial installer, read in full first.
  • From-scratch build on the Debian family: use the scratch-install instructions posted on the VICIdial forum directly — this publication does not maintain a pinned installer for that path.
  • Either way, confirm SELinux state, PHP version and distribution on the real candidate server before deciding, not from memory or a guess.

Evidence ledger

Verification basis

  • Guide source: three independent community guides, KingAsterisk, ViciStack and dialer.one/CyburDial, each describe building VICIdial on AlmaLinux 9 or Rocky Linux 9; none is VICIdial project documentation, and none was run by this publication.
  • Verified boundary: this publication's most detailed, vendor-doc-backed install path is ViciBox (an appliance, not a from-scratch build), and it is currently lab-only. Neither a from-scratch RHEL-family nor a from-scratch Debian-family build is independently verified by this publication; AlmaLinux 9 and Rocky Linux 9 specifically have never been run, checked or pinned here.
  • Migration context: CentOS 7 reached end of life (EOL) on June 30, 2024 per Red Hat's own announcement, with no further patches issued after that date; that deadline is a common reason teams evaluating a RHEL-family target today land on AlmaLinux 9 or Rocky Linux 9 rather than CentOS.
  • Community agreement: KingAsterisk, ViciStack and dialer.one/CyburDial independently agree that SELinux must be disabled and that VICIdial code older than roughly four years breaks or warns under PHP 8.x; agreement across independent authors supports the direction of that guidance, not a vendor-verified procedure.

Primary references

Sources

  1. VICIdial scratch installation instructionsVICIdial Forum · accessed August 5, 2026
  2. ViciBox Phase 1 installationViciBox · accessed September 23, 2026
  3. ViciBox Phase 2: Express Box installationViciBox · accessed September 23, 2026
  4. How to install VICIdial on Alma Linux 9 with my new auto installerDialer.one / CyburDial (community-maintained) · accessed August 5, 2026
  5. carpenox vicidial-install-scripts repositoryGitHub / carpenox (community-maintained) · accessed August 5, 2026
  6. VICIdial scratch installation on AlmaLinux 9KingAsterisk (community-maintained) · accessed August 5, 2026
  7. The complete VICIdial setup guide: from bare metal to first dialViciStack (community-maintained) · accessed August 5, 2026
  8. CentOS Linux has reached its end of lifeRed Hat · accessed August 5, 2026

Follow without guesswork

Get the next article

RSS is live now. Email delivery below is an explicit local preview and sends nothing.Open the RSS feed
Email preview only. The address stays in this browser and is never transmitted.