もなかアイスの試食品

「とりあえずやってみたい」そんな気持ちが先走りすぎて挫折が多い私のメモ書きみたいなものです.

CentOS6に最新のGitをインストールした話

CentOS6.8のデフォルトのgitを使用していたときに、「バージョンが古いので実行できない」的なことを言われた(何をしていたか忘れた・・・)

なので、最新のgitをコンパイル&インストールした

以下のサイトを参考にした。(ほぼ参考サイトと同じ内容)

Git - Gitのインストール

まず、依存しているパッケージのインストール

# yum install curl-devel expat-devel gettext-devel openssl-devel perl-devel zlib-devel

公式ガイドでは上記のパッケージしか載っていないけれども、他の参考サイトを確認したところ、他にも「perl-ExtUtils-MakeMaker」というパッケージが必要らしい

www.task-notes.com

自分の場合はいつの間にか入っていた

また、gitのヘルプも個人的に必要なので、ドキュメントの生成に必要なパッケージをインストール

# yum install asciidoc xmlto docbook2X

FedoraRHELRHEL派生のディストリビューションは、バイナリの名前が異なっているため、以下のコマンドを実行

# ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi

以下のサイトから、最新のgitのソースコードアーカイブを選択

github.com

自分が見たときは「2.12.2」が最新

ソースコードのダウンロードからコンパイル、インストールのコマンドを実行

# cd /usr/local/src
# wget -O git-2.12.2.tar.gz https://github.com/git/git/archive/v2.12.2.tar.gz
# tar xvf git-2.12.2.tar.gz
# make configure
# ./configure --prefix=/usr
# make all doc info
# make install install-doc install-html install-info

gitがインストールされたかどうか確認

# git --version
git version 2.12.2

【C#】NpgsqlでPostgreSQLのNotifyを受信する

以前、PythonでNotifyを受信する方法を書いた

monakaice88.hatenablog.com

C#のほうが個人的に利用することが多いのでC#版を書いてみた

環境

  • .NET Framework 4.5
  • 追加NuGetパッケージ
    • Microsoft.Extensions.Logging(1.1.0)
    • Microsoft.Extensions.Logging.Abstractions(1.1.1)
    • Npgsql(3.2.1)
    • System.Threading.Tasks.Extensions(4.3.0)

ソースコード

NpgsqlでNotifyを受信するサンプル

実行結果

C#実行時

f:id:monakaice88:20170328125306p:plain

Notify実行

f:id:monakaice88:20170328125323p:plain

C# Notify受信

f:id:monakaice88:20170328125351p:plain

ハマった点

既にNotifyの受信用にコネクションを開いているので、そのコネクションを使用して(サンプルコードだと【listenConnection】)、別のSQLを実行しようとすると例外が発生する。

以下がコード例

【NpgsqlCommand( “SELECT test;”, listenConnection )】後の【command.ExecuteReader()】でコケる

using ( NpgsqlConnection listenConnection = new NpgsqlConnection( builder.ConnectionString ) )
{
    listenConnection.Open();
    listenConnection.Notification += ( sender, e ) =>
    {
        Console.Out.WriteLine( "Recieve NOTIFY!" );
        using ( NpgsqlCommand command = new NpgsqlCommand( "SELECT test;", listenConnection ) )
        {
            command.ExecuteReader();
        }
    };

    using ( NpgsqlCommand command = new NpgsqlCommand( "LISTEN test;", listenConnection ) )
    {
        command.ExecuteNonQuery();
    }

    listenConnection.Wait();
}

例外のメッセージ

The connection is already in state ‘Waiting’

この例外は、Npgsqlから投げられる例外。

コネクションインスタンスの使い回しを避けて、新規にインスタンスを生成しないといけないみたい(Waitメソッドを呼び出したコネクションに限るかも・・・)

CentOSでApacheとPHPをコンパイル&インストールしてみた

パッケージ管理ツールでPHPをインストールすると、CentOS6.8の場合、デフォルトのApache2.2がインストールされる

あとApache2.4を使う場合、パッケージ管理ツールでインストールするPHPはfast-cgiで使わないといけない(らしい)

ある環境と完全に合わせたかったなので、いろんなサイトを参考にしつつ、コンパイル&インストールをしてみた話

構成

参考にしたサイトの紹介

Apache2.4のインストールは主に以下のサイトを参考

normalse.hatenablog.jp

PHPのインストールは主に以下のサイトを参考

PHP: Apache 2.x (Unixシステム用) - Manual

必要なパッケージのインストール

ソースコードのダウンロードやらコンパイルで必要なパッケージをインストール

yum install wget pcre pcre-devel gcc make perl

perlをインストールした状態でApacheコンパイルしないと、今回のPHPのオプションの影響で「./configure」コマンドがコケる

Apache2.4のインストール

Apacheコンパイル&インストールする前に、aprと言うものをインストールする必要あり

aprは元々Apacheに同梱されていたパッケージで、OSの差を吸収するためのパッケージ・・・らしい

なので、まずaprとapr-utilのパッケージのコンパイル&インストールする

ソースコードのURLは以下のサイトより

Download - The Apache Portable Runtime Project

