My Photo

« February 2015 | Main | April 2015 »

March 29, 2015

PostgreSQLのインストール その2

関連記事:
PostgreSQLのインストール その1

外部から接続できるようにする

前の記事で同じサーバ上でpsqlからPostgreSQLサーバに接続できたが、このままでは他のマシンからは接続できない。
これを接続でいるようにする。
まず、サーバが他のマシンからの接続を受け入れるように /var/lib/pgsql/data ディレクトリにある postgresql.conf の listen_address を有効にして以下のように設定する。

listen_address = '*'

また、接続の詳細な設定を同じディレクトリの pg_hba.conf に以下を追記する。

host    all         all         192.168.3.0/24        password

この設定は左から接続の種類、DB、ユーザ、IPアドレス、認証方式を示す。
上記の設定の場合、次の意味になる。
・host:TCP/IP接続
・all:すべてのDB
・all:すべてのユーザー
・192.168.3.0/24:ネットワークアドレス
・password:平文のパスワードで認証する

postgresql.conf と pg_hba.conf を上記のように変更したらサーバを再起動する。
#reloadでもいけるだろか?

認証方法をパスワードによる認証を設定したのでユーザにパスワードを設定する必要がある。同じマシン上からならpsqlでサーバに接続できるので、以下のようにPostgreSQLのユーザにパスワードを設定する。

# su - postgres
$ psql mydb
psql (8.4.20)
"help" でヘルプを表示します.

mydb=# alter role pguser with password 'pguser';
ALTER ROLE
mydb=# \q

PostgreSQLの設定の他に、iptablesの設定を変更してPostgreSQLが使う5432番ポートを開ける必要がある。
/etc/sysconfig/iptables に以下を追加し、serviceコマンドでiptablesを再起動する。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT

これでホストOS(Windows7)のpsqlやpgadmin IIIからゲストOS(CentOS 6.6)上のPostgreSQLに接続することができる。

参考ページ:
他ホストから接続するための設定
Stray Penguin - Linux Memo (PostgreSQL)
pg_hba.confファイル - 設定ファイル - PostgreSQLの使い方
ユーザにパスワードを設定する - ワレココニイル。
PHP CentOSにおいてPHPからPostgreSQLを操作できるようにする | WEB作業メモ
postgresqlを他ホストからもつなげるようにする - Qiita
コピペから脱出!iptablesの仕組みを理解して環境に合わせた設定をしよう | OXY NOTES

March 23, 2015

PostgreSQLのインストール その1

関連記事:
yumコマンド
PostgreSQLのコマンドラインクライアントpsql

インストール

PHP 5.3.3 のインストールを参考に、パッケージグループでインストールしてみた。
まず、パッケージグループを調べる。

# yum -v grouplist | grep postgres
   PostgreSQL データベースサーバー (postgresql)
   PostgreSQL データベース接続クライアント (postgresql-client)
# yum groupinfo postgresql
読み込んだプラグイン:downloadonly, fastestmirror, refresh-packagekit
グループ処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp

グループ: PostgreSQL データベースサーバー
 説明: PostgreSQL データベースサーバーと関連パッケージ
 強制的なパッケージ:
   postgresql-server
 標準パッケージ:
   postgresql-docs
 オプション パッケージ:
   postgresql-contrib
   postgresql-plperl
   postgresql-plpython
   postgresql-pltcl
   postgresql-test
   rhdb-utils

とりあえずサーバの方のパッケージグループをインストール。

# yum -y groupinstall postgresql
<中略>
依存性を解決しました

================================================================================
 パッケージ               アーキテクチャ
                                        バージョン            リポジトリー
                                                                           容量
================================================================================
インストールしています:
 postgresql-docs          x86_64        8.4.20-1.el6_5        base        6.9 M
 postgresql-server        x86_64        8.4.20-1.el6_5        base        3.4 M
依存性関連でのインストールをします。:
 postgresql               x86_64        8.4.20-1.el6_5        base        2.6 M
 postgresql-libs          x86_64        8.4.20-1.el6_5        base        201 k
<中略>
インストール:
  postgresql-docs.x86_64 0:8.4.20-1.el6_5                                       
  postgresql-server.x86_64 0:8.4.20-1.el6_5                                     

依存性関連をインストールしました:
  postgresql.x86_64 0:8.4.20-1.el6_5   postgresql-libs.x86_64 0:8.4.20-1.el6_5  

完了しました!
# id postgres
uid=26(postgres) gid=26(postgres) 所属グループ=26(postgres)
# which psql
/usr/bin/psql

依存関係からサーバだけでなくクライアント(psql)もインストールされた。
また、postgres というユーザとグループが作成されていた。

サービスの起動

参考ページの「3. PostgreSQL を使ってみる」をやってみた。

