def gen_supervisor(tw, config, argv, writer): import getpass devpibin = get_devpibin() assert devpibin.exists() content = render( tw, "supervisor-devpi.conf", server_args=subprocess.list2cmdline(argv), user=getpass.getuser(), devpibin=devpibin, ) writer("supervisor-devpi.conf", content) content = render( tw, "supervisord.conf", ) writer("supervisord.conf", content)
def gen_windows_service(tw, config, argv, writer): devpibin = py.path.local(sys.argv[0]) assert devpibin.exists() content = render( tw, "windows-service.txt", server_args=subprocess.list2cmdline(argv), devpibin=devpibin) writer("windows-service.txt", content)
def gen_systemd(tw, config, argv, writer): import getpass devpibin = py.path.local(sys.argv[0]) assert devpibin.exists() content = render( tw, "devpi.service", server_args=subprocess.list2cmdline(argv), user=getpass.getuser(), devpibin=devpibin, ) writer("devpi.service", content)
def gen_launchd(tw, config, argv, writer): devpibin = py.path.local(sys.argv[0]) plist_content = write_plist_to_bytes(OrderedDict([ ("Label", "net.devpi"), ("ProgramArguments", [str(devpibin)] + argv), ("RunAtLoad", True), ])) writer("net.devpi.plist", plist_content) content = render( tw, "launchd-macos.txt") writer("launchd-macos.txt", content)
def gen_supervisor(tw, config, writer): import getpass devpibin = py.path.local(sys.argv[0]) assert devpibin.exists() content = render( tw, "supervisord.conf", server_args=subprocess.list2cmdline(config.args._raw), user=getpass.getuser(), devpibin=devpibin, ) writer("supervisor-devpi.conf", content)
def create_devpictl(tw, tmpdir): devpiserver = tmpdir.join("bin", "devpi-server") if not devpiserver.check(): tw.line("created fake devpictl", red=True) return tmpdir.join("bin", "devpi-ctl") firstline = devpiserver.readlines(cr=0)[0] devpictlpy = py.path.local(__file__).dirpath("ctl.py").read() devpictl = render(tw, devpiserver.dirpath(), "devpi-ctl", firstline=firstline, devpictlpy=devpictlpy) s = py.std.stat setmode = s.S_IXUSR # | s.S_IXGRP | s.S_IXOTH devpictl.chmod(devpictl.stat().mode | setmode) return devpictl
def gen_systemd(tw, config, argv, writer): import getpass devpibin = py.path.local(sys.argv[0]) assert devpibin.exists() serverdir = config.args.serverdir pid_file = os.path.join(os.path.expanduser(serverdir), '.xproc/devpi-server/xprocess.PID') content = render( tw, "devpi.service", server_args=subprocess.list2cmdline(argv), pid_file=pid_file, user=getpass.getuser(), devpibin=devpibin, ) writer("devpi.service", content)
def gen_nginx(tw, config, argv, writer): outside_url = config.args.outside_url if outside_url is None: # default outside_url = "http://localhost:80" parts = URL(outside_url).netloc.split(":") if len(parts) < 2: parts.append(80) outside_host, outside_port = parts nginxconf = render(tw, "nginx-devpi.conf", format=1, outside_url=outside_url, outside_host = outside_host, outside_port = outside_port, port=config.args.port, serverdir=config.serverdir) writer("nginx-devpi.conf", nginxconf)
def gen_systemd(tw, config, writer): import getpass devpibin = py.path.local(sys.argv[0]) assert devpibin.exists() serverdir = config.args.serverdir if serverdir is None: serverdir = get_default_serverdir() pid_file = os.path.join(os.path.expanduser(serverdir), '.xproc/devpi-server/xprocess.PID') content = render( tw, "devpi.service", server_args=subprocess.list2cmdline(config.args._raw), pid_file=pid_file, user=getpass.getuser(), devpibin=devpibin, ) writer("devpi.service", content)
def gen_nginx(tw, config, writer): outside_url = config.args.outside_url if outside_url is None: # default outside_url = "http://localhost:80" parts = URL(outside_url).netloc.split(":") if len(parts) < 2: parts.append(80) outside_host, outside_port = parts nginxconf = render(tw, "nginx-devpi.conf", format=1, outside_url=outside_url, outside_host = outside_host, outside_port = outside_port, port=config.args.port, serverdir=config.serverdir) writer("nginx-devpi.conf", nginxconf)
def gen_cron(tw, config, argv, writer): import getpass content = render( tw, "crontab", user=getpass.getuser()) writer("crontab", content)
def gendeploycfg(config, venvdir, tw=None): """ generate etc/ structure with supervisord.conf for running devpi-server under supervisor control. """ if tw is None: tw = py.io.TerminalWriter() tw.cwd = py.path.local() #tw.line("creating etc/ directory for supervisor configuration", bold=True) etc = venvdir.ensure("etc", dir=1) orig_args = list(config.args._raw) # filter out --gendeploy option for i, val in enumerate(orig_args): if val.startswith("--gendeploy="): del orig_args[i] break elif val == "--gendeploy": del orig_args[i:i+2] break if not config.args.serverdir: # default serverdir = venvdir.ensure("data", dir=1) else: serverdir = config.serverdir orig_args.extend(["--serverdir", str(serverdir)]) logdir = venvdir.ensure("log", dir=1) render(tw, etc, "supervisord.conf", venvdir=venvdir, server_args=subprocess.list2cmdline(orig_args), logdir=logdir) outside_url = config.args.outside_url if outside_url is None: # default outside_host = "localhost" outside_port = 80 else: parsed = urlparse(outside_url) parts = list(parsed.netloc.split(":")) if len(parts) < 2: parts.append(80) outside_host, outside_port = parts nginxconf = render(tw, etc, "nginx-devpi.conf", format=1, outside_host=outside_host, outside_port=outside_port, port=config.args.port, serverdir=serverdir) devpictl = create_devpictl(tw, venvdir) cron = create_crontab(tw, etc, devpictl) tw.line("created and configured %s" % venvdir, bold=True) tw.line(py.std.textwrap.dedent("""\ To control supervisor's deployment of devpi-server set: alias devpi-ctl='%(devpictl)s' and then start the server process: devpi-ctl start all %(cron)s We prepared an nginx configuration at: %(nginxconf)s which you might modify and copy to your /etc/nginx/sites-enabled directory. """) % locals()) tw.line("may quick reliable pypi installations be with you :)", green=True)