Post-Migration Checklist
After completing the migration from CentOS to AlmaLinux or Rocky Linux, follow this checklist item by item to verify that the system is functioning correctly.
Tip: Bookmark this page and go through each item after migration. Mark each check as complete in your own documentation as you go.
1. Verify the Operating System Version
Section titled “1. Verify the Operating System Version”First, confirm that the system has successfully switched to the target distribution.
$ cat /etc/os-releaseConfirm that the NAME and ID fields show the correct distribution name (AlmaLinux or Rocky Linux).
$ cat /etc/redhat-release$ rpm -qa | grep -E '(almalinux|rocky)-release'$ rpm -qa | grep centos-releaseIf CentOS packages still remain:
$ sudo dnf remove centos-release centos-logos centos-indexhtml 2>/dev/null$ sudo dnf distro-sync -y2. Verify the Kernel Version
Section titled “2. Verify the Kernel Version”$ uname -r$ rpm -qa kernel-core | sort$ sudo grubby --default-kernelEnsure the running kernel is from the target distribution. If you are still using an old kernel:
$ sudo dnf install -y kernel$ sudo grubby --set-default /boot/vmlinuz-$(rpm -q kernel-core --qf '%{VERSION}-%{RELEASE}.%{ARCH}\n' | sort -V | tail -1)3. Check Running Services
Section titled “3. Check Running Services”$ systemctl list-units --type=service --state=failedIf any services have failed, investigate each one:
$ systemctl status <service-name>$ journalctl -u <service-name> -n 50 --no-pager$ systemctl list-units --type=service --state=running > ~/services-after-migration.txt$ diff ~/services-before-migration.txt ~/services-after-migration.txtCheck Key Services Individually
Section titled “Check Key Services Individually”$ systemctl is-active sshd$ systemctl is-active crond$ systemctl is-active rsyslog$ systemctl is-active firewalld4. Verify Software Repositories
Section titled “4. Verify Software Repositories”$ dnf repolist --enabledConfirm that the repositories point to the correct distribution. There should be no leftover CentOS repositories.
$ ls /etc/yum.repos.d/ | grep -i centos$ sudo dnf check-update$ dnf repolist | grep epelIf EPEL is missing but needed:
$ sudo dnf install -y epel-release5. Test Applications
Section titled “5. Test Applications”Web Services
Section titled “Web Services”$ systemctl is-active nginx && curl -s -o /dev/null -w "%{http_code}" http://localhost/$ systemctl is-active httpd && curl -s -o /dev/null -w "%{http_code}" http://localhost/Databases
Section titled “Databases”$ systemctl is-active mariadb || systemctl is-active mysqld$ mysqladmin ping 2>/dev/null && echo "Database connection OK"$ systemctl is-active postgresql$ sudo -u postgres psql -c "SELECT version();" 2>/dev/nullProgramming Language Runtimes
Section titled “Programming Language Runtimes”$ php -v 2>/dev/null$ python3 --version$ java -version 2>/dev/nullCustom Applications
Section titled “Custom Applications”For custom-built applications, perform the following checks:
$ sudo ss -tlnp | grep <application-port>$ curl -s http://localhost:<port>/health6. SELinux Status
Section titled “6. SELinux Status”$ getenforceUnder normal circumstances, this should return Enforcing. If it returns Disabled or Permissive, confirm whether this is the expected configuration.
$ cat /etc/selinux/config$ sudo ausearch -m avc -ts recent 2>/dev/null | head -30After migration, some files may have incorrect SELinux labels:
$ sudo fixfiles -F onbootThis will relabel the entire filesystem on the next reboot. If you prefer not to reboot:
$ sudo restorecon -Rv /etc /var /home7. Firewall Rules
Section titled “7. Firewall Rules”$ sudo firewall-cmd --state$ sudo firewall-cmd --list-all$ sudo firewall-cmd --query-port=22/tcp # SSH$ sudo firewall-cmd --query-port=80/tcp # HTTP$ sudo firewall-cmd --query-port=443/tcp # HTTPSCompare with the pre-migration firewall configuration:
$ sudo firewall-cmd --list-all-zones | grep -A 10 "active"8. Network Configuration
Section titled “8. Network Configuration”$ ip addr show$ ip route show default$ cat /etc/resolv.conf$ dig +short google.com$ ping -c 3 8.8.8.8$ nmcli connection show$ hostnamectl9. Scheduled Tasks
Section titled “9. Scheduled Tasks”$ sudo crontab -l$ ls -la /etc/cron.d/$ ls -la /etc/cron.daily/$ ls -la /etc/cron.weekly/$ systemctl list-timers --all10. Backup Verification
Section titled “10. Backup Verification”Confirm that the backup system is still working properly after migration.
$ which rsync && rsync --version | head -1$ sudo lvsImportant: After the migration is verified to be successful, it is recommended to immediately create a new full backup as a new baseline.
$ rpm -qa --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' | sort > ~/packages-after-migration-verified.txt11. System Updates
Section titled “11. System Updates”Confirm that the system can receive updates normally:
$ sudo dnf check-update$ sudo dnf update -y$ sudo needs-restarting -r && echo "No reboot needed" || echo "Reboot required to apply kernel updates"Quick Check Script
Section titled “Quick Check Script”The following script performs most checks at once and outputs a report:
$ echo "===== System Version ====="$ cat /etc/redhat-release$ echo ""$ echo "===== Kernel Version ====="$ uname -r$ echo ""$ echo "===== SELinux Status ====="$ getenforce$ echo ""$ echo "===== Failed Services ====="$ systemctl list-units --type=service --state=failed --no-legend$ echo ""$ echo "===== Enabled Repositories ====="$ dnf repolist --enabled 2>/dev/null$ echo ""$ echo "===== Firewall Status ====="$ sudo firewall-cmd --state 2>/dev/null$ echo ""$ echo "===== Disk Usage ====="$ df -h / /boot /var 2>/dev/null$ echo ""$ echo "===== Network Connectivity ====="$ ping -c 1 -W 3 8.8.8.8 >/dev/null 2>&1 && echo "Internet reachable" || echo "Internet unreachable"$ dig +short google.com >/dev/null 2>&1 && echo "DNS OK" || echo "DNS issue"$ echo ""$ echo "===== Leftover CentOS Packages ====="$ rpm -qa | grep -i centos || echo "None found"Next Steps
Section titled “Next Steps”- Migrate to AlmaLinux — AlmaLinux migration steps
- Migrate to Rocky Linux — Rocky Linux migration steps
- Common Errors Quick Reference — Quick reference when encountering errors