Migrating From CentOS to Rocky Linux: Lessons Learned

For many infrastructure teams, the move from CentOS to Rocky Linux began as a response to a change in direction rather than a planned platform refresh. CentOS Linux 8 reached end of life in December 2021, while CentOS 7 followed on 30 June 2024. That left administrators balancing security exposure, application compatibility, and the practical cost of changing systems that had been stable for years.

Rocky Linux offers a familiar Enterprise Linux foundation with long-term support, predictable package management, SELinux, systemd, and broad compatibility with existing automation. The operating system is usually the straightforward part. The difficult work is discovering undocumented assumptions in deployment scripts, monitoring, storage, authentication, and vendor applications.

Australian organisations also need to account for local hosting regions, variable network quality between capital cities and regional sites, privacy obligations, and procurement cycles. A migration that works in a Sydney data centre may need different testing for a Perth office, a Brisbane warehouse, or a remote site dependent on a business-grade NBN connection.

Planning The Migration

The first lesson was to treat the change as a platform migration, not a simple in-place package replacement. A server inventory should record the CentOS release, kernel, enabled repositories, installed packages, running services, storage layout, boot mode, encryption, backup agent, monitoring integrations, and authentication sources.

It is equally important to identify ownership. A forgotten PHP application, an old file transfer service, or a locally modified systemd unit can become the reason a supposedly routine upgrade runs late. Consulting records, architecture diagrams, and market research resources can help place technical decisions within the size and operating realities of smaller Australian businesses.

A clear classification makes sequencing easier. Development systems can validate the migration approach, test systems can expose application problems, and less critical production workloads can confirm operational readiness. Internet-facing services, identity infrastructure, databases, and systems with strict availability requirements should be scheduled only after those earlier stages have produced reliable evidence.

Choosing Rocky Linux

Rocky Linux was attractive because its userland and administration model are close to the Enterprise Linux ecosystem many CentOS teams already understand. Existing knowledge of dnf, RPM packages, SELinux policies, firewalld, systemd units, and common configuration paths remains useful. That reduces retraining and allows existing Ansible or shell automation to be adapted rather than discarded.

Compatibility should still be tested instead of assumed. A package built for an earlier distribution release may depend on an older library, repository, or kernel behaviour. Third-party agents for backup, endpoint security, observability, and hardware management can have their own support matrices. Confirming vendor support before the maintenance window is particularly important when the system supports payment, logistics, or regulated records.

Cloud images and managed hosting options should be reviewed as part of the decision. Rocky Linux images are available through major public cloud marketplaces, but image defaults differ between providers. In Australia, selecting a nearby region such as Sydney or Melbourne can reduce latency and help with data-residency expectations, though it does not by itself satisfy privacy or contractual requirements.

Inventory And Compatibility Testing

An inventory is useful only when it captures behaviour. Record listening ports, scheduled jobs, mounted filesystems, cron entries, sudo rules, service dependencies, certificate locations, and outbound connections. A server may appear to run one application while quietly supporting reporting, backups, monitoring, and a nightly integration with another system.

Build a representative test host from the intended Rocky Linux image and apply configuration through the same automation used in production. Compare package versions, file permissions, environment variables, firewall rules, time synchronisation, DNS resolution, and log output. Testing the actual deployment process reveals errors that a manually prepared virtual machine can hide.

Pay close attention to Python, PHP, Java, and database connectors. An application can start successfully while failing later when it handles a specific character set, TLS negotiation, file upload, or scheduled report. Local testing should include realistic time zones, Australian daylight-saving behaviour where relevant, and integrations with providers whose endpoints may sit outside the country.

Handling Applications And Data

Most migration failures occur above the operating system. Configuration files often contain hard-coded paths, user IDs, library locations, or assumptions about service names. Compare the old and new hosts with checksums and structured configuration reviews, while keeping secrets in a vault or protected deployment system rather than copying them into temporary notes.

Storage deserves its own rehearsal. Validate filesystem labels, mount ordering, UUID references, permissions, quota settings, RAID monitoring, and backup restoration. For database workloads, test both a logical restore and a recovery from the normal backup platform. A successful backup job is not proof that the data can be recovered within the required business timeframe.

For PHP services, confirm the enabled extensions, web-server integration, PHP-FPM pools, upload limits, and opcode caching. For custom F# or other .NET services, verify runtime packages, service accounts, certificates, and native dependencies. A clean operating system provides little value if an application silently loses access to its data directory after the cutover.

Security And Compliance

A fresh Rocky Linux installation should begin with a defined security baseline. Enforce least-privilege access, disable unused services, apply SSH controls, configure firewalld, retain SELinux in enforcing mode where possible, and send useful audit and system logs to a central platform. Avoid solving compatibility problems by permanently disabling security controls.

Australian organisations commonly map technical controls to the Essential Eight, even when they are not formally required to implement every control. Patch management, restricted administrative access, multi-factor authentication, application control, and tested backups provide a practical framework for the migration. The Privacy Act 1988 and the Australian Privacy Principles also make data handling, access, retention, and breach response relevant to infrastructure design.

Security tooling must be tested on Rocky Linux before production deployment. Endpoint agents, vulnerability scanners, backup clients, and monitoring collectors may depend on kernel modules or specific package names. Check their CPU and memory impact as well: a small virtual machine in a Melbourne cloud region can have very different resource constraints from a larger on-premises host in Adelaide.

