Ubuntu (12.04) upstart (at boot) services

Creating your own ubuntu upstart service:

  • Create a shell script. (Name it whatever you want. Here I am assuming it to be “autorun.sh”)
    vi autorun.sh
    
  • Copy the shell script to /etc/init.d/
    sudo cp autorun.sh /etc/init.d/autorun.sh
    
  • Make the script executable.
    sudo chmod +x /etc/init.d/autorun.sh
    
  • Update the upstart table of ubuntu by creating symbolic links.
    sudo update-rc.d autorun.sh defaults
    
  • Done.

To boot an already existing script:

  • Update the upstart table of ubuntu by creating symbolic links.
    sudo update-rc.d service_name defaults
    
  • Enable a disabled upstart service
    sudo update-rc.d service_name enable
    

To remove a script from upstart:

  1. (option-1)
    update the table and remove the script(not necessary)
    sudo update-rc.d -f autorun.sh remove
    sudo rm /etc/init.d/autorun.sh (optional)
    
  2. (option-2)
    Disable the service from boot
    sudo update-rc.d -f autorun.sh disable
    
  3. (option-3)
    if there is a configuration file for the script in /etc/init/
    sudo echo 'manual' | /etc/init/scriptname.override
    sudo update-rc.d -f scriptname remove
    

Reference: ubuntu upstart cookbook

Apache Thrift, RPC’s between Java(server)-PHP(client), Hello World Application

A more comprehensive tutorial can be found here.
HOW TO INSTALL:
type(for the pre-requisites): 
sudo apt-get install libboost-dev libboost-test-dev libboost-program-options-dev libevent-dev automake libtool flex bison pkg-config g++ libssl-dev
sudo apt-get install php5-dev php5-cli #for php
sudo apt-get install libglib2.0-dev #for c_glib

For the final installation, download the tarball from the website, http://thrift.apache.org/download/
Then to install the tarball: 

tar -xvf /path/to/tarball
cd /path/to/extraction
./configure
sudo make
sudo make install

Also install the eclipse editor for thrift files.
Eclipse –> help –> Install new Software –>
add the URL: http://thrift4eclipse.sourceforge.net/updatesite/
tick the only package shown and install it.

Compiling the REQUIRED LIBRARIES (for the different languages that has to be supported):

  • for JAVA
    Go to folder /path/to/thrift-version/folder/lib/java/
    execute the command “ant” – compiles using apache ant
    Now the build folder contains all the lib files required.
  • for PHP
    No need for compiling any files, php is used in its raw form.

Making the thrift file:

Tutorial can be found here : http://diwakergupta.github.com/thrift-missing-guide/
Thrift file will include all the services and structures shared between the two languages.

Start with:

namespace java package-name

Making the JAVA server:

Make a new project in Eclipse with type, “Dynamic Web Project”.
Put the “thrift file” in the <project-name>/Java Resources/src/ folder.
Copy the lib files (libthrift-<version>.jar, build/lib/*) to <project-name>/WebContent/WEB-INF/lib/ folder.
Generate the auto-generated java files from the file using the command:

cd path/to/thrift-file/
thrift --gen java -out thrift-file-name

Now we have to implement the services mentioned in the thrift-file by:

  • make a new file in the same package <package-name>.
  • Wrie a class <service-implement> implementing <service-name>.Iface (like this implement all the services)

Now we have to make the server file:

public class server_name implements Runnable {
	/* port to listen */
	private static final int PORT = 9090;
	public void run() {
		try {
			TServerSocket serverTransport = new TServerSocket(PORT);
			HelloService.Processor processor = new HelloService.Processor(new ());
			TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor));
			System.out.println("Starting server on port: "+PORT);
			server.serve();
		} catch(TTransportException e) {
			System.out.println("Message: "+e.getMessage());
			System.out.println("StackTrace: ");
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new Thread(new server_name()).run();
	}
}
Run the server as a java application. This completes the making of the server.
NOTE: To stop the server you’ll need to kill the process via the console.
Making the PHP client:
First auto-generate the PHP package from the thrift file already created using the command:
cd path/to/thrift-file/
thrift --gen php thrift-file-name

Create a new directory named “thrift” and copy all the php library files available in the directory /path/to/thrift-version-folder/lib/php/src/ to the newly created directory. Also create a new sub-directory named “packages” in “thrift” directory, and copy the auto-generated PHP package here.

Create a new file <client-file>.php adjacent to the “thrift” directory.
Contents of the PHP file will be:

// defining the port and server to listen
define("PORT", '9090');
define("SERVER", 'localhost');

//Global variable where the php library files are stored
$GLOBALS['THRIFT_ROOT'] = 'thrift';

//including the library files
require_once $GLOBALS['THRIFT_ROOT'].'/Thrift.php';
require_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php';
require_once $GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php';
require_once $GLOBALS['THRIFT_ROOT'].'/transport/TBufferedTransport.php';

//loading the auto-generated package
require_once $GLOBALS['THRIFT_ROOT'].'/packages/hello/HelloService.php';

try {
	//create a thrift connection
	$socket = new TSocket(SERVER, PORT);
	$transport = new TBufferedTransport($socket);
	$protocol = new TBinaryProtocol($transport);
	
	//create a new hello service client
	$client = new HelloServiceClient($protocol);
	
	//open the connection
	$transport->open();
	
	//calling the service
	$result = $client->sayHello();
	echo "Result: ".$result;
	
	//closing the connection
	$transport->close();
} catch(TException $tx) {
	echo "Thrift Exception: ".$tx->getMessage()."\r\n";
}
To TEST:
Run the JAVA server.
            CONSOLE: “Starting server on port: 9090”
Run the <client-file>.php using the command: php5 client.php
            CONSOLE: “Result: HelloWorld!!”
Finally make a directory “client” and copy the client related files here. Also, make a new directory names “server”, copy all the java server files here. So we have a simple apache thrift application making a bridge between between java(server) and php(client).