Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env python3
from sys import argv
from os import environ, makedirs, rename
from shutil import which
from subprocess import check_output
from socket import socket
from time import sleep
log = print
def main():
pemFile, introducerPort, introducerFURL = argv[1:]
# PYTHONHOME set for Python 3 for this script breaks Python 2 used by
# Tahoe. :/ This is kind of a NixOS Python packaging bug.
del environ["PYTHONHOME"]
run(["tahoe", "--version"])
run([
"tahoe", "create-introducer",
"--port", "tcp:" + introducerPort,
"--location", "tcp:introducer:" + introducerPort,
"/tmp/introducer",
])
rename(pemFile, "/tmp/introducer/private/node.pem")
with open("/tmp/introducer/private/introducer.furl", "w") as f:
f.write(introducerFURL)
run([
"daemonize",
"-o", "/tmp/stdout",
"-e", "/tmp/stderr",
which("tahoe"), "run", "/tmp/introducer",
])
retry(
"waiting for open introducer port",
lambda: checkOpen(35151),
)
def checkOpen(portNumber):
s = socket()
try:
s.connect(("127.0.0.1", portNumber))
except:
return False
else:
return True
finally:
s.close()
def retry(description, f):
for i in range(60):
log("trying to {}...".format(description))
if f():
log("{} succeeded".format(description))
return
sleep(1.0)
raise ValueError("failed to {} after many tries".format(description))
def run(argv):
log("Running {}".format(argv))
log("{}: {}".format(argv, check_output(argv)))
if __name__ == '__main__':
main()