パッケージインストールとソースインストールの違い

こんにちは。
前回phpをパッケージインストールしたのですが、パッケージインストールとソースインストールの明確な違いを理解していなかったので、調べてみました。
前職では、ほぼWindowsServerしか触ったことなかったので、Linuxの基礎から学びます。

目次

  1. パッケージインストールとソースインストールとは
  2. パッケージインストールとソースインストールのメリット、デメリット

1. パッケージインストールとソースインストールとは

そもそもパッケージインストールとソースインストールの違いがわかってなかったので、調べてみた。 わかりやすく解説しているサイトがあったので、引用。
インストール方法の違い

  • パッケージインストール

パッケージを利用する方法は既に利用する環境に合わせてコンパイルされているものをインストールする方法です. この方法の多くはパッケージ管理ツールと言うものを利用し, インストールするソフトウェアが必要としている別のソフトウェアなどがインストールされているかという確認を行ってくれてます. また管理ツールを利用するとインストールしたソフトウェアの環境を管理してくれますのでアンインストールなども容易で, 関連するファイルも全て処理してくれます.

利用する環境に合わせてコンパイルされているものがrpmパッケージですね。 導入するOSによってrpmパッケージがわかれているのは、環境に合わせてすでにコンパイルされているのが理由だったのですね。

  • ソースインストール

 ソースからコンパイルする方法はソフトウェアのプログラムを自分のコンピュータでコンパイルする方法で, 利用環境にあった動作を行う実行ファイルを作成できます. この方法はほとんどの UNIX系の OS で共通にインストールできる方法です. ただし, コンパイルするための環境がコンピュータに用意しておく必要があり, インストールされたファイルは各自で管理しなければいけません.

パッケージのようにすでにコンパイルされているわけではないので、自分でコンパイルする必要があるのですね。
パッケージ化されていないソフトのインストールはソースインストールする必要がありそう。
ソースインストールは、ファイルを自分で管理しないといけないので、アップデートやアンインストールをするときに手間がかかりそう。依存関係も意識しないといけないので、レベル高め。

2.パッケージインストールとソースインストールのメリット、デメリッ

それぞれのメリット、デメリットも抑えたほうが良さそうなので、調べてみた。

メリット デメリット
ソースインストール インストールオプションを指定できる。最新版が利用できる。インストールディレクトリを変更できる(複数バージョンを混在させられる)。 インストールに時間がかかる。エラー時にソースやライブラリアンに関する知識が要求される。
パッケージインストール 手軽にインストールできる。依存関係のパッケージも自動的にインストールしてくれる。 最新版が使えない。インストールオプションが指定できない。

複数のバージョンを使い分ける時は、ソースインストールしないといけないのか。いろいろ調べてみたけど、ソースインストールは上級者向けの印象。
最新版をインストールできないとか問題もあるけど、ソースインストールするとアンインストールもままならないので、できることならパッケージインストールのほうがいいのかな。
安定版のバージョンを使うレベルで良いなら、パッケージインストールで事足りるはず。

以上となります。
ご指摘事項がありましたら、ご連絡お願いします。
もっと詳しく知りたい場合は、参考をご参照ください。

参考

参考にさせていただきました。

LinuxにPHPをインストールする方法は大きく2通りあると思います… - 人力検索はてな
http://cai.cs.shinshu-u.ac.jp/sugsi/Lecture/linux/h_08-03.html
yumとソースインストールのメリット・デメリット [遊びとお勉強の村]

【AWS】AmazonLinuxにPHP5.1を導入してみた【メモ】

こんにちは。
必要になるかわかりませんが、AmazonLinuxにphp5.1を入れる機会があったので、メモを残しておきます。
ソースからコンパイルしているわけではなく、RPMからごりごりパッケージインストールしているので、正常に動作しない可能性があります。
インストールは自己責任でお願いします。

環境

構築手順

1. php関係ファイルダウンロード

wget http://ftp.riken.jp/Linux/centos/5/updates/x86_64/RPMS/php-5.1.6-45.el5_11.x86_64.rpm 
wget http://ftp.riken.jp/Linux/centos/5/updates/x86_64/RPMS/php-cli-5.1.6-45.el5_11.x86_64.rpm 
wget http://ftp.riken.jp/Linux/centos/5/updates/x86_64/RPMS/php-common-5.1.6-45.el5_11.x86_64.rpm 
wget http://ftp.riken.jp/Linux/centos/5/updates/x86_64/RPMS/php-gd-5.1.6-45.el5_11.x86_64.rpm 
wget http://ftp.riken.jp/Linux/centos/5/updates/x86_64/RPMS/php-mbstring-5.1.6-45.el5_11.x86_64.rpm 
wget http://ftp.riken.jp/Linux/centos/5/updates/x86_64/RPMS/php-xml-5.1.6-45.el5_11.x86_64.rpm 
wget http://ftp.riken.jp/Linux/centos/5/updates/x86_64/RPMS/php-pdo-5.1.6-45.el5_11.x86_64.rpm 
wget http://ftp.riken.jp/Linux/centos/5/updates/x86_64/RPMS/php-devel-5.1.6-45.el5_11.x86_64.rpm 
wget http://ftp.riken.jp/Linux/centos/5/updates/x86_64/RPMS/php-mysql-5.1.6-45.el5_11.x86_64.rpm
wget ftp://rpmfind.net/linux/remi/enterprise/5/remi/x86_64/compat-libcurl3-7.15.5-3.el5.remi.x86_64.rpm
wget http://dl.iuscommunity.org/pub/ius/stable/CentOS/5/x86_64/mysqlclient15-5.0.92-3.ius.centos5.x86_64.rpm

