使用 MinGW 构建

来自 PostgreSQL wiki
跳转到导航跳转到搜索

大多数 PostgreSQL 系统开发人员都在类 Unix 环境中工作,因此大多数测试也都在此环境中进行。提交的补丁会由构建农场自动在 MicroSoft Windows 上测试,但这种测试的周转时间对于那些不在 Windows 环境中工作但需要修改跨平台代码的人来说太慢了,或者对于那些标准构建和回归测试没有涵盖但需要自定义测试的问题来说也是如此。此外,在代码冻结期间,与 Windows 相关的补丁常常缺乏同行评审:希望使用 MinGW 在 Windows 上构建的说明能够帮助解决这个问题。

PostgreSQL 的 Windows 生产版本通常使用 MicroSoft 的商业编译器构建,但这些编译器通常不是免费的,并且对于习惯于 Linux 环境的人来说可能非常难以使用。这些说明旨在帮助这些开发人员在 Windows 上测试他们的代码,无需支付高昂费用,也不需要将自己变成 Windows 开发人员。

设置

如果您无法访问 Microsoft Windows 环境,您可以从 Amazon Web Services 租用一台。您需要某种图形环境,比如 X-Windows,才能通过 RDP 连接到 Windows。大多数现代 Linux 系统都有可用的图形环境和 "rdesktop" 程序,可以连接到 Windows。

t1.micro 抢占实例的当前价格为 $0.006 / 小时 (2013/02/23),如果您是 AWS 客户不到一年,则可能是免费的。但它会很慢!也可以考虑 t2.micro,如果可用,它可能更快。如果需要多花一点钱,m3.medium 是一个不错的选择。截至 2015/09/28,此实例的抢占价格略低于每小时 $0.06。

如果您有自己的 Windows 系统并愿意在上面安装 MinGW,那么创建和连接到 Amazon 实例的步骤就可以跳过。如果您在本地运行并且没有以管理员身份登录,那么您也可以跳过创建非特权用户并以该用户身份运行的步骤。

* Create an Amazon instance of Windows_Server-2008-SP2-English-64Bit-Base-2012.12.12 (ami-554ac83c), 
  or Windows_Server-2012-R2_RTM-English-64Bit-Base-2015.09.09 (ami-c9cea0ac).
    * make sure you have enabled the RDP port (3389) for the security group in which you launch the instance.
* get the credentials and log in using
    o rdesktop -g 80%  -u Administrator -p 'password' amazon-hostname
* turn off annoying IE security enhancements, and fire up IE
* go to http://sourceforge.net/projects/mingw/files/Installer and download latest mingw-get-setup.exe
* run this - make sure to select the Msys and the developer toolkit in addition to the Mingw base.
* navigate in explorer or a command window to C:\Mingw\msys\1.0 and run msys.bat
* run "df" to make sure that the windows Mingw directory is mounted on the virtual /mingw directory. If it's not, edit /etc/fstab with vim and add this line:
    c:/mingw /mingw
* run this command to install some useful packages:
    o mingw-get install msys-wget msys-rxvt msys-unzip
* close that window
* open a normal command window and run the following to create an unprivileged user and open an msys window as that user:
    o net user pgrunner SomePw1234 /add
    o runas /user:pgrunner "cmd /c \mingw\msys\1.0\msys.bat --rxvt"
* if you want to do 64-bit builds, you will need the compiler from the mingw-w64 project (a separate project from the mingw project). Go to 
  "http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/installer" 
  and download and run the latest installer (mingw-w64-install.exe). Run it and choose the following options:
    o architecture: x86_64
    o threads: win32
    o location: something like "C:\mingw-w64\x86_64-5.2.0-win32-seh-rt_v4-rev0"
  Then run msys.bat again as the Administrator and edit /etc/fstab and add a line like this:
     c:/mingw-w64/x86_64-5.2.0-win32-seh-rt_v4-rev0/mingw64 /mingw64

上面的步骤可能需要一段时间,并且会下载数百 MB 的数据,因此如果您使用的是 Amazon 实例,那么将此设置存储起来以便将来使用可能很值得,这样就不需要重复这些步骤了。(有人能添加关于如何做到这一点的说明吗?)