aprのコンパイル&インストール

# /usr/local/src/をソースコードの配置場所
cd /usr/local/src/
wget http://ftp.kddilabs.jp/infosystems/apache//apr/apr-1.5.2.tar.gz
    
# アーカイブを解凍&展開して、展開後のフォルダに移動
tar xvzf apr-1.5.2.tar.gz
cd apr-1.5.2
    
# /opt/apr/apr-1.5.2にインストールする
./configure --prefix=/opt/apr/apr-1.5.2
    
# コンパイル&インストールする
make
make test
make install

apr-utilのコンパイル&インストール

# /usr/local/src/をソースコードの配置場所
cd /usr/local/src/
wget http://ftp.kddilabs.jp/infosystems/apache//apr/apr-util-1.5.4.tar.gz
    
# アーカイブを解凍&展開して、展開後のフォルダに移動
tar xzvf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
    
# aprのインストール先を指定し、/opt/apr-util/apr-util-1.5.4にインストールする
./configure --prefix=/opt/apr-util/apr-util-1.5.4 --with-apr=/opt/apr/apr-1.5.2/
    
# コンパイル&インストールする
make
make test
make install

Apache2.4のコンパイル&インストール

# /usr/local/src/をソースコードの配置場所
cd /usr/local/src/
wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache//httpd/httpd-2.4.25.tar.gz
    
# アーカイブを解凍&展開して、展開後のフォルダに移動
tar xzvf httpd-2.4.25.tar.gz
cd httpd-2.4.25
    
# aprのapr-utilを指定し、/opt/httpd/httpd-2.4.25にインストールする
./configure --prefix=/opt/httpd/httpd-2.4.25 --with-apr=/opt/apr/apr-1.5.2/ -with-apr-util=/opt/apr-util/apr-util-1.5.4/ --with-mpm=prefork --enable-mods-shared='headers rewrite deflare alias env proxy mime log_config mod_include'
    
# コンパイル&インストールする(make testは動かなかった)
make
make install

オプションの「—with-mpm」やら「–enable-mods-shared」以下のサイトを参考

configure - Configure the source tree - Apache HTTP Server Version 2.4

PHP5.6のコンパイル&インストール

PHPに必要なパッケージをインストール

# コンパイルのためインストール
yum install libxml2-devel
    
# GDライブラリのためインストール
yum install libpng libpng-devel libjpeg libjpeg-devel freetype freetype-devel
    
# PostgreSQL9.5に接続するライブラリ生成のためインストール
rpm -Uvh https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-6-x86_64/pgdg-centos95-9.5-3.noarch.rpm
yum install postgresql95-devel

PHPソースコードコンパイル&インストールする

# /usr/local/src/をソースコードの配置場所
cd /usr/local/src/
wget http://jp2.php.net/get/php-5.6.30.tar.gz/from/this/mirror -O php-5.6.30.tar.gz
    
tar xzvf php-5.6.30.tar.gz
cd php-5.6.30
    
./configure --enable-zip --enable-mbstring --enable-exif --with-gd --enable-gd-native-ttf --enable-gd-jis-conv --with-jpeg-dir=/usr/ --with-png-dir=/usr/ --with-freetype-dir=/usr/ --with-pdo-pgsql=/usr/pgsql-9.5/ --with-pgsql=/usr/pgsql-9.5/ --enable-ftp --prefix=/opt/php/php-5.6.30 --with-apxs2=/opt/httpd/httpd-2.4.25/bin/apxs
    
make
make test
make install

PHPコンパイルオプションは以下のサイトが分かりやすい

www.atmarkit.co.jp

PHP: 関数リファレンス - Manual

PHPの設定ファイルのコピー

cp php.ini-development /opt/php/php-5.6.30/lib/php.ini

ApachePHPの設定変更

/opt/httpd/httpd-2.4.25/conf/http.confを変更

ServerName www.example.com:80
↓
ServerName localhost:80
    
<Directory "/opt/httpd/httpd-2.4.25/htdocs">
    Options Indexes FollowSymLinks
    ↓
    Options FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
    
<IfModule dir_module>
    DirectoryIndex index.html
    ↓
    DirectoryIndex index.html index.php
</IfModule>
    
# 追記
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

/opt/php/php-5.6.30/lib/php.iniの変更

;date.timezone =
↓
date.timezone = Asia/Tokyo

Apacheの起動

/opt/httpd/httpd-2.4.25/bin/apachectl start

ApachePHPの動作確認

/opt/httpd/httpd-2.4.25/htdocsディレクトリ以下に動作確認用のファイルを生成

phpinfo.php

<?php
    phpinfo();

extensions.php

<?php
    print_r(get_loaded_extensions());

phpinfo.phpにアクセスしてちゃんと表示されるか確認

f:id:monakaice88:20170323072022p:plain

extensions.phpにもアクセスし、拡張機能が利用できるか確認

f:id:monakaice88:20170323072024p:plain

おわりに

とりあえずphpinfoが動作したけど、PHPの必要な拡張機能がちゃんとコンパイルされているか怪しい・・・

PHPソースコードディレクトリで「./configure –help」を隅々まで確認しないとよくわからないでござる