まず、Linuxのアカウントを新たに1つ作る。
#意味は考えずに、とりあえず作った。

# useradd pguser

次にサービスを起動しようとしたが、失敗。

# service postgresql start

/var/lib/pgsql/data is missing. Use "service postgresql initdb" to initialize the cluster first.
                                                           [失敗]

エラーメッセージの中に書かれている "service postgresql initdb" を実行してみる。すると、空だった /var/lib/pgsql/data/ ディレクトリの中に設定ファイルなどができていた。
そしてサービスの起動を試みると、今度は成功。

# service postgresql initdb
データベースを初期化中:                                    [  OK  ]
# ls /var/lib/pgsql/
backups  data  pgstartup.log
# ls /var/lib/pgsql/data/
PG_VERSION  pg_clog        pg_log        pg_subtrans  pg_xlog
base        pg_hba.conf    pg_multixact  pg_tblspc    postgresql.conf
global      pg_ident.conf  pg_stat_tmp   pg_twophase
# cat /var/lib/pgsql/data/PG_VERSION 
8.4
# service postgresql start
postgresql サービスを開始中:                               [  OK  ]

ロールとDBの作成

Linuxのアカウントを postgres に切り替えて、"psql -l" でDBを確認。初期状態で postgres, template0, template1 の3つのDBがある。
エンコーディングはデフォルトでUTF-8なんだな。SJISじゃなくてよかった。

# su - postgres
$ psql -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |    
  アクセス権       
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
(3 行)

createuserコマンドでPostgreSQLのロールを作成する。ロールとはユーザーだと思えばいいらしい。
ロールの名前は先ほど作ったLinuxのアカウントと同じ pguser として、データベース作成権限を付与。

$ createuser pguser
新しいロールをスーパーユーザとしますか?  (y/n)n
新しいロールにデータベース作成権限を与えますか? (y/n)y
新しいロールにロールを作成する権限を与えますか? (y/n)n

Linuxのアカウントを pguser に切り替えて、createdbコマンドでDBを新規作成。アカウントを切り替えるのはDBの所有者を pguser にするため。
"psql -l" でDBを確認すると、所有者が pguser の新しいDB mydb ができていた。

$ exit
logout
# su - pguser
$ createdb mydb
$ psql -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |    
  アクセス権       
-----------+----------+------------------+-------------+-------------------+-----------------------
 mydb      | pguser   | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
(4 行)

pguserのままで psql から mydb に接続できた。アカウントが postgres でも接続できたが、root できなかった。

$ psql mydb
psql (8.4.20)
"help" でヘルプを表示します.

mydb=> \du
                ロール一覧
 ロール名 |        属性        | メンバー 
----------+--------------------+----------
 pguser   | DBを作成できる     | {}
 postgres | スーパーユーザ     | {}
          : ロールを作成できる   
          : DBを作成できる       

今回、ロールを作る前に同じ名前のユーザーアカウントをLinuxに作った。こういうのをIdent認証というらしい。
Linuxのアカウントと関係なくロールを作る方法もあると思うので、いずれ調べたい。

ログファイルの設定

ログファイルはデフォルトで /var/lib/pgsql/data/pg_log ディレクトリに
postgresql-<3文字の曜日>.log
という形式のファイル名に記録される。曜日はPostgreSQLを起動した曜日。また、ログの内容にその事象が発生した日時が記載されない。
#ファイル名といい日時が記載されないことといい、変なデフォルト設定だな。
日時はあったほうが良さそうなので、postgresql.conf を修正。
log_line_prefix という項目が # でコメントアウトされているので、# を削除し、下記のように書き換えた。
それから"service postgresql reload" で設定を再読み込みすると、ログに日時が記録されるようになる。

log_line_prefix = '%t %d[%p-%l]'

参考ページ:
CentOS で PostgreSQL を使ってみよう!(1) - Let's Postgres

March 08, 2015

.htaccessの有効化とサブディレクトリのアクセス制御

関連記事:
.htaccessでBASIC認証
BASIC認証の設定のAuthNameとRequire

.htaccessを有効にする

/var/www/html がドキュメントルートの場合、ディレクティブの中のAllowOverrideを All に変更すると、.htaccess が使えるようになる。
ただし All にすると .htaccess で何でも出来てしまうので、.htaccess で許可する内容に応じた値にするべきである(参考ページ3,4)。

<Directory "/var/www/html">

    AllowOverride All

</Directory>

サブディレクトリ・サブディレクトリの特定のファイルのBASIC認証を解除する

あるディレクトリにBASIC認証がかかっていて、サブディレクトリやサブディレクトリ内の特定のファイルは認証なしにしたい場合の例を以下に示す。
以下のディレクトリ構成・ファイル配置で、testディレクトリには .htaccess でBASIC認証がかかっている。

