quinta-feira, 5 de julho de 2012

Recursos de Formação – TFS

Pra quem quer começar ou se especializar um pouco mais em TFS, aí vão alguns recursos gratuitos:

sexta-feira, 22 de junho de 2012

Como clonar VM's no Hyper-V

Biblioteca de VM's - ou biblioteca de VHD's - são excelente ferramentas para desenvolvedores criarem rapidamente um ambiente de testes. Mas você pode esbarrar em ferramentas instáveis e as famosas Blue Screen of Death se você não souber clonar corretamente os VHD's de sua biblioteca para a criação de novas VM's. A combinação de VHD's diferenciais com o sysprep reduz bastante o trabalho de subir corretamente clones de uma VM que precisam rodar em um domínio.

Contexto

Instalei um Windows 2008 R2 em uma VM do Hyper-V pra testes. Pra não ter que passar pelo tempo de instalação quando criasse novas VM's, separei o VHD dela, marquei como read-only, e comecei a criar novas VM's usando o recurso de discos diferenciais do Hyper-V, que permite criar discos baseado em um disco "pai". O disco "filho" - o disco diferencial - contém tudo o que o disco pai contém, e modificações nos arquivos são gravados no disco diferencial, deixando o disco pai intacto para servir de base para outros discos. (Se estiver curioso sobre discos diferenciais, dê uma olhada no artigo Virtual Hard Disk (VHD) Architecture explained).

Problema

Até o momento, eu tinha instalado tudo que eu queria testar em uma única VM. P.e., uma VM tinha SharePoint + SQL Server. Outra tinha um DC + Visual Studio + TFS + SQL Server. Eu testava tudo subindo só uma VM. Meu problema foi quando quis criar um domínio e subir várias VM's simultaneamente, usando o disco pai pra criar estas VM's.

O problema é que o Windows gera "coisas" durante a instalação que devem ser únicas em um domínio. Parece que existem várias destas "coisas", mas a que me deu problema foram os SID's das máquinas e dos usuários. Um SID é, basicamente, o identificador único de um objeto (máquina, usuário, grupo, etc) em um domínio. Se você simplesmente copia o VHD de uma VM e cria uma nova VM usando este VHD como disco, os SID's são duplicados. Isto causa problemas e erros quando estas VM's estão no mesmo domínio pois o Windows não espera encontrar SID's duplicados no domínio.

Solução

Como qualquer problema, tem várias formas de resolver isto. A que mais se adequou ao meu objetivo, que é criar uma biblioteca de VHD's para subir rapidamente ambientes Windows de desenvolvimento e testes que serão usados e depois descartados, foi:
  1. Criar uma VM e instalar o sistema operacional (Windows 2008 R2).
  2. Configurar opções comuns a todas as VM's que se basearão nesta instalação. Em particular: retirar a obrigatoriedade de troca de senha do administrador, customizar propriedades do Menu Iniciar, instalar o BgInfo para identificar facilmente as VM's.
  3. Executar o sysprep para colocar o Windows em um estado "acabei de ser instalado". O sysprep é uma ferramenta da Microsoft que prepara uma imagem de disco com uma instalação Windows para clonagem.
  4. Marcar o VHD como read-only.
  5. Criar novas VM's usando discos diferenciais baseados neste VHD "sysprep'd".
