I and Kushal Das, Sayan Chowdhury, Gaurav Kumar, Ashish Mishra, Subhendu Ghosh, Zubin Tewari, Apoorv Ashutosh,Saurabh Mandal, Biswajit Malakar organized a Hacknight@DGPLUG on 5th feb,2013 from 12am to 4.30am .
Our plan was to create a
Remote C Compiler
The idea is to have a working system which will allow trusted remote systems to submit C programs to a central server and the few build workers will keep monitoring the job queue, they will compile the code and execute it and return the result or any errors back to the users to the remote systems.
It is hosted in here.
Although it is not fully functional yet, I mean the code is not yet designed to sent the output back to the client who sent the compile request. We look forward to getting on and finishing off the tasks as required.
Here ,me and Souradeep and aavrug wrote together this code that would compile the program on the server side. Kushal also helped us. We look forward to getting on and finishing off the tasks as required.
The code is
#!/usr/bin/python import tempfile import os import subprocess import sys from retask.queue import Queue, Job def file_read(file_name): f=open(file_name) content=f.read() f.close() return content,file_name def main(): queue = Queue('test') queue.connect() while True: task = queue.wait() name = task.data['filename'] print "Received", name content = task.data['text'] destdir = writesource(name, content) temp_path = os.path.join(destdir, name) x = os.path.join(destdir, 'test') out, err = system('gcc ' + temp_path + ' -o ' + x) if err: queue.send(task, err, 120) else: out1, err1 = system(x) if err1: queue.send(task, err1, 120) else: queue.send(task, out1, 120) #print system(x) def system(cmd): """ Invoke a shell command. Primary replacement for os.system calls. """ ret = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) out, err = ret.communicate() return out, err def writesource(name, content): destdir = tempfile.mkdtemp(suffix='.' + str(os.getpid()), dir=None) temp_path=os.path.join(destdir,name) f=open(temp_path,'w') f.write(content) f.close() return destdir if __name__== '__main__': main()
At last,We got success.In the mean time ,we enjoyed very much.We need more this type of hack night.
Special thanks to Kushal.