モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

目次目次を開く/閉じる

SmokePing のインストール手順と基本設定

モーダルを閉じる

ステッカーを選択してください

お支払い手続きへ
モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2015/04/25
最終更新最終更新
2021/09/07
記事区分記事区分
一般公開

目次

    TypeScript、Go、Pythonが使えます。最近の興味は生成AI

    SmokePing はネットワーク遅延を可視化する Web ツールです。インストール手順と基本設定をまとめます。特に CentOS 6 を使用する場合について記述していますが、基本的な流れや考え方は他の OS でも同じです。

    インストール手順

    plenv 関連のインストール

    plenv を利用すると perl およびモジュールのバージョンをプロジェクト内で固定できます。これはとても重要なことで、あるメンバーのマシンでは動作して別のマシンでは動作しないといった事態を回避できます。ここでは plenv をシステムインストールして perl v5.20.0 をインストールすることにしてみます。

    plenv のインストール

    $ sudo git clone https://github.com/tokuhirom/plenv.git /usr/local/plenv
    $ sudo git clone https://github.com/tokuhirom/Perl-Build.git /usr/local/plenv/plugins/perl-build
    $ sudo mkdir /usr/local/plenv/shims
    $ sudo mkdir /usr/local/plenv/versions
    $ sudo vi /etc/profile.d/plenv.sh  (↓のように編集します)
    $ source /etc/profile.d/plenv.sh
    

    /etc/profile.d/plenv.sh

    export PLENV_ROOT=/usr/local/plenv
    export PATH=$PLENV_ROOT/bin:$PATH
    eval "$(plenv init -)"
    

    必要なソフトウェアのインストール

    $ sudo yum install gcc
    $ sudo yum install openssl-devel
    $ sudo yum install patch
    $ sudo yum install readline-devel
    

    plenv を用いた perl 関連のインストール

    perl

    $ sudo su -l
    # plenv install 5.20.0
    # plenv rehash
    # plenv global 5.20.0
    # exit
    

    cpanm

    $ sudo su -l
    # plenv install-cpanm
    # plenv which cpanm
    # exit
    

    carton

    $ sudo su -l
    # plenv exec cpanm Carton
    # plenv rehash
    # exit
    

    SmokePing のダウンロードおよび解凍

    こちらから最新のものをダウンロードします。今回は smokeping-2.6.11.tar.gz をダウンロードして使用しています。

    $ cd /path/to/somewhere
    $ tar zxvf smokeping-2.6.11.tar.gz
    $ cd smokeping-2.6.11
    

    SmokePing が依存する Perl モジュール一覧を確認します。

    $ cat PERL_MODULES
    FCGI
    CGI
    CGI::Fast
    Config::Grammar
    Digest::HMAC_MD5
    Net::Telnet
    Net::OpenSSH
    Net::SNMP
    Net::LDAP
    Net::DNS
    IO::Pty
    LWP
    

    carton による perl モジュールのインストール

    carton で perl モジュールをローカルインストールします。まず plenv local によって perl のバージョンを固定します。

    $ plenv local 5.20.0
    

    .perl-version が作成されたことが確認できます。

    $ cat .perl-version
    5.20.0
    

    先程確認した SmokePing が依存する perl モジュールを carton で使用する cpanfile に記載します。

    $ vi cpanfile
    requires 'FCGI';
    requires 'CGI';
    requires 'CGI::Fast';
    requires 'Config::Grammar';
    requires 'Digest::HMAC_MD5';
    requires 'Net::Telnet';
    requires 'Net::OpenSSH';
    requires 'Net::SNMP';
    requires 'Net::LDAP';
    requires 'Net::DNS';
    requires 'IO::Pty';
    requires 'LWP';
    

    ローカルディレクトリにインストールします。bundle でキャッシュも作成します。

    $ plenv exec carton install
    $ plenv exec carton bundle
    

    インストールされたことが確認できます。

    $ ls local/
    $ ls vendor/cache/
    

    RRDtool のインストール

    SmokePing は RRDtool というデータのグラフ化システムに依存しています。RRDtool 本体および perl の RRDtool モジュールをインストールする必要があります。

    注意

    RPM を用いて以下のようにすることで一見インストールできたように思います。

    $ sudo yum install rrdtool  ← 今回は不要!
    $ sudo yum install rrdtool-devel  ← 今回は不要!
    $ sudo yum install rrdtool-perl  ← 今回は不要!
    

    しかしながら、この方法だと system perl にインストールされてしまいます。

    $ rpm -ql rrdtool-perl
    /usr/lib64/perl5/vendor_perl/RRDp.pm
    /usr/lib64/perl5/vendor_perl/RRDs.pm
    /usr/lib64/perl5/vendor_perl/auto/RRDs
    /usr/lib64/perl5/vendor_perl/auto/RRDs/RRDs.so
    /usr/share/doc/rrdtool-perl-1.3.8
    /usr/share/doc/rrdtool-perl-1.3.8/html
    /usr/share/doc/rrdtool-perl-1.3.8/html/RRDp.html
    /usr/share/doc/rrdtool-perl-1.3.8/html/RRDs.html
    /usr/share/man/man3/RRDp.3pm.gz
    /usr/share/man/man3/RRDs.3pm.gz
    
    $ sudo su -l
    # plenv global system
    # exit
    $ plenv exec perldoc RRDs
    

    plenv で用意した perl からは利用できません。

    $ sudo su -l
    # plenv global 5.20.0
    # exit
    $ plenv exec perldoc RRDs
    No documentation found for "RRDs".
    

    ソースコードからインストール

    plenv でインストールした perl に対して RRDtool をインストールする方法としては、現在のところソースコードからインストールするのが一番簡単です。こちらからソースコードをダウンロードして解凍します。今回は rrdtool-1.4.9.tar.gz を選択しています。

    $ cd /path/to/somewhere
    $ tar zxvf rrdtool-1.4.9.tar.gz
    $ cd rrdtool-1.4.9
    

    必要なソフトウェアをインストールします。

    $ sudo yum install libxml2
    $ sudo yum install libxml2-devel
    $ sudo yum install pango
    $ sudo yum install pango-devel
    $ sudo yum install liberation-sans-fonts  ← グラフの豆腐化対策です。必ずしもこのフォントでなくてもよいです。
    

    ビルドを実行します。インストールしたい Perl の Version (今回は 5.20.0) が出力されることを確認します。

    $ ./configure --disable-tcl --disable-lua --disable-python --disable-ruby \
    --with-perl-options='INSTALLDIRS="site"' --prefix=/opt/rrdtool-perl5.20.0
    ...
    Config is DONE!
    ...
        Perl Version: 5.20.0   ← ★
        Perl Options: INSTALLDIRS="site"
    ...
    $ make
    

    plenv で global 指定した perl に RRDtool を扱うためのモジュールをインストールします。

    $ sudo make install
    $ ls /opt/rrdtool-perl5.20.0
    

    確かに RRDs モジュールがインストールされました。

    $ plenv version
    5.20.0 (set by /usr/local/plenv/version)
    $ plenv exec perldoc RRDs
    

    SmokePing のインストール

    先程解凍したディレクトリに戻ります。

    $ cd /path/to/somewhere/smokeping-2.6.11
    

    以下のコマンドでインストールします。

    $ plenv exec carton exec ./configure --prefix=/opt/smokeping-perl5.20.0
    $ sudo make install
    $ ls /opt/smokeping-perl5.20.0
    

    carton による perl モジュールのインストール (再び)

    /opt/smokeping-perl5.20.0 にも perl モジュールをインストールします。

    $ cd /path/to/somewhere/smokeping-2.6.11
    $ sudo cp cpanfile cpanfile.snapshot .perl-version /opt/smokeping-perl5.20.0/
    $ sudo mkdir /opt/smokeping-perl5.20.0/vendor
    $ sudo cp -r vendor/cache /opt/smokeping-perl5.20.0/vendor/
    $ sudo su
    # cd /opt/smokeping-perl5.20.0
    # plenv exec carton install --deployment --cached
    # exit
    

    fping のインストール

    SmokePing は fping に依存しているためインストールします。epel レポジトリに格納されています。

    $ sudo yum install epel-release
    $ sudo yum install fping
    

    nginx のインストール

    CGI を動作させることができるウェブサーバをインストールします。Apache でもよいですが nginx を利用する場合は以下のようにします。CentOS 6 の場合は fping と同様に epel レポジトリで提供されています。

    $ sudo yum install epel-release
    $ sudo yum install nginx
    

    基本設定

    動作させるために必要な最低限の設定は以下の通りです。

    $ cd /opt/smokeping-perl5.20.0
    $ sudo cp etc/config.dist etc/config
    $ sudo mkdir cache data var
    $ sudo chmod 777 cache data var
    $ sudo chmod o-r etc/smokeping_secrets.dist
    

    以下のコマンドがエラーなく実行されることを確認します。

    $ plenv exec carton exec ./bin/smokeping --config=/opt/smokeping-perl5.20.0/etc/config --debug
    

    実際にデーモンを起動するためには以下のようにします。

    $ plenv exec carton exec ./bin/smokeping --config=/opt/smokeping-perl5.20.0/etc/config --logfile=smoke.log
    

    起動していることが確認できます。

    $ pgrep -l smoke
    11291 ./bin/smokeping
    $ sudo tail /var/log/messages
    ...
    Apr  4 15:43:35 localhost smokeping[11248]: Starting syslog logging
    Apr  4 15:43:35 localhost smokeping[11291]: Smokeping version 2.006011 successfully launched.
    Apr  4 15:43:35 localhost smokeping[11291]: Not entering multiprocess mode for just a single probe.
    Apr  4 15:43:35 localhost smokeping[11291]: FPing: probing 1 targets with step 300 s and offset 16 s.
    

    一旦停止しましょう。

    $ pkill smoke
    

    システムの環境変数の設定

    RRDtool で出力されるグラフの時刻を JST に合わせるため、例えば以下のように環境変数を設定します。一旦ログアウトして再度ログインすると設定が反映されます。なお LANG を ja_JP.UTF-8 とするとグラフの一部が豆腐化する可能性があります。ja_JP.UTF-8 としつつ豆腐化を回避する方法は現在のところ不明です。

    /etc/environment

    export LANG=en_US.UTF-8
    export TZ=Asia/Tokyo
    export S_TIME_DEF_TIME=UTC
    

    PSGI/Plack アプリケーション化

    PSGI (Perl Web Server Gateway Interface) を用いると

    Webサーバ(Apache,nginx等) → インターフェース(CGI,FastCGI,mod_perl等) → Perl CGI スクリプト
    

    という構造が

    Webサーバによるリバースプロキシ(Apache,nginx等) → PSGIサーバ → Perl PSGI アプリケーション
    

    と変化します。PSGI サーバというレイヤーが追加されることによってアプリケーション開発者は PSGI の仕様にさえ準拠していれば CGI, FastCGI, mod_perl 等の差異を意識しなくてもよいというメリットが発生します。Ruby の Rack のようなものです。Web サーバをリバースプロキシとして利用するため負荷分散もできます。Perl PSGI アプリケーションを作成するための便利なフレームワークのようなものが Plack です。SmokePing は CGI および FastCGI に対応した Perl CGI スクリプトを提供していますが、上述のようなメリットを享受するために Plack で Perl PSGI アプリケーション化してみましょう。今回の構成は以下の通りです。

    • Web サーバ: nginx
    • PSGI サーバ: Starman
    • Perl PSGI アプリケーション: Plack を用いて自作

    carton でモジュールの追加インストール

    cpanfile に以下の行を追加します。

    $ cd /opt/smokeping-perl5.20.0
    $ sudo vi cpanfile
    ...
    requires 'Plack', '0.9980';
    requires 'Starman', '0.2000';
    requires 'CGI::Emulate::PSGI';
    

    インストールを実行します。キャッシュも作成しておきましょう。

    $ sudo su
    # plenv exec carton install
    # plenv exec carton bundle
    # exit
    

    Perl PSGI アプリケーションの作成

    以下のファイルを作成するだけです。

    $ sudo vi app.psgi
    

    app.psgi

    #!/usr/local/plenv/versions/5.20.0/bin/perl
    use strict;
    use warnings;
    use lib '/opt/smokeping-perl5.20.0/lib';
    
    use CGI::Emulate::PSGI;
    
    my $app = CGI::Emulate::PSGI->handler(sub {
        use CGI;
        use Smokeping;
        CGI::initialize_globals();
        my $cfg = "/opt/smokeping-perl5.20.0/etc/config";
        my $q = CGI->new;
        Smokeping::cgi($cfg, $q);
    });
    

    動作検証

    $ plenv exec carton exec starman -p 8080 app.psgi
    $ curl http://127.0.0.1:8080/  ←別ターミナルなどで実行
    

    PSGI/Plack アプリケーションをデーモンとして実行

    Perl PSGI アプリケーションを起動します。

    $ sudo su
    # plenv exec carton exec starman -p 8080 \
    --access-log /opt/smokeping-perl5.20.0/var/access_log \
    --error-log /opt/smokeping-perl5.20.0/var/error_log \
    --user nobody --group nobody --daemonize app.psgi
    # exit
    

    オプションの意味は以下のコマンドで確認できます。

    $ plenv exec carton exec perldoc starman
    

    例えばログファイルを以下のディレクトリに作成するように指示しています。

    $ tail /opt/smokeping-perl5.20.0/var/access_log
    $ tail /opt/smokeping-perl5.20.0/var/error_log
    

    SmokePing 本体をデーモンとして実行

    ここまでの手順では PSGI/Plack アプリケーションをデーモンとして実行しただけです。グラフ表示するためのデータが入手できていません。

    $ curl -s http://127.0.0.1:8080/?target=_charts | grep Waiting
    <P><h1>The most interesting destinations</h1><p>Waiting for initial data ...</p></P>
    

    以下のコマンドを実行すれば情報収集用のデーモンが稼動し始めます。

    $ sudo su
    # plenv exec carton exec ./bin/smokeping --config=/opt/smokeping-perl5.20.0/etc/config \
    --logfile=/opt/smokeping-perl5.20.0/var/smoke.log
    # exit
    

    補足

    /opt/smokeping-perl5.20.0/var/error_log に以下のようなエラーが出力されることがあります。

    Pango-WARNING **: failed to choose a font, expect ugly output.

    cache ディレクトリの中に生成されたグラフを見てみると、フォントがうまく選択されておらず四角の白ブロック化 (いわゆる豆腐化) してしまっています。本ページ上部に記載したように、例えば以下のフォントをインストールすることで回避できます。

    $ sudo yum install liberation-sans-fonts
    

    nginx のリバースプロキシ設定

    負荷分散などを目的としてリバースプロキシを設定します。静的ファイルはプロキシせずに直接返します。例えば PSGI/Plack アプリケーションだけの状態では /cache の画像や /cropper の JavaScript にアクセスできませんでした。これらを返すように設定します。nginx の設定ファイルを以下のように書き換えます。

    $ sudo vi /etc/nginx/nginx.conf
    

    /etc/nginx/nginx.conf

    user nginx;
    worker_processes 1;
    
    error_log /var/log/nginx/error.log;
    pid /var/run/nginx.pid;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        sendfile on;
        keepalive_timeout 65;
        access_log /var/log/nginx/access.log combined;
        server {
            listen 80 default_server;
            location / {
                proxy_pass  http://127.0.0.1:8080/;
            }
            location /cache {
                root /opt/smokeping-perl5.20.0;
            }
            location /cropper {
                root /opt/smokeping-perl5.20.0/htdocs;
            }
        }
    }
    

    サービスを再起動します。

    $ sudo service nginx restart
    

    ブラウザなどから http://127.0.0.1/ など 80 番ポートにアクセスしてみましょう。正常に設定されていれば以下のようにページが表示されます。グラフの読み方はこちらをご参照ください。

    SmokePing の設定をカスタマイズ

    /opt/smokeping-perl5.20.0/etc/ を編集します。

    Likeボタン(off)0
    詳細設定を開く/閉じる
    アカウント プロフィール画像

    TypeScript、Go、Pythonが使えます。最近の興味は生成AI

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    >>さらに詳しくステッカーを贈る
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      ログインする

      関連記事

      • 使い所が難しいマイナーな運用コマンド
        コマンドのエイリアスを登録する (update-alternatives) mybin という名前のコマンドを登録 sudo update-alternatives --install /usr/local/bin/mybin mybin /usr/bin/echo 10 sudo update-alternatives --install /usr/local/bin/mybin mybin /...
        けんちゃんけんちゃん11/1/2022に更新
        いいねアイコン画像0
      • ipコマンドの基本的な使い方
        ネットワーク関連のコマンドはたくさんあります。しかしながら、その一部は ip コマンドに集約できます。 基本形 ("man ip" より抜粋) $ ip OBJECT COMMAND OBJECT: link, neigh, addr, route (等) COMMAND: show, add, delete (等) データリンク層のネットワークデバイス情報 (ifconfigコマンドの代用) M...
        こもれびさんこもれびさん2/8/2017に更新
        いいねアイコン画像0
      • プロセス関連のコマンド
        サムネイル画像-7b5901f600
        プロセスID関連 (ps, pgrep, pkill) 全プロセスを表示するためには $ ps ax とすればよく、その表示を見やすくするためには "u" と "w" を追加して $ ps auxw とすればよいです。表示件数自体は同じです。そのうち特定のコマンドのプロセスIDだけを表示したい場合は $ ps ax | grep 'my_script' | grep -v grep | awk '...
        kenken11/27/2021に更新
        いいねアイコン画像0
      • rpmとyumのチートシート
        サムネイル画像-f69c6665b8
        rpm (RedHat Package Manager または RPM Package Manager) はRedHat系のパッケージ管理ツールで、yum (Yellowdog Updater Modified) は内部的にrpmを実行するメタパッケージ管理ツールです。rpmには柔軟性がありyumには利便性があります。 rpmは "rpmパッケージファイル" があれば何でもインストールできますが、...
        まるたんまるたん2/2/2022に更新
        いいねアイコン画像0
      • メモリおよびディスクリソースを調査するために便利なコマンドおよび周辺知識
        メモリ使用量を表示 (free) 既定ではキロバイト単位で表示されます。オプション "-b", "-k", "-m", "-g" を付与して実行するとそれぞれバイト、キロ、メガ、ギガで表示されます。 $ free total used free shared buffers cached Mem: 510824 ...
        しおまめしおまめ8/30/2017に更新
        いいねアイコン画像0