2.phpインストールに必要なモジュールインストール

#yum install -y libcrypto.so.6 libssl.so.6 openssl098e-0.9.8e
#rpm -Uvh compat-libcurl3-7.15.5-3.el5.remi.x86_64.rpm

3.LAMP構成でMysqlを使う場合は、Mysqlクライアントを導入

# yum install -y libpcap
# rpm -Uvh mysqlclient15-5.0.92-3.ius.centos5.x86_64.rpm

4.phpインストール

# yum localinstall -y php-5.1.6-45.el5_11.x86_64.rpm php-devel-5.1.6-45.el5_11.x86_64.rpm php-cli-5.1.6-45.el5_11.x86_64.rpm php-common-5.1.6-45.el5_11.x86_64.rpm php-pdo-5.1.6-45.el5_11.x86_64.rpm
# yum localinstall -y php-xml-5.1.6-45.el5_11.x86_64.rpm php-gd-5.1.6-45.el5_11.x86_64.rpm php-mbstring-5.1.6-45.el5_11.x86_64.rpm php-mysql-5.1.6-45.el5_11.x86_64.rpm

5.バージョン確認

#php -v
PHP 5.1.6 (cli) (built: Nov  6 2014 12:25:07) 
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies

【AWS】lanbda実行エラー 備忘録 【lambda】

lambdaがいつの間にか発火しなくなっていた時のエラー対処方の備忘録。

エラーログ

Syntax error in module 'lambda_function': Non-ASCII character '\xe6' in file /var/task/lambda_function.py on line 75, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details (lambda_function.py, line 75)

f:id:ykoomaru:20160914231219p:plain

解決法

エラーログにも書いてあるのですが、ASCII以外の文字列が入っているため、エラーでこけていたよう。

lambdaの先頭に以下の行を追加し、文字コードutf-8に変更したら無事発火するようになりました。

# coding:utf-8

余談

なぜいきなりlambdaが発火しなくなったのか謎。 cloudwatchlogsを追って見ても、あるタイミングから発火しなくなっている模様。 コードにマルチバイト文字なんて使ってないんだけどな...

作業のタイミングで触ってしまったのかもしれない。 こんな時のために、検証アカウントでも、AWS Config入れといたほうが堅実なのかもしれない。

qiita.com

【AWS】 カスタムメトリクスを使ったプロセス監視(Windows編) 【Cloudwatch】

こんにちは。

以前カスタムメトリクスを使ってLinuxのプロセス監視を行うブログを書いたのですが、今回Windowsで同様のことをやってみたいと思います。 

  Linux編はこちら。 qiita.com

環境

  • WindowsServer2012R2 (ami-281ad849)
  • AWS CLI (ver 1.10.63)

目次

  1. IAMロール作成
  2. batファイル作成
  3. テスト

作業

1. IAMロール作成(AWSコンソール作業)

まず、インスタンスにアタッチするIAMロールを作成します。 ポリシーは PutMetoricDataのみ許可します。

IAMポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

上記ポリシーを持ったIAMロールを作成し、WIndowsServer起動時に、アタッチします。

2. batファイル作成(WindowsServer作業)

WIndowsServerを起動したら、プロセスの状態をCloudWatchにPutするバッチを作成します。 今回AWSCLIのインストール手順は割愛します。必要であればクラメソさんの記事を参照ください。

Windows Server への AWS CLIのインストール | Developers.IO

監視するプロセスは、特になんでもいいのですが、W32Time にしてみました。 スクリプト内容を記載していますので、コピー&ペーストでbatファイルを作成してください。

スクリプト概要

  • for分でメタデータより、incetanceidを変数(incetanceid)に格納
  • sc query コマンドで、プロセスの状態がRUNNINGかどうか確認
  • sc query コマンドの返り値を確認
  • 返り値が1(プロセスが起動中)ならば、変数(Processes)に1を格納
  • 返り値が0(プロセス起動中以外)ならば、変数(Processes)に0を格納
  • 格納した変数をもとに、CloudWatchにデータをPUT

スクリプト

@echo off

for /f "usebackq tokens=*" %%a in (`PowerShell.exe -Command invoke-restmethod -uri http://169.254.169.254/latest/meta-data/instance-id`) do @set incetanceid=%%a

sc query W32Time | findstr STATE | findstr RUNNING > null
if %errorlevel% == 0 (
set Processes=1
) else (
set Processes=0
)

aws cloudwatch put-metric-data --metric-name "W32Time" --namespace "System/Windows" --region ap-northeast-1 --value %Processes%  --unit "Count" --dimensions "InstanceId=%incetanceid%"

3. テスト