从 tarball 构建

 * Again open rxvt window (if not already open) runas /user:pgrunner "cmd /c \mingw\msys\1.0\msys.bat --rxvt"
    o wget http://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.gz
    o tar -z -xf postgresql-snapshot.tar.gz
    o cd ~/postgresql-9.4devel
 * For a 64-bit build then do:
    o export PATH=/mingw64/bin:$PATH
    o ./configure --host=x86_64-w64-mingw32 --without-zlib && make  && make check
 * For a 32-bit build do instead:
    o ./configure --without-zlib && make  && make check

泡杯咖啡,做个填字游戏或阅读《战争与和平》——这可能需要一段时间。

安装 Git

如果您想从 git 仓库而不是 tarball 快照构建,那么您需要安装一个 git 客户端,如果您正在进行开发,则需要这样做。

打开 https://git-for-windows.github.io/ 并获取最新版本。在撰写本文时,它被称为 Git-2.5.3-32-bit.exe 或 Git-2.5.3-64-bit.exe。运行此安装程序。选择一个易于管理的安装路径,而不是默认路径,例如 "c:\prog\git"。您可能会遇到权限错误。如果是这样,请尝试再次运行,或者以管理员身份运行。取消选中所有选项,除非您认为您需要它们 - 您在从 Msys 进行命令行使用时不需要它们。不要设置开始菜单文件夹,除非您想要一个 - Msys 也不需要它。选择 "从 Windows 命令提示符运行 git" 和 "按原样签出,按原样提交"。

之后,git 应该在 Msys 上的路径中,并且可以正常工作。通过在安装 git 后启动的 Msys 窗口中运行 "git --help" 来验证。

从 git 仓库构建

我们将使用 github 的镜像来检出 postgres,以避免给主仓库造成过载。

 * Again open rxvt window (if not already open) runas /user:pgrunner "cmd /c \mingw\msys\1.0\msys.bat --rxvt"
    o git clone https://github.com/postgres/postgres.git
    o cd postgres

然后按照与从 tarball 构建相同的 64 位或 32 位构建说明进行操作。

安装

构建完成后,您可以通过运行以下命令进行安装

 make install

接下来,您需要将 libpq dll 从安装 lib 目录复制到安装 bin 目录。这使得 pg_ctl、psql 和其他客户端程序能够正常工作。

交互式使用 psql

psql 客户端在 rxvt 终端模拟器中工作不好,并且似乎挂起了。您可以通过在打开会话时省略 "--rxvt" 标志来打开一个非 rxvt shell,psql 就可以按预期工作。它也可以在正常的 Windows 命令窗口和 Windows Power Shell 窗口中工作。这些构建都没有安装 readline,因此您没有 psql 历史记录、命令补全等功能。如果您想在 Windows 上使用 psql 进行大量工作,最好的方法可能是使用 Cygwin 构建和运行 psql,在 Cygwin 中,readline 是完全支持的。我通常使用这种方法。

替代方案

交叉编译

另一种不需要/使用 Windows 盒子的方法是从 Linux 盒子(例如 Ubuntu)交叉编译 postgres。

 # skip all the above steps, just do this:
 $ sudo apt-get install mingw-w64
 # download the source, cd into it, same instructions as above
 $ ./configure --host=i686-w64-mingw32 --without-zlib --prefix=... # 32 bit
 $ ./configure --host=x86_64-w64-mingw32 --without-zlib --prefix=... # 64 bit

然后,您可以使用 wine 运行它进行测试 [或者将其复制到 Windows 盒子并以原生方式运行,当然]。

 $ sudo apt-get install wine
 $ wine /full/path/to/psql.exe # etc. You can follow First_steps after its installed (actually, for any of the build mechanisms).

Cygwin

您可以在 Windows 盒子中安装 cygwin 并 "就像在 Linux 中一样" 使用 cygwin 的软件包(gcc 等)构建它。

Virtualbox

您也可以在 Linux 盒子中的 Virtualbox VM 中运行 Windows。