Cutover And Operations

A low-risk cutover has a written rollback path. Define the final data synchronisation, DNS or load-balancer changes, validation checks, monitoring thresholds, and the point at which rollback is no longer safe. Keep the original CentOS system intact but isolated until the new host has passed the agreed observation period.

Use more than a login test. Check customer transactions, background jobs, scheduled exports, alert delivery, certificate expiry monitoring, backup completion, log ingestion, and access from required networks. When an application serves regional offices, test from those offices rather than relying only on a data-centre administrator’s workstation.

Documentation should be updated during the migration, not months later. Capture the new image source, repository policy, hardening settings, service dependencies, recovery procedure, and ownership. For teams that need broader infrastructure experience, a professional background can also provide useful context when evaluating the operational skills required for platform work.

Practical Migration Priorities

The migration becomes manageable when each server has an explicit owner, a tested build process, and a measurable acceptance checklist. Avoid combining an operating-system change with an unrelated database upgrade, network redesign, or major application release unless there is a compelling reason.

The following priorities kept the work focused:

  • Build a complete dependency and service inventory before selecting migration dates.
  • Recreate each workload from automation on a clean Rocky Linux test host.
  • Confirm vendor support for backup, security, monitoring, and hardware agents.
  • Test SELinux, firewall rules, certificates, scheduled jobs, and external integrations.
  • Rehearse backup restoration and document the recovery time and data-loss objectives.
  • Schedule cutovers around Australian business operations, public holidays, and regional support coverage.
  • Retain a tested rollback option until monitoring and user validation show stable performance.

A staged migration also creates useful operational evidence. Track failed deployments, unexpected package dependencies, performance changes, and support incidents. Those records can improve the next batch of servers and reveal whether the chosen image, repository strategy, and automation standards are sustainable.

Rocky Linux is a strong destination for teams leaving CentOS, but the lasting benefit comes from the discipline around the move. Inventory first, test with production-like workloads, preserve security controls, and make recovery part of the acceptance criteria. Start with one representative non-critical service, document what it teaches you, and use those results to guide each subsequent production cutover.

Experience

Information Technology Consulting

Independent Practice

Provides IT consulting services focused on infrastructure planning, cloud migration strategy, and systems architecture. Engagements draw on years of hands-on sysadmin and development experience across Linux, Windows, and hybrid environments.

K9 Search & Rescue Volunteer

Ongoing

Active participant in K9 Search & Rescue operations, combining technical logistics skills with field support for canine search teams.

Karl Katzke's Blog

October 2006 – May 2014

Published a long-running personal technology blog covering cloud vs. in-house infrastructure, F# and Mono on OSX, hardware vendor critiques, RAID card performance analysis, and sysadmin storytelling. Notable posts include "When Sysadmins Ruled the Earth" (May 15, 2014) and "Getting Started with F# and Mono on OSX" (December 22, 2012).

Credentials

A small badge icon with a shield shape in muted blue tones on a light background

Systems Administration

Deep experience with Linux (RHEL, SLES, CentOS), high-availability clusters, and STONITH configurations.

A small badge icon with a gear shape in muted blue tones on a light background

Cloud Infrastructure

Practical knowledge of AWS EC2, reserved instances, and cost analysis for cloud vs. on-premises deployments.

A small badge icon with a code symbol in muted blue tones on a light background

Development

Proficient in F#, PHP (Symfony), and cross-platform tooling including Mono and MonoDevelop on OSX.

Studies

F# & Functional Programming

Self-directed, 2012

Explored strongly typed functional programming with F# on OSX using the Mono runtime. Published a detailed getting-started guide covering toolchain setup and cross-platform game development research.

High-Availability & Cluster Management

Professional Development, 2009

Configured and documented crm_mon email alerting for STONITH events on SLES11-HAE clusters, integrating with Nagios monitoring for production environments.

Hardware & Storage Performance

Ongoing

Conducted hands-on benchmarking of SATA/SAS RAID controllers including HighPoint RocketRaid 2740 and LSI/SuperMicro AOC-USASLP2-H8iR, comparing against software RAID configurations.

Skills

A small icon representing a server with clean geometric lines in slate blue

Linux Administration

RHEL, SLES, CentOS — package management, kernel tuning, HA clustering, and monitoring integration.

A small icon representing a cloud shape with clean geometric lines in slate blue

Cloud Architecture

AWS EC2, reserved-instance planning, cost modeling, and hybrid infrastructure strategy.

A small icon representing code brackets with clean geometric lines in slate blue

F# & .NET/Mono

Functional programming on OSX, MonoDevelop toolchain, and cross-platform game-dev exploration.

A small icon representing a database cylinder with clean geometric lines in slate blue

PHP & Symfony

Web application development with the Symfony framework and the broader PHP ecosystem.

A small icon representing a storage drive with clean geometric lines in slate blue

Storage & RAID

SATA/SAS controller evaluation, md RAID configuration, and performance benchmarking.

A small icon representing a shield with clean geometric lines in slate blue

High Availability

Pacemaker, STONITH, crm_mon alerting, and Nagios integration for production cluster monitoring.