[udev] fix automount.
[vuplus_openvuplus_3.0] / meta-openvuplus / recipes-core / udev / udev-182 / automount.py
1 #!/usr/bin/python
2 import os
3 import sys
4 import glob
5
6 def readFile(fn):
7         return open(fn, "r").read()
8
9 def getLabelFromDevName(dev_kernel):
10         data = None
11         try:
12                 data = os.popen("e2label %s" % dev_kernel).read().strip()
13                 if not data: 
14                         data = None
15         except:
16                 data = None
17
18         return data
19
20 def getModel(dev_base):
21         model = None
22         modelpath = "/sys/block/%s/device/model" % dev_base
23         if os.access(modelpath, os.F_OK):
24                 model = open(modelpath, "r").read().strip().replace(' ','-')
25         return model
26
27 def isMountedByDevName(devName):
28         ismounted = False
29         mounts = file('/proc/mounts').read().split('\n')
30         for x in mounts:
31                 if not x.startswith('/'):
32                         continue
33
34                 devpath, mountpoint  = x.split()[:2]
35                 if devpath == devName:
36                         ismounted = True
37                         break
38
39         return ismounted
40
41 def isUsbDevice(dev_base):
42         phyPath = os.path.realpath('/sys/block/' + dev_base + '/device')
43         for x in glob.glob("/sys/bus/usb/devices/usb*"):
44                 if phyPath.find(os.path.realpath(x)) != -1:
45                         return True
46         return False
47
48 def checkFilesystem(device):
49         p = os.popen("blkid %s" % device)
50         data = p.read()
51         p.close()
52
53         fs = None
54         for x in data.split():
55                 if x.startswith('TYPE') and x.find('=') != -1:
56                         fs = x.split('=')[1].strip('"')
57                         break
58
59         return fs
60
61 def automount():
62         kernel = sys.argv[1]
63         dev_kernel = os.path.join("/dev/", kernel)
64         dev_index = os.path.basename(kernel)[-1]
65         dev_base = os.path.basename(kernel)[:-1]
66         removable=readFile("/sys/block/%s/removable" % dev_base).strip() == "1"
67         dev_real_path = os.path.realpath("/sys/block/%s/device" % dev_base)
68
69         if isMountedByDevName(dev_kernel):
70                 return
71
72         mountPoint = None
73         if dev_index == "1":
74                 usbDevice = removable or isUsbDevice(dev_base)
75                 if not usbDevice:
76                         mountPoint = "/media/hdd"
77
78         if (mountPoint == None) or (os.path.ismount(mountPoint)):
79                 label = getLabelFromDevName(dev_kernel)
80                 if label:
81                         mountPoint = "/media/" + label
82                         if dev_index and dev_index != '1':
83                                 mountPoint += "_%s" % dev_index
84
85         if (mountPoint == None) or (os.path.ismount(mountPoint)):
86                 model = getModel(dev_base)
87                 if model:
88                         mountPoint = "/media/" + model
89                         if dev_index and dev_index != '1':
90                                 mountPoint += "_%s" % dev_index
91
92         if (mountPoint == None) or (os.path.ismount(mountPoint)):
93                 mountPoint = "/media/" + kernel
94
95         if not os.access(mountPoint, os.F_OK):
96                 os.mkdir(mountPoint)
97                 if not os.access(mountPoint, os.F_OK):
98                         return
99
100         fs = checkFilesystem(dev_kernel)
101         if fs == "ntfs":
102                 cmd = "mount.ntfs-3g %s %s" % (dev_kernel, mountPoint)
103         else:
104                 cmd = "mount -t auto -o noatime %s %s" % (dev_kernel, mountPoint)
105
106         ret = os.system(cmd)
107
108         if ret:
109                 os.rmdir(mountPoint)
110         else:
111                 if mountPoint == "/media/hdd":
112                         defaultMoviePath = "/media/hdd/movie"
113                         if not os.access(defaultMoviePath, os.F_OK):
114                                 os.mkdir(defaultMoviePath)
115
116 if __name__=="__main__":
117         automount()