Tag: RHEL5

  • Compile an SRPM

    Download SRPM into a directory of choice. Generally files out to go into:

    /usr/src/redhat/SRPMS

    Then run:

    rpm --rebuild <file>-<version>.src.rpm

    This will then build the new RPM. Everything will then happen automatically, and the newly built RPMs will go here:

    /usr/src/redhat/RPM/<cpu-type>

    If the configuration file needs to be changed then run:

    rpm -i <file>-<version>.src.rpm

    The spec file will be extracted to:

    /usr/src/redhat/SPEC

    Generally it would be called:

    <file>-<version>.spec

    Changes can now be made to the spec file. Once the changes are complete the RPM needs to be made using it:

    rpm -bb --clean --rmsource <file>-<version>.spec

    If the build goes ok, the file will end up in the normal location:

    /usr/src/redhat/RPM/<cpu-type>

    Building a Kernel RPM (build UP and SMP Kernels)

    rpmbuild --target i386 --with up --with smp --without BOOT --without debug <spec file>
  • Using Oracle InstantClient 11g with PHP onto RHEL 5 with SELinux

    This is an example of using the Oracle InstantClient 11g with PHP.

    Installation InstantClient for PHP

    This is based on work from the past – but I appeared to have done the following:

    1. Installed InstantClient and Pear to manage the php installation.
      • sudo yum install php-pear
      • sudo rpm -ivh oracle-instantclient11.1-basic-11.1.0.7.0-1.i386.rpm
      • sudo rpm -Uvh oracle-instantclient11.1-devel-11.1.0.7.0-1.i386.rpm
    2. Update the library cache to include oracle:
      • sudo vi /etc/ld.so.conf.d/oracle.conf 
      • This file just contains the line: 
        /usr/lib/oracle/11.1/client/lib
    3. Used pecl to install the OCI client into PHP:
      • sudo pecl install oci8
    4. Updated PHP to then make use of the installed module
      • sudo vi /etc/php.d/oci8.ini
      • This file just contained
        ; Enable oci8 extension module
        extension=oci8.so
    5. I then restarted the web server.
      • sudo /etc/init.d/httpd restart

    Testing

    You can then test this by creating a php file with the following content:

    <?php      
    $conn = oci_connect('[user]', '[password]', ' [//]host_name[:port][/service_name][:server_type][/instance_name]');       
    $query = 'select table_name from user_tables';       
    $stid = oci_parse($conn, $query);       
    oci_execute($stid, OCI_DEFAULT);       
    while ($row = oci_fetch_array($stid, OCI_ASSOC)) {       
      foreach ($row as $item) {       
        echo $item." ";       
      }       
      echo "&lt;br&gt;\n";       
    }       
    oci_free_statement($stid);       
    oci_close($conn);       
    ?>

    Then use a browser to get to this web page, and it should show you the content of user_tables.

    Troubleshooting

    Then, if SELinux its not turned off then the following is needed, (but we don’t want to do it this way as it’s painful and make SELinux a bit pointless):

    sudo chcon -t textrel_shlib_t '/usr/lib/oracle/11.1/client/lib/libnnz11.so'       
    sudo chcon -t textrel_shlib_t '/usr/lib/oracle/11.1/client/lib/libclntsh.so.11.1'       
    sudo chcon -t textrel_shlib_t '/usr/lib/php/modules/oci8.so'       
    sudo execstack -c /usr/lib/oracle/11.1/client/lib/libclntsh.so       
    sudo execstack -c /usr/lib/oracle/11.1/client/lib/libclntsh.so.11.1       
    sudo execstack -c /usr/lib/oracle/11.1/client/lib/libnnz11.so       
    sudo chcon -u system_u '/usr/lib/php/modules/oci8.so'       
    sudo execstack -s /usr/sbin/httpd       
    sudo /usr/sbin/setsebool -P httpd_can_network_connect 1