File: //proc/self/root/lib/python2.7/site-packages/lwdbadmin/util.py
import ctypes
import logging
import os
import re
import socket
import subprocess
from OpenSSL import crypto
NFSFLAGS = "rw,bg,nolock,rsize=32768,wsize=32768,nfsvers=3,tcp,noacl,nosuid,noatime,nodiratime,retrans=2,nordirplus,hard,nocto,nointr,lookupcache=all,actimeo=60"
def getservices(fname="/etc/fstab"):
ret = []
r = re.compile("^bdfs-\d{4,4}\.fs\.locaweb\.com\.br:/storage/BDFS-\d{4,4}/(.*)/data\s+(.*)\s+nfs")
with open(fname) as f:
for l in f:
m = r.match(l)
if m:
ret.append((m.group(1), m.group(2)))
return ret
def setsrvips(directory, serviceip, backupip):
with open(os.path.join(directory, "service.conf"), "w+") as f:
f.write(" # SERVICEIP: {0}\n".format(serviceip))
f.write(" # BACKUPIP: {0}\n".format(backupip))
serviceip = serviceip.split('/')[0]
backupip = backupip.split('/')[0]
f.write("listen_addresses = '{0},{1}'\n".format(serviceip, backupip))
def getsrvips(directory):
serviceip, backupip = None, None
with open(os.path.join(directory, "service.conf")) as f:
for line in f:
m = re.match(".*#.*SERVICEIP: (.*)", line)
if m:
serviceip = m.group(1)
m = re.match(".*#.*BACKUPIP: (.*)", line)
if m:
backupip = m.group(1)
return (serviceip)
# this is a very hack function, just for fun. You should use the mount command
def nfs(source, target, options=''):
host = source.split(':')[0]
parsed = options.split(',')
parser = {'rw': 0,
'nfsvers=3': 0,
'tcp': 0,
'nosuid': 2,
'noatime': 1024,
'nodiratime': 2048,
}
flags = 0
for flag in [x for x in parsed if x in parser.keys()]:
flags |= parser[flag]
parsed.remove(flag)
ip = socket.gethostbyname(host)
options = 'addr={0},{1}'.format(ip, ','.join(parsed))
return mount(source, target, 'nfs', flags, options)
def mount(source, target, fs, flags=0, options=''):
ret = ctypes.CDLL('libc.so.6', use_errno=True).mount(source, target, fs, flags, options)
if ret < 0:
errno = ctypes.get_errno()
raise RuntimeError("Error mounting {} ({}) on {} with options '{}': {}".
format(source, fs, target, options, os.strerror(errno)))
def umount(target, flags=0):
ret = ctypes.CDLL('libc.so.6', use_errno=True).umount(target, flags)
if ret < 0:
errno = ctypes.get_errno()
raise RuntimeError("Error umounting {} with flags '{}': {}".
format(target, flags, os.strerror(errno)))
def create_self_signed_cert(name, cname, kname):
# create a key pair
k = crypto.PKey()
k.generate_key(crypto.TYPE_RSA, 1024)
# create a self-signed cert
cert = crypto.X509()
cert.get_subject().C = "BR"
cert.get_subject().ST = "Sao Paulo"
cert.get_subject().L = "Sao Paulo"
cert.get_subject().O = "Locaweb"
cert.get_subject().OU = "Locaweb"
cert.get_subject().CN = name
cert.set_serial_number(1000)
cert.gmtime_adj_notBefore(0)
cert.gmtime_adj_notAfter(10*365*24*60*60)
cert.set_issuer(cert.get_subject())
cert.set_pubkey(k)
cert.sign(k, 'sha1')
open(cname, "wt").write(
crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
os.chmod(cname, 0600)
os.chown(cname, 26, 26)
open(kname, "wt").write(
crypto.dump_privatekey(crypto.FILETYPE_PEM, k))
os.chmod(kname, 0600)
os.chown(cname, 26, 26)
def localtime():
#ajuste /etc/localtime
os.unlink("/etc/localtime")
os.symlink("../usr/share/zoneinfo/America/Sao_Paulo", "/etc/localtime")