test
├.htaccess
├sub1
│└sub1_1.html
├sub2
│├.htaccess
│└sub2_1.html
├sub3
│├.htaccess
│└sub3_1.html
├sub4
│├.htaccess
│├sub4_1.html
│└sub4_2.html
└sub5
  ├.htaccess
  ├sub5_1.html
  │sub5_2.html
  └sub5_3.html

sub1 は .htaccess がなく、親ディレクトリと同様にBASIC認証がかかる。 sub1以外のtestのサブディレクトリにはそれぞれ .htaccess がある。

test/sub2/.htaccess

Satisfy any
Order Allow,Deny
Allow from all

test/sub2 は認証無しになる。
1行目が "Satisfy any" なので、
・「testディレクトリで設定されているBASIC認証」または「"Satisfy any" の下に記述された条件」
を満たせばアクセスが許可される。
2行目以下ですべてのアクセスを許可しているので、結果として test/sub2 は認証がかからない。

test/sub3/.htaccess

Deny from all

test/sub3 はアクセスが許可されない。
Satisfyディレクティブがないので Satsify all と同じ意味となり、
・「testディレクトリで設定されているBASIC認証」かつ「test/sub3/.htaccess に記述された条件」
を満たせばアクセスが許可される。
test/sub3/.htaccessではすべてのアクセスを拒否しているので、結果として test/sub3 にはアクセス不可となる。

test/sub4/.htaccess

<Files "sub4_1.html">
    Satisfy any
    Order Allow,Deny
    Allow from all
</Files>

test/sub4ディレクトリの sub4_1.html は認証なし、sub4_2.html は認証ありとなる。
<Files>ディレクティブで指定されたファイルに対して内部に書かれたディレクティブが適用される。
この場合、sub4_1.html だけ無条件でアクセス許可となる。

test/sub5/.htaccess

<FilesMatch "sub5_[12]\.html">
    Satisfy any
    Order Allow,Deny
    Allow from all
</FilesMatch>

test/sub5ディレクトリの sub5_1.html と sub5_2.html は認証なし、sub5_3.html は認証ありとなる。
<FilesMatch>ディレクティブは<Files>ディレクティブと同様に適用範囲を制限する。違いは指定に正規表現を使う点である。

参考ページ:
1..htaccessを有効にする-独学!未経験からWebデザイナーになる!!
2.特定のファイル・ディレクトリのアクセスを拒否する-独学!未経験からWebデザイナーになる!!
3.DokuWikiのインストール (CentOS 6.5) : Unix系技術情報備忘録
4.Apacheサーバー構築法 - 第5回 設定を上書きする「.htaccess」:ITpro
5..htaccessでアクセス制限
6.core - Apache HTTP サーバ バージョン 2.2
7.サブディレクトリで特定のファイル以外のBasic認証を解除する - IMPOV::In My Point Of View
8.ミケネコの htaccess リファレンス
9.コンテナ指示子

March 01, 2015

[CentOS 6.6]VirtualBoxのGuest Additionsをアップデート

関連記事:
[CentOS 6.6]PHP5.5のインストール準備(EPEL、REMIリポジトリの追加)

PHP5.5のインストール

EPEL、REMIリポジトリを追加したのにいよいよインストール。
既存のリポジトリを無効にしなければいけないと書いてあるサイトもあったが、そんなこともなく、以下のようにインストールできた。

# yum --enablerepo=remi --enablerepo=remi-php55 install php php-gd php-pdo php-xml
読み込んだプラグイン:downloadonly, fastestmirror, refresh-packagekit
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * remi: remi.kazukioishi.net
 * remi-php55: remi.kazukioishi.net
 * updates: www.ftp.ne.jp
依存性の解決をしています
(中略)
依存性を解決しました

================================================================================
 パッケージ         アーキテクチャ
                               バージョン                  リポジトリー    容量
================================================================================
インストールしています:
 php                x86_64     5.5.21-1.el6.remi           remi-php55     2.6 M
 php-gd             x86_64     5.5.21-1.el6.remi           remi-php55      72 k
 php-pdo            x86_64     5.5.21-1.el6.remi           remi-php55     112 k
 php-xml            x86_64     5.5.21-1.el6.remi           remi-php55     208 k
依存性関連でのインストールをします。:
 gd-last            x86_64     2.1.1-1.el6.remi            remi           135 k
 libXpm             x86_64     3.5.10-2.el6                base            51 k
 php-cli            x86_64     5.5.21-1.el6.remi           remi-php55     3.7 M
 php-common         x86_64     5.5.21-1.el6.remi           remi-php55     1.0 M
 php-pear           noarch     1:1.9.5-3.el6.remi          remi           375 k
 php-pecl-jsonc     x86_64     1.3.6-1.el6.remi.5.5.1      remi-php55      47 k
 php-pecl-zip       x86_64     1.12.4-1.el6.remi.5.5       remi-php55     269 k
 php-process        x86_64     5.5.21-1.el6.remi           remi-php55      57 k
 t1lib              x86_64     5.1.2-6.el6_2.1             base           160 k

