As I described late last year, this site runs on PHP 7 built from source. As a result, with each point release, I’ve had to recompile and relink.
Recompiling isn’t particularly challenging, but maintaining symlinks is key, as is building each version independently of the last.
Don’t bork everything
It wasn’t until 7.0.3 that I made a potentially-serious mistake, and fortunately I caught it before running make install
. As I noted in my original post, each point release is built alongside the release I’m running, and I symlink the 7.0.0
directory to whichever release is active. Init scripts maintain their 7.0.0
reference, simplifying upgrades.
Since I’ve written out my configuration command in the prior post, I copy from there to build subsequent releases. This last time, I forgot to change the --prefix
. Again, I fortunately caught this before installing the build.
Had I missed this, PHP 7 would’ve been broken because in overwriting the 7.0.0
symlink, I’d have lost the symlinks to the active configurations in the associated 7.0.X
directory.
To remedy this, I ran the ./configure
command again with the correct prefix, then re-ran make
to rebuild PHP with the correct path.
Symlinks upon symlinks
So, I have a 7.0.0
symlink that points to the latest working build. The build is only half of my requirement, though. Now it’s time to update some symlinks.
With each release, I don’t want to lose and recreate my PHP configurations. Accordingly, each PHP 7 build contains symlinks to shared configurations found in /etc/
; once again, refer to my first PHP 7 post for more details on my setup.
To begin, I symlink the new build to the existing configurations.
cd /usr/local/php7/7.0.3 mv etc etc.dist ln -s /etc/php7 etc ln -s /etc/php7.ini lib/php.ini
Again, if any of the above is unclear, see my Hello PHP 7! post.
Making the switch
Now that the new PHP 7 build is ready, switching is a two-step process.
First, update the symlink:
cd /usr/local/php7/ rm 7.0.0 ln -s 7.0.3 7.0.0
Next, restart PHP 7, completing the upgrade:
/etc/init.d/php7 restart
Cleanup
I prefer to wait a period before removing the previous version, lest any issues arise. Switching back is a matter of changing the 7.0.0
symlink as noted above, and the individual builds don’t occupy enough space to warrant an immediate purge.
When the time comes, both the build and source directories should be removed.