docs: def Initialize(config=None,
                 external_hostname = None,
                 admin_password = None,
                 redownload_templates = False,
                 repack_templates = True,
                 token = None):
    """Initialize or update a GRR configuration."""
  
    print("Checking write access on config %s" % config["Config.writeback"])
    if not os.access(config.parser.filename, os.W_OK):
      raise IOError("Config not writeable (need sudo?)")
  
    print("\nStep 0: Importing Configuration from previous installation.")
    options_imported = 0
    prev_config_file = config.Get("ConfigUpdater.old_config", default=None)
    if prev_config_file and os.access(prev_config_file, os.R_OK):
      print("Found config file %s." % prev_config_file)
      # pytype: disable=wrong-arg-count
      if builtins.input("Do you want to import this configuration? "
                        "[yN]: ").upper() == "Y":
        options_imported = ImportConfig(prev_config_file, config)
      # pytype: enable=wrong-arg-count
    else:
      print("No old config file found.")
  
    print("\nStep 1: Setting Basic Configuration Parameters")
    print("We are now going to configure the server using a bunch of questions.")
    ConfigureDatastore(config)
    ConfigureUrls(config, external_hostname=external_hostname)
    ConfigureEmails(config)
  
    print("\nStep 2: Key Generation")
    if config.Get("PrivateKeys.server_key", default=None):
      if options_imported > 0:
        print("Since you have imported keys from another installation in the "
              "last step,\nyou probably do not want to generate new keys now.")
      # pytype: disable=wrong-arg-count
      if (builtins.input("You already have keys in your config, do you want to"
                         " overwrite them? [yN]: ").upper() or "N") == "Y":
        config_updater_keys_util.GenerateKeys(config, overwrite_keys=True)
      # pytype: enable=wrong-arg-count
    else:
      config_updater_keys_util.GenerateKeys(config)
  
    FinalizeConfigInit(
        config,
        token,
        admin_password=admin_password,
        redownload_templates=redownload_templates,
        repack_templates=repack_templates,
        prompt=True)