トランザクションの要約
================================================================================
インストール        13 パッケージ
(中略)
完了しました!

とりあえずphp本体の他に php-gd、php-pdo、php-xml をパラメータとして指定した。依存関係からpearなどもインストールされた。

php-mcryptのインストール

Laravelには php-mcrypt が必要というのでインストールしようとしたが、すんなりとはいかなかった。
php本体と同様にインストールしようとしたら、「libmcryptが必要」というエラーが出た。

# yum --enablerepo=remi --enablerepo=remi-php55 install php-mcrypt
(中略)
エラー: パッケージ: php-mcrypt-5.5.22-1.el6.remi.x86_64 (remi-php55)
             要求: libmcrypt.so.4()(64bit)
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest

標準のリポジトリやREMIに libmcrypt はなかったが、EPELにあったのでインストール。
何かワーニング出たけどインストールできた。

# yum --enablerepo=epel install libmcrypt.x86_64
(中略)
依存性を解決しました

================================================================================
 パッケージ         アーキテクチャ  バージョン              リポジトリー   容量
================================================================================
インストールしています:
 libmcrypt          x86_64          2.5.8-9.el6             epel           96 k

(中略)
パッケージをダウンロードしています:
libmcrypt-2.5.8-9.el6.x86_64.rpm                         |  96 kB     00:00     
警告: rpmts_HdrFromFdno: ヘッダ V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Importing GPG key 0x0608B895:
 Userid : EPEL (6) <epel@fedoraproject.org>
 Package: epel-release-6-8.noarch (@extras)
 From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
(中略)
インストール:
  libmcrypt.x86_64 0:2.5.8-9.el6                                                

完了しました!

それからphp-mcryptをインストールする。今度はエラーとならずに完了。同時にphp自体も5.5.21から5.5.22にアップデートされた。
#PHP5.5のインストールは実は先週行ったので、1週間の間に新しいバージョンが出たようだ。
libmcryptのインストール時の警告は気になるが、とりあえずこの状態からlarabelのインストールを目指そう。

# yum --enablerepo=remi --enablerepo=remi-php55 install php-mcrypt
(中略)
依存性を解決しました

================================================================================
 パッケージ        アーキテクチャ
                                バージョン               リポジトリー      容量
================================================================================
インストールしています:
 php-mcrypt        x86_64       5.5.22-1.el6.remi        remi-php55        43 k
依存性関連での更新をします。:
 php               x86_64       5.5.22-1.el6.remi        remi-php55       2.6 M
 php-cli           x86_64       5.5.22-1.el6.remi        remi-php55       3.7 M
 php-common        x86_64       5.5.22-1.el6.remi        remi-php55       1.0 M
 php-gd            x86_64       5.5.22-1.el6.remi        remi-php55        72 k
 php-pdo           x86_64       5.5.22-1.el6.remi        remi-php55       112 k
 php-process       x86_64       5.5.22-1.el6.remi        remi-php55        57 k
 php-xml           x86_64       5.5.22-1.el6.remi        remi-php55       208 k
(中略)
インストール:
  php-mcrypt.x86_64 0:5.5.22-1.el6.remi                                         

依存性を更新しました:
  php.x86_64 0:5.5.22-1.el6.remi         php-cli.x86_64 0:5.5.22-1.el6.remi     
  php-common.x86_64 0:5.5.22-1.el6.remi  php-gd.x86_64 0:5.5.22-1.el6.remi      
  php-pdo.x86_64 0:5.5.22-1.el6.remi     php-process.x86_64 0:5.5.22-1.el6.remi 
  php-xml.x86_64 0:5.5.22-1.el6.remi    

完了しました!

2015/05/07追記
Laravelにはphp-mbstringも必要だった。php-mbstringをインストールしたときの記事は以下。
Laravelのインストール

参考ページ:
CentOS6.x - CentOS6.6に php5.5をインストールしてみる。 - Qiita
【CentOS, PHP】CentOSへのPHP5.5, MySQL5.6環境の構築 - Qiita
CentOS 6.5 にphp5.5とMySQL5.6をyumでインストールする - Qiita
CentOS6.5にPHP5.5をインストールする - inari blog (@inari111)
CentOS 6.6 LAMPサーバ インストールメモ【CentOS6.6+Apache+MySQL+PHP】 | あぱーブログ
Laravel - The PHP Framework For Web Artisans
CentOSでlibmcryptをインストール | Me-ISM

« February 2015 | Main | April 2015 »

March 2017
Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof