How to Update ICTFax
To update ICTFax Community Edition, back up the database and your files first. On a package install, update the ICTCore and ICTFax RPMs, then run any matching database update scripts in version order. On Docker, pull the new image and recreate the container on the same volumes. Then test a login, a fax and your extensions.
This guide covers both ways of running ICTFax described in the ICTFax installation guide: the RPM packages and the Docker image.
1. Back up first
Don’t skip this. An update touches the database schema and the code that reads it, and a backup is the only clean way back. Note your current versions too, since you’ll need them to pick the right update scripts:
rpm -q ictcore ictfax
Before a major version upgrade, read the ICTFax release notes on GitHub. They list any database update scripts you need to run. If your version isn’t covered, open a support ticket before you start.
Then dump the database and archive your data and settings. /usr/ictcore/data holds received faxes and uploaded documents, and /usr/ictcore/etc holds ictcore.conf:
sudo mysqldump ictfax > ictfax-db-$(date +%F).sql
sudo tar czf ictfax-files-$(date +%F).tar.gz /usr/ictcore/data /usr/ictcore/etc /etc/ictcore.conf
The database name ictfax is the one the install guide creates. If you picked another, check the [db] section of /etc/ictcore.conf. Copy both files off the server before you go on.
2. Update a package (RPM) install
Run the update as root. These are the same packages the install guide puts on the server:
sudo dnf update ictcore ictcore-fax ictcore-email ictcore-voice ictcore-freeswitch ictfax
On older systems without dnf, use yum instead. Check the new versions with rpm -q ictcore ictfax.
Next, the database. ICTCore keeps its schema update scripts in /usr/ictcore/db/update, named update_<from>-to-<to>.sql:
ls /usr/ictcore/db/update
When the release notes list one for your upgrade, run it against the database, oldest first if there’s more than one, and run each one only once:
sudo mysql ictfax < /usr/ictcore/db/update/update_<from>-to-<to>.sql
Finally, restart the services:
sudo systemctl restart httpd php-fpm freeswitch sendmail
3. Update the Docker image
Your data survives only if it lives on volumes. The image keeps faxes and documents in /usr/ictcore/data, logs in /usr/ictcore/log and the bundled database in /var/lib/mysql. If you started the container without volumes, as the older command in the install guide did, copy the data out before you remove anything:
docker exec ictfax mysqldump -u root ictfax > ictfax-db-$(date +%F).sql
docker cp ictfax:/usr/ictcore/data ./ictfax-data-backup
docker cp ictfax:/usr/ictcore/etc ./ictfax-etc-backup
Use your own container name in place of ictfax, and add -p to the dump if you set DB_ROOT_PASS. Then pull the new image and recreate the container with the same ports, volumes and settings:
docker pull ictinnovations/ictfax:latest
docker stop ictfax && docker rm ictfax
docker run -d --name ictfax \
-p 8080:80 \
-p 5060:5060/tcp -p 5060:5060/udp \
-p 16384-16484:16384-16484/udp \
-v ictfax-data:/usr/ictcore/data \
-v ictfax-log:/usr/ictcore/log \
-v ictfax-db:/var/lib/mysql \
ictinnovations/ictfax:latest
Pass the same -e settings you used before, such as DB_HOST, DB_PASS or SIP_EXT_IP. The container rewrites its database settings from them on every start. Any change you made by hand inside the old container, such as [provisioning] host or [sendmail] domain in ictcore.conf, goes with it, so apply it again.
The image only creates the database schema on the first boot of an empty database volume. A newer image does not migrate an existing database by itself. So check the release notes for update scripts before you switch images, and if one is listed, run it inside the container with docker exec -i ictfax mysql -u root ictfax < update_<from>-to-<to>.sql.
4. After the update
- Log in to the web interface and open Dashboard, Send Fax and Receive Fax. Older faxes should still be listed.
- Send a test fax to a number you control and watch its status in the Outbound Fax list.
- Check extension registration if you use fax machines or ATAs:
fs_cli -x "sofia status profile ictcore reg"On Docker, run it as
docker exec ictfax fs_cli -x "sofia status profile ictcore reg". If devices get 403 Forbidden, follow the manual fix in the fax machine and ATA guide.
Something broke? Restore the dump with sudo mysql ictfax < ictfax-db-DATE.sql and put the archived files back, or open a support ticket.
FAQ
How do I find my current ICTFax version?
On a package install, run rpm -q ictcore ictfax.
Do I still replace module folders by hand?
No. That step belonged to the old Drupal-based ICTFax. Current versions update through the RPM packages or the Docker image.
Will I lose received faxes?
Not if you back up /usr/ictcore/data first, and on Docker keep it on a volume.
Can I run an update script twice?
Don’t. Each script changes tables once. Run it a second time and it will fail or duplicate rows, so restore your backup instead.