Para executar o passo 3 acima, após sua VM base estar completamente customizada, abra um command prompt, mude para C:\Windows\System32\Sysprep, e execute sysprep.exe. Selecione a opção "Enter System Out-of-Box Experience (OOB)", marque a opção "Generalize" (que faz com que o sysprep reinicialize tudo que tem que ser reinicializado - como os SID's), e selecione a opção "shutdown" para que a VM seja desligada após a execução do sysprep. Agora você tem um disco virtual com um Windows instalado e pronto para receber novos nome, SID, e as outras "coisas".


Quando você criar novas VM's que usam discos diferenciais baseados neste VHD, no primeiro boot será apresentado um "mini-setup" do Windows aonde ele pedirá somente algumas informações, gerará um nome para a nova máquina, e pronto - em menos de 2 minutos você tem uma nova VM limpinha pra trabalhar.

Observações

  1. O nome da nova máquina é auto-gerado, então geralmente é a primeira coisa que eu mudo.
  2. A máquina entra com IP auto-configurado ("APIPA" - 169.254.blablabla). Caso você esteja montando uma rede de VM's, tem que configurar o IP para ela entrar na rede.
  3. Dá dor de cabeça montar uma VM para fazer o sysprep se esta VM tem o SQL Server já instalado. Não é suportado até o SQL Server 2008. O que tenho feito é subir uma VM sysprep'd "limpa" - só o Windows -, colocar ela no domínio e instalar o SQL Server. Perco menos tempo assim do que ficar tentando solucionar problemas devido a fazer o syspred de uma VM já com SQL Server instalado. No SQL Server 2008 *R2* diz a MS que é suportado, mas nunca usei pra ver se dá muito trabalho ou não.
  4. Comecei a receber o erro "An attempt to resolve the DNS name of a domain controller in the domain being joined has failed" quando ia acrescentar uma nova VM no domínio - apesar de ter configurado o DC do domínio como o servidor DNS primário da nova VM, e conseguir pingar de uma máquina pra outra. Resumindo (muito), desabilitei o IPv6 em todas as máquinas e tudo voltou ao normal.
[]s,

GB

terça-feira, 8 de maio de 2012

Meu site SharePoint está com segurança integrada mas ainda aparece a janela de logon

Coloca ele como “Local Intranet” no IE que pára de aparecer.

(Forte concorrente a menor post do mundo se não fosse essa última frase)

quinta-feira, 3 de maio de 2012

SharePoint: Erro de deploy | Momento revolta :-P

Estava fazendo o deploy de uma solução no SharePoint e apareceu o erro "Error occurred in deployment step 'Activate Features': Operation is not valid due to the current state of the object.". Aí eu pensei "Hein?" e fui pro Google. E a primeira solução que encontrei foi:
1. Feche o VS2010
2. de um IISRESET no server
3. Abra o Task Manager e de um KILL em todos os processos w3wp.exe 
"Tu tá de sacanagem" eu pensei. Mas fiz isso e, sem mudar nada no código, o deploy passou a funcionar. Desenvolvimento no SharePoint é isso: faz sua estimativa, multiplica por 3 por causa dessas "peculiaridades", e reza pra ter alguém que já passou pela mesma coisa e postou na Internet. Se não chegasse tanta demanda nesse troço...

segunda-feira, 27 de fevereiro de 2012

Ambiente de Testes Virtualizado com Controlador de Domínio

Não sei direito porque, mas ouvi o pessoal de infra falando sobre problemas se serviços do seu domínio (tais como SQL e Exchange) sobem antes do controlador de domínio. Montei um domínio de testes para desenvolvimento no TFS e esbarrei nesse problema: serviços não subiam ou a conectividade entre eles não funcionava. Como as VM’s estão no Hyper-V, dá pra colocar um “atraso” no boot das máquinas, então configurei o DC sem o delay, e as outras máquinas com um delay de 30 segundos. Na tela de configuração de cada VM que deve subir com o delay:


Desta forma, o controlador de domínio sobe antes das outras VM’s, evitando esse tipo de problema.

terça-feira, 14 de fevereiro de 2012

Como publicar seu banco para o SQL Azure com o Management Studio

Essa é velhinha mas vale a pena, porque tá escondida lá nas profundezas do Wizard de geração de scripts do Management Studio.

O SQL Azure só suporta um subconjunto das instruções e opções de objeto do SQL Server “normal”. Se você gerar um script de criação do banco no Management Studio, esse script só vai rodar se você retirar manualmente um monte de coisa dele (a lista está nesse artigo do Technet: Develop and Deploy With SQL Azure). Mas se você usar o Management Studio do SQL Server 2008 *R2*, tem umas opções no Wizard de geração de scripts que já retira esse monte de tranqueira que não roda no SQL Azure.

Entre no Wizard de geração de scripts do Management Studio (no Object Explorer: selecionar o banco | botão direito | Tasks | Generate scripts…). Quando chegar na tela “Set Scripting Options”, selecione o destino (file | clipboard | new query window) e pressione o botão “Advanced”. As opções interessantes são:

  • Script for the database engine type: stand-alone para SQL Server “normal” ou SQL Azure Database para o SQL Azure.
  • Types of data to script: Schema only gera os comandos de criação de objetos, Schema and data gera também os INSERT’s para as linhas de cada tabela incluída no script (obviamente só use isto se você tiver poucos dados nas tabelas).

E pronto. Conecte o Management Studio no seu banco SQL Azure e rode o script gerado.

PS: Se você não tem o SQL Server 2008 R2, pode baixar o SQL Server 2008 R2 Express with Advanced Tools. No setup desmarque a instalação de uma instância do SQL Server (Database Engine, ou Database Services, algo assim), e ele instalará apenas as ferramentas de gerenciamento, dentre elas o Management Studio versão 2008 R2. O melhor é que é de “grástis”: http://www.microsoft.com/download/en/details.aspx?id=23650.

segunda-feira, 23 de janeiro de 2012

Haja Produtividade

Quando for fazer um projeto pra nuvem, lembre-se de acrescentar no cronograma uma gordurinha extra por conta dos deploys da aplicação. Olha um log de deploy de um projeto Cloud no VS2010:


16:22:27 - Warning: There are package validation warnings.
16:22:28 - Preparing...
16:22:28 - Connecting...
16:22:31 - Uploading...
16:30:31 - Creating...
16:31:41 - Starting...
16:32:16 - Initializing...
16:32:16 - Instance 0 of role _____________ is initializing
16:32:16 - Instance 0 of role _____________ is initializing
16:36:12 - Instance 0 of role _____________ is busy
16:36:12 - Instance 0 of role _____________ is busy
16:37:19 - Instance 0 of role _____________ is ready
16:37:52 - Instance 0 of role _____________ is ready
16:37:54 - Complete.

16:22 pra 16:37... só 15 minutos esperando o deploy :-P Tá me lembrando a época da bolsa de computação gráfica da UnB, que a gente mandava compilar o aplicativo e demorava 5 minutos. Aí testava, corrigia alguma coisa e mais 5 minutos pra compilar. Haja produtividade ;-)