Sincronização no Squid2



  • 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>



  • 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.



  • 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.



  • 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?



  • 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



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


Locked