Forçar git a soberscrever arquivos locais em um pull

Tenho um script que automatiza os commits/pulls em um repositorio git que, na realidade não utilizo para versionamento, e sim para controlar quando alguem faz modificações não autorizadas com possibilidade de rollback.

Em um determinado momento o script parava no pull (custei a perceber isso) o que acontecia por causa da necessidade de merge.

Assim, para forçar um overwrite de arquivos locais (merge bypass) usamos o comando abaixo:

git reset --hard HEAD
git pull

chmod recursivo com referencia em outros arquivos/diretorios

Agradecimentos ao meu colega jb que me passou o parametro para isto.

Cenário: Alguem aplicou chmod 777 recursivo no /etc de um servidor web, alguns clientes tem conta de ssh limitadas, mas com esse nível de permissão qualquer um poderia ler/modificar configurações do servidor.

A contagem de arquivos no /etc é de aproximadamente 2600 arquivos, o que tornaria aplicar chmod manualmente em cada uma delas.

Por sorte esse servidor seria uma maquina virtual, onde outras provem do mesmo template. Entretanto coo /etc de um para outro não é uma opção, poiso  template de origem foi o mesmo, mas as configs são diferentes em cada um

Neste caso a solução foi simples, copiei o /etc de um servidor para dentro do /root deste com problema, no caso fiquei com /etc/ e /root/etc/. OBS: gzipiei e copiei, pra manter as permissões.

Usei a flag –reference do chmod pra copiar somente as permissões.

Comando executado:

for i in `/usr/bin/find /etc/`; do /bin/chmod --reference=/root$i $i; done

explicando em miúdos:
executei um find no /etc/ para obter todos os arquivos, usando um for para varrer cada linha e executando chmod em arquivo por arquivo do /etc baseado nas permissões existentes em /root/etc/

erro sysdba firebird

Quando aparecer esse erro logado como sysdba

gbak: ERROR:Your user name and password are not defined. Ask your database administrator to set up a Firebird login.
gbak:Exiting before completion due to errors

Resolvi setando uma nova senha pro sysdba com o gsec

[10:50:51 root@localhost ~]# gsec
GSEC> modify SYSDBA -pw n0v4s3nh4

 

Classe php para trabalhar com oracle

Compartilho com todos a classe criada por mim para utilização com oracle, todos estão livres para utilizar, copiar e modificar, mas por favor, peço que mantenahm os créditos, pois dediquei um bom de pesquisa nisso!

final class oracle
{

		/*
		 * Classe para conexão e queries a banco oracle
		 * Criado em 02/10/2011 por Felipe Braz
		 * Versão 1.1
		 * Duvidas sugestões: fbraz3 [arroba] gmail.com
		 * Copia/modificação livre desde que se mantenham os créditos
		*/

        public $oci_error;

		private $conexao  = null;
        private $username = null;
        private $password = null;
        private $uri      = null;

		public function get_instance($username, $password, $uri)
		{
			$this->username = $username;
			$this->password = $password;
			$this->uri		= $uri;
			return $this;
		}

        public function __construct()
        {
            //Sem construtor
        }

        public function connect()
        {
                if (!$this->conexao = @oci_connect($this->username, $this->password, $this->uri)) {
                        $this->oci_error = @oci_error($this->conexao);
                        die("Erro ao conectar ao Oracle " . $this->oci_error['text']);
                }
        }       

        public function query($sql)
        {
                $stmt = @oci_parse($this->conexao, $sql);
                $r = @oci_execute($stmt);
                $this->oci_error = oci_error($stmt);
                return $r;
        }
}

Exemplos de uso:

Instanciar conexão ao banco com os seguintes dados:
Banco de dados: testeoracle
Senha: s3nh40r4cl3
URL de conexao: 10.1.1.1/oracle

$obj = new oracle;
$obj->get_instance('testeoracle','s3nh40r4cl3','10.1.1.1/oracle')->connect();

Uma vez conectado pode-se efetuar uma query livre usando o método query()

$res = $obj->query("SELECT * FROM USUARIOS");
var_dump($res);

Para obter todos os dados da tabela, pode-se usar a função do php oci_fetch_array()

$res = $obj->query("SELECT * FROM USUARIOS");
while($r = oci_fetch_array($res))
{
   echo $r['usuario']."n";
}

Os erros retornados ficam no atributo publico oci_error.

Exemplo de tratamento de erro:

//conexão
$obj = new oracle;
$obj->get_instance('testeoracle','s3nh40r4cl3','10.1.1.1/oracle')->connect();

//Consulta na tabela USUARIOS
$res = $obj->query("SELECT * FROM USUARIOS");

//Se retornou erro, debuga ele e mata o script
if($obj->oci_error)
{
	print_r($obj->oci_error);
	die();
}

//Loop para obter todos os dados da tabela
while($r = oci_fetch_array($res))
{
   echo $r['usuario']."n";
}

COmo podem ver, a classe é bem simples, porém extremamente funcional para uso com oracle.

Função para verificar load average do servidor

Funciona na maioria dos servers compartilhados:

