Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Sincronização no Squid2

    Scheduled Pinned Locked Moved Portuguese
    6 Posts 2 Posters 2.5k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • K Offline
      kelsen
      last edited by

      Boa tarde,

      Teria como colocar a função de sincronização da configuração do squid3 no squid 2?
            Dei uma olhada na configuração e vi o arquivo squid_sync.xml, seria só copiar esse xml pro squid2 e ajustar as tag <tab>?</tab>

      1 Reply Last reply Reply Quote 0
      • K Offline
        kelsen
        last edited by

        fiz oque eu disse ai, e até que a interface apareceu bonitinha e talz.. mais ele não sincroniza.. parece que não esta chamando alguma função.

        1 Reply Last reply Reply Quote 0
        • marcellocM Offline
          marcelloc
          last edited by

          o xml é só o primeiro passo  :)

          A engenharia está toda no squid.inc.

          O squid2 é mantido pelo core team e o squid3 por mim.

          Dificilmente você verá esta aba de sincronia ou grandes inovações no squid2 para não alterar o status "stable" dele.

          Treinamentos de Elite: http://sys-squad.com

          Help a community developer! ;D

          1 Reply Last reply Reply Quote 0
          • K Offline
            kelsen
            last edited by

            pô, triste isso em.
            Marcelloc, tem como me dar uma ideia do que eu precisaria fazer no squid.inc pra sincronia funcionar no squid2 ou não é possível ou daria muito trabalho?

            1 Reply Last reply Reply Quote 0
            • marcellocM Offline
              marcelloc
              last edited by

              a função de sincronia do squid3 é esta:

              /* Uses XMLRPC to synchronize the changes to a remote node */
              function squid_sync_on_changes() {
              	global $config, $g;
              
              	log_error("[squid] xmlrpc sync is starting.");
              	$synconchanges = $config['installedpackages']['squidsync']['config'][0]['synconchanges'];	
              	if(!$synconchanges) 
              		return;
              	foreach ($config['installedpackages']['squidsync']['config'] as $rs ){
              		foreach($rs['row'] as $sh){
              			$sync_to_ip = $sh['ipaddress'];
              			$password = $sh['password'];
              			if($sh['username'])
              				$username = $sh['username'];
              			else
              				$username = 'admin';
              			if($password && $sync_to_ip)
              				squid_do_xmlrpc_sync($sync_to_ip, $username, $password);
              			}
              	}
              	log_error("[squid] xmlrpc sync is ending.");
              }
              /* Do the actual XMLRPC sync */
              function squid_do_xmlrpc_sync($sync_to_ip, $username, $password) {
              	global $config, $g;
              
              	if(!$username)
              		return;
              
              	if(!$password)
              		return;
              
              	if(!$sync_to_ip)
              		return;
              
              	$xmlrpc_sync_neighbor = $sync_to_ip;
                  if($config['system']['webgui']['protocol'] != "") {
              		$synchronizetoip = $config['system']['webgui']['protocol'];
              		$synchronizetoip .= "://";
                  }
                  $port = $config['system']['webgui']['port'];
                  /* if port is empty lets rely on the protocol selection */
                  if($port == "") {
              		if($config['system']['webgui']['protocol'] == "http") 
              			$port = "80";
              		else 
              			$port = "443";
                  }
              	$synchronizetoip .= $sync_to_ip;
              
              	/* xml will hold the sections to sync */
              	$xml = array();
              	$xml['squid'] = $config['installedpackages']['squid'];
              	$xml['squidupstream'] = $config['installedpackages']['squidupstream'];
              	$xml['squidcache'] = $config['installedpackages']['squidcache'];
              	$xml['squidnac'] = $config['installedpackages']['squidnac'];
              	$xml['squidtraffic'] = $config['installedpackages']['squidtraffic'];
              	$xml['squidreverse'] = $config['installedpackages']['squidreverse'];
              	$xml['squidauth'] = $config['installedpackages']['squidauth'];
              	$xml['squidusers'] = $config['installedpackages']['squidusers'];
              	/* assemble xmlrpc payload */
              	$params = array(
              		XML_RPC_encode($password),
              		XML_RPC_encode($xml)
              	);
              
              	/* set a few variables needed for sync code borrowed from filter.inc */
              	$url = $synchronizetoip;
              	log_error("Beginning squid XMLRPC sync to {$url}:{$port}.");
              	$method = 'pfsense.merge_installedpackages_section_xmlrpc';
              	$msg = new XML_RPC_Message($method, $params);
              	$cli = new XML_RPC_Client('/xmlrpc.php', $url, $port);
              	$cli->setCredentials($username, $password);
              	if($g['debug'])
              		$cli->setDebug(1);
              	/* send our XMLRPC message and timeout after 250 seconds */
              	$resp = $cli->send($msg, "250");
              	if(!$resp) {
              		$error = "A communications error occurred while attempting squid XMLRPC sync with {$url}:{$port}.";
              		log_error($error);
              		file_notice("sync_settings", $error, "squid Settings Sync", "");
              	} elseif($resp->faultCode()) {
              		$cli->setDebug(1);
              		$resp = $cli->send($msg, "250");
              		$error = "An error code was received while attempting squid XMLRPC sync with {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString();
              		log_error($error);
              		file_notice("sync_settings", $error, "squid Settings Sync", "");
              	} else {
              		log_error("squid XMLRPC sync successfully completed with {$url}:{$port}.");
              	}
              
              	/* tell squid to reload our settings on the destination sync host. */
              	$method = 'pfsense.exec_php';
              	$execcmd  = "require_once('/usr/local/pkg/squid.inc');\n";
              	$execcmd .= "squid_resync();";
              	/* assemble xmlrpc payload */
              	$params = array(
              		XML_RPC_encode($password),
              		XML_RPC_encode($execcmd)
              	);
              
              	log_error("squid XMLRPC reload data {$url}:{$port}.");
              	$msg = new XML_RPC_Message($method, $params);
              	$cli = new XML_RPC_Client('/xmlrpc.php', $url, $port);
              	$cli->setCredentials($username, $password);
              	$resp = $cli->send($msg, "250");
              	if(!$resp) {
              		$error = "A communications error occurred while attempting squid XMLRPC sync with {$url}:{$port} (pfsense.exec_php).";
              		log_error($error);
              		file_notice("sync_settings", $error, "squid Settings Sync", "");
              	} elseif($resp->faultCode()) {
              		$cli->setDebug(1);
              		$resp = $cli->send($msg, "250");
              		$error = "An error code was received while attempting squid XMLRPC sync with {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString();
              		log_error($error);
              		file_notice("sync_settings", $error, "squid Settings Sync", "");
              	} else {
              		log_error("squid XMLRPC reload data success with {$url}:{$port} (pfsense.exec_php).");
              	}
              
              }
              

              você precisa chama-la dentro da função que cria o arquivo de configuração a casa save

              
              function squid_resync() {
              .
              .
              .
              
              if(!isset($boot_process))
              		squid_sync_on_changes();
              
              .
              .
              .
              

              Teste em laboratorio e não esqueça de fazer backups

              Treinamentos de Elite: http://sys-squad.com

              Help a community developer! ;D

              1 Reply Last reply Reply Quote 0
              • K Offline
                kelsen
                last edited by

                Bom, vou tentar aplicar isso no squid2, vlw pela ajuda.

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post
                Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.