Arquivos

Arquivo para a categoria ‘Uncategorized’

VMware não inicaliza (workdir problem)

Após um desligamento inesperado, em um VMware ESXi que temos aqui, uma das máquinas não inicializava mais. O erro que mostrava era:

This virtual machine cannot be powered on because its working directory is not valid. Please use the configuration editor to set a valid working directory, and then try again.

Esse erro não permite que a máquina virtual seja iniciada.

A raiz deste problema está na nomenclatura das VMs. Não devem ser usados espaços e caracteres especiais, por exemplo. Nomes curtos também ajudam. Lembre-se que o vSphere Client é só uma interface para configurar um “linux”, e que os datastores são pastas dentro de um sistema de arquivos.

Passos para a solução gráfica:

  1. Conecte ao host ESX usando o Cliente vSphere e Logue com um usuário adminsitrativo;
  2. Remova a máquina virtual do inventário (NÃO REMOVA DO DISCO!!!!);
  3. Clique no host, e vá no datastore browser. Renomeie o(s) diretório(s) que tem os arquivos da VM em questão;
  4. Edite o arquivo .vmx da máquina e altere a propriedade woringDir. Ponha o novo diretório (após renomear);
  5. Com o botão direito, clique no arquivo vmx da sua VM, e peça para adicionar no Inventário.
  6. Inicialize a VM.

Tem uma maneira de fazer isso via shell, que pode ser útil também:

Conecte ao host ESX usando o Cliente vSphere e Logue com um usuário adminsitrativo;Remova a máquina virtual do inventário (NÃO REMOVA DO DISCO!!!!);

  1. Conecte ao host ESX usando o Cliente vSphere e Logue com um usuário adminsitrativo;
  2. Remova a máquina virtual do inventário (NÃO REMOVA DO DISCO!!!!);
  3. ssh root@<host_or_ip>;
  4. Verifique qual o nome do datastore que tem os arquivos da sua VM. Atente para a possibilidade dos arquivos estarem em mais de uma datastore. Sempre estas pastas estarão (por padrão) no diretório /vmfs/volumes/
  5. Execute um comando parecido com o de baixo para renomear:
    mv “/vmfs/volumes/storage1/<Dir_With_Spaces_And_Specials> ” “/vmfs/volumes/storage1/<Dir_WITHOUT_Spaces_And_Specials>”
  6. Vá ao Cliente vSphere, entre no datastore e localize o arquivo vmx. Com o botão direito, clique em adicionar ao inventário.

Quando for iniciar a VM, vá para a aba console. Nela, na primeira inicialização após esse procedimento, será detectado que mudanças ocorreram. Você pode dizer que foi movida, mas na minha experiência aqui, não funcionou. Não testei quando se diz que a máquina foi copiada. Depois disso, a máquina não inicia novamente, mas por outro motivo:

VMware ESX cannot find the virtual disk “/vmfs/volumes/<seu_arquivo_de_disco_virtual>”. Please verify the path is valid and try again. Cannot open the disk ‘/vmfs/volumes/<seu_arquivo_de_disco_virtual> or one of the snapshot disks it depends on. Reason: The system cannot find the file specified.

Mas este é um problema mais fácil de resolver. Remova os discos virtuais antigos, e recoloque-os localizando os vmdk novamente.

Referências (se a vmware não mudar as urls de tempos em tempos feito a ibm):

  • http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1000114
  • http://kb.vmware.com/selfservice/microsites/search.do?cmd=displayKC&externalId=1002929
CategoriasUncategorized

Erro 4866 com Bulk Insert

Ao me deparar com a situação de realizar uma importação de dados para o SQL Server a partir de arquivos CSV, percebi q seria uma boa oportunidade de usar o BULK INSERT.

Meu CSV é separado por vírgulas e foi escrito em unix. Isso vai nos levar ao velho problema da representação de fim de linha que é diferente entre windows e *unix.

Quando um arquivo plain-text *unix for usado com o código abaixo, o SQL Server vai enviar sempre ao invés de \n, o conjunto \r\n.

