Just in Chronicles

Life as a Voyage

Posts Tagged ‘Windows Server 2008 R2

How to Install the Latest Version of Mercurial Web Repository on Windows 2008 Server R2

with 6 comments

It’s a super pain to install HG on Windows 2008 Server R2. This post is based on Firegarden’s article and has additional information from other resources.

Prerequisites

  • Windows 2008 Server R2
  • The latest version of Python: 2.7.3 (at the moment of writing)
  • The latest version of PyWin32: Build 217 (at the moment of writing)
  • The latest version of Mercurial: 2.2.2 (at the moment of writing)

Setup Process

Please note that if your choice of Python has to be consistent. In other words, if you choose Python of x86 version, all other applications have to be x86 version; if you choose Python of x64 version, all other applications have to be x64 version; otherwise, this will not be working for your system.

1. Installing Python.

As Mercurial doesn’t support Python 3.x, the latest version of Python we can use is 2.7.x.

  1. Go to the Python download page. http://www.python.org/download/releases
  2. Download the latest 2.7.x version of Python. Choose the platform carefully, if to be x86 or x64.
  3. Install Python downloaded. Make sure that the installation must be conducted by an administrator permission. During the installation process, let the installer set the default installation directory, which will be C:\Python2x.
  4. Add the Python path to the system environment path.
    1. Open “Control Panel” > “System and Security” > “System” > “Advanced System Settings
    2. Click “Environment Variables...” and find the “Path” variable under “System variables” section.
    3. Append “;C:\Python2x;” to the “Path” value. Make sure that the path value is delimited by semi-colons.
    4. Open a command prompt and type “python” at any directory and you will get into the python console. Press CTRL+Z to exit from the console.
    5. If you can’t run the “python” command on the command prompt, check the step 4.3 again. If the path has been correctly set, your server might need to reboot.

2. Installing PyWin32

Again, your choice of platform has to be consistant; if you have installed Python of x86 version, this also has to be x86 version; if you have installed Python of x64 version, this also has to be x64 version.

  1. Go to the Python for Windows Extensions download page. http://sourceforge.net/projects/pywin32/files/pywin32
  2. Go to the latest build and download an appropriate one corresponding to your Python version and platform. The filename looks like “pywin32-xxx.win32-py2.7.exe”
  3. Install the PyWin32 downloaded. Make sure that the installation must be conducted by an administrator permission.
  4. In case of error you might face at the end of the installation process. The message will look like:

    close failed in file object destructor:
    sys.excepthook is missing
    lost sys.stderr

    This is because of your administrator permission. For workaround of this: http://sourceforge.net/mailarchive/message.php?msg_id=29300152

    1. Click “Start Menu” > Right click on “Computer” > Click “Manage“.
    2. Go to “System Tools” > “Local Users and Groups” > “Users
    3. Create a new account named “Admin” and assign it to the “Administrators” group.
    4. Open a command prompt as an administrator and type

      runas /user:Admin pywin32-xxx.win32-py2.7.exe

      and type password you set previously.

    5. If you get an error “Access is denied“, close the command prompt and open it again as an administrator.

3. Building and Installing Mercurial from the Source Code.

As the latest version of Mercurial installer (2.2.2 at the moment of writing) is built with Python 2.6.6, the installer will not be running on our server. So, we need to build the source with Python that we have installed into our system.

  1. Go to the Mercurial download page. http://mercurial.selenic.com/downloads
  2. Download the source code and unzip it. We assume that the unzipped directory is “C:\hg-source“.
  3. Open a command prompte as an administrator and move to the unzipped directory.
  4. Run the following command to build Mercurial

    python setup.py --pure build_py -c -d . build_ext -i build_mo --force

    Even if you meet a warning like “warning: hgbuildmo: could not find msgfmt executable, no translations will be built“, just ignore it.

  5. Run the following command to install Mercurial

    python setup.py --pure install --force

    Mercurial will have been installed at “C:\Python2x\Lib\site-packages\mercurial

  6. In order to execute to “hg” command at anywhere, try the followings:
    1. Copy “c:\python2x\scripts\hg.bat” to “c:\python2x
    2. Open hg.bat and modify the line

      "%~dp0..\python" "%~dp0hg" %*

      to

      "%~dp0python" "%~dp0\scripts\hg" %*

4. Installing ISAPI-WSGI Module

For better performance, we need to install ISAPI-WSGI module to build a DLL file.

  1. Go to the ISAPI-WSGI download page. http://code.google.com/p/isapi-wsgi/downloads/list
  2. Download the latest version of the source code. The precompiled version will not work for our setup.
  3. Unzip it. We assume that the unzipped directory is “C:\isapi-wsgi-source“.
  4. Run the following command to compile the source

    python setup.py install

5. Seting up IIS for the Mercurial Web Repository

As IIS doesn’t recognise Python and Hg natively, we need to setup IIS manually.

  1. Open IIS Manager.
  2. Create an application pool called “Mercurial” with the following configurations:
    1. Set “.NET Framework Version” to “No Managed Code
    2. Set “Enable 32-Bit Applications” to “True“, only if you have installed x86 version of Python.
  3. Create a website on IIS for the web repository. We assume that the directory is “C:\inetpub\hg” and its URL is “hg.myserver.com“. This has to point the application pool “Mercurial“.
  4. Copy the “hgwebdir_wsgi.py” file from the Mercurial source code downloaded to “C:\inetpub\hg“. It is located in “C:\hg-source\contrib\win32“.
  5. Open the “hgwebdir_wsgi.py“, find and edit the parameters below:

    hgweb_config = r'c:\inetpub\hg\hgweb.config'
    path_prefix = 0

  6. Create a new “hgweb.config” file in “C:\inetpub\hg” and place the following into it.

    [paths]
    / = c:\Repositories\*

  7. Open a command prompt as an administrator and move to the directory “C:\inetpub\hg“.
  8. Run the following command to build the ISAPI-WSGI library.

    python hgwebdir_wsgi.py

  9. Open Handler Mappings and click “Add Wildcard Script Map...” with followings:
    1. Set “Executable” to “c:\inutpub\hg\_hgwebdir_wsgi.dll” that has been created from the step 5.8.
    2. Set “Name” to “Mercurial-ISAPI“.
    3. If you are asked to allow the ISAPI extension, click “YES“.

So far, if everything is done smoothly, you can browse the web repository by typing the URL “http://mg.myserver.com” into your brower’s lcation bar.

This is optional. If you want to tie basic authentication function to the web repository, try the following steps.

6. Setting up Basic Authentication of IIS onto the Web Repository

  1. Create users and a user group.
    1. Click “Start Menu” > Right click on “Computer” > Click “Manage“.
    2. Go to “System Tools” > “Local Users and Groups” > “User Groups
    3. Create a user group, named “Mercurial Users
    4. Go to “System Tools” > “Local Users and Groups” > “Users
    5. Create as many users as you want and assign the users to the “Mercurial Users” group.
  2. Set the permission for the “Mercurial Users” group to only allow the access to “C:\inetpub\hg“.
  3. Create a self-signed certificate and bind the HTTPS protocol with “hg.myserver.com“.

Once everything is done, type “https://hg.myserver.com” and you will be asked to login to the site.

It would be great if you guys who are reading this article share your experiences regardless of success or failure.

Written by Justin

02/07/2012 at 18:16

Follow

Get every new post delivered to your Inbox.

Join 539 other followers