Raspberry Pi 2でサーバ作ってみる(13) 〜PostgreSQLのビルド〜

PostgreSQLをインストールします。
ここもソースからビルドしていきます。


まずはビルドオプションを調べるところから。
インストール手順
多いのはディレクトリやブロック容量を変更、floatの取り扱いを変更する場合
後はコンパイラを変更するとかもあるっぽい。
インストール場所はデフォルトのまま、OpenSSLとXML関連は使うことにします。
なんかGitリポジトリがあるみたいなので、また試してみようかな。
ソースの解凍方法とかも載っている。gz2だそうな。

cd /src
wget https://ftp.postgresql.org/pub/source/v9.4.4/postgresql-9.4.4.tar.bz2
tar -jxvf postgresql-9.4.4.tar.bz2

で、とりあえずビルド。

cd postgresql-9.4.4/
./configure \
  --with-openssl \
  --with-libxml \
  --with-libxslt

readline関連のエラーが出た!

configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable readline support.

apt - How to solve configure: error: readline library not found? - Ask Ubuntu
ここを参考に、ライブラリを探してみる。

apt-cache search libreadline

libreadline-devか、ということでインストール。

apt-get -y install libreadline-dev

再びconfigure。するとまたエラー。

checking for CRYPTO_new_ex_data in -lcrypto... no
configure: error: library 'crypto' is required for OpenSSL

cryptoというライブラリが必要そう。探してみると、
Installing PostgreSQL from source on Ubuntu 10.10 (Maverick Meerkat) | the gabriellephant
ちょっと古いけど、ここかな?
3つのライブラリがいりそう。

apt-get -y install libssl-dev libxml2-dev libperl-dev

みたびconfigure。またまたエラー。

configure: error: library 'xslt' is required for XSLT support

うーん、libxsltあたりで調べるとlibxslt1-devっぽい。

apt-get -y install libxslt1-dev

でconfigure…通った!
ってことで、make&make install

make
make install

インストールできたので、今日はここまで。

;(function(document){ var pres = document.getElementsByTagName("pre") for(var i=pres.length; i--; ){  var el = makeOl(pres[i]) pres[i].appendChild(el) } function makeOl(pre){ if (pre.className.indexOf("gist") !== -1) { return } var ol = document.createElement("ol") , li = document.createElement("li") , df = document.createDocumentFragment() , br = pre.innerHTML.match(/\n/g) || 0 ol.className = "preLine" ol.setAttribute("role", "presentation") // no lang, no line-number if( pre.className && ! /lang-./.test(pre.className) ){ br.length += 1 } for(var i=br.length; i--; ){ var li2 = li.cloneNode(true) df.appendChild(li2) } ol.appendChild(df) return ol } })(document)