import os, socket
hostname = socket.gethostname()
def cmd(s):
print s
from subprocess import Popen, PIPE
out = Popen(s, stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True)
e = out.wait()
t = out.stdout.read() + out.stderr.read()
if e:
print t
return t
def get_disks():
ans = {}
for x in cmd("/bin/ls -l /dev/disk/by-uuid/").splitlines():
v = x.split()
if len(v) > 3:
device = os.path.join('/dev', os.path.split(v[-1])[-1])
uuid = v[-3]
ans[device] = uuid
return ans
def mount_conf():
d = get_disks()
if '/dev/sdb1' in d:
cmd("mkdir -p /mnt/conf; mount /dev/sdb1 /mnt/conf; chmod og-rwx /mnt/conf; chown root. /mnt/conf")
return True
else:
return False
def conf():
if os.path.exists("/mnt/conf/pre"):
cmd("/mnt/conf/pre")
if os.path.exists("/mnt/conf/fstab"):
for x in open("/mnt/conf/fstab").readlines():
x = x.strip()
if not x.startswith('#'):
v = x.split()
if len(v) >= 2:
cmd('mkdir -p "%s"'%v[1])
if os.path.exists('/mnt/conf/fstab'):
fstab0 = open('/etc/fstab').read()
fstab1 = open('/mnt/conf/fstab').read()
i = fstab0.find("#SALVUS")
if i != -1:
fstab0 = fstab0[:i]
open('/etc/fstab','w').write(fstab0 + '\n#SALVUS -- everything below this is automatically added from /mnt/conf/fstab! \n' + fstab1)
cmd("mount -a")
if os.path.exists('/mnt/conf/hostname'):
cmd("cp /mnt/conf/hostname /etc/hostname")
cmd("hostname `cat /mnt/conf/hostname`")
if os.path.exists('/mnt/conf/tinc'):
cmd("mkdir -p /home/salvus/salvus/salvus/data/local/etc/tinc")
cmd("mount -o bind /mnt/conf/tinc /home/salvus/salvus/salvus/data/local/etc/tinc")
cmd("cp /mnt/conf/tinc/hosts.0/* /mnt/conf/tinc/hosts/")
cmd("mkdir -p /home/salvus/salvus/salvus/data/local/var/run/")
cmd("/home/salvus/salvus/salvus/data/local/sbin/tincd -k; sleep 2")
cmd("nice --19 /home/salvus/salvus/salvus/data/local/sbin/tincd")
for s in ['bup_storage.py', 'hashring.py']:
os.system("cp /home/salvus/salvus/salvus/scripts/%s /usr/local/bin/; chmod og-w /usr/local/bin/%s; chmod og+rx /usr/local/bin/%s"%(s,s,s))
cmd("ip link add link eth0 address f0:de:f1:b0:66:8e eth0.1 type macvlan")
cmd("ip link add link eth0 address 5e:d4:a9:c7:c8:f4 eth0.2 type macvlan")
if os.path.exists("/mnt/conf/post"):
cmd("/mnt/conf/post")
cmd("chmod og-rwx -R /home/salvus/")
if hostname.startswith('devel'):
os.system('rm -rf /home/salvus/salvus/salvus/data/secrets/cassandra')
if hostname.startswith('compute'):
cmd("/home/salvus/salvus/salvus/scripts/compute_firewall.sh")
cmd("rm -rf /home/salvus/salvus/salvus/data/secrets/cassandra")
os.system("umount /projects; umount /bup/conf; umount /bup/bups; zpool import -f bup; zfs set mountpoint=/projects bup/projects; chmod og-r /projects; su - salvus -c 'cd /home/salvus/salvus/salvus/&& . smc-env&& ./bup_server start'")
os.system("crontab /home/salvus/salvus/salvus/scripts/root-compute.crontab")
if hostname.startswith("cassandra"):
cmd("rm -rf /home/salvus/salvus/salvus/data/secrets/")
cmd("mkdir /cassandra; mount /dev/sdb2 /cassandra")
cmd("rm -rf /var/log/cassandra; ln -s /cassandra/log /var/log/cassandra; cp /cassandra/etc/* /etc/cassandra/; rm -rf /var/lib/cassandra; ln -s /cassandra/lib /var/lib/cassandra; service cassandra start")
cmd("rm -rf /home/salvus/salvus/salvus/data/secrets")
if __name__ == "__main__":
if mount_conf():
conf()