2015年5月6日水曜日

meanスタックの実行環境を整える

meanスタック + d3.js + bootstrap.jsを使ったアプリを作成してみたいので、そのサイトのための環境を作ってみる。

angular.jsと、d3.jsやbootstrap.jsを組み合わせるためには、

  1. bower。javascriptなどのライブラリの管理を環境をつくる。
  2. gulp/grunt。コンパイル環境を作る
  3. yo。プロジェクトのひな形を作成するツール
  4. yoeman。上記3つを使って一連のワークフローを提供するツール。今回これを使って、angular.jsを使ったプロジェクトのひな形を作る。
  5. d3.jsを組み込む

0 環境準備

インストールするには、node.jsとnpmが入っている環境が必要。ここでは割愛。
試す環境は以下の通り
 ・CentOS 6.5
 ・nodejs v0.12.0
 ・npm 2.5.1

1.bowerの環境構築

まず、javascriptのライブラリ管理ツールであるbowerを入れてみる。ライブラリの依存関係をまとめて管理してくれる。
とはいっても、指定したライブラリをgitからダウンロードしてくれるだけ見たいで、自動で依存するライブラリをダウンロードしてくれるだけではないし、格納ディレクトリもばらばらなので、実際に使うときのパス指定は、それぞれのライブラリによって異なる(のでまとまっている感は少ない)。

npmとの違いは、ここに記載されている内容からすると、npmはクライアントとサーバーをまとめて管理はできるものの、分けて管理ができない。bowerはクライアントサイドに特化した管理ツールであり、npmをサーバーサイドのライブラリ管理ツールとして使う。という使い分けをするみたいです。この後いれる、yoemanでも使うみたいです。このあたりのClient-Sideのlibrary管理はいろいろと議論があるみたいですね。

1.1 bowerのインストール

$ npm install bower -g
 ・
 ・
 ・
$ bower -v
1.4.1

1.2 使ってみる

テストアプリとして、"apptest"をプロジェクトとして想定し進める。 初期化の時にいくつか質問がくるので、適当に入力する。質問の内容はqiita.comを参照
$ mkdir apptest && cd $_
$ bower init

? May bower anonymously report usage statistics to improve the tool over time? Yes
? name: apptest
? version: 0.0.1
? description: test site
? main file: index.js
? what types of modules does this package expose?
    ◯ amd
    ◯ es6
    ◯ globals
?? node
    ◯ yui
? keywords:
? authors:
? license: MIT
? homepage:
? set currently installed components as dependencies? Yes
? add commonly ignored files to ignore list? Yes
? would you like to mark this package as private which prevents it from being accidentally published to the registry? (y? would you like to mark this package as private which prevents it from being accidentally published to the registry? No
{
     name: 'apptest',
     version: '0.0.1',
     description: 'test site',
     main: 'index.js',
     moduleType: [
          'node'
     ],
     license: 'MIT',
     ignore: [
          '**/.*',
          'node_modules',
          'bower_components',
          'test',
          'tests'
     ]
}

? Looks good? Yes

$ ls
bower.json
試しにangular.jsをインストールしてみる。
$ bower install angular --save-dev
bower angular#*                                         cached git://github.com/angular/bower-angular.git#1.3.15
bower angular#*                                    validate 1.3.15 against git://github.com/angular/bower-angular.git#*
bower angular#~1.3.15                         install angular#1.3.15

angular#1.3.15 bower_components/angular
$
bower_componentsディレクトリの配下にインストールされている。
$ ls -lR bower_components
bower_components:
total 4
drwxrwxr-x 2 nodejs nodejs 4096 Apr 12 08:29 angular

bower_components/angular:
total 1480
-rw-rw-r-- 1 nodejs nodejs 263 Mar 17 13:15 angular-csp.css
-rw-rw-r-- 1 nodejs nodejs 960560 Mar 17 13:15 angular.js
-rw-rw-r-- 1 nodejs nodejs 125909 Mar 17 13:15 angular.min.js
-rw-rw-r-- 1 nodejs nodejs 50407 Mar 17 13:15 angular.min.js.gzip
-rw-rw-r-- 1 nodejs nodejs 348935 Mar 17 13:15 angular.min.js.map
-rw-rw-r-- 1 nodejs nodejs 114 Mar 17 13:15 bower.json
-rw-rw-r-- 1 nodejs nodejs 48 Mar 17 13:15 index.js
-rw-rw-r-- 1 nodejs nodejs 573 Mar 17 13:15 package.json
-rw-rw-r-- 1 nodejs nodejs 1885 Mar 17 13:15 README.md
$

ちなみに「--save-dev」オプションは、開発環境のみで使用し、かつ環境移行ができるようbower.jsonに記録するためのオプション。本番でも使う場合は「--save」を使う。

その他のオプションは以下の通り

指定バージョンのライブラリをインストールする
$ bower install <library>#<バージョン>
ライブラリをアップデートする
$ bower update
bower自身をアップデートする
$ npm update -g bower
ライブラリをアンインストールする
$ bower uninstall <library>
ライブラリを検索する
$ bower search <library>
ライブラリの詳細を確認する
$ bower info <library>#<バージョン>
インストール済みのライブラリの一覧を出力する
$ bower list
別場所の環境で、--saveで保存したライブラリのみインストールする
(--save-devで保存されたライブラリはインストールされない)
$ bower install --produnction
指定したライブラリの情報(バージョンなど)を入手する
$ bower info <library>

2.grunt/gulp

javascriptのビルドツール群。gruntが先に出てきて、そのあとgulpが出てきたみたいです。
テンプレート作成ツール(yoemanなど)によってもどちらが適用しているか?があるみたいです。
なんとなくgulpのほうが新しくていい感じ。基本gulpを使うが、両方入れておけるので、とりあえず入れてみる。

2.1 grunt インストール
$ npm install -g grunt-cli
$ gulp -v
[16:17:38] CLI version 3.8.11
[16:17:38] Local version 3.8.11

$ grunt -v
grunt-cli: The grunt command line interface. (v0.1.13)

Fatal error: Unable to find local grunt.

If you're seeing this message, either a Gruntfile wasn't found or grunt
hasn't been installed locally to your project. For more information about
installing and configuring grunt, please see the Getting Started guide:

http://gruntjs.com/getting-started

2.2 gruntを使ってみる(ちょっとインストールのつづきも)
gruntで
  1. 1.メッセージを出力する
  2. 2.ファイルをコピーするタスクを実装してみる
を実施してみる。
$ mkdir sample_grunt && cd $_
$ npm init
$ npm install grunt --save-dev
$ vi Gruntfile.js
module.exports = function(grunt) {
    //Gruntの設定
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json')
    });
    //defaultタスクの定義
    grunt.registerTask('default', 'LogProcess..', function() {
        //ログメッセージの出力
        grunt.log.write('message...').ok();
    });
};
$ grunt
Running "default" task
message...OK


Done, without errors.