BULK INSERT [Data2010-2] 
    FROM 'C:\dataWithoutHeads.csv' 
    WITH 
    ( 
        KEEPNULLS,
        FIELDTERMINATOR = ',', 
        ROWTERMINATOR = '\n' 
    )

Esta inconsistência, vai gerar 3 erros quando for executado:

Msg 4866, Level 16, State 1, Line 1

The bulk load failed. The column is too long in the data file for row 1, column 30. Verify that the field terminator and row terminator are specified correctly.

Msg 7399, Level 16, State 1, Line 1

The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.

Msg 7330, Level 16, State 2, Line 1

Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".

O grande erro a ser corrigido aqui é o 4866, que representa um erro no BULK INSERT. Os outros são consequência deste erro.

Para resolver isso de uma forma simples, no unix mesmo, antes de executar o bulk insert, use o aplicativo unix2dos. Ele existe em qualquer distribuição linux e irá “converter” as quebras de linha formato unix para o formato Windows (caso você precise fazer o caminho inverso, existe o aplicativo dos2unix) e sua sintaxe é bem simples. Em qualquer linux shell, digite:

$ unix2dos dataWithoutHeads.csv

A depender do tamanho do arquivo demorará bastante. Para se ter uma referência, na minha máquina (quad core 2.33GHz, 2gb de RAM) levou aproximadamente 10 min para converter 261MB de texto.

Agora, a execução do bulk insert será sem erros.

CategoriasUncategorized

Ultra-som de Gabriel

29 outubro, 2009 1 comentário

Uma das últimas dele. Ansioso demais pra que ele venha logo ao mundo!

Agora, o bico é da mamãe! kkkkkkkkk

CategoriasUncategorized

Mail on PHP

Many people have posted about this before, but exactly because is a basic matter, is good to post my opinion on this subject.

About 4 years ago, I had to create a PHP code to send e-mail, but may lack of know how made me forget to make the mail function to work out. Besides, not everytime you can make such fixes on your server. This lead me to create the mail using sockets and sending commands to the smtp server of my preference.

In that time, hotmail, yahoo and gmail allowed the use of the smtp commands by telnet without worries. They hadn’t implemented at all the security protocols, like ssl or tls. That’s a good thing they had implemented security, of course. But,… and programming? What’s the difference now?

You cant say that the old code will still work out fine. It really can’t! if you try the correct commands on the telnet, all you’ll get is the client disconnection on the 3rd command sent to server. Fortunately, PEAR have a implementation of the SMTP protocol and have everything there to be used.

To install the package on your development machine, just type on the console (as a root if you are on linux)

  1. pear install Net_SMTP
  2. pear install Mail

Then its just to use some code like the one below:

require_once 'Mail.php';

class MyMail{
	private $to;
	private $from;
	private $subject = "Testando envio autenticado pelo Google";
	private $body = "Teste efetuado com sucesso!";
	private $host = "ssl://smtp.gmail.com";
	private $port = 25;
	private $username;
	private $password;
	public function getTo(){
		return $this->to;
	}
	public function setTo($t){
		$this->to = $t;
	}
	public function getFrom(){
		return $this->from;
	}
	public function setFrom($f){
		$this->from = $f;
	}
	public function getSubject(){
		return $this->subject;
	}
	public function setSubject($s){
		$this->subject = $s;
	}
	public function getBody(){
		return $this->body;
	}
	public function setBody($b){
		$this->body = $b;
	}
	public function getHost(){
		return $this->host;
	}
	public function setHost($h){
		$this->host = $h;
	}
	public function getPort(){
		return $this->port;
	}
	public function setPort($p){
		$this->port = $p;
	}
	public function getUsername(){
		return $this->username;
	}
	public function setUsername($un){
		$this->username = $un;
	}
	public function getPassword(){
		return $this->password;
	}
	public function setPassword($p){
		$this->password = $p;
	}
	public function send(){
		$headers = array ('From' => $this->getFrom(),
                            'To' => $this->getTo(),
                            'Subject' => $this->getSubject());
		
		$smtp = Mail::factory("smtp", array ('host' => $this->getHost(),
                                          'port' => $this->getPort(), // SMTPS(para mais detalhes ver /etc/services
                                          'auth' => true,
                                          'debug' => true, // Debug ligado
                                          'username' => $this->getUsername(),
                                          'password' => $this->getPassword())
		);
		$rc = $smtp->send($this->;to, $headers, $this->body);
		if(PEAR::isError($rc)){
			echo("<h1>Error " . $rc->getMessage(). "</h1>");
		} else {
			echo("Email enviado com sucesso!!");
		}
	}
}