function get_server_load($windows = 0) {
        $os = strtolower(PHP_OS);
        if(strpos($os, "win") === false) {
  if(file_exists("/proc/loadavg")) {
         $load = file_get_contents("/proc/loadavg");
         $load = explode(' ', $load);
         return $load[0];
  }
  elseif(function_exists("shell_exec")) {
         $load = explode(' ', `uptime`);
         return $load[count($load)-1];
  }
  else {
         return "";
  }
        }
        elseif($windows) {
  if(class_exists("COM")) {
         $wmi = new COM("WinMgmts:\\.");
         $cpus = $wmi->InstancesOf("Win32_Processor");
         
         $cpuload = 0;
         $i = 0;
         while ($cpu = $cpus->Next()) {
    $cpuload += $cpu->LoadPercentage;
    $i++;
         }
         
         $cpuload = round($cpuload / $i, 2);
         return "$cpuload%";
  }
  else {
         return "";
  }
        }
}

Use com moderação 😉

Wireless travando ubuntu

Olá pessoal,

Neste último final de semana resolvi finalmente criar vergonha na cara e remover o windows7 que veio pré-instalado no meu notbook.

Ele é um HP DV5-2112BR, sei que existem notebook muito melhores, mais foi o que o meu dinheiro conseguiu comprar rsrsrs

Bom, primeiramente instalei uma distribuição que gosto muito, o opensuse, porém tive alguns problemas com aceleração 3D e skype,  e devido ao meu limitado tempo não foi possível pesquisar mais a fundo para solução. Logo baixei a ISO do ubuntu 11.04 e instalei.

Tudo funcionou uma marvailha, menos a rede wiereless, o led no F11 (tecla para ativar/desativar a wifi) ficava piscando como louca, alternando constantemente entre ligado/desligado, ele achava as redes sem fio mas nao conectava em nenhuma (nem nas abertas!) e o pior, qdo eu apertava o F11 o ubuntu simplesmente congelava, nem o mouse se mechia, somente resetando!

Pesquisando na net, descobri que o chipset dessa placa de rede (RaLink RT-3090) era compatível com a RT2800, logo provavelmnte o ubuntu estava carregando o driver (modulo) errado ocasionando o erro.

Bem, aqui fica dica e solução, porém vão ter que ter uma rede cabeada pra poder baixar os pacotes dos repositorios (tudo via apt, nem pensem em ficar compilando coisas 😉

Primeiramente, adicione o repositorio do markus no arquivo /etc/apt/sources.list

deb http://ppa.launchpad.net/markus-tisoft/rt3090/ubuntu maverick main
deb-src http://ppa.launchpad.net/markus-tisoft/rt3090/ubuntu natty main

Uma observação importante, nesse ponto, substituir a palavra “natty” no comando acima pela versão do seu ubuntu, abaixo as versões suportadas pelo repositório:

jaunty (9.04)
karmic (9.10)
lucid (10.04)
maverick (10.10)
natty (11.04)

Será necessário tambem importar a chave pgp

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 86F4C28E

Agora atualizaremos os pactoes e instalaremos o driver

apt-get update
apt-get install rt3090-dkms

Infelizmente o trabalho não termina aqui, temos mais alguns arquivos para editar.
Lembrando então que a causa da falha é o fato de carregar o modulo/driver errado, instalar o novo não resolve esse problema, ele ira carregar o modulo certo, depois o errado e irá travar novamente!

Para resolver esta questão temos que colocar o modulo errado na blacklist, e adicionar o correto no arquivo de autoload dos modulos:

Deste modo, edita o arquivo /etc/modprobe.d/blacklist inserindo no final a seguinte linha:

blacklist rt2800pci

E finalmente, para carregar o modulo certo, adicionar no final do arquivo /etc/modules o texto:

rt3090sta

Agora sim, basta reiniciar o seu ubuntu e tudo estará funcionando! ;D

OBS: Os codinomes das versões do ubuntu, retirei de: http://ufpa.br/dicas/linux/li-u-ver.htm

Atualizando rubygems no centos5

E la vou eu instalar uma aplicação redmine quando, de repente me surge essa “bomba”

$ gem install rake
ERROR:  Error installing rake:
rake requires RubyGems version >= 1.3.2

Oh, e agora ,quem poderá nos defender?

Bem, aquele erro basicamente diz que temos que atualizar a versão do rails, então… maos de sobra… digo, maos a bora

Instalando o RubyGens mais novo:

cd /tmp/
wget http://rubyforge.org/frs/download.php/55066/rubygems-1.3.2.tgz
tar xvzf rubygems-1.3.2.tgz 
cd rubygems-1.3.2
sudo ruby setup.rb

Agora sim, instalando o rake:

$ gem install rake

E, here we go!

$ rake --version
rake, version 0.9.2

Contagem / Verificação de arquivos por data de alteração

Caso eu venha a desejar buscar o número de arquivos alterados na data de “hoje” , no /home (observe que a referência de tempo é dada por “mtime 0”, 0 = alterado na data de hoje):

find /home -mtime 0 | wc -l

Se necessário buscar o número de arquivos alterados na data de “ontem” no “/home”:

find /home -mtime 1 | wc -l

Se quiser verificar o nome e localização dos arquivos alterados:

find /home -mtime 0