So December was an interesting month for me, with a few changes in my personal career and the holidays. I take a week off. Which of course lead me spending two weeks catching up on work and to top it off my boss or someone above him decided that we need to take look at a our service architecture. So of course I am now in research mode, which should hopefully lead to some good blog post. Stay tuned.
Category: System Administration
-
Connecting PHP to An Oracle Instance on RedHat or CentOS 5
Here lately it seems that everyone wants to connect to Oracle, but I have to admit this was the first time someone asked me to get PHP to talk to Oracle. It was a lot less painful then I thought it would be, so here is what I did.
A long with the standard PHP RPMs you need to install a couple of additional RPMs from Oracle. These are oracle-instantclient-basic and oracle-instantclient-devel which can be downloaded from http://www.oracle.com/technetwork/database/features/instant-client/index-100365.html. You will also need php-oci8 RPM which can be download fromhttp://oss.oracle.com/projects/php/files/EL5/.
So after you have downloaded the RPMs go a head and install the packages and create the symlink for libcIntsh.so.
$ rpm -Uvh oracle-instantclient-basic-##.#.#.rpm
$ rpm -Uvh oracle-instantclient-devel-##.#.#.rpm
$ cd /usr/include/oracle/##.#/[client|client64]
$ ln –s libclntsh.so.##.# libclntsh.soNow you are going to want to setup you environment settings, It is important to set all Oracle environment variables before starting Apache or running a PHP script, so that the OCI8 process environment is correctly initialized. Setting environment variables in PHP scripts can lead to obvious or non-obvious problems. You can also add Instant Client library path to /etc/ld.so.conf.
$ LD_LIBRARY_PATH=/usr/lib/oracle/##.#/[client|client64]/lib:${LD_LIBRARY_PATH}
$ export LD_LIBRARY_PATHAnd now for the big finish. Here is a simple connection script to test it all out.
<?php
$c = oci_connect( ‘USERNAME’,
‘PASSWORD’,
‘SERVERNAME:PORT/SERVICE_NAME’, INSTANCE_NAME’ );if( $c ) {
$s = oci_parse( $c, ‘SELECT TABLE_NAME FROM all_tables’ );
oci_execute($s) ;
while($res = oci_fetch_array( $s, OCI_ASSOC) ) {
echo $res[‘TABLE_NAME’] . “\n”;
}}
?>For a complete list of function and additional install resources check out the following sites:
http://php.net/manual/en/book.oci8.php
http://wiki.oracle.com/page/PHP
http://www.oracle.com/technetwork/articles/technote-php-instant-084410.html -
Quick Start To Using MongoDB with Python on Linux
With it’s rapid growth in popularity MongoDB is quickly becoming one of the top NoSQL Databases out there and with Python being one of the top ten programming languages according to Tiobe Software’s Programming Community Index. I’ve decided to write a quick how-to to show you just how easy it is to get started with MongoDB and Python.
Assuming that you all ready have Python installed on your system. We’ll start with downloading and installing MongoDB. The first that you will need to do is download the appropriate package from http://www.mongodb.org/downloads to your /tmp directory.
$ curl http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.6.3.tgz > /tmp/mongo.tgz
Once you have downloaded the correct package, find a suitable directory to unpack it and move it to, such as /opt/mongodb.
$ cd /tmp
$ tar -zxf mongo.tgz
$ sudo mv mongodb-linux-i686-1.6.3 /opt/mongodb
Now you will need to create the data directory. By default, MongoDB stores it’s data in “/data/db”, but if for some reason you need to change the location of the data directory you will need to use the “–dbpath” option when starting the server. However I am sticking with the default directory.
$ sudo mkdir -p /data/db
$ sudo chown -R owerid /data/db
You can start MongoDB with the following command.
$ /opt/mongodb/bin/mongod
Now, test it out by using the MongoDB shell to connect to the server as follows.
$ /opt/mongodb/bin/mongo
MongoDB shell version: 1.6.3
connecting to: test
> db.foo.save( { Message : “Hello World” } )
> db.foo.find()
{ “_id” : ObjectId(“4cdd92bc4f6fb75dd2a7642d”), “Message” : “Hello World” }
>
Once you have verified that MongoDB is working you will need to download the Python driver for it which are called “PyMongo”. If you have the Python “setuptools” installed you should be able to do “easy_install pymongo” to install the drivers. Otherwise you can download the project source from http://pypi.python.org/pypi/pymongo/ to install the MongoDB drivers.
$ curl http://pypi.python.org/packages/source/p/pymongo/pymongo-1.9.tar.gz > /tmp/pymongo-1.9.tar.gz
$ tar -zxf pymongo-1.9.tar.gz
$ cd pymongo-1.9/
$ python setup.py install
After everything is installed it’s time to test it all out, so just pop open your favor Python IDE or the Python Console and give it a go. Here is a simple example.
$ python
Python 2.4.3 (#1, Nov 11 2010, 13:34:43)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import pymongo
>>> connection = pymongo.Connection( “localhost”, 27017 )
>>> db = connection.test
>>> db.foo.save({ “Message” : “Hello World 2” })
ObjectId(‘4cdd95bfe1382330b5000000′)
>>> for message in db.foo.find():
… print message
…
{u’Message’: u’Hello World’, u’_id’: ObjectId(‘4cdd92bc4f6fb75dd2a7642d’)}
{u’Message’: u’Hello World 2′, u’_id’: ObjectId(‘4cdd95bfe1382330b5000000’)}
>>>
$
For more information on the PyMongo check out the website athttp://api.mongodb.org/python/1.9%2B/index.html.
-
Connecting Python to Oracle.
In the current world of heterogeneous networks it seems that you need to be able to connect to ever type of database system out there. In a recent project, I was asked, to take an existing MySQL and Python system and get it to connect to an existing Oracle Data Warehouse system. To be honest, I hadn’t actually ever connected Python to an Oracle Database before and from experience this would be either very painful or pretty straight forward.
Of course like everything Python it was pretty straight forward. The first thing you will need to get is the correct cx_Oracle module from http://cx-oracle.sourceforge.net/. The cx_Oracle module allows you to connect to Oracle databases and it conforms to the Python database API specification. Which makes life easier for everyone. After you have installed the module the rest is just a matter having the right permission to connect to the Oracle Database and writing the code.
Here is quick script showing you how to connect to Oracle with Python.
#!/usr/bin/python
import cx_Oracle
connstr=’scott/tiger’
conn = cx_Oracle.connect(connstr)
curs = conn.cursor()
curs.arraysize=50
curs.execute(‘select 2+2 “aaa” ,3*3 from dual’)
print curs.description
print curs.fetchone()
conn.close()For more information check out the Python Programming Language – Official Website
-
Slacking off
Well I haven’t really wrote anything in the last couple of months even though, I have had plenty to write about. I went to OSCON 2010 in July and had a great time. I learned more about MongoDB and picked up a few more bits of information on MySQL, Memcached, and Linux.
In July I went to Novell’s Linux Days. I have to admit that Novell has some nice products. Not sure if I would personally pay for them, but if the company wanted to, I wouldn’t turn my nose up at them.
-
Building Thrift on RedHat/CentOS 5.x
What’s Thrift you ask? Well to quote their website.
Thrift is a software framework for scalable cross-language services development. It combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml.
And why do I needed it? Well I have been testing Cassandra for at work and one of the developers want to generate some csharp code using the Thrift API, so of course he wanted me to do it, since he was having problems getting it to work on his Window box.
So here is the short notes for what I did.
Downloaded Thrift code:
thrift-incubating-0.2.0.tar.gzInstalled/Updated required packages:
sudo yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-develUnpacked the code, compiled, and installed it:
tar -zxf thrift-incubating-0.2.0.tar.gz
cd thrift-incubating-0.2.0
./configure
make
sudo make installThat’s it, have fun. Next project going to look at Lucandra: A Cassandra-based Lucene backend.
-
Finding the HBA WWN on RHEL 5.x
Nice and easy one line command.
shell> cat /sys/class/scsi_host/host*/device/fc*/port_name
-
So many to choose from.
For the last month or so. There has been a debate amongst, my peers and I, on which is the better file system on Linux and how to benchmark and test it. So digging through my back log of emails I notice that Linux Magazine was running a series on the this some topic. So I thought I would sure.
Lies, Damn Lies and File System Benchmarks
Metadata Performance of Four Linux File Systems
Metadata Performance Exploration Part 2: XFS, JFS, ReiserFS, ext2, and Reiser4
-
Reinstalling the Boot Loader on RHEL
In many cases, the GRUB boot loader can mistakenly be deleted, corrupted, or replaced by other operating systems.
The following steps detail the process on how GRUB is reinstalled on the master boot record:
- Boot the system from an installation boot medium.
- Type linux rescue at the installation boot prompt to enter the rescue environment site link.
- Type chroot /mnt/sysimage to mount the root partition.
- Type /sbin/grub-install /dev/hda to reinstall the GRUB boot loader, where /dev/hda is the boot partition.
- Review the /boot/grub/grub.conf file, as additional entries may be needed for GRUB to control additional operating systems.
- Reboot the system.
-
Cloud computing
Cloud computing is a style of computing in which dynamically scalable and often virtualized resources are provided as a service over the Internet.
Cloud computing can be confused with:- grid computing—”a form of distributed computing whereby a ‘super and virtual computer’ is composed of a cluster of networked, loosely coupled computers, acting in concert to perform very large tasks”;
- utility computing—the “packaging of computing resources, such as computation and storage, as a metered service similar to a traditional public utility such as electricity”;
- autonomic computing—”computer systems capable of self-management”.