It’s a preliminary class, so, many enhancements can be made to make the class better, but it just works as expected. Example to use? see below:

        if(isset($_POST)){
            require_once 'MyMail.class.php';
            $ms = new MyMail();
            $ms->setFrom('me@gmail.com');
            $ms->setTo('noone@gmail.com');
            $ms->setHost('smtp.google.com');
            $ms->setPort('25');
            $ms->setUsername('me@gmail.com');
            $ms->setPassword('p@ssw0rd');
            $ms->setBody('Test Message using PHP');
            $ms->setSubject('Test');
            $ms->send();
	}

This will produce the following stream to be sent to the server:

DEBUG: Recv: 220 mx.google.com ESMTP 23sm733843qyk.3
DEBUG: Send: EHLO localhost

DEBUG: Recv: 250-mx.google.com at your service, [189.70.93.58]
DEBUG: Recv: 250-SIZE 35651584
DEBUG: Recv: 250-8BITMIME
DEBUG: Recv: 250-STARTTLS
DEBUG: Recv: 250-ENHANCEDSTATUSCODES
DEBUG: Recv: 250 PIPELINING
DEBUG: Send: STARTTLS

DEBUG: Recv: 220 2.0.0 Ready to start TLS
DEBUG: Send: EHLO localhost

DEBUG: Recv: 250-mx.google.com at your service, [189.70.93.58]
DEBUG: Recv: 250-SIZE 35651584
DEBUG: Recv: 250-8BITMIME
DEBUG: Recv: 250-AUTH LOGIN PLAIN
DEBUG: Recv: 250-ENHANCEDSTATUSCODES
DEBUG: Recv: 250 PIPELINING
DEBUG: Send: AUTH LOGIN

DEBUG: Recv: 334 VXNlcm5hbWU6
DEBUG: Send: ZmFiaW8uY2VzYXIubWVkZWlyb3NAZ21haWwuY29t

DEBUG: Recv: 334 UGFzc3dvcmQ6
DEBUG: Send: ZG1hdGRtYXQwMQ==

DEBUG: Recv: 235 2.7.0 Accepted
DEBUG: Send: MAIL FROM:<sender-mail@gmail.com>

DEBUG: Recv: 250 2.1.0 OK 23sm733843qyk.3
DEBUG: Send: RCPT TO:<receiver-email@gmail.com>

DEBUG: Recv: 250 2.1.5 OK 23sm733843qyk.3
DEBUG: Send: DATA

DEBUG: Recv: 354  Go ahead 23sm733843qyk.3
DEBUG: Send: From: sender-email@gmail.com
To: receiver-email@gmail.com
Subject: Teste de e-mail

Teste de E-mail via Sockets
.

DEBUG: Recv: 250 2.0.0 OK 1256749304 23sm733843qyk.3
DEBUG: Send: QUIT

DEBUG: Recv: 221 2.0.0 closing connection 23sm733843qyk.3

CategoriasPHP, Plays, Uncategorized

Microsoft Training Kits

Well, It’s just one more tip. Microsoft has been releasing some Training Kits for the technologies that are running on market today. I’ve found some of them and the links are below:

  • SharePoint 2007 Training Kit

