Instalando o Mercurial no IIS como um handler ISAPI e integrado ao AD

Tags: Mercurial, IIS, ISAPI, AD

Estou montando a estrutura para um novo projeto e como não tinhamos licença para o Team Foundation Server, partimos para alternativas livres.

Escolhemos o Mercurial, porém, como eu não queria instalar o Apache no novo servidor somente para o Mercurial, ele deveria rodar no IIS.

Nosso servidor esta rodando o Windows Server 2008 R2 Enterprise (consequentemente, o IIS 7.5 e 64 bits). Segue os passos detalhados (que estão comentados no fonte do Mercurial) que eu segui para instalação:

  1. Instalar o Python na versão 2.6.6 32 bits (sim, tentei com a 64 bits, mas não consegui fazer funcionar).
  2. (Opcional) Adicione o Python ao PATH nas variáveis de ambiente do Windows.
  3. Instale o PyWin32 (Python for Windows extensions).
  4. Instale o isapi-wsgi - O instalador do não funcionou para mim, então baixei o EGG e fiz os seguintes passos para instala-lo:
    1. Baixe o Easy Install.
    2. Compile o Easy Install:
      python ez_setup.py
    3. Mande o Easy Install instalar o isapi-wsgi pelo EGG:
      easy_install isapi_wsgi-0.4.2-py2.5.egg
  5. Baixe o código fonte do Mercurial e extraia ele.
  6. Após compile o Mercurial:
    python setup.py --pure build_py -c -d . build_ext -i build_mo --force
    python setup.py --pure install –force
  7. Agora vamos gerar a DLL do handler ISAPI:
    1. Copie o arquivo “hgwebdir_wsgi.py” que está na pasta “contrib\win32” do código fonte do Mercurial para a pasta onde estará sua aplicação do IIS.
    2. Crie um arquivo “hgweb.config” na pasta onde está o “hgwebdir_wsgi.py” (esse arquivo .config não tem nada haver com os .config do .net).
    3. O conteúdo do arquivo deve ser assim:
      [paths]
      yourRepoName = c:\yourRepoLocation
    4. Edite o “hgwebdir_wsgi.py”:
      1. Coloque o caminho para o “hgweb.config” na variável “hgweb_config”:
        hgweb_config = r'C:\inetpub\hg\hgweb.config'
      2. Edite a variável “path_prefix” de acordo com a sua necessidade:
        path_prefix = 0 - Se você irá configurar o Mercurial como um site raiz no IIS.
        path_prefix = 1 - Se você irá configurar o Mercurial como uma aplicação num diretório no IIS.
    5. Execute o arquivo “hgwebdir_wsgi.py”:
      python hgwebdir_wsgy.py
    6. Deverá aparecer a mensagem “installation complete” e a dll “_hgwebdir_wsgy.dll” deverá estar na pasta.
  8. Agora vamos configurar o IIS (O suporte a ISAPI deverá estar instalado):
    1. Crie um novo Application Pool:
      Name: Mercurial (você que escolhe)
      .Net Framework version: No Managed Code
      Managed pipeline mode: Integrated
    2. IMPORTANTE: O Application Pool deve permitir aplicações 32 bits:
      1. Selecione o Application Pool criado.
      2. Clique em Advanced Settings.
      3. Coloque “Enable 32-Bit Applications” como “True”.
    3. Crie um novo site (ou aplicação) e escolha a Application Pool criada no passo anterior e aponte o diretório para onde está o arquivo “hgwebdir_wsgi.py” e a DLL criada.
    4. Adicione o Handler:
      1. Escolha o site criado, e vá em “Handler Mappings”.
      2. Clique em “Add Module Mapping”.
      3. Na janela que abrir:
        Request Path: *
        Module: IsapiModule
        Executable: A DLL gerada no passo 7.6 (Para mim: C:\inetpub\hg\_hgwebdir_wsgi.dll)
        Name: Mercurial-ISAPI (Você que escolhe)
      4. Na mesma janela, clique em “Request Restrictions…” e na aba “Access” marque a opção “Execute”.
      5. Na tela de “Handler Mappings” clique em “Edit Feature Permissions…” e marque a opção “Execute”.
      6. Você pode remover todos os outros Mappings se desejar.
  9. O Mercurial deve estar funcionando!
  10. Vamos agora adicionar autenticação com o AD:
    1. Selecione o site (ou aplicação) criado e va em “Authentication”.
    2. Desabilite a “Anonymous Authentication”.
    3. Habilite a “Basic Authentication” (O Mercurial só suporta Basic).
    4. Edite a “Basic Authentication” para o seu domínio.
    5. Uma boa idéia seria configurar o SSL, já que via “Basic Authentication” o usuário e senha trafegam pela rede em texto plano. Não habilitei o SSL pois vamos utilizar o Mercurial somente na Intranet.
  11. Pronto!

 

Idéias / Dicas:

  • Se você for usar o Mercurial com .Net, remova no “Request Filtering” do IIS, os “File Name Extensions” e os “Hidden Segments”, pois ele nega acesso a várias extensões de arquivos e pastas do .Net.
  • Realmente remova os Handler Mappings.
  • Não esqueça de liberar o site no Firewall do Windows.
  • O “hgweb.config” permite uma série de configurações, entre elas setar uma pasta com vários repositórios para ser publicada.
  • Aqui estão os meus arquivos: Download
Add a Comment