最後にスクリプトのテストをします。

  • W32Timeプロセスが起動している場合(1を返す)

f:id:ykoomaru:20160911124317p:plain

  • W32Timeプロセスが停止している場合(0を返す)

f:id:ykoomaru:20160911125647p:plain

あとは、タスクマネージャーにスクリプトを仕込んで定期実行すれば、プロセスの監視ができますね。

プロセスが停止している場合にアラートを上げる設定は、カスタムメトリクスの値をトリガーにCloudWatchの設定をしてください。

以上となります。 ご指摘事項がありましたら、ご連絡お願いします。

参考

http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html

【AWS】カスタムメトリクスを使ったプロセス監視(Linux編)【CloudWatch】 - Qiita

put-metric-data — AWS CLI 1.10.66 Command Reference

botkit を使ってslackbotを作ってみた

こんにちは。

ブログ書くのが久しぶりになってしまいました。(書かねば..

唐突ですが、最近社内向けコミュニケーションツール slack が流行っていますよね。
slackは、APIを公開いていて、外部ツールとの連携ができるので、かなり自由度があるサービスです。
botの作成をすることもできるのですが、一から作るにはコードあんまり書かない私には若干ハードル高めです...

そこで、Botkit というBotを作るためのフレームワークがSlack App Directoryで公開されていたので、それを使ってslackbotを簡単に作ってみました。

環境

OS X EI Capitan(10.11.3)
・npm v0.12.4
・node v0.12.4
# botkitはNode.jsを利用するので必要となります。

目次

  1. slackでの下準備
  2. botkitのダウンロード、インストール
  3. botの起動
  4. botを少しいじる
  5. 感想

作業

1. slackでの下準備

まず、slack上でslackbot作成に必要な作業を行います。

  1. Slackのチーム画面を開き、[Configure Apps] をクリックします。 f:id:ykoomaru:20160827114249p:plain

  2. 検索窓に [Bots] を検索し、 [Bots] を開きます 。 f:id:ykoomaru:20160827114252p:plain

  3. ロボットの画像の下にある [Add COnfiguration] をクリックします。
    #botを追加すると、[Configurerations] の下に追加されていきます。 f:id:ykoomaru:20160827114254p:plain

  4. bot名入力し、[Add bot integration] をクリックします。
    #名前は愛着がわく名前がいいですね(`・ω・´) f:id:ykoomaru:20160827114258p:plain

  5. botkitを起動するのに利用するので、[API Token] の値をメモします。 f:id:ykoomaru:20160827114301p:plain

  6. bot を作成するとDMにbotが追加されています。(名前はmaruにしました)
    #botを動かし始めればオンライン状態になります
    f:id:ykoomaru:20160827114303p:plain

以上で、slackでの下準備作業は完了です。

2. botkitのダウンロード、インストール

それでは、botkitの本体の作成をします。

  1. botkitを格納したフォルダに移動し、githubからサンプルコードを落とします

    > cd <botkitを格納するフォルダ>
    > git clone https://github.com/howdyai/botkit.git

  2. botkitをいうフォルダができているので、ディレクトリを移します。ファイルの中身はこんな感じです。

    > cd botkit
    > ls
    CONTRIBUTING.md facebook_bot.js readme-twilioipm.md
    Dockerfile lib readme.md
    LICENSE.md package.json slack_bot.js
    changelog.md readme-facebook.md tests
    examples readme-slack.md twilio_ipm_bot.js

  3. nmpでパッケージのインストールをすれば、完了です。 # ネット環境によっては時間がかかるかもしれません

> nmp install

githubは↓です。
GitHub - howdyai/botkit: Botkit is a toolkit for making bot applications

3. botの起動

いよいよbotを起動します! botkit内の slack_bot.js が実行ファイルです。

  1. 1.5でメモした[API Token] の値を指定し、botを起動します。

    token=<API_TOKEN> node slack_bot.js

  2. 起動すると、slack上のオンラインになります。
    f:id:ykoomaru:20160827120651p:plain

  3. あとは、チャンネルに召喚し、デフォルトで用意されている英会話を楽しみましょう f:id:ykoomaru:20160827121214p:plain

  4. slack_bot.js を確認してみると、以下のようなコマンドがデフォルトで入っています f:id:ykoomaru:20160827121502p:plain

これで、botの作成は完了です!
botの作成をするだけならかなり簡単にできます。

4. botを少しいじる

ただ、デフォルトだとあまりにもロボットすぎて愛着が湧かない!! なので、少し設定をいじりました。

f:id:ykoomaru:20160827122112p:plain

slack_bot.jsのデフォルトコマンドを日本語に変えて、botのアイコンを変えただけでこんなにも愛着がわくかわいい子になりました!

感想

slackbotの導入までやってみましたが、次は、AWSAPI使って連携とかをやりたいと思います。
他のサービスと連携できるようにしてからが、本番ですね。
猫ぐうかわ。

参考サイト

参考にさせていただきました。ありがとうございます。

BotkitでSlackのBotを作る方法
Slackの新しいフレームワークBotkitを試してみる - Qiita
Botkit を使って Slack bot を作成してみた - まちいろエンジニアブログ