$
"message"を出力できました。次にファイルコピーをする処理を実装してみる。
$ npm install grunt-contrib-copy --save-dev
$ vi Gruntfile.js
'use strict'
module.exports = function(grunt) {
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        //コピーを実行するタスク
        copy: {
            main:{
                files: [ {
                        //src/jsディレクトリ以下のファイルをコピー
                        expand: true,
                        flatten: true,
                        src: ['src/js/*'],
                        dest: 'dest/js'
                    }, {
                        //src/htmlディレクトリ以下のファイルをコピー
                        expand: true,
                        flatten: true,
                        src: ['src/html/*'],
                        dest: 'dest/html'
                }]
            }
        }
    });
    // Load tasks(grunt実行時に読み込むプラグイン)
    grunt.loadNpmTasks('grunt-contrib-copy');
    // Default tasks(grunt実行時に実行するタスク)
    grunt.registerTask('default', ['copy']); //(*)
};
上記の処理は、
 ・「src/js/*」を、「dest/js/」にコピーをした後に
 ・「src/html/*」の中身を、「dest/html」にコピーを実施する
という内容になる。
また上記の(*)の行は、実行時にtaskの指定がない場合に実行されるタスクを記載しています(この例では、上記のコピー処理(copyというtask名)を実施することと同じ。
次にテストファイルを用意する
$ mkdir -p src/js src/html
$ touch src/js/test.js src/html/test.html
$ ls -lR src
src:
total 8
drwxrwxr-x 2 nodejs nodejs 4096 May     5 14:05 html
drwxrwxr-x 2 nodejs nodejs 4096 May     5 14:05 js

src/html:
total 0
-rw-rw-r-- 1 nodejs nodejs 0 May     5 14:05 test.html

src/js:
total 0

-rw-rw-r-- 1 nodejs nodejs 0 May     5 14:05 test.js

$ grunt
Running "copy:main" (copy) task
Copied 2 files

Done, without errors.

$ ls -lR dest
dest:
total 8
drwxrwxr-x 2 nodejs nodejs 4096 May     5 14:06 html
drwxrwxr-x 2 nodejs nodejs 4096 May     5 14:06 js

dest/html:
total 0
-rw-rw-r-- 1 nodejs nodejs 0 May     5 14:05 test.html

dest/js:
total 0
-rw-rw-r-- 1 nodejs nodejs 0 May     5 14:05 test.js

コピー先はディレクトリも作成してくれてるみたいですね。
2.3 gulp インストール
gulpでファイルをコピーするタスクを実装してみる。
npm install -g gulp
$ gulp -v
[16:17:38] CLI version 3.8.11
[16:17:38] Local version 3.8.11
2.4 gulp を使ってみる
gruntと同じファイルをコピーするタスクを実装してみる。
$ mkdir sample_gulp && cd $_
$ vi gulpfile.js
'use strict'
var gulp = require('gulp');
//コピーを実行するタスク
gulp.task('copy', function() {
    //src/jsディレクトリ以下のファイルをコピー
    gulp.src('src/js/**')
        .pipe(gulp.dest('dest/js'));

    //src/htmlディレクトリ以下のファイルをコピー
    gulp.src('src/html/**')
        .pipe(gulp.dest('dest/html'));
});
//デフォルトタスク定義
gulp.task('default', function() {
        gulp.run('copy');
});
$ mkdir -p src/js src/html
$ touch src/js/test.js src/html/test.html
$ gulp
[13:20:47] Using gulpfile ~/sample_gulp/gulpfile.js
[13:20:47] Starting 'default'...
gulp.run() has been deprecated. Use task dependencies or gulp.watch task triggering instead.
[13:20:47] Starting 'copy'...
[13:20:47] Finished 'copy' after 23 ms
[13:20:47] Finished 'default' after 25 ms

$ ls -lR     dest/

dest/:
total 8
drwxrwxr-x 2 nodejs nodejs 4096 May     5 13:20 html
drwxrwxr-x 2 nodejs nodejs 4096 May     5 13:20 js

dest/html:
total 0
-rw-rw-r-- 1 nodejs nodejs 0 May     5 13:20 touch.html

dest/js:
total 0
-rw-rw-r-- 1 nodejs nodejs 0 May     5 13:20 touch.js

gruntと同じくコピーされましたね。

3.yo

プロジェクトのひな型生成ツールで、テンプレートを指定することで、さまざまなプロジェクトのひな型を生成することができる。yoはNode.js上で動作するツールだが、phpやjavaなどのバックエンド側のひな型を生成できるジェネレーターも公開されているとのこと。
http://yeoman.io/generators/

3.1インストール


$ npm install yo -g
で実行してみたが、待てど暮らせど終わらない。。3時間たっても終わらないので、いったん終了させて、debugモードで状況を確認してみたら、、、

$ npm install yo -g --loglevel verbose
今度はエラーなしでうまくいった。。まぁうまくいったから、とりあえずいいか。

4.angularプロジェクトを作成してみる

以下の3つのgeneratorを試してみる。
 ・generator-angular

  オフィシャルなGenerator。yoemanのサンプルのインストール手順でも使われていた。

 ・generator-angular-fullstack)

  コミュニティですが、Starが多く評価されているGenerator。上との比較で入れてみる。

 ・gulp-angular

  上記2つはgruntを使ってるけど、これはgulpを使ったもの。試しに入れてみる。

4.1 generator-angular

$ npm install -g generator-angular
ここでも止まる。。やはりおかしい。nvmで管理しているので、node.jsのversionを0.10.38にdowngradeして、再度試してみる。
$ nvm install 0.10.38
$ nvm use 0.10.38
$ nvm alise default 0.10.38
$ npm install --global npm@latest
$ npm --version
2.9.0
今一度環境の整備を記載。
 ・nodejs v0.10.38
 ・npm 2.9.0
再チャレンジ!
$ npm install -g bower grunt-cli grunt gulp yo --loglevel verbose
$ npm install -g generator-angular --loglevel verbose
うまくいった。downgradeが功を奏したかどうか、、わからないが、とりあえずこれで進める。。
$ mkdir -p yoeman/angular && cd $_
$ yo angular test
? ==========================================================================
We're constantly looking for ways to make yo better!
May we anonymously report usage statistics to improve the tool over time?
More info: https://github.com/yeoman/insight & http://yeoman.io
========================================================================== Yes

     _-----_
    |       |    .--------------------------.
    |--(o)--|    |    Welcome to Yeoman,    |
   `---------´   |   ladies and gentlemen!  |
    ( _´U`_ )    '--------------------------'
    /___A___\
     |  ~  |
   __'.___.'__
 ´   `  |° ´ Y `

Out of the box I include Bootstrap and some AngularJS recommended modules.

? Would you like to use Sass (with Compass)? No
? Would you like to include Bootstrap? Yes
? Which modules would you like to include? angular-animate.js, angular-cookies.js, angular-resource.js, angular-route.js, angular-sanitize.js, angular-touch.js
   create app/styles/main.css
   create app/index.html
   create bower.json
   create .bowerrc
   create package.json
   create Gruntfile.js
   create README.md
   invoke   angular:common:/home/nodejs/.nvm/v0.10.38/lib/node_modules/generator-angular/app/index.js
   create     .editorconfig
   create     .gitattributes
   create     .jshintrc
   create     .yo-rc.json
   create     .gitignore
   create     test/.jshintrc
   create     app/.buildignore
   create     app/.htaccess
   create     app/404.html
   create     app/favicon.ico
   create     app/robots.txt
   create     app/views/main.html
   create     app/images/yeoman.png
   invoke   angular:main:/home/nodejs/.nvm/v0.10.38/lib/node_modules/generator-angular/app/index.js
   create     app/scripts/app.js
   invoke   angular:controller:/home/nodejs/.nvm/v0.10.38/lib/node_modules/generator-angular/app/index.js
   create     app/scripts/controllers/main.js
   create     test/spec/controllers/main.js
   invoke   karma:app


I'm all done. Running bower install & npm install for you to install the required dependencies. If this fails, try running the command yourself.


   invoke       angular:route
   invoke           angular:controller:/home/nodejs/.nvm/v0.10.38/lib/node_modules/generator-angular/route/index.js
   create             app/scripts/controllers/about.js
   create             test/spec/controllers/about.js
   invoke           angular:view:/home/nodejs/.nvm/v0.10.38/lib/node_modules/generator-angular/route/index.js
   create             app/views/about.html
   create     test/karma.conf.js
 conflict     package.json
? Overwrite package.json? (Ynaxdh) ? May bower anonymously report usage statistics to improve the tool over time? (Y/n) ? May bower anonymously report usage statistics to improve the tool over time? Yes
? Overwrite package.json? overwrite
    force     package.json
   create     .travis.yml
bower angular#^1.3.0        not-cached git://github.com/angular/bower-angular.git#^1.3.0
bower angular#^1.3.0           resolve git://github.com/angular/bower-angular.git#^1.3.0
bower angular-cookies#^1.3.0       not-cached git://github.com/angular/bower-angular-cookies.git#^1.3.0
bower angular-cookies#^1.3.0          resolve git://github.com/angular/bower-angular-cookies.git#^1.3.0
bower bootstrap#^3.2.0             not-cached git://github.com/twbs/bootstrap.git#^3.2.0
bower bootstrap#^3.2.0                resolve git://github.com/twbs/bootstrap.git#^3.2.0
bower angular-animate#^1.3.0       not-cached git://github.com/angular/bower-angular-animate.git#^1.3.0
bower angular-animate#^1.3.0          resolve git://github.com/angular/bower-angular-animate.git#^1.3.0
/
bower angular-route#^1.3.0         not-cached git://github.com/angular/bower-angular-route.git#^1.3.0
bower angular-route#^1.3.0            resolve git://github.com/angular/bower-angular-route.git#^1.3.0
bower angular-sanitize#^1.3.0      not-cached git://github.com/angular/bower-angular-sanitize.git#^1.3.0
bower angular-sanitize#^1.3.0         resolve git://github.com/angular/bower-angular-sanitize.git#^1.3.0
bower angular-touch#^1.3.0         not-cached git://github.com/angular/bower-angular-touch.git#^1.3.0
bower angular-touch#^1.3.0            resolve git://github.com/angular/bower-angular-touch.git#^1.3.0
bower angular-mocks#^1.3.0         not-cached git://github.com/angular/bower-angular-mocks.git#^1.3.0
bower angular-mocks#^1.3.0            resolve git://github.com/angular/bower-angular-mocks.git#^1.3.0
bower angular-resource#^1.3.0      not-cached git://github.com/angular/bower-angular-resource.git#^1.3.0
bower angular-resource#^1.3.0         resolve git://github.com/angular/bower-angular-resource.git#^1.3.0
bower angular-animate#^1.3.0         download https://github.com/angular/bower-angular-animate/archive/v1.3.15.tar.gz
bower bootstrap#^3.2.0               download https://github.com/twbs/bootstrap/archive/v3.3.4.tar.gz
npm WARN peerDependencies The peer dependency karma@>=0.9 included from karma-phantomjs-launcher will no
npm WARN peerDependencies longer be automatically installed to fulfill the peerDependency
npm WARN peerDependencies in npm 3+. Your application will need to depend on it explicitly.
npm WARN peerDependencies The peer dependency karma@>=0.9 included from karma-jasmine will no
npm WARN peerDependencies longer be automatically installed to fulfill the peerDependency
npm WARN peerDependencies in npm 3+. Your application will need to depend on it explicitly.
npm WARN peerDependencies The peer dependency jasmine-core@* included from karma-jasmine will no
npm WARN peerDependencies longer be automatically installed to fulfill the peerDependency
npm WARN peerDependencies in npm 3+. Your application will need to depend on it explicitly.
npm WARN peerDependencies The peer dependency karma@~0.12.0 included from grunt-karma will no
npm WARN peerDependencies longer be automatically installed to fulfill the peerDependency
npm WARN peerDependencies in npm 3+. Your application will need to depend on it explicitly.
bower angular-route#^1.3.0           download https://github.com/angular/bower-angular-route/archive/v1.3.15.tar.gz
bower angular#^1.3.0                 download https://github.com/angular/bower-angular/archive/v1.3.15.tar.gz
bower angular-cookies#^1.3.0         download https://github.com/angular/bower-angular-cookies/archive/v1.3.15.tar.gz
bower angular-mocks#^1.3.0           download https://github.com/angular/bower-angular-mocks/archive/v1.3.15.tar.gz
bower angular-touch#^1.3.0           download https://github.com/angular/bower-angular-touch/archive/v1.3.15.tar.gz
bower angular-sanitize#^1.3.0        download https://github.com/angular/bower-angular-sanitize/archive/v1.3.15.tar.gz
bower angular-route#^1.3.0            extract archive.tar.gz
bower angular-animate#^1.3.0          extract archive.tar.gz
bower angular-resource#^1.3.0        download https://github.com/angular/bower-angular-resource/archive/v1.3.15.tar.gz
bower angular-route#^1.3.0           resolved git://github.com/angular/bower-angular-route.git#1.3.15
bower angular-animate#^1.3.0         resolved git://github.com/angular/bower-angular-animate.git#1.3.15
bower angular#^1.3.0                  extract archive.tar.gz
bower angular#^1.3.0                 resolved git://github.com/angular/bower-angular.git#1.3.15
bower angular-sanitize#^1.3.0         extract archive.tar.gz
bower angular-sanitize#^1.3.0        resolved git://github.com/angular/bower-angular-sanitize.git#1.3.15
bower angular-cookies#^1.3.0          extract archive.tar.gz
bower angular-cookies#^1.3.0         resolved git://github.com/angular/bower-angular-cookies.git#1.3.15
bower bootstrap#^3.2.0               progress received 1.5MB of 3.0MB downloaded, 51%
bower angular-touch#^1.3.0            extract archive.tar.gz
bower angular-touch#^1.3.0           resolved git://github.com/angular/bower-angular-touch.git#1.3.15
bower bootstrap#^3.2.0               progress received 1.8MB of 3.0MB downloaded, 60%
bower angular-mocks#^1.3.0            extract archive.tar.gz
bower angular-mocks#^1.3.0           resolved git://github.com/angular/bower-angular-mocks.git#1.3.15
bower bootstrap#^3.2.0               progress received 2.2MB of 3.0MB downloaded, 72%
bower bootstrap#^3.2.0               progress received 2.5MB of 3.0MB downloaded, 82%
bower bootstrap#^3.2.0               progress received 2.8MB of 3.0MB downloaded, 92%
bower bootstrap#^3.2.0                extract archive.tar.gz
bower bootstrap#^3.2.0               resolved git://github.com/twbs/bootstrap.git#3.3.4
bower angular-resource#^1.3.0         extract archive.tar.gz
bower angular-resource#^1.3.0        resolved git://github.com/angular/bower-angular-resource.git#1.3.15
bower jquery#>= 1.9.1              not-cached git://github.com/jquery/jquery.git#>= 1.9.1
bower jquery#>= 1.9.1                 resolve git://github.com/jquery/jquery.git#>= 1.9.1
bower jquery#>= 1.9.1                download https://github.com/jquery/jquery/archive/2.1.4.tar.gz
npm WARN optional dep failed, continuing fsevents@0.3.6

> phantomjs@1.9.16 install /home/nodejs/yoeman/angular/node_modules/karma-phantomjs-launcher/node_modules/phantomjs
> node install.js

bower jquery#>= 1.9.1                 extract archive.tar.gz
bower jquery#>= 1.9.1                resolved git://github.com/jquery/jquery.git#2.1.4
bower angular-route#^1.3.0            install angular-route#1.3.15
bower angular-animate#^1.3.0          install angular-animate#1.3.15
bower angular#^1.3.0                  install angular#1.3.15
bower angular-sanitize#^1.3.0         install angular-sanitize#1.3.15
bower angular-cookies#^1.3.0          install angular-cookies#1.3.15
bower angular-touch#^1.3.0            install angular-touch#1.3.15
bower angular-mocks#^1.3.0            install angular-mocks#1.3.15
bower bootstrap#^3.2.0                install bootstrap#3.3.4
bower angular-resource#^1.3.0         install angular-resource#1.3.15
bower jquery#>= 1.9.1                 install jquery#2.1.4
Downloading https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.8-linux-x86_64.tar.bz2
Saving to /tmp/phantomjs/phantomjs-1.9.8-linux-x86_64.tar.bz2
Receiving...
\
angular-route#1.3.15 bower_components/angular-route
mqq angular#1.3.15

angular-animate#1.3.15 bower_components/angular-animate
mqq angular#1.3.15

angular#1.3.15 bower_components/angular

angular-sanitize#1.3.15 bower_components/angular-sanitize
mqq angular#1.3.15

angular-cookies#1.3.15 bower_components/angular-cookies
mqq angular#1.3.15

angular-touch#1.3.15 bower_components/angular-touch
mqq angular#1.3.15

angular-mocks#1.3.15 bower_components/angular-mocks
mqq angular#1.3.15

bootstrap#3.3.4 bower_components/bootstrap
mqq jquery#2.1.4

angular-resource#1.3.15 bower_components/angular-resource
mqq angular#1.3.15

jquery#2.1.4 bower_components/jquery
  [==================----------------------] 46% 0.0s/
> gifsicle@2.0.1 postinstall /home/nodejs/yoeman/angular/node_modules/grunt-contrib-imagemin/node_modules/imagemin/node_modules/imagemin-gifsicle/node_modules/gifsicle
> node lib/install.js

  [=====================-------------------] 52% 0.0s  ? gifsicle pre-build test passed successfully


> pngquant-bin@3.0.0 postinstall /home/nodejs/yoeman/angular/node_modules/grunt-contrib-imagemin/node_modules/imagemin/node_modules/imagemin-pngquant/node_modules/pngquant-bin
> node lib/install.js

  [========================----------------] 59% 0.0s  ? The `/home/nodejs/yoeman/angular/node_modules/grunt-contrib-imagemin/node_modules/imagemin/node_modules/imagemin-pngquant/node_modules/pngquant-bin/vendor/pngquant` binary doesn't seem to work correctly
  ? pngquant pre-build test failed
  ? compiling from source
  [=========================---------------] 63% 0.0s  ? Error: pngquant failed to build, make sure that libpng-dev is installed      (*1)
    at ChildProcess.exithandler (child_process.js:658:15)
    at ChildProcess.emit (events.js:98:17)
    at maybeClose (child_process.js:766:16)
    at Socket. (child_process.js:979:11)
    at Socket.emit (events.js:95:17)
    at Pipe.close (net.js:466:12)

> optipng-bin@2.0.4 postinstall /home/nodejs/yoeman/angular/node_modules/grunt-contrib-imagemin/node_modules/imagemin/node_modules/imagemin-optipng/node_modules/optipng-bin
> node lib/install.js

  [===========================-------------] 68% 0.0s  ? optipng pre-build test passed successfully

> jpegtran-bin@2.0.2 postinstall /home/nodejs/yoeman/angular/node_modules/grunt-contrib-imagemin/node_modules/imagemin/node_modules/imagemin-jpegtran/node_modules/jpegtran-bin
> node lib/install.js

  [=============================-----------] 72% 0.0s  ? jpegtran pre-build test passed successfully
  [================================--------] 80% 0.0sgrunt-contrib-clean@0.6.0 node_modules/grunt-contrib-clean
mqq rimraf@2.2.8

grunt-newer@1.1.0 node_modules/grunt-newer
tqq rimraf@2.2.8
mqq async@0.9.0

grunt-contrib-copy@0.7.0 node_modules/grunt-contrib-copy
mqq chalk@0.5.1 (ansi-styles@1.1.0, escape-string-regexp@1.0.3, supports-color@0.2.0, has-ansi@0.1.0, strip-ansi@0.3.0)

grunt-usemin@3.0.0 node_modules/grunt-usemin
tqq lodash@2.4.2
tqq debug@2.1.3 (ms@0.7.0)
mqq chalk@0.5.1 (ansi-styles@1.1.0, escape-string-regexp@1.0.3, supports-color@0.2.0, has-ansi@0.1.0, strip-ansi@0.3.0)

jshint-stylish@1.0.2 node_modules/jshint-stylish
tqq log-symbols@1.0.2
tqq text-table@0.2.0
tqq string-length@1.0.0 (strip-ansi@2.0.1)
mqq chalk@1.0.0 (escape-string-regexp@1.0.3, ansi-styles@2.0.1, supports-color@1.3.1, strip-ansi@2.0.1, has-ansi@1.0.3)

grunt-filerev@2.3.1 node_modules/grunt-filerev
tqq each-async@0.1.3
tqq convert-source-map@1.1.0
mqq chalk@1.0.0 (escape-string-regexp@1.0.3, ansi-styles@2.0.1, supports-color@1.3.1, strip-ansi@2.0.1, has-ansi@1.0.3)

grunt-concurrent@1.0.0 node_modules/grunt-concurrent
tqq async@0.9.0
mqq pad-stdio@1.0.0 (lpad@1.0.0)

time-grunt@1.1.1 node_modules/time-grunt
tqq figures@1.3.5
tqq date-time@1.0.0
tqq text-table@0.2.0
tqq hooker@0.2.3
tqq chalk@1.0.0 (escape-string-regexp@1.0.3, ansi-styles@2.0.1, supports-color@1.3.1, strip-ansi@2.0.1, has-ansi@1.0.3)
mqq pretty-ms@1.1.0 (get-stdin@4.0.1, parse-ms@1.0.0)

grunt-contrib-concat@0.5.1 node_modules/grunt-contrib-concat
tqq chalk@0.5.1 (ansi-styles@1.1.0, escape-string-regexp@1.0.3, supports-color@0.2.0, has-ansi@0.1.0, strip-ansi@0.3.0)
mqq source-map@0.3.0 (amdefine@0.1.0)

load-grunt-tasks@3.1.0 node_modules/load-grunt-tasks
tqq multimatch@2.0.0 (array-differ@1.0.0, array-union@1.0.1, minimatch@2.0.7)
mqq findup-sync@0.2.1 (glob@4.3.5)

grunt-wiredep@2.0.0 node_modules/grunt-wiredep
mqq wiredep@2.2.2 (propprop@0.3.0, minimist@1.1.1, chalk@0.5.1, lodash@2.4.2, through2@0.6.5, bower-config@0.5.2, glob@4.5.3)

grunt@0.4.5 node_modules/grunt
tqq dateformat@1.0.2-1.2.3
tqq which@1.0.9
tqq eventemitter2@0.4.14
tqq getobject@0.1.0
tqq rimraf@2.2.8
tqq colors@0.6.2
tqq async@0.1.22
tqq grunt-legacy-util@0.2.0
tqq hooker@0.2.3
tqq exit@0.1.2
tqq nopt@1.0.10 (abbrev@1.0.5)
tqq minimatch@0.2.14 (sigmund@1.0.0, lru-cache@2.6.2)
tqq glob@3.1.21 (inherits@1.0.0, graceful-fs@1.2.3)
tqq lodash@0.9.2
tqq coffee-script@1.3.3
tqq underscore.string@2.2.1
tqq iconv-lite@0.2.11
tqq grunt-legacy-log@0.1.1 (underscore.string@2.3.3, lodash@2.4.2)
tqq findup-sync@0.1.3 (lodash@2.4.2, glob@3.2.11)
mqq js-yaml@2.0.5 (esprima@1.0.4, argparse@0.1.16)

grunt-contrib-watch@0.6.1 node_modules/grunt-contrib-watch
tqq async@0.2.10
tqq lodash@2.4.2
tqq gaze@0.5.1 (globule@0.1.0)
mqq tiny-lr-fork@0.0.5 (debug@0.7.4, faye-websocket@0.4.4, qs@0.5.6, noptify@0.0.3)

grunt-contrib-htmlmin@0.4.0 node_modules/grunt-contrib-htmlmin
tqq chalk@0.5.1 (ansi-styles@1.1.0, escape-string-regexp@1.0.3, supports-color@0.2.0, strip-ansi@0.3.0, has-ansi@0.1.0)
tqq pretty-bytes@1.0.4 (get-stdin@4.0.1, meow@3.1.0)
mqq html-minifier@0.7.2 (relateurl@0.2.6, concat-stream@1.4.8, change-case@2.3.0, cli@0.6.6, clean-css@3.1.9, uglify-js@2.4.21)

grunt-contrib-connect@0.9.0 node_modules/grunt-contrib-connect
tqq opn@1.0.2
tqq connect-livereload@0.5.3
tqq async@0.9.0
tqq portscanner@1.0.0 (async@0.1.15)
mqq connect@2.29.1 (cookie-signature@1.0.6, utils-merge@1.0.0, fresh@0.2.4, cookie@0.1.2, content-type@1.0.1, parseurl@1.3.0, pause@0.0.1, response-time@2.3.0, vhost@3.0.0, on-headers@1.0.0, basic-auth-connect@1.0.0, bytes@1.0.0, cookie-parser@1.3.4, depd@1.0.1, qs@2.4.1, debug@2.1.3, connect-timeout@1.6.1, http-errors@1.3.1, method-override@2.3.2, finalhandler@0.3.4, morgan@1.5.2, serve-favicon@2.2.0, express-session@1.10.4, multiparty@3.3.2, type-is@1.6.1, csurf@1.7.0, serve-static@1.9.2, errorhandler@1.3.5, compression@1.4.3, body-parser@1.12.3, serve-index@1.6.3)

grunt-contrib-uglify@0.7.0 node_modules/grunt-contrib-uglify
tqq uri-path@0.0.2
tqq chalk@0.5.1 (ansi-styles@1.1.0, escape-string-regexp@1.0.3, supports-color@0.2.0, has-ansi@0.1.0, strip-ansi@0.3.0)
tqq lodash@2.4.2
tqq uglify-js@2.4.21 (uglify-to-browserify@1.0.2, async@0.2.10, yargs@3.5.4, source-map@0.1.34)
mqq maxmin@1.1.0 (figures@1.3.5, chalk@1.0.0, pretty-bytes@1.0.4, gzip-size@1.0.0)

grunt-contrib-cssmin@0.12.2 node_modules/grunt-contrib-cssmin
tqq chalk@0.5.1 (ansi-styles@1.1.0, escape-string-regexp@1.0.3, supports-color@0.2.0, has-ansi@0.1.0, strip-ansi@0.3.0)
tqq clean-css@3.2.8 (commander@2.8.1, source-map@0.4.2)
mqq maxmin@1.1.0 (figures@1.3.5, chalk@1.0.0, pretty-bytes@1.0.4, gzip-size@1.0.0)

grunt-contrib-jshint@0.11.2 node_modules/grunt-contrib-jshint
tqq hooker@0.2.3
mqq jshint@2.7.0 (strip-json-comments@1.0.2, exit@0.1.2, shelljs@0.3.0, console-browserify@1.1.0, minimatch@2.0.7, cli@0.6.6, htmlparser2@3.8.2, lodash@3.6.0)

grunt-ng-annotate@0.9.2 node_modules/grunt-ng-annotate
tqq lodash@2.4.2
mqq ng-annotate@0.15.4 (tryor@0.1.2, simple-is@0.2.0, simple-fmt@0.1.0, stringset@0.2.1, stringmap@0.2.2, alter@0.2.0, stable@0.1.5, convert-source-map@0.4.1, ordered-ast-traverse@1.1.1, optimist@0.6.1, source-map@0.1.43, acorn@0.11.0)

grunt-svgmin@2.0.1 node_modules/grunt-svgmin
tqq log-symbols@1.0.2
tqq chalk@1.0.0 (escape-string-regexp@1.0.3, ansi-styles@2.0.1, supports-color@1.3.1, strip-ansi@2.0.1, has-ansi@1.0.3)
tqq each-async@1.1.1 (set-immediate-shim@1.0.1, onetime@1.0.0)
tqq pretty-bytes@1.0.4 (get-stdin@4.0.1, meow@3.1.0)
mqq svgo@0.5.1 (whet.extend@0.9.9, colors@1.0.3, mkdirp@0.5.0, coa@1.0.1, sax@0.6.1, js-yaml@3.2.7)

grunt-autoprefixer@2.2.0 node_modules/grunt-autoprefixer
tqq diff@1.2.2
tqq chalk@0.5.1 (ansi-styles@1.1.0, escape-string-regexp@1.0.3, supports-color@0.2.0, has-ansi@0.1.0, strip-ansi@0.3.0)
mqq autoprefixer-core@5.1.11 (num2fraction@1.1.0, browserslist@0.2.0, postcss@4.0.6, caniuse-db@1.0.30000156)

grunt-google-cdn@0.4.3 node_modules/grunt-google-cdn
tqq chalk@0.5.1 (ansi-styles@1.1.0, escape-string-regexp@1.0.3, supports-color@0.2.0, strip-ansi@0.3.0, has-ansi@0.1.0)
tqq bower@1.4.1 (is-root@1.0.0, junk@1.0.1, stringify-object@1.0.1, abbrev@1.0.5, chmodr@0.1.0, user-home@1.1.1, which@1.0.9, rimraf@2.3.3, archy@1.0.0, opn@1.0.2, bower-logger@0.2.2, bower-endpoint-parser@0.2.2, graceful-fs@3.0.6, lockfile@1.0.0, lru-cache@2.6.2, nopt@3.0.1, retry@0.6.1, tmp@0.0.24, q@1.3.0, semver@2.3.2, p-throttler@0.1.1, fstream@1.0.4, request-progress@0.3.1, bower-json@0.4.0, shell-quote@1.4.3, mkdirp@0.5.0, promptly@0.2.0, chalk@1.0.0, fstream-ignore@1.0.2, glob@4.5.3, tar-fs@1.5.0, insight@0.5.3, decompress-zip@0.1.0, update-notifier@0.3.2, request@2.53.0, bower-registry-client@0.3.0, github@0.2.4, cardinal@0.4.4, mout@0.11.0, bower-config@0.6.1, configstore@0.3.2, inquirer@0.8.0, handlebars@2.0.0)
mqq google-cdn@0.7.0 (regexp-quote@0.0.0, google-cdn-data@0.1.17, async@0.9.0, semver@2.3.2, debug@1.0.4, cdnjs-cdn-data@0.1.1, bower@1.3.12)

grunt-contrib-imagemin@0.9.4 node_modules/grunt-contrib-imagemin
tqq gulp-rename@1.2.2
tqq async@0.9.0
tqq chalk@1.0.0 (escape-string-regexp@1.0.3, ansi-styles@2.0.1, supports-color@1.3.1, strip-ansi@2.0.1, has-ansi@1.0.3)
tqq pretty-bytes@1.0.4 (get-stdin@4.0.1, meow@3.1.0)
mqq imagemin@3.1.0 (get-stdin@3.0.2, optional@0.1.3, stream-combiner@0.2.1, vinyl@0.4.6, concat-stream@1.4.8, through2@0.6.5, meow@2.1.0, vinyl-fs@0.3.13, imagemin-svgo@4.1.2, imagemin-gifsicle@4.1.0, imagemin-pngquant@4.1.0, imagemin-optipng@4.2.0, imagemin-jpegtran@4.1.0)
  [=================================-------] 83% 0.0sRunning "wiredep:app" (wiredep) task

Running "wiredep:test" (wiredep) task

Done, without errors.


Execution Time (2015-05-06 14:18:19 UTC)
loading tasks   31ms  ???? 4%
wiredep:app    741ms  ?????????????????????????????????????????????????????????????????????????????????? 93%
wiredep:test    20ms  ??? 3%
Total 794ms

  [========================================] 100% 0.0s
Received 12854K total.
Extracting tar contents (via spawned process)
Removing /home/nodejs/yoeman/angular/node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom
Copying extracted folder /tmp/phantomjs/phantomjs-1.9.8-linux-x86_64.tar.bz2-extract-1430921977466/phantomjs-1.9.8-linux-x86_64 -> /home/nodejs/yoeman/angular/node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom
Writing location.js file
Done. Phantomjs binary available at /home/nodejs/yoeman/angular/node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/bin/phantomjs

> ws@0.4.32 install /home/nodejs/yoeman/angular/node_modules/karma/node_modules/socket.io/node_modules/socket.io-client/node_modules/ws
> (node-gyp rebuild 2> builderror.log) || (exit 0)

make: Entering directory `/home/nodejs/yoeman/angular/node_modules/karma/node_modules/socket.io/node_modules/socket.io-client/node_modules/ws/build'
  CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
  SOLINK_MODULE(target) Release/obj.target/bufferutil.node
  SOLINK_MODULE(target) Release/obj.target/bufferutil.node: Finished
  COPY Release/bufferutil.node
  CXX(target) Release/obj.target/validation/src/validation.o
  SOLINK_MODULE(target) Release/obj.target/validation.node
  SOLINK_MODULE(target) Release/obj.target/validation.node: Finished
  COPY Release/validation.node
make: Leaving directory `/home/nodejs/yoeman/angular/node_modules/karma/node_modules/socket.io/node_modules/socket.io-client/node_modules/ws/build'
karma-phantomjs-launcher@0.1.4 node_modules/karma-phantomjs-launcher
mqq phantomjs@1.9.16 (which@1.0.9, progress@1.1.8, kew@0.4.0, request-progress@0.3.1, adm-zip@0.4.4, npmconf@2.1.1, request@2.42.0, fs-extra@0.16.5)

jasmine-core@2.3.0 node_modules/jasmine-core

karma@0.12.31 node_modules/karma
tqq di@0.0.1
tqq graceful-fs@2.0.3
tqq rimraf@2.2.8
tqq colors@0.6.2
tqq mime@1.2.11
tqq q@0.9.7
tqq minimatch@0.2.14 (sigmund@1.0.0, lru-cache@2.6.2)
tqq optimist@0.6.1 (wordwrap@0.0.2, minimist@0.0.10)
tqq source-map@0.1.43 (amdefine@0.1.0)
tqq glob@3.2.11 (inherits@2.0.1, minimatch@0.3.0)
tqq lodash@2.4.2
tqq useragent@2.0.10 (lru-cache@2.2.4)
tqq log4js@0.6.24 (async@0.2.10, underscore@1.8.2, readable-stream@1.0.33, semver@4.3.4)
tqq connect@2.26.6 (fresh@0.2.4, cookie@0.1.2, pause@0.0.1, vhost@3.0.0, on-headers@1.0.0, bytes@1.0.0, basic-auth-connect@1.0.0, cookie-signature@1.0.5, response-time@2.0.1, media-typer@0.3.0, parseurl@1.3.0, depd@0.4.5, cookie-parser@1.3.4, connect-timeout@1.3.0, qs@2.2.4, finalhandler@0.2.0, debug@2.0.0, method-override@2.2.0, serve-favicon@2.1.7, morgan@1.3.2, csurf@1.6.6, type-is@1.5.7, multiparty@3.3.2, compression@1.1.2, errorhandler@1.2.4, serve-static@1.6.5, body-parser@1.8.4, express-session@1.8.2, serve-index@1.2.1)
tqq http-proxy@0.10.4 (pkginfo@0.3.0, utile@0.2.1)
tqq chokidar@1.0.1 (arrify@1.0.0, is-glob@1.1.3, glob-parent@1.2.0, async-each@0.1.6, is-binary-path@1.0.0, readdirp@1.3.0, anymatch@1.3.0)
mqq socket.io@0.9.16 (base64id@0.1.0, policyfile@0.0.4, redis@0.7.3, socket.io-client@0.9.16)

karma-jasmine@0.3.5 node_modules/karma-jasmine

grunt-karma@0.10.1 node_modules/grunt-karma
mqq lodash@2.4.2

Errorが出ている(*1)。gruntで画像の最適化処理するために"libpng-dev"がいるらしいですね。 そのまま処理は継続されているので、いったんこのまま進める。
(2016/3/2追記)
proxy環境下で、bowerを使う場合の設定
{
  "proxy" : "http://proxy.example.co.jp:8080",
  "https-proxy" : "http://proxy.example.co.jp:8080"
}

2015年3月11日水曜日

node.jsのパッケージ管理ツールでexpressの導入

node.jsをnvm(NodeersionManager)を使ってインストールし、パッケージ管理(npm)を使ってexpress環境を構築してみる。環境は以下の通り。
 
 OS:CentOS6.5(x64)
  nvm:0.24.0
  node.js:0.12.0
  npm:
  forever:
  express:4.12.2

0.環境準備~nvm/node.jsのインストール


$ sudo useradd nodejs
$ sudo su - nodejs
$ sudo yum install git #入っていなかったら入れる
$ git clone git://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh
これでnvmはインストール完了。次はnvmを使ってnode.jsをインストールしてみる。 インストールできる、node.jsのバージョン一覧を確認する。偶数が安定板、奇数が開発版
$ nvm ls-remote

        v0.1.14
        v0.1.15
        v0.1.16
     ・
     ・
     ・
     ・
       v0.11.14
       v0.11.15
       v0.11.16
        v0.12.0

$
ということで最新(2015/3/8 時点:v0.12.0)を入れてみることに。
$ nvm install 0.12.0
######################################################################## 100.0%
Now using node v0.12.0
とても簡単!完了。次に複数インストールした場合のデフォルトで使用するバージョンを設定しておく
$ nvm alias default v0.12.0
default -> v0.12.0
デフォルトでnvmも使えるように設定する
$ vi ~/.bash_profile
・
・
if [[ -f ~/.nvm/nvm.sh ]];
  then source ~/.nvm/nvm.sh
  npm_dir=${NVM_PATH}_modules
  export NODE_PATH=$npm_dir
  export PATH=$NVM_BIN:$PATH
fi

次にnode.jsのサンプルを作成してみる
$ vi example.js
var http = require('http');
 
http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World\n');
}).listen(9000, "192.168.0.74");
 
console.log('Server running at http://192.168.0.74:9000/');
実行!
$ node example.js

Server running at http://192.168.0.74:9000/
超簡単・・。ブラウザで表示。

ただこの状態だと、エラーがあるとプロセスがこけてしまい、Webサーバーがダウンすることになる。
試しに、以下のようなサンプルコードを実行した場合、
$ vi example_err.js
var n = 0;
var http = require('http');
http.createServer(function (req, res) {
  if (++n > 4) { a }
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end("result:" + n + "\n");
}).listen(9000, "192.168.0.74");
console.log('Server running at http://192.168.0.74:9000/');
別端末でcurlでアクセスをしてみると、変数"n"がカウントアップされ、5回目に変数"a"を参照しにいき、落ちる。
$ curl http://192.168.0.74:9000
result:1
$ curl http://192.168.0.74:9000
result:2
$ curl http://192.168.0.74:9000
result:3
$ curl http://192.168.0.74:9000
result:4
$ curl http://192.168.0.74:9000
url: (52) Empty reply from server
node.js側はこんな感じ。
$ node example_err.js
Server running at http://192.168.0.74:9000/
/home/nodejs/example_err.js:4
  if (++n > 4) { a }
                 ^
ReferenceError: a is not defined
    at Server.<anonymous> (/home/nodejs/example_err.js:4:18)
    at Server.emit (events.js:110:17)
    at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:491:12)
    at HTTPParser.parserOnHeadersComplete (_http_common.js:111:23)
    at Socket.socketOnData (_http_server.js:343:22)
    at Socket.emit (events.js:107:17)
    at readableAddChunk (_stream_readable.js:163:16)
    at Socket.Readable.push (_stream_readable.js:126:10)
    at TCP.onread (net.js:529:20)

これだと実際には使えない・・・ということで、次にnpmを使ってforeverというモジュールを使ってみる。

1.npmを使ってforeverをインストールしてみる


node.jsを入れると、npmもインストールされている。これを使って、foreverモジュールをインストールしてみる。
$ npm install -g forever
"-g"でグローバルインストールとし、全部のアプリで使えるようにしておく。
インストールが終わったら、実際に実行してみる。
$ npm

Usage: npm <command></command>

where <command></command> is one of:
    add-user, adduser, apihelp, author, bin, bugs, c, cache,
    completion, config, ddp, dedupe, deprecate, docs, edit,
    explore, faq, find, find-dupes, get, help, help-search,
    home, i, info, init, install, issues, la, link, list, ll,
    ln, login, ls, outdated, owner, pack, prefix, prune,
    publish, r, rb, rebuild, remove, repo, restart, rm, root,
    run-script, s, se, search, set, show, shrinkwrap, star,
    stars, start, stop, t, tag, test, tst, un, uninstall,
    unlink, unpublish, unstar, up, update, v, verison, version,
    view, whoami

npm <cmd> -h     quick help on <cmd>
npm -l           display full usage info
npm faq          commonly asked questions
npm help <term>  search for help on <term>
npm help npm     involved overview

Specify configs in the ini-formatted file:
    /home/nave/.npmrc
or on the command line via: npm <command></command> --key value
Config info can be viewed via: npm help config

npm@2.1.14 /usr/local/nave/installed/0.10.35/lib/node_modules/npm

$  forever start example_err.js

warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info:    Forever processing file: example_err.js


warningはでたけど、、起動している。先ほどのようにcurlで何度かアクセスすると、resultが1に戻って表示され node.js側は何もエラーがでていない。つまり、node.jsが再起動されて起動し続けているということのようです。 一件落着。
で次に、expressだ。

2.npmを使ってexpressをインストールしてみる


これを使ってexpressをインストールする。
$ npm install -g express

express@4.12.2 /home/nodejs/.nvm/versions/node/v0.12.0/lib/node_modules/express
tqq merge-descriptors@1.0.0
tqq utils-merge@1.0.0
tqq cookie-signature@1.0.6
tqq methods@1.1.1
tqq fresh@0.2.4
tqq cookie@0.1.2
tqq escape-html@1.0.1
tqq range-parser@1.0.2
tqq content-type@1.0.1
tqq finalhandler@0.3.3
tqq vary@1.0.0
tqq parseurl@1.3.0
tqq serve-static@1.9.1
tqq content-disposition@0.5.0
tqq path-to-regexp@0.1.3
tqq depd@1.0.0
tqq on-finished@2.2.0 (ee-first@1.1.0)
tqq qs@2.3.3
tqq etag@1.5.1 (crc@3.2.1)
tqq proxy-addr@1.0.6 (forwarded@0.1.0, ipaddr.js@0.1.8)
tqq debug@2.1.2 (ms@0.7.0)
tqq send@0.12.1 (destroy@1.0.3, ms@0.7.0, mime@1.3.4)
tqq type-is@1.6.0 (media-typer@0.3.0, mime-types@2.0.9)
mqq accepts@1.2.4 (negotiator@0.5.1, mime-types@2.0.9)


インストール完了・・これまたあっけなし。以下のサンプルプログラムでお試し。
$ vi app.js
var express = require('express');
var app = express();

app.get('/',function (req,res){
  res.send('Hello Express!');
});

app.listen(9000,"192.168.0.74");
ブラウザでつついて、ばっちり!あとは追加でexpressのひな形自動作成ツールを追加してみる。 express-generatorというパッケージになる。
$ npm install -g express-generator
/home/nodejs/.nvm/versions/node/v0.12.0/bin/express -> /home/nodejs/.nvm/versions/node/v0.12.0/lib/node_modules/express-generator/bin/express
express-generator@4.12.1 /home/nodejs/.nvm/versions/node/v0.12.0/lib/node_modules/express-generator
tqq sorted-object@1.0.0
tqq commander@2.6.0
mqq mkdirp@0.5.0 (minimist@0.0.8)
次にEJSというビューテンプレートを使ってひな形を作成してみる。
$ express --ejs expressexample

   create : expressexample
   create : expressexample/package.json
   create : expressexample/app.js
   create : expressexample/public
   create : expressexample/public/javascripts
   create : expressexample/public/images
   create : expressexample/public/stylesheets
   create : expressexample/public/stylesheets/style.css
   create : expressexample/routes
   create : expressexample/routes/index.js
   create : expressexample/routes/users.js
   create : expressexample/views
   create : expressexample/views/index.ejs
   create : expressexample/views/error.ejs
   create : expressexample/bin
   create : expressexample/bin/www

   install dependencies:
     $ cd expressexample && npm install

   run the app:
     $ DEBUG=expressexample:* ./bin/www

で作成。ただこれだけだとディレクトリ・ファイルが出来上がっただけなので、記載されいてるとおり、
$ cd expressexample && npm install
でセットアップする。出来上がったものを、これまた記載通りDEBUG付きで実行してみる。
$ DEBUG=expressexample:* ./bin/www

  expressexample:server Listening on port 3000 +0ms
あとはブラウザでアクセスしてみると、ばらばらとデバッグ(トレース)が出てきた。なるへそねぇ。 で、もう少し出来上がった中身を見てみる。
$ vi package.json
{
  "name": "expressexample",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "~1.12.0",
    "cookie-parser": "~1.3.4",
    "debug": "~2.1.1",
    "ejs": "~2.3.1",
    "express": "~4.12.2",
    "morgan": "~1.5.1",
    "serve-favicon": "~2.2.0"
  }
}
これはnpmのファイル。6行目の内容は、npm startと打った時に実行される内容。 つまり、
$ npm start
でも実行ができるということですね。あとは依存関係のあるパッケージが記載されている。このpackage.jsonファイル を他の環境に持っていき、npm installをすれば、同じ環境が出来上がる!ということですね。
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var routes = require('./routes/index');    //(*1)
var users = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);    //(*2)
app.use('/users', users);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});


module.exports = app;

このファイルは、サーバーで使用するミドルウェアを取り込んだり、ルーティングするためのファイルとのこと。 例えば(*2)は http://192.168.0.74/ でアクセスされた場合のルーティング設定で、この行ではroutes変数にアサインされている。で、routes変数に何が入っているかというと、、(*1)に記載されている。 (*1)ではroutes変数に[./routes/index]を割り当てているが、これは./routes/index.jsのことを指している。 ちなみに、このapp.jsファイルを読むと、ルーティングはファイルの上から順に評価されていき、該当したところで止まる(後続は処理されない)という処理のようですね。今後作っていく際のポイントになりそう。
var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

module.exports = router;
このファイルは上記にあったapp.jsで呼び出されたroutes/index.js。ポイントは6行目。今回テンプレートとしてejsを採用しているので、この行にあるrender関数でejsテンプレートが呼び出される。どのテンプレートかというと、第一引数がindexとなっているので、views/index.ejsだ。このテンプレートを呼び出すにあたり、title変数に、[Express]を設定して、呼び出している。
$ vi views/index.ejs
<html>
  <head>
    <title><%= title %></title>
    <link href="/stylesheets/style.css" rel="stylesheet"></link>
  </head>
  <body>
    <h1><%= title %></h1>
Welcome to <%= title %>


  </body>
</html>
このファイルはhtmlベースのテンプレートとなっており、<%= title %>となっているところに、index.jsのrender関数で指定したtitle編巣の値をセットしている。 今日はここまで・・

2015年2月3日火曜日

CentOS6.5でphp5.5のrpm化&インストール

WordPressを構築してみるために、最新のphp 5.6.5をインストールを試みた。rpm作成から試してみる。
※rpm作成環境の構築はこちら ソースコードを入手し、さくっとrpmを作成してみる。
まずは標準のレポジトリから入れてみる。
$ sudo yum install php
・
・
Error: Package: php-5.3.3-40.el6_6.x86_64 (updates)
           Requires: httpd-mmn = 20051115
           Installed: httpd-2.4.12-1.x86_64 (installed)
               httpd-mmn = 20120211
           Available: httpd-2.2.15-39.el6.centos.x86_64 (base)
               httpd-mmn = 20051115
・
・
となった。バージョンも5.3.3となっているし、httpd 2.4が入ってる環境だと、エラーが出てしまう見たい。 原因はメッセージの通り、httpd 2.2.15までにしか対応していない。ということなのでしょう。 ということで、ソース化からrpmを作ってみることにした。phpのサイトから入手して、、
$ wget http://jp1.php.net/get/php-5.6.5.tar.bz2/from/this/mirror -O php-5.6.5.tar.bz2
$ rpmbuild -bb php-5.6.5.tar.bz2

error: File /home/hayashi/rpmbuild/SOURCES/php-5.6.5.tar.bz2 does not appear to be a specfile.

specファイルがないと・・確かにない。ということで、IUSのサイトからSRPMを入手し、試す。
$ cd ~/rpmbuild/SRPMS
$ wget http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/SRPMS/php56u-5.6.5-1.ius.centos6.src.rpm
$ rpmbuild --rebuild --clean php56u-5.6.5-1.ius.centos6.src.rpm
・
・
・
error: Failed build dependencies:
        bzip2-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        curl-devel >= 7.9 is needed by php56u-5.6.5-1.ius.el6.x86_64
        pam-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        httpd-devel < 2.4 is needed by php56u-5.6.5-1.ius.el6.x86_64
        libedit-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libtool-ltdl-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        systemtap-sdt-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libc-client-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        firebird-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        net-snmp-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libxslt-devel >= 1.0.18-1 is needed by php56u-5.6.5-1.ius.el6.x86_64
        t1lib-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libjpeg-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libpng-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        freetype-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libXpm-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libvpx-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        gmp-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        tokyocabinet-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libmcrypt-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libtidy-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        aspell-devel >= 0.50.0 is needed by php56u-5.6.5-1.ius.el6.x86_64
        recode-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libicu-devel >= 4.0 is needed by php56u-5.6.5-1.ius.el6.x86_64
        enchant-devel >= 1.2.4 is needed by php56u-5.6.5-1.ius.el6.x86_64

$ yum install bzip2-devel curl-devel pam-devel libedit-devel libtool-ltdl-devel systemtap-sdt-devel /
libc-client-devel firebird-devel net-snmp-devel libxslt-devel t1lib-devel libjpeg-devel libpng-devel /
freetype-devel libXpm-devel libvpx-devel gmp-devel tokyocabinet-devel libmcrypt-devel libtidy-devel /
aspell-devel recode-devel libicu-devel enchant-devel

$ sudo rpm -ivh ~/rpmbuild/RPMS/x86_64/httpd-devel-2.4.12-1.x86_64.rpm

error: Failed build dependencies:
        httpd-devel < 2.4 is needed by php56u-5.6.5-1.ius.el6.x86_64

おっと、、httpd-develはapache2.4.12と合わせてインストールしたが、、これを見ると2.2じゃないとダメということか?httpdとhttpd-develのバージョンを別々のものを入れてもよいのか?はわからなかった。ということで、php 5.5.xを 探してみる。 ちなみにphpの古いバージョンは、IUSのサイトのアーカイブを参照。
まずは、5.5系の最新版である5.5.21。
$ mkdir /tmp/php/
$ wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/SRPMS/php55u-5.5.21-1.ius.el6.src.rpm
$ rpm2cpio php55u-5.5.21-1.ius.centos6.src.rpm  | cpio -id
$ less php55u.spec

・
・
%if 0%{?rhel} < 7
BuildRequires: httpd-devel < 2.4
%else
BuildRequires: httpd-devel
%endif
・
・
となっており、5.6とおなじく、redhet6(この場合はcentos6)だと、httpd-develは2.4未満じゃないとダメらしい。次は5.5.20。5.5.20のspecを見ると、
・
・
BuildRequires: httpd-devel >= 2.0.46-1, pam-devel
・
・
となっており、大丈夫そうです。ということで、5.5.20で進める。
$ cd ~/rpmbuild/SRPM
$ rpmbuild --rebuild --clean php55u-5.5.20-1.ius.centos6.src.rpm

・
・

Sorry, I cannot run apxs.  Possible reasons follow:

1. Perl is not installed
2. apxs was not found. Try to pass the path using --with-apxs2=/path/to/apxs
3. Apache was not built using --enable-so (the apxs usage page is displayed)

The output of /usr/sbin/apxs follows:
./configure: line 8754: /usr/sbin/apxs: No such file or directory
configure: error: Aborting
error: Bad exit status from /var/tmp/rpm-tmp.bYrvIJ (%build)

・
・
というエラーがでた。apache2.4からは、apxsのパスは、「/usr/bin/apxs」に変更になったとの ことで、specファイルを変更する。
$ cd /tmp/php/;rm -f *
$ rpm2cpio php55u-5.5.20-1.ius.centos6.src.rpm  | cpio -id
$ cp php55u.spec ~/rpmbuild/SPECS/
$ cd ~/rpmbuild/SPECS/
$ vi php55u.spec
# /usr/sbin/apsx with httpd < 2.4 and defined as /usr/bin/apxs with httpd >= 2.4
%{!?_httpd_apxs:       %{expand: %%global _httpd_apxs       %%{_sbindir}/apxs}}
 ↓
# /usr/sbin/apsx with httpd < 2.4 and defined as /usr/bin/apxs with httpd >= 2.4
#%{!?_httpd_apxs:       %{expand: %%global _httpd_apxs       %%{_sbindir}/apxs}}
%{!?_httpd_apxs:       %{expand: %%global _httpd_apxs       %%{_bindir}/apxs}}
これでいけるかな・・
$ rpmbuild -bb --clean ~/rpmbuild/SPECS/php55u.spec
・
・
+ umask 022
+ cd /home/hayashi/rpmbuild/BUILD
+ rm -rf php-5.5.20
+ exit 0

$ cd ~/rpmbuild/RPMS/x86_64/
$ ls php55u-*5.5.20*
php55u-5.5.20-1.ius.el6.x86_64.rpm            php55u-mbstring-5.5.20-1.ius.el6.x86_64.rpm
php55u-bcmath-5.5.20-1.ius.el6.x86_64.rpm     php55u-mcrypt-5.5.20-1.ius.el6.x86_64.rpm
php55u-cli-5.5.20-1.ius.el6.x86_64.rpm        php55u-mssql-5.5.20-1.ius.el6.x86_64.rpm
php55u-common-5.5.20-1.ius.el6.x86_64.rpm     php55u-mysqlnd-5.5.20-1.ius.el6.x86_64.rpm
php55u-dba-5.5.20-1.ius.el6.x86_64.rpm        php55u-odbc-5.5.20-1.ius.el6.x86_64.rpm
php55u-debuginfo-5.5.20-1.ius.el6.x86_64.rpm  php55u-opcache-5.5.20-1.ius.el6.x86_64.rpm
php55u-devel-5.5.20-1.ius.el6.x86_64.rpm      php55u-pdo-5.5.20-1.ius.el6.x86_64.rpm
php55u-embedded-5.5.20-1.ius.el6.x86_64.rpm   php55u-pgsql-5.5.20-1.ius.el6.x86_64.rpm
php55u-enchant-5.5.20-1.ius.el6.x86_64.rpm    php55u-process-5.5.20-1.ius.el6.x86_64.rpm
php55u-fpm-5.5.20-1.ius.el6.x86_64.rpm        php55u-pspell-5.5.20-1.ius.el6.x86_64.rpm
php55u-gd-5.5.20-1.ius.el6.x86_64.rpm         php55u-recode-5.5.20-1.ius.el6.x86_64.rpm
php55u-gmp-5.5.20-1.ius.el6.x86_64.rpm        php55u-snmp-5.5.20-1.ius.el6.x86_64.rpm
php55u-imap-5.5.20-1.ius.el6.x86_64.rpm       php55u-soap-5.5.20-1.ius.el6.x86_64.rpm
php55u-interbase-5.5.20-1.ius.el6.x86_64.rpm  php55u-tidy-5.5.20-1.ius.el6.x86_64.rpm
php55u-intl-5.5.20-1.ius.el6.x86_64.rpm       php55u-xml-5.5.20-1.ius.el6.x86_64.rpm
php55u-ldap-5.5.20-1.ius.el6.x86_64.rpm       php55u-xmlrpc-5.5.20-1.ius.el6.x86_64.rpm
php55u-litespeed-5.5.20-1.ius.el6.x86_64.rpm
成功!wordpressを想定してインストールしてみる。
$ sudo rpm -Uvh php55u-5.5.20-1.ius.el6.x86_64.rpm php55u-mbstring-5.5.20-1.ius.el6.x86_64.rpm php55u-mssql-5.5.20-1.ius.el6.x86_64.rpm

error: Failed dependencies:
        php55u-common(x86-64) = 5.5.20-1.ius.el6 is needed by php55u-5.5.20-1.ius.el6.x86_64
        php55u-cli(x86-64) = 5.5.20-1.ius.el6 is needed by php55u-5.5.20-1.ius.el6.x86_64
        php55u-common = 5.5.20-1.ius.el6 is needed by php55u-mbstring-5.5.20-1.ius.el6.x86_64
        php55u-pdo = 5.5.20-1.ius.el6 is needed by php55u-mssql-5.5.20-1.ius.el6.x86_64

$ sudo rpm -Uvh php55u-5.5.20-1.ius.el6.x86_64.rpm php55u-mbstring-5.5.20-1.ius.el6.x86_64.rpm php55u-mssql-5.5.20-1.ius.el6.x86_64.rpm php55u-common-5.5.20-1.ius.el6.x86_64.rpm php55u-cli-5.5.20-1.ius.el6.x86_64.rpm php55u-pdo-5.5.20-1.ius.el6.x86_64.rpm

error: Failed dependencies:
        php55u-pecl-jsonc is needed by php55u-common-5.5.20-1.ius.el6.x86_64

まだかぁ。先は長いっす。この後も出てきます。ちょっと関係性を整理しておく。  php55u-common   ⇒php55u-pecl-jsonc(*)    ⇒php55u-devel     ⇒php55u-cli      ⇒php55u-common     ⇒php55u-pecl-jsonc-devel(*)    ⇒php55u-pear(*)     ⇒php55u-cli      ⇒php55u-common     ⇒php55u-xml      ⇒php55u-common とループしちゃってます。うち、(*)についてはコンパイルが必要になります。ので、、 コンパイルに必要となるphp55u-cli、php55u-common、php55u-xml、php55u-develについては、依存関係を無視して インストールする必要があるってことですね。

$ sudo rpm -Uvh --nodeps php55u-cli-5.5.20-1.ius.el6.x86_64.rpm php55u-common-5.5.20-1.ius.el6.x86_6
4.rpm  php55u-xml-5.5.20-1.ius.el6.x86_64.rpm php55u-devel-5.5.20-1.ius.el6.x86_64.rpm

残りのパッケージについて、IUSで再度入手して進める。
$ wget http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/SRPMS/php55u-pear-1.9.5-2.ius.centos6.src.rpm
$ rpmbuild --rebuild --clean php55u-pear-1.9.5-2.ius.centos6.src.rpm
$ sudo rpm -Uvh ../RPMS/noarch/php55u-pear-1.9.5-2.ius.el6.noarch.rpm

error: Failed dependencies:
        php55u-posix is needed by php55u-pear-1:1.9.5-2.ius.el6.noarch

まだあるんですか。。長すぎる。php55u-posixのSRPMをIUSのサイトで調べたけど、見当たらず。yumを使って調査をしてみた。まずはIUSのレポジトリを追加。
$ wget wget http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ius-release-1.0-13.ius.centos6.noarch.rpm
$ sudo rpm -Uvh ius-release-1.0-13.ius.centos6.noarch.rpm
$ sudo vi /etc/yum.repos.d/ius.repo
[ius]
・
・
#enabled=1
enabled=0
・
・
[ius-debuginfo]
・
・

調査。
$ yum --enablerepo=ius provides php55u-posix

Loaded plugins: fastestmirror, versionlock
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.riken.jp
 * ius: hkg.mirror.rackspace.com
 * updates: ftp.riken.jp
php55u-process-5.5.21-1.ius.centos6.x86_64 : Modules for PHP script using system process interfaces
Repo        : ius
Matched from:
Other       : php55u-posix
ということで、php55u-processを入れればいいみたい。
$ sudo rpm -Uvh ../RPMS/noarch/php55u-pear-1.9.5-2.ius.el6.noarch.rpm ../RPMS/x86_64/php55u-process-5.5.20-1.ius.el6.x86_64.rpm
無事成功。残るは、、php55u-pecl-jsoncとphp55u-pecl-jsonc-develです。
$ wget http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/SRPMS/php55u-pecl-jsonc-1.3.6-3.ius.centos6.src.rpm
$ rpmbuild --rebuild --clean php55u-pecl-jsonc-1.3.6-3.ius.centos6.src.rpm
$ cd ../RPMS/x86_64/
$ sudo rpm -Uvh php55u-pecl-jsonc-1.3.6-3.ius.el6.x86_64.rpm php55u-pecl-jsonc-devel-1.3.6-3.ius.el6.x86_64.rp
$ sudo rpm -Uvh php55u-5.5.20-1.ius.el6.x86_64.rpm php55u-mbstring-5.5.20-1.ius.el6.x86_64.rpm php55u-pdo-5.5.20-1.ius.el6.x86_64.rpm  php55u-mysqlnd-5.5.20-1.ius.el6.x86_64.rpm

ということで、php 5.5.20を無事インストールすることができました。 wordPress $ sudo rpm -Uvh php55u-5.5.14-1.ius.el6.x86_64.rpm php55u-common-5.5.14-1.ius.el6.x86_64.rpm php55u-cli-5.5.14-1.ius.el6.x86_64.rpm php55u-opcache-5.5.14-1.ius.el6.x86_64.rpm php55u-pdo-5.5.14-1.ius.el6.x86_64.rpm php55u-mysqlnd-5.5.14-1.ius.el6.x86_64.rpm php55u-mbstring-5.5.14-1.ius.el6.x86_64.rpm $ sudo rpm -Uvh php55u-fpm-5.5.14-1.ius.el6.x86_64.rpm $ sudo chkconfig php-fpm on http.conf LoadModule mpm_event_module lib64/httpd/modules/mod_mpm_event.so #LoadModule mpm_prefork_module lib64/httpd/modules/mod_mpm_prefork.so root:password mysql mysql> create database wp; mysql> grant all privileges on wp.* to wp@localhost identified by "wppassword";

2015年1月30日金曜日

CentOS6.5でapache 2.4.12のrpm化&インストール

WordPressを構築してみるために、最新のapache 2.4.12をインストールする。rpmがないので、rpm作成から試してみる。
※rpm作成環境の構築はこちら ソースコードを入手し、さくっとrpmを作成してみる。
$ mkdir  ~/rpmbuild/SOURCES/httpd-2.4.12-1.src
$ cd ~/rpmbuild/SOURCES/httpd-2.4.12-1.src
$ wget http://ftp.riken.jp/net/apache//httpd/httpd-2.4.12.tar.bz2
$ rpmbuild --clean -tb ~/rpmbuild/SOURCES/httpd-2.4.12-1.src/httpd-2.4.12.tar.bz2

error: Failed build dependencies:
        zlib-devel is needed by httpd-2.4.12-1.x86_64
        libselinux-devel is needed by httpd-2.4.12-1.x86_64
        libuuid-devel is needed by httpd-2.4.12-1.x86_64
        apr-devel >= 1.4.0 is needed by httpd-2.4.12-1.x86_64
        apr-util-devel >= 1.4.0 is needed by httpd-2.4.12-1.x86_64
        pcre-devel >= 5.0 is needed by httpd-2.4.12-1.x86_64
        openldap-devel is needed by httpd-2.4.12-1.x86_64
        lua-devel is needed by httpd-2.4.12-1.x86_64
        libxml2-devel is needed by httpd-2.4.12-1.x86_64
        distcache-devel is needed by httpd-2.4.12-1.x86_64
        openssl-devel is needed by httpd-2.4.12-1.x86_64
まぁ、足りませんね。ということで、確認してみます。
$ sudo yum install zlib-devel libselinux-devel libuuid-devel apr-devel apr-util-devel pcre-devel openldap-devel lua-devel libxml2-devel distcache-devel openssl-devel

Dependencies Resolved

========================================================================================================================
 Package                            Arch                  Version                          Repository              Size
========================================================================================================================
Installing:
 apr-devel                          x86_64                1.3.9-5.el6_2                    base                   176 k
 apr-util-devel                     x86_64                1.3.9-3.el6_0.1                  base                    69 k
 libselinux-devel                   x86_64                2.0.94-5.8.el6                   base                   137 k
 libuuid-devel                      x86_64                2.17.2-12.18.el6                 base                    85 k
 libxml2-devel                      x86_64                2.7.6-17.el6_6.1                 updates                1.1 M
 lua-devel                          x86_64                5.1.4-4.1.el6                    base                    20 k
 openldap-devel                     x86_64                2.4.39-8.el6                     base                   1.1 M
 openssl-devel                      x86_64                1.0.1e-30.el6_6.5                updates                1.2 M
 pcre-devel                         x86_64                7.8-6.el6                        base                   318 k
 zlib-devel                         x86_64                1.2.3-29.el6                     base                    44 k
Installing for dependencies:
 cyrus-sasl-devel                   x86_64                2.1.23-15.el6_6.1                updates                303 k
 db4-cxx                            x86_64                4.7.25-18.el6_4                  base                   588 k
 db4-devel                          x86_64                4.7.25-18.el6_4                  base                   6.6 M
 expat-devel                        x86_64                2.0.1-11.el6_2                   base                   120 k
 keyutils-libs-devel                x86_64                1.4-5.el6                        base                    29 k
 krb5-devel                         x86_64                1.10.3-33.el6                    base                   498 k
 libcom_err-devel                   x86_64                1.41.12-21.el6                   base                    32 k
 libsepol-devel                     x86_64                2.0.41-4.el6                     base                    64 k
Updating for dependencies:
 cyrus-sasl                         x86_64                2.1.23-15.el6_6.1                updates                 78 k
 cyrus-sasl-lib                     x86_64                2.1.23-15.el6_6.1                updates                136 k
 e2fsprogs                          x86_64                1.41.12-21.el6                   base                   553 k
 e2fsprogs-libs                     x86_64                1.41.12-21.el6                   base                   121 k
 keyutils                           x86_64                1.4-5.el6                        base                    39 k
 keyutils-libs                      x86_64                1.4-5.el6                        base                    20 k
 krb5-libs                          x86_64                1.10.3-33.el6                    base                   765 k
 libblkid                           x86_64                2.17.2-12.18.el6                 base                   116 k
 libcom_err                         x86_64                1.41.12-21.el6                   base                    37 k
 libselinux                         x86_64                2.0.94-5.8.el6                   base                   108 k
 libselinux-utils                   x86_64                2.0.94-5.8.el6                   base                    82 k
 libss                              x86_64                1.41.12-21.el6                   base                    41 k
 libuuid                            x86_64                2.17.2-12.18.el6                 base                    69 k
 libxml2                            x86_64                2.7.6-17.el6_6.1                 updates                801 k
 openldap                           x86_64                2.4.39-8.el6                     base                   280 k
 openssl                            x86_64                1.0.1e-30.el6_6.5                updates                1.5 M
 util-linux-ng                      x86_64                2.17.2-12.18.el6                 base                   1.6 M

Transaction Summary
========================================================================================================================
Install      18 Package(s)
Upgrade      17 Package(s)
・
・
apr-develapr-util-develについては、レポジトリ上のものが古いみたい。 ということで、こちらもソースからrpm化をして、インストールしてみる。 入手先はこちら
$ cd ~/rpmbuild/SOURCES/
$ wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-1.5.1.tar.bz2
$ wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-util-1.5.4.tar.bz2

$ rpmbuild --clean -tb ~/rpmbuild/SOURCES/apr-1.5.1.tar.bz2

error: Failed build dependencies:
        doxygen is needed by apr-1.5.1-1.x86_64

$ sudo yum install doxygen -y

$ rpmbuild --clean -tb ~/rpmbuild/SOURCES/apr-1.5.1.tar.bz2
 ・
 ・
 ・
$ ll ../RPMS/x86_64/

total 1320
-rw-rw-r-- 1 hayashi hayashi  93308 Jan 30 14:34 apr-1.5.1-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi 416372 Jan 30 14:34 apr-debuginfo-1.5.1-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi 839308 Jan 30 14:34 apr-devel-1.5.1-1.x86_64.rpm

出来上がり!つぎに進む。
$ rpmbuild --clean -tb ~/rpmbuild/SOURCES/apr-util-1.5.4.tar.bz2

error: Failed build dependencies:
        apr-devel >= 1.4.0 is needed by apr-util-1.5.4-1.x86_64
        expat-devel is needed by apr-util-1.5.4-1.x86_64
        libuuid-devel is needed by apr-util-1.5.4-1.x86_64
        db4-devel is needed by apr-util-1.5.4-1.x86_64
        postgresql-devel is needed by apr-util-1.5.4-1.x86_64
        mysql-devel is needed by apr-util-1.5.4-1.x86_64
        sqlite-devel >= 3.0.0 is needed by apr-util-1.5.4-1.x86_64
        freetds-devel is needed by apr-util-1.5.4-1.x86_64
        unixODBC-devel is needed by apr-util-1.5.4-1.x86_64
        openldap-devel is needed by apr-util-1.5.4-1.x86_64
        openssl-devel is needed by apr-util-1.5.4-1.x86_64
        nss-devel is needed by apr-util-1.5.4-1.x86_64
とりあえず、apr-develは先ほどのやつをインストール。
$ sudo rpm -ivh ../RPMS/x86_64/apr-1.5.1-1.x86_64.rpm ../RPMS/x86_64/apr-devel-1.5.1-1.x86_64.rpm

        file /usr/lib64/libapr-1.so.0 from install of apr-1.5.1-1.x86_64 conflicts with file from package apr-1.3.9-5.el6_2.x86_64

失敗・・気を取り直して、、
$ sudo rpm -Uvh ../RPMS/x86_64/apr-1.5.1-1.x86_64.rpm ../RPMS/x86_64/apr-devel-1.5.1-1.x86_64.rpm

成功。それ以外をチェック
$ sudo yum install expat-devel libuuid-devel db4-devel postgresql-devel mysql-devel sqlite-devel freetds-devel unixODBC-devel openldap-devel openssl-devel nss-devel

Dependencies Resolved

========================================================================================================================
 Package                               Arch                Version                           Repository            Size
========================================================================================================================
Installing:
 db4-devel                             x86_64              4.7.25-18.el6_4                   base                 6.6 M
 expat-devel                           x86_64              2.0.1-11.el6_2                    base                 120 k
 freetds-devel                         x86_64              0.91-2.el6                        epel                  39 k
 libuuid-devel                         x86_64              2.17.2-12.18.el6                  base                  85 k
 mysql-devel                           x86_64              5.1.73-3.el6_5                    base                 129 k
 nss-devel                             x86_64              3.16.2.3-3.el6_6                  updates              198 k
 openldap-devel                        x86_64              2.4.39-8.el6                      base                 1.1 M
 openssl-devel                         x86_64              1.0.1e-30.el6_6.5                 updates              1.2 M
 postgresql-devel                      x86_64              8.4.20-1.el6_5                    base                 815 k
 sqlite-devel                          x86_64              3.6.20-1.el6                      base                  81 k
 unixODBC-devel                        x86_64              2.2.14-14.el6                     base                  53 k
Installing for dependencies:
 cyrus-sasl-devel                      x86_64              2.1.23-15.el6_6.1                 updates              303 k
 db4-cxx                               x86_64              4.7.25-18.el6_4                   base                 588 k
 freetds                               x86_64              0.91-2.el6                        epel                 568 k
 keyutils-libs-devel                   x86_64              1.4-5.el6                         base                  29 k
 krb5-devel                            x86_64              1.10.3-33.el6                     base                 498 k
 libcom_err-devel                      x86_64              1.41.12-21.el6                    base                  32 k
 libselinux-devel                      x86_64              2.0.94-5.8.el6                    base                 137 k
 libsepol-devel                        x86_64              2.0.41-4.el6                      base                  64 k
 libtool-ltdl                          x86_64              2.2.6-15.5.el6                    base                  44 k
 mysql                                 x86_64              5.1.73-3.el6_5                    base                 894 k
 nspr-devel                            x86_64              4.10.6-1.el6_5                    base                 111 k
 nss-softokn-devel                     x86_64              3.14.3-22.el6_6                   updates               14 k
 nss-softokn-freebl-devel              x86_64              3.14.3-22.el6_6                   updates              139 k
 nss-util-devel                        x86_64              3.16.2.3-2.el6_6                  updates               68 k
 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
 unixODBC                              x86_64              2.2.14-14.el6                     base                 378 k
Updating for dependencies:
 cyrus-sasl                            x86_64              2.1.23-15.el6_6.1                 updates               78 k
 cyrus-sasl-lib                        x86_64              2.1.23-15.el6_6.1                 updates              136 k
 e2fsprogs                             x86_64              1.41.12-21.el6                    base                 553 k
 e2fsprogs-libs                        x86_64              1.41.12-21.el6                    base                 121 k
 keyutils                              x86_64              1.4-5.el6                         base                  39 k
 keyutils-libs                         x86_64              1.4-5.el6                         base                  20 k
 krb5-libs                             x86_64              1.10.3-33.el6                     base                 765 k
 libblkid                              x86_64              2.17.2-12.18.el6                  base                 116 k
 libcom_err                            x86_64              1.41.12-21.el6                    base                  37 k
 libselinux                            x86_64              2.0.94-5.8.el6                    base                 108 k
 libselinux-utils                      x86_64              2.0.94-5.8.el6                    base                  82 k
 libss                                 x86_64              1.41.12-21.el6                    base                  41 k
 libuuid                               x86_64              2.17.2-12.18.el6                  base                  69 k
 mysql-libs                            x86_64              5.1.73-3.el6_5                    base                 1.2 M
 nspr                                  x86_64              4.10.6-1.el6_5                    base                 113 k
 nss                                   x86_64              3.16.2.3-3.el6_6                  updates              834 k
 nss-softokn                           x86_64              3.14.3-22.el6_6                   updates              262 k
 nss-softokn-freebl                    x86_64              3.14.3-22.el6_6                   updates              167 k
 nss-sysinit                           x86_64              3.16.2.3-3.el6_6                  updates               44 k
 nss-tools                             x86_64              3.16.2.3-3.el6_6                  updates              427 k
 nss-util                              x86_64              3.16.2.3-2.el6_6                  updates               66 k
 openldap                              x86_64              2.4.39-8.el6                      base                 280 k
 openssl                               x86_64              1.0.1e-30.el6_6.5                 updates              1.5 M
 util-linux-ng                         x86_64              2.17.2-12.18.el6                  base                 1.6 M

Transaction Summary
========================================================================================================================
Install      28 Package(s)
Upgrade      24 Package(s)

Total download size: 25 M
Is this ok [y/N]: y
・
・
・

$ rpmbuild -tb ~/rpmbuild/SOURCES/apr-util-1.5.4.tar.bz2

$ ll ../RPMS/x86_64/
total 2428
-rw-rw-r-- 1 hayashi hayashi  93308 Jan 30 14:34 apr-1.5.1-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi 416372 Jan 30 14:34 apr-debuginfo-1.5.1-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi 839308 Jan 30 14:34 apr-devel-1.5.1-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi  77904 Jan 30 14:56 apr-util-1.5.4-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi   7100 Jan 30 14:56 apr-util-dbm-1.5.4-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi 433820 Jan 30 14:56 apr-util-debuginfo-1.5.4-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi 489180 Jan 30 14:56 apr-util-devel-1.5.4-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi  12184 Jan 30 14:56 apr-util-freetds-1.5.4-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi   9032 Jan 30 14:56 apr-util-ldap-1.5.4-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi  14872 Jan 30 14:56 apr-util-mysql-1.5.4-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi  11052 Jan 30 14:56 apr-util-nss-1.5.4-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi  20600 Jan 30 14:56 apr-util-odbc-1.5.4-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi  10328 Jan 30 14:56 apr-util-openssl-1.5.4-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi  14816 Jan 30 14:56 apr-util-pgsql-1.5.4-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi  11376 Jan 30 14:56 apr-util-sqlite-1.5.4-1.x86_64.rpm
出来上がり!ということで、必要なものをインストールして、再度apacheにチャレンジ。
$ sudo rpm -Uvh ../RPMS/x86_64/apr-util-1.5.4-1.x86_64.rpm ../RPMS/x86_64/apr-util-devel-1.5.4-1.x86_64.rpm
$ sudo yum install zlib-devel libselinux-devel libuuid-devel pcre-devel openldap-devel lua-devel libxml2-devel distcache-devel openssl-devel
・
・
No package distcache-devel available.
・
・
よく見たらdistcache-develがレポジトリにないらしい。
$ cd ~/rpmbuild/SOURCES/
$ wget http://ftp.riken.jp/Linux/fedora/releases/18/Everything/source/SRPMS/d/distcache-1.4.5-23.src.rpm
$ rpmbuild --clean --rebuild ~/rpmbuild/SOURCES/distcache-1.4.5-23.src.rpm
$ ll ~/rpmbuild/RPMS/x86_64/distcache-*

・
・
rw-rw-r-- 1 hayashi hayashi 114528 Jan 30 15:51 distcache-1.4.5-23.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi 197836 Jan 30 15:51 distcache-debuginfo-1.4.5-23.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi  59216 Jan 30 15:51 distcache-devel-1.4.5-23.x86_64.rpm

$ sudo rpm -ivh ~/rpmbuild/RPMS/x86_64/distcache-1.4.5-23.x86_64.rpm ~/rpmbuild/RPMS/x86_64/distcache-devel-1.4.5-23.x86_64.rpm

$ rpmbuild --clean -tb ~/rpmbuild/SOURCES/httpd-2.4.12-1.src/httpd-2.4.12.tar.bz2

$ ll ~/rpmbuild/RPMS/x86_64/

・
・
-rw-rw-r-- 1 hayashi hayashi 1165260 Jan 30 15:57 httpd-2.4.12-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi 3448912 Jan 30 15:57 httpd-debuginfo-2.4.12-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi  188052 Jan 30 15:57 httpd-devel-2.4.12-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi 3320124 Jan 30 15:57 httpd-manual-2.4.12-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi   69988 Jan 30 15:57 httpd-tools-2.4.12-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi   44376 Jan 30 15:57 mod_authnz_ldap-2.4.12-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi   43448 Jan 30 15:57 mod_lua-2.4.12-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi   22308 Jan 30 15:57 mod_proxy_html-2.4.12-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi    5648 Jan 30 15:57 mod_socache_dc-2.4.12-1.x86_64.rpm
-rw-rw-r-- 1 hayashi hayashi   81724 Jan 30 15:57 mod_ssl-2.4.12-1.x86_64.rpm

ようやくできました!でインストールをしてみます。
$ rpm -ivh  ~/rpmbuild/RPMS/x86_64/httpd-2.4.12-1.x86_64.rpm

error: Failed dependencies:
        /etc/mime.types is needed by httpd-2.4.12-1.x86_64
まだあったか・・
$ yum provides /etc/mime.types

Loaded plugins: fastestmirror, versionlock
Determining fastest mirrors
 * base: www.ftp.ne.jp
 * epel: ftp.kddilabs.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
mailcap-2.1.31-2.el6.noarch : Helper application and MIME type associations for file types
Repo        : base
Matched from:
Filename    : /etc/mime.types

$ sudo yum install mailcap

$ rpm -ivh  ~/rpmbuild/RPMS/x86_64/httpd-2.4.12-1.x86_64.rpm

できました!最後にwordpressでphpということもあり、以下の対応をする。
MPMの変更
phpの場合は、2.4から標準のeventや、workerだと挙動が不安定になる(threadsafeではない)ため、preworkで変更 ⇒2.4からはmod_proxy_fcgiを使うことでeventでも問題ない?(ここ
#LoadModule mpm_event_module lib64/httpd/modules/mod_mpm_event.so
LoadModule mpm_prefork_module lib64/httpd/modules/mod_mpm_prefork.so
$ sudo service httpd start
$ /usr/sbin/apachectl -V

Server version: Apache/2.4.12 (Unix)
Server built:   Jan 30 2015 15:55:16
Server's Module Magic Number: 20120211:41
Server loaded:  APR 1.5.1, APR-UTIL 1.5.4
Compiled using: APR 1.5.1, APR-UTIL 1.5.4
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/usr"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="/var/run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/etc/httpd/conf/mime.types"
 -D SERVER_CONFIG_FILE="/etc/httpd/conf/httpd.conf"
お~。次はphp。

2015年1月18日日曜日

Windows8.1でSentToに表示

不便です。Windows8では以前簡単にできていたSendToのフォルダへのアプリケーションの追加が、簡単にできなくなった。 で登録の仕方です。 Windows8.1でエクスプローラーの「送る」に追加したい場合は、  C:\Users\ユーザ名\AppData\Roaming\Microsoft\Windows\SendTo にショートカットを作ればよい。簡単に開くには「ファイル名を指定して実行」から」に「shell:sendto」と入力でいける。

2015年1月6日火曜日

modsecurityのIISプラグインがあるという話

Apacheで使うことがあるModSecurityがIISのExtensinoで提供されている。 今度試してみよう。 http://blogs.technet.com/b/srd/archive/2012/07/26/announcing-the-availability-of-modsecurity-extension-for-iis.aspx http://sourceforge.net/projects/mod-security/

2014年12月13日土曜日

centos6.5にcactiを入れてみる

cactiの設定をいじる必要が出てきたので、勉強がてら構築してみる。

■環境は以下の通り
 ・Cactiサーバー
   OS:CentOS 6.5 on vagrant(Windows8.1)
   Cacti:0.8.8c
   host:cacti1
   IP:192.168.0.76

 ・監視対象
   OS:Windows2012 R2
   監視方式はsnmp
   host:w2k12
   ip:192.168.0.70


1.cactiのインストール
1.1 必要パッケージのインストール
$ yum install -y httpd php php-mysql php-snmp php-xml mysql mysql-server net-snmp rrdtool
1.2 phpの設定
#外部コマンドを実行するためsafe_modeをOFFにする
safe_mode = Off

#タイムゾーンを合わせる
date.timezone = "Asia/Tokyo"

#TemplateがImportできるようにする
file_uploads = On

#インストール手順にはずしたほうがよいと・・
;session.save_path = "/var/lib/php/session"
1.3 Apacheの設定
#以下の設定になっていることを確認する

LoadModule php5_module modules/libphp5.so

AddHandler php5-script .php
AddType text/html .php

DirectoryIndex index.php

# Cacti - the complete rrdtool-based graphing solution
#
# Allows only localhost by default
#
# Allowing cacti to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

# Make sure, that httpd can read your cacti directories.
# At minimum, you need
#    chmod ugo+r -R /your/cacti/dir
# Make sure to replace with your directories

# When using SELinux, set the following:
#    chcon -R -h -t httpd_sys_content_t /your/cacti/dir
# when using SELinux and you private homedir, enable
#    setsebool -P httpd_enable_homedirs 1
#    setsebool -P httpd_read_user_content 1

Alias /cacti /var/www/html/cacti

   AllowOverride None
   Order Deny,Allow
   Deny from all
   Allow from 127.0.0.1
   Allow from 192.168.0.0/24
   Allow from ::1
   Options Indexes Includes FollowSymLinks

# These directories do not require access over HTTP
#

    Order Deny,Allow
    Deny from All
    Allow from None


1.4 MySQLの設定
$ sudo service mysqld start
$ sudo chkconfig mysqld on
$ /usr/bin/mysqladmin -u root password 'new-password'
$ /usr/bin/mysqladmin -u root -h cacti1.hayachi617.jp password 'new-password'
$ sudo /usr/bin/mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!


In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...



All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!

$ mysqladmin --user=root --password reload
Enter password:

1.5 snmpの設定
snmp-netで構築してみる(spiderは別途)
$ yum install -y net-snmp net-snmp-libs net-snmp-utils
以下の設定を追加
rocommunity public
$ sudo service snmpd start

#稼働確認

$ snmpwalk -v 1 -c public localhost .1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0 = STRING: Linux cacti1.hayachi617.jp 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64
1.6 cactiの設定
まずはモジュールの入手
$ cd /var/www/html/
$ sudo wget http://www.cacti.net/downloads/cacti-0.8.8c.tar.gz
$ sudo tar xvfz cacti-0.8.8c.tar.gz
つぎにMySQLへの設定です。
$ cd cacti-0.8.8c
$ mysql cacti --user=root -p < cacti.sql
$ mysql --user=root mysql -p

mysql> GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'cactiuser';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

$ sudo useradd cactiuser
$ sudo chown -R cactiuser rra/ log/
$ sudo chmod ugo+r -R /var/www/html/cacti
$ sudo su - cactiuser 
$ crontab -e 

*/5 * * * * /usr/bin/php /var/www/html/cacti/poller.php > /dev/null 2>&1

$ sudo cd ..
$ sudo ln -s cacti-0.8.8c /var/www/html/cacti
$ sudo chkconfig httpd on
$ sudo chkconfig snmpd on
$ sudo service httpd start

ここで、端末からブラウザでアクセスしてみる http://192.168.0.76/cacti




最後にパッチが出ていれば適用する http://www.cacti.net/download_patches.php 今時点では出ていませんでした(14/12/13) 2.Windowsサーバーのセットアップ