- — HOW-TO: Make Windows 7 Boot Faster
- — TWEAK: Filter Unread Emails in Gmail
- — TIP: Linux Virtual Machine Performance Tweaks
- — HOW-TO: Automated TV Series Downloads Using Raspberry-PI
- — FAQ: Mouse Randomly Freezing in Windows 7
- — TWEAK: Make Torrents Download Faster
TIP: PHP Install/Upgrade "Sanity Check"
I used to be a meticulous configure, compile and make installer of packages -- the old school Linux way of doing things. I customize to take advantage of the CPU optimizations to squeeze every bit of performance from the processor and any of the available resources the server has. And usually, the source is more updated than the pre-packaged binaries available for install.
Nowadays, largely due to the virtualization technology, I left that practice and settled for pre-packaged repo-based RPM binaries. I found this to be less hassle and takes less time to complete. What's more? Dependencies are automatically installed and most of all upgrading the packages takes even less effort. It takes a bit of time and exposure to finally settle to this practice. To be honest, it was a bit difficult at first.
Still, the discipline involved in the installs and upgrades are there. This is more valuable than anything else. I got to practice this habbit of post-upgrade checks and I am thankful for putting the effort early on to develop this skill.
Lately, a request was made to install PHP modules to take advantage of built in libraries. The repository already had upgraded versions of the PHP binaries and I was forced to upgrade due to this. The repo-based RPM install saved me. After yum completed the installs, the sanity check was to run "php -m" to see if all of the modules run intact. It showed errors on the pdo_oci.so module. The exact error is below:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/oci8.so' - libclntsh.so.12.1: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_oci.so' - libclntsh.so.12.1: cannot open shared object file: No such file or directory in Unknown on line 0
The shared object pdo_oci.so is dependent on the oracle client libraries. So after downloading the RPM off the oracle website, and installing the dependency was resolved. The extra step that needed to be done was to include the new oracle client libraries to the global LD_LIBRARY_PATH of the system.
This was via creating the file /etc/ld.so.conf.d/oracle12-client.conf. The file needed to contain the path "/usr/lib/oracle/12.1/client64/lib" (the path to the newly installed oracle client libraries). To make things easier, run this on the a terminal.
echo /usr/lib/oracle/12.1/client64/lib > /etc/ld.so.conf.d/oracle12-client.conf
After completing the above steps, execute "ldconfig -v" and see if the new oracle client libraries got included by the library dependency resolver.
Running "ldd /usr/lib64/php/modules/pdo_oci.so" displayed all of the dependent libraries present without any missing ones.
# ldd /usr/lib64/php/modules/pdo_oci.so
linux-vdso.so.1 => (0x00007ffffa754000)
libclntsh.so.12.1 => /usr/lib/oracle/12.1/client64/lib/libclntsh.so.12.1 (0x00007fd40e195000)
libc.so.6 => /lib64/libc.so.6 (0x00007fd40de01000)
libnnz12.so => /usr/lib/oracle/12.1/client64/lib/libnnz12.so (0x00007fd40d6eb000)
libons.so => /usr/lib/oracle/12.1/client64/lib/libons.so (0x00007fd40d4a7000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fd40d2a3000)
libm.so.6 => /lib64/libm.so.6 (0x00007fd40d01e000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd40ce01000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fd40cbe8000)
librt.so.1 => /lib64/librt.so.1 (0x00007fd40c9df000)
libaio.so.1 => /lib64/libaio.so.1 (0x00007fd40c7de000)
libclntshcore.so.12.1 => /usr/lib/oracle/12.1/client64/lib/libclntshcore.so.12.1 (0x00007fd40c28e000)
Executing "php -m" again displayed all the modules used by PHP but without any warnings this time. The discipline of running post-upgrade sanity checks always pays off. It is a habbit that is hard to develop but a practice that is required of every hard-core system administrator.