http://www.microsoft.com/downloads/details.aspx?FamilyID=673dc932-626a-4e59-9dca-16d685600a51&displaylang=en

  • Windows 7 Training Kit for Developers

http://www.microsoft.com/downloads/details.aspx?familyid=1C333F06-FADB-4D93-9C80-402621C600E7&displaylang=en

  • Visual Studio 2008 Training Kit

http://www.microsoft.com/DOWNLOADS/details.aspx?familyid=8BDAA836-0BBA-4393-94DB-6C3C4A0C98A1&displaylang=en

  • Visual Studio 2010 and .NET Framework 4 Training Kit

http://www.microsoft.com/downloads/details.aspx?familyid=752CB725-969B-4732-A383-ED5740F02E93&displaylang=en

  • SQL Server 2008 Training Kit

http://www.microsoft.com/downloadS/details.aspx?familyid=E9C68E1B-1E0E-4299-B498-6AB3CA72A6D7&displaylang=en

  • ASP.NET MVC Training Kit

http://www.microsoft.com/downloads/details.aspx?FamilyID=1E0BE0B2-910A-4676-9F3A-41E4D9C0FC08&displaylang=en

  • .NET 3.5 Enhancements Training Kit

http://www.microsoft.com/downloads/details.aspx?FamilyID=355c80e9-fde0-4812-98b5-8a03f5874e96&displaylang=en

Some day I’ll have time to study some of them.

Enjoy!

CategoriasUncategorized

Windows 7 RC is released

Yeah testers, the new Windows has just been released for testing. It’s avaliable here.

Microsoft recommends that you don’t upgrade from beta to RC, but reinstall from scratch.

Enjoy it! Test it!

CategoriasUncategorized

Shutdown Remoto

Está numa rede windows, precisando desligar ou restartar um (ou alguns) computadores? Use o comando shutdown -i.

shutdown-i

Nessa tela, é possível restartar, desligar ou hibernar os computadores selecionados. Há também um cuidado interessante, onde se pode dar um delay para o desligamento, exibindo uma message box na tela dos clientes, com um cronômetro avisanto que em pouco tempo a máquina irá ser desligada. Esse tempo é configurável, mas vem com o padrão de 30 sec.

Além disso, tem campos para o registro do motivo do desligamento, o que é particularmente útil em servidores, ainda contando com um lugarzinho pra se colocar um comentário sobre o motivo do desligamento.

Abraço,

CategoriasUncategorized

Maldito Bill!!!!!!!!!!

É, fui forçado a ficar com o vista no note, e me dei uma oportunidade de usá-lo por algum tempo para ter uma opinião de algo que realmente eu mexi, e não daquilo que só ouvi falar através de tantas revistas e artigos na net.

Porém, não retiro a maior parte dos problemas que todos esses artigos que li diziam. As versões mais básicas do vista dão mais raiva que satisfação, e só servem realmente para acessar a internet, e digitar texto. No home basic, a máquina ficou travada (um Turion 64, 1GB) quando tentou acessar um documento que estava em outro computador da rede. grrrrrrrr.

O pior é que quando travou, não consegui nem abrir o gerenciador de tarefas pelo Ctrl+Alt+Del…. nem pra matar o processo q tah sobrecarregando, ou para reiniciar o explorer, não há condição. O jeito foi reiniciar cada vez que aconteceu o fato. Assim estou convivendo com vista, e a cada problema, vou imitando meu amigo Marcelo: “MALDITO BIIIIILLLLLLLLLLLL!!!!!!!!!!!”

CategoriasUncategorized

MySQL agora é da Sun

Pois é! A Sun Microsystems comprou a MySQL AB, criadora e mantenedora do SGBD MySQL.

Post de Jonathan Schwartz’s (CEO da Sun)

Post de Kaj Arnö (CEO da MySQL AB)

CategoriasUncategorized

Vídeo da Formatura

Trabalho do pessoal da comissão de formatura, com alguns momentos da turma e com a beca.

 

CategoriasUncategorized
Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Join 1.029 other followers