[ UP ] port cgi to lighttpd web server, and update the lighttpd's config files.
[archserver.git] / cgi / volumes / create_sharelv.lua
blob8be146a8cd27f4786d05efc0e08e15e2b33dd263
1 #!/usr/bin/lua
3 dofile "libutil.lua"
4 local vgname = "sharevg"
5 local lvname = "homelv"
6 local lvmount = "/mnt"
8 function list_free_disks()
9 ui_message_info([[
10 <strong>创建共享卷:</strong>下面列出了您系统上的空闲磁盘.
11 ]])
12 print([[
13 <form action = "volumes_create_sharelv.cgi" method = "post">
14 <table cellspacing="1" cellpadding="5" border="0" width="90%">
15 <tr align="left">
16 <td bgcolor="#ebebeb"></td>
17 <td bgcolor="#ebebeb"><strong>磁盘编号</strong></td>
18 <td bgcolor="#ebebeb"><strong>类型</strong></td>
19 <td bgcolor="#ebebeb"><strong>容量</strong></td>
20 <td bgcolor="#ebebeb"><strong>型号</strong></td>
21 </tr>
22 ]])
24 i = 0
25 -- dt = get_disks()
26 dt = get_block_devices()
27 for d in pairs(dt) do
28 if not dt[d].used then
29 i = i + 1
30 local _status, _used = "<font color=green>空闲</font>", ""
31 local _type = "硬盘"
32 if string.sub(dt[d].model,1,4) == "raid" then _type = "磁盘阵列" end
33 if dt[d].used then
34 _status = "<font color=red>使用中</font>"
35 if dt[d].used == "fs" then
36 _used = "文件系统"
37 elseif dt[d].used == "lvm" then
38 _used = "共享卷"
39 elseif dt[d].used == "raid" then
40 _used = "磁盘阵列"
41 end
43 end
44 local _td1 = string.format([[<tr bgcolor=#c6d5a8 align="left"><td>
45 <input type="checkbox" name="devs_%d" value="%s"></td><td>%s</td>]], i, d, d)
46 print(_td1)
47 print("<td>".._type.."</td>")
48 print("<td>"..dt[d].size.."</td>")
49 print("<td>"..dt[d].model.."</td>")
50 end
51 end
53 print([[</table>
54 <input type="hidden" name=todo value="todo">
55 <input type="submit" value="创建共享卷">
56 <input type="reset" value="清除">
57 </form><br>]])
58 end
60 function display()
61 if is_vg_exist(vgname) then
62 display_lv()
63 else
64 ui_message_warning([[
65 <strong>创建共享卷:</strong>您的系统上还没有共享卷,共享卷是有一个或多个磁盘组成的虚拟磁盘,所有共享数据都存放在这里.<a href=volumes_create_sharelv.cgi?todo=disks>创建您的共享卷</a>
66 ]])
67 end
68 end
70 function create_lv(qp)
71 local devices = ""
72 local err = ""
73 local vgsize = ""
74 local success = "<font color=green><strong>成功</strong></font><br>"
75 local conf = "/dev/"..vgname.."/"..lvname.."\t"..lvmount.."\txfs\tdefaults\t0\t0\n"
76 print(conf)
77 for k,v in pairs(qp) do
78 if string.sub(k,1,5) == "devs_" then
79 print(qp[k])
80 if string.find(qp[k], "%S+%d+") then
81 devices = devices.." "..qp[k]
82 else
83 if not do_disk(qp[k]) then ui_message_err("do_disk error") return
84 else
85 devices = devices.." "..qp[k].."2"
86 end
88 end
89 end
90 end
91 if string.len(devices) == 0 then ui_message_err("请选择磁盘") return end
93 print("正在创建物理卷 ...")
94 err, ret= myexec("sudo /sbin/pvcreate -f -y "..devices)
95 if ret ~= 0 then ui_message_err(err.."ret "..ret) return else print(success) end
97 print("正在创建卷组 ...")
98 err, ret= myexec("sudo /sbin/vgcreate "..vgname.." "..devices)
99 if ret ~= 0 then ui_message_err(err.."ret "..ret) return else print(success) end
100 vg = get_vg()
101 for v in pairs(get_vg()) do
102 if v == vgname then
103 vgsize = vg[v].totalpe
107 print("正在创建共享卷 ...")
108 err, ret= myexec("sudo /sbin/lvcreate -n "..lvname.." -l "..vgsize.." "..vgname)
109 if ret ~= 0 then ui_message_err(err.."ret "..ret) return else print(success) end
111 print("正在格式化共享卷 ...")
112 err, ret= myexec("sudo /sbin/mkfs.xfs -f ".."/dev/"..vgname.."/"..lvname)
113 if ret ~= 0 then ui_message_err(err.."ret "..ret) return else print(success) end
115 print("正在加载共享卷 ...")
116 err, ret= myexec("sudo /bin/mount /dev/"..vgname.."/"..lvname.." /mnt")
117 if ret ~= 0 then ui_message_err(err) return end
118 if ret ~= 0 then ui_message_err(err.."ret "..ret) return else print(success) end
119 mywrite("/etc/fstab", myread("/etc/fstab")..conf)
120 file_gsub("/etc/rc.conf", "USELVM=.-\n","USELVM=\"yes\"")
123 ------------------- CGI OUTPUT ---------------------
124 local qp = ui_getqp()
125 print("<h3>共享卷管理</h3>")
126 if not qp.todo then
127 display()
128 elseif qp.todo == "disks" then
129 list_free_disks()
130 else
131 create_lv(qp)