2016-05-07 59 views
0

我正在創建接受客戶端的lv大小然後使用nfs創建和掛載邏輯卷的python CGI腳本。 這是我的代碼:使用python創建邏輯卷cgi

#!/usr/bin/python 
print "Content-type:text/html" 
print "" 
import cgi,commands,os,socket,time,getpass 
form = cgi.FieldStorage() 
st=form.getvalue("st") 
mount=form.getvalue('mount') 
backup=form.getvalue('backup') 
ip=os.environ["REMOTE_ADDR"] 
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
s.bind(("192.168.1.100",4444)) 
a,b=s.recvfrom(100) 
print a 
s.sendto(mount,b) 
if(backup=='Yes'): 
    os.system("lvcreate --size "+st+" --thin volume/pooL1") 
    os.system("lvcreate -V "+st+" --name "+ip+" --thin volume/pooL1") 
    os.system("mkfs.ext4 /dev/volume/"+ip) 
    os.system("mkdir /mnt/"+ip) 
    os.system("mount /dev/volume/"+ip+" /mnt/"+ip+"") 
    os.system("lvcreate -s --name snap"+ip+" /dev/volume/"+ip) 
    os.system("mkdir /media/snap"+ip) 
    os.system("mount /dev/volume/snap"+ip+" /media/snap"+ip+"") 
else: 
    os.system("lvcreate --size "+st+" --thin volume/pooL1") 
    os.system("lvcreate -V "+st+" --name "+ip+" --thin volume/pooL1") 
    os.system("mkfs.ext4 /dev/volume/"+ip) 
    os.system("mkdir /mnt/"+ip) 
    os.system("mount /dev/volume/"+ip+" /mnt/"+ip+"/") 
f=open('/etc/fstab','a+') 
f.write("/mnt/"+ip+" /dev/volume/"+ip+" ext4 defaults 0 0") 
f.close() 
f=open('/etc/exports','a+') 
f.write("/mnt/"+ip+" "+ip+ "(rw,sync,no_root_squash) \n") 
f.close() 
os.system("exportfs -a") 
s.sendto("now you can use your storage",b) 
s.close() 

st是存儲大小。 我已經授予了apache創建邏輯卷的權限。問題是lv沒有掛載。即使在服務器創建lv時,客戶端也會收到內部服務器錯誤。

回答

1

如果您使用的是rhel版本7.2,則需要在每個命令(如os.system('sudo ...'))之前寫入sudo。

對於工作sudo用戶,您必須配置/etc/sudoers文件並在任意行添加額外的行#apache ALL=(ALL) NOPASSWD:ALL