Beispiel #1
0
def main():
    is_installed = util.check_if_installed()
    is_running = docker.check_exists(config.DOCKER_CONTAINER_NAME)
    needs_tunnel = util.is_tunnel_needed()
    is_tunnel_up = tunnel.check_if_running()
    is_working = network.is_resolving_tld(config.TOP_LEVEL_DOMAIN)

    NO = "\033[1;31mNo\033[0m"
    YES = "\033[1;32mYes\033[0m"

    print(f"""{config.APP} status:

- Is installed: {YES if is_installed else NO}
- Container "{config.DOCKER_CONTAINER_NAME}" is running: {YES if is_running else NO}
- Your OS needs tunnel: {YES if needs_tunnel else NO}
- Is tunnel running: {YES if is_tunnel_up else NO}
- Domain "{config.TOP_LEVEL_DOMAIN}" is working: {YES if is_working else NO}
""")
    return 0
Beispiel #2
0
def main(name=config.DOCKER_CONTAINER_NAME, tag=config.DOCKER_CONTAINER_TAG, tld=config.TOP_LEVEL_DOMAIN):
    if not util.check_if_installed():
        print('No installation found')
        return 1

    print('Uninstalling docker dns exposure')
    if docker.check_exists(name):
        print("Removing existing container...")
        docker.purge(name)

    DOCKER_CONF_FILE = f"{install.OS.DOCKER_CONF_FOLDER}/daemon.json"
    if os.path.exists(DOCKER_CONF_FILE):
        shutil.copy2('src/templates/daemon.json', DOCKER_CONF_FILE)
        docker_json = json.loads(open(DOCKER_CONF_FILE, 'r').read())
        docker_json['bip'] = ''
        docker_json['dns'] = []
        json.dump(docker_json, open(DOCKER_CONF_FILE, 'w'))

    OS.uninstall(tld)
    return 0
Beispiel #3
0
def main(name=config.DOCKER_CONTAINER_NAME,
         tag=config.DOCKER_CONTAINER_TAG,
         tld=config.TOP_LEVEL_DOMAIN):
    if not util.is_os_supported(OS.FLAVOR):
        return 1

    if os.path.exists('.cache/INSTALLED'):
        os.unlink('.cache/INSTALLED')

    # update resolv.conf
    if not hasattr(OS, 'DISABLE_MAIN_RESOLVCONF_ROUTINE'):
        if not os.path.exists(RESOLVCONF):
            open(RESOLVCONF, 'w').write('nameserver 1.1.1.1')

        dns = docker.NETWORK_GATEWAY
        try:
            dns = OS.DNS
        except:
            # no DNS
            pass

        RESOLVCONF_DATA = open(RESOLVCONF, 'r').read()
        if '#@docker-dns' not in RESOLVCONF_DATA:
            RESOLVCONF_DATA = f"options timeout:1 #@docker-dns\nnameserver {dns} #@docker-dns\n{RESOLVCONF_DATA}"
            open(RESOLVCONF, 'w').write(RESOLVCONF_DATA)

    os_config = OS.setup(tld)

    # docker
    DOCKER_CONF_FILE = f"{OS.DOCKER_CONF_FOLDER}/daemon.json"
    if not os.path.exists(DOCKER_CONF_FILE) or os.stat(
            DOCKER_CONF_FILE).st_size == 0:
        if not os.path.isdir(OS.DOCKER_CONF_FOLDER):
            os.mkdir(OS.DOCKER_CONF_FOLDER)
        shutil.copy2('src/templates/daemon.json', DOCKER_CONF_FILE)

    docker_json = json.loads(open(DOCKER_CONF_FILE, 'r').read())
    docker_json['bip'] = docker.NETWORK_SUBNET
    docker_json['dns'] = list(
        set([docker.NETWORK_GATEWAY] + network.get_dns_servers()))
    json.dump(docker_json, open(DOCKER_CONF_FILE, 'w'))

    if docker.check_exists(name):
        print("Stopping existing container...")
        docker.purge(name)
        time.sleep(2)

    print(f'Building and running container "{tag}:latest"... Please wait')
    docker.build_container(name,
                           tag,
                           tld,
                           bind_port_ip=util.on_linux and not util.on_wsl,
                           target=OS.DOCKER_BUILD_TARGET)
    update_cache()

    # dnsmasq
    # if not util.on_macos:
    #     print("Setting up dnsmasq")

    #     dnsmasq_local = open(OS.DNSMASQ_LOCAL_CONF, 'r').read()
    #     dnsmasq_local = dnsmasq_local.replace('${IP}', docker.NETWORK_GATEWAY)
    #     dnsmasq_local = dnsmasq_local.replace('${HOSTNAME}', config.HOSTNAME)
    #     dnsmasq_local = dnsmasq_local.replace(
    #         '${LOOPBACK}', network.LOOPBACK_NETWORK_NAME)
    #     json.dump(dnsmasq_local, open(OS.DNSMASQ_LOCAL_CONF, 'w'))

    # TLD domain ceriticate
    cert_file = f'certs.d/tld/{tld}.cert'
    key_file = f'certs.d/tld/{tld}.key'
    util.generate_certificate(tld, cert_file=cert_file, key_file=key_file)
    shutil.copy2(cert_file, OS.DOCKER_CONF_FOLDER)
    shutil.copy2(key_file, OS.DOCKER_CONF_FOLDER)

    original_arg = sys.argv
    install_status = OS.install(tld)
    if install_status and util.is_tunnel_needed():
        original_arg[1] = 'tunnel'
        original_arg.append('&')
        os.system(' '.join(original_arg))

    open('.cache/INSTALLED', 'w').write('')
    return 0