Firefoxのスクリーンショットで新機能追加

October 19,2017 12:03 AM
Category:[Firefox]
Tag:[Firefox]
Permalink

すでにご存じの方も多いと思いますが、Firefoxのスクリーンショットで新機能が追加されてましたので紹介します。

いつものようにコンテキストメニューの「要素を調査」で開発者用ウィンドウからスクリーンショットを取得しようとしたところ、「スクリーンショットを撮る」というメニューが表示されるようになっていました。

スクリーンショットを撮る

メニューを選択すると、ベータ版でスクリーンショットを撮る機能が新たに提供されましたというイントロダクション。

(クリックで拡大、以下同様)
イントロダクション

必要な部分だけをFirefox上で選択できるようです。

必要な部分だけをFirefox上で選択

スクリーンショットはPCへのダウンロードはもちろんですが、ウェブ上への保存も可能なようです。

ウェブ上への保存も可能

ということで試してみました。

「スクリーンショットを撮る」というメニューを選択すると、全体がオーバーレイされ、「ページをドラッグまたはクリックして範囲を選択してください。ESCキーを押すとキャンセルできます」という文字が表示されます。

スクリーンショットを撮る

マウスでポイントすれば特定範囲の矩形選択ができます。

矩形選択

この状態でクリックすると白抜き表示に変わり、この部分がスクリーンショット対象になります。右下のボタンはあとで説明します。

白抜き表示

任意の範囲をドラッグすれば上と同じように白抜きでキャプチャ範囲が表示されます。

任意の範囲をドラッグ

ドラッグをやめると右下にボタンが3つ表示されます。×はキャンセル、↓はダウンロード、「保存」はウェブ上への保存です。再ドラッグで範囲の変更や、選択範囲全体の移動も可能です。

右下にボタンが3つ

「保存」をクリックするとウェブ上への保存が開始します。ウェブ上には14日間保存されるようです。

ウェブ上への保存開始

保存が完了すると次の画面が表示されます。ここからダウンロードすることも可能です。

保存が完了

ファイル名は「Screenshot-YYYY-MM-DD サイト名.png」となります。

ファイル名

保存が完了画面左上の「自分のショット」のリンクをブックマークしておけば、そこから他のスクリーンショットの一覧にアクセスできます。

スクリーンショットの一覧

今までどおり、開発者ツールからの全体スクリーンショットも可能です。

開発者ツールからの全体スクリーンショット

Comments [0] | Trackbacks [0]

iPhoneをPCに接続して「このデバイス上に新しい画像とビデオが見つかりませんでした。」と表示された場合の対処

October 17,2017 12:03 AM
Category:[iPhone]
Tag:[]
Permalink

iPhoneをPCに接続して「このデバイス上に新しい画像とビデオが見つかりませんでした。」と表示された場合の対処方法について紹介します。

1.問題点

iPhoneで撮った画像をWindowsのPCに取り込むとき、該当デバイスの「Internal Storage」→「DCIM」とフォルダのツリーを開くのですが、ある日、いつものように接続すると「このデバイス上に新しい画像とビデオが見つかりませんでした。」というダイアログが表示されました。

このデバイス上に新しい画像とビデオが見つかりませんでした。

また、エクスプローラーを開いても、「Internal Storage」までしかツリーが開きません。

エクスプローラー

ということで、「このデバイス上に新しい画像とビデオが見つかりませんでした。」と表示された場合の対処方法について紹介します。

2.対処方法

わかればなんてことはないのですが、iPhoneを再起動したあと、再接続することで解決しました。

またiPhoneを接続したときに「このコンピュータを信頼しますか」といったメッセージが出るので、「信頼する」をタップしましょう。

Comments [0] | Trackbacks [0]

reCAPTCHAでコメントスパムや検索スパムを撃退する

October 12,2017 12:03 AM
Category:[Google]
Tag:[reCAPTCHA]
Permalink

reCAPTCHAでコメントスパムや検索スパムを撃退する方法を紹介します。

eCAPTCHAのサイト

1.はじめに

以前reCAPTCHAに関する記事をエントリーしました。

当時は表示された画像や音声の文字を入力する方式でしたが、最近Googleでも利用されているreCAPTCHAはチェックボックスにチェックするだけの簡易なUIになり、各段に使いやすくなっています。

で、以前から当ブログに対する検索スパムがひどいため、これを使って実装してみることにしました。

ちなみに2017年10月現在、このブログの右サイドバーにある検索フィールドに適用しています。

2.reCAPTCHAへのウェブサイト登録

GoogleのreCAPTCHAのサイトへアクセス。

reCAPTCHAのサイト
reCAPTCHAのサイト

右上の「Get reCAPTCHA」をクリック。

eCAPTCHAのサイト

reCAPTCHAの設定画面が表示されます。

(クリックで拡大、以下同様)
reCAPTCHAの設定画面

Labelに任意の文字列(ここでは『小粋空間」)を入力し、「Choose the type of reCAPTCHA」から利用するreCAPTCHA(ここでは「I'm not a robot(私はロボットではありません)」)を選択します。

reCAPTCHAの設定画面

タイプを選択すると、ドメイン設定フィールドが表示されます。

ドメイン設定フィールド

「Domains」に該当のドメインを入力し(複数ドメイン設定する場合は1行につき1ドメイン)、「Accept the reCAPTCHA Terms of Service.(利用規約)」にチェックして「Register」をクリック。

ドメイン設定フィールド

これで登録されました。運用で利用するのは一番上に表示されている「Site key」と「Secret key」です。「Secret key」は外部に知られないよう注意してください。

登録

3.ウェブサイトの実装

head終了タグの前に下記のタグを追加します。

<script src="https://www.google.com/recaptcha/api.js"></script>

reCAPTCHAウィジェットを表示するformタグの最後に、下記のスニペットを追加します。

<div class="g-recaptcha" data-sitekey="[Site key]"></div>

4.サーバサイドの実装

サーバサイドの実装ですが、ウェブサイトにreCAPTCHAのフィールドを追加することで、フォーム送信時に"g-recaptcha-response"というPOSTフィールドが追加されます。

そのフィールドの値と「Secret key」の値および、リモートIPアドレスを下記のURLに追加し、後述するスクリプトなどを使ってリクエストを送信します。

https://www.google.com/recaptcha/api/siteverify

追加例:

https://www.google.com/recaptcha/api/siteverify?secret=[Secret key]&response=[g-recaptcha-responseの内容]&remoteip=[リモートIPアドレス]

このリクエストに対し、下記のレスポンスが返ってくるので、これを判定すればOKです。

{
  "success": true|false,
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
  "hostname": string,         // the hostname of the site where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}

以下、Perlでの実装例で、"success"フィールドのみ判定しています。

#!/usr/bin/perl
 
use strict;
use CGI;
use LWP::UserAgent;
use JSON::Parse;
 
my $secret_key = '[シークレットキー]';
my $url = 'https://www.google.com/recaptcha/api/siteverify';
 
my $cgi = CGI->new();
my $ua = LWP::UserAgent->new();
my $recaptcha_response = $cgi->param('g-recaptcha-response');
my $remote_ip = $ENV{REMOTE_ADDR};
my $response = $ua->post(
    $url,
    {
        remoteip => $remote_ip,
        response => $recaptcha_response,
        secret => $secret_key,
    },
);
if ( $response->is_success() ) {
    my $json = $response->decoded_content();
    my $out = parse_json($json);
    if ( $out->{success} ) {
        # 正常処理
    }
}

5.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

Rloginでポートフォワーディング(トンネリング)する方法

October 10,2017 12:03 AM
Category:[Windows]
Tag:[Windows]
Permalink

Rloginでポートフォワーディング(トンネリング)する方法を紹介します。

1.はじめに

Rloginは、TeraTermのようなターミナルソフトです。

TeraTermでポートフォワーディングをしようと思ったのですが、設定方法がよくわからなかったので、ネットで調べている間にみつけたRloginをWindowsにダウンロードして、ポートフォワーディングを設定したところ、比較的簡単に設定できたので、本エントリーにて紹介したいと思います。

ポートフォワーディングは、

自PC→踏み台サーバ→ローカルネットのサーバ

の条件、またRloginはインストール済の状態で説明します。

2.Rloginでポートフォワーディング(トンネリング)する

Rloginでポートフォワーディングするには、

「ファイル」→「サーバに接続」をクリック。

サーバに接続

「新規」をクリックして踏み台サーバの設定をします。

(クリックで拡大、以下同様)
新規

エントリー(サーバ名)、踏み台サーバのログイン情報(Server Address、User Name、Password)をそれぞれ設定します。

設定

「プロトコル」をクリック。

プロトコル

「ポートフォワード」をクリック。

ポートフォワード

「新規」をクリック。

新規

Listenedから「Local Socks」を選択し、Host Nameに「localost」、Portに任意のポート番号(ここでは1234)を設定して「OK」をクリック。

Local Socks

ポートフォワードの設定が追加されたことを確認して「OK」をクリック。

ポートフォワードの設定

最初の画面で「OK」をクリック。これで踏み台サーバの設定完了です。

設定完了

サーバ選択画面に作成したサーバが表示されます。

サーバが表示

次にローカルネットのサーバの設定を行います。再度「新規」をクリック。

新規

エントリー(サーバ名)、踏み台サーバのログイン情報(Server Address、User Name、Password)をそれぞれ設定します。
「前接続先」にも「踏み台」を選択していますが、コメントなので実際の接続動作には関係ありません。

設定

「Proxy Server」の「設定」をクリック。

Proxy Server

「Select Proxy Protocol」から「SOCK5」を選択し、「Proxy Server Address」と「Socket Port」に、先ほど設定した踏み台サーバ情報の「localost」とポート番号を設定します。

Select Proxy Protocol

最初の画面で「OK」をクリック。これでローカルネットのサーバの設定完了です。

設定完了

サーバ選択画面に作成したローカルネットのサーバが表示されます。

サーバが表示

ローカルネットのサーバに接続するには、サーバ選択画面に表示された「ローカルネットサーバ」を選択して、「OK」をクリック。

サーバに接続

初回接続の場合、公開鍵の確認画面が表示されるので「接続する」をクリック。

接続する

これで接続されました。

接続

この設定であれば、踏み台サーバの設定を、他のローカルネット接続で使うことができます。

3.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

lessでEUCなどが文字化けする場合はlvがおすすめ

October 6,2017 12:03 AM
Category:[Linux]
Tag:[Linux]
Permalink

lessで文字化けする場合はlvがおすすめという記事です。

1.はじめに

Linux上で、EUCのテキストファイルをlessで確認しようとしても文字化けしてみることができません。

TeraTermの設定を変更したり、Linuxの環境変数で、

export LANG=ja_JP.EUC

などを設定しても事象が改善しません。

調べてみたことろ、そもそもの原因はLinuxにデフォルトでバンドルされているlessがUTF-8でしか動かない仕様になっているからのようです。

2.lvのインストール

lvは、クライアントや環境設定の変更など不要で、EUC/Shift_JIS/UTF-8のテキストファイルを閲覧することができるコマンドです。

またキー操作はlessに近いので、戸惑うことなく使うことができると思います。

下記のページからrpmをダウンロード。

RPM resource lv

# rpm -ivh lv-4.51-25.el7.ppc64.rpm
警告: lv-4.51-25.el7.ppc64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID 352c64e5                                    : NOKEY
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:lv-4.51-25.el7                   ################################# [100%]

3.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

mtraceでメモリーリークを検出する方法

October 4,2017 12:03 AM
Category:[C/C++]
Tag:[C/C++]
Permalink

mtraceでメモリーリークを検出する方法を紹介します。

1.はじめに

次のプログラムを書きました。

#include <malloc.h>
 
int main() {
    void *a, *b;
    a = malloc(100);
    b = malloc(100);
    free(a);
    free(b);
}

このプラグラムで次のように"free(a);"を書き忘れた場合、簡単にメモリーリークを検出したいのですが方法が分かりません。

int main() {
    void *a, *b;
    a = malloc(100);
    b = malloc(100);
    free(b);
}

ということで、mtraceを使ってメモリーリークを検出する方法を、順を追って紹介します。

2.プログラム修正

赤色の3行を追加します。

#include <malloc.h>
#include <mcheck.h>
 
int main() {
    mtrace();
    void *a, *b;
    a = malloc(100);
    b = malloc(100);
    free(a);
    free(b);
    muntrace();
}

mtrace()は、malloc, realloc, freeのハンドラを組み込むシステムコールで、muntrace() はこれらのハンドラを解除するシステムコールです。

3.ビルド

"-g"オプションつきでビルドします。

% g++ -g test.cc

4.環境変数の設定

実行前にMALLOC_TRACEを設定します。MALLOC_TRACEは、mtrace() が出力するファイルを指定するための環境変数です。

% export MALLOC_TRACE="/tmp/mtrace.log"

5.実行

これでプログラムを実行します。

% ./a.out

6.実行ログの解析

実行ログの解析はmtraceコマンドで行います。コマンドオプションは次のとおりです。

% mtrace [プログラム名] [ログファイル名]

このmtraceコマンドでメモリーリークを検出できます(一部期待通りに動作していないようですが...)。

% mtrace ./a.out $MALLOC_TRACE
$* is no longer supported at /usr/bin/mtrace line 2.
 
Memory not freed:
-----------------
   Address     Size     Caller
0x01481460     0x64  at ./a.out:[0x4006e7]

「Memory not freed:」の下に表示されているのが、リークしているメモリです。

実際には「Caller」の部分にファイルと行番号が出力されるようですが、リンク先の動的ライブラリがデバグ用のシンボル情報を取得できないため、期待通りに出力されていないようです。

ちなみにメモリリークがない場合、次のように「No memory leaks.」が表示されました。

% mtrace ./a.out $MALLOC_TRACE
$* is no longer supported at /usr/bin/mtrace line 2.
No memory leaks.

mtraceがインストールされていない場合はyumでインストールできるようです。

% yum install glibc-utils

yumが使えない環境であれば、rpmからインストールできます。今回は下記のページからRPMをダウンロードしてインストールしました。

RPM Other mtrace 2.1.3 i386 rpm

rpmコマンドは次の通りです。

% rpm -ivh mtrace-2.1.3-17.i386.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:mtrace-2000102602:2.1.3-17       ################################# [100%]

ちなみに、実行ログは次のようになっているので、mtraceコマンドが使えなくても力技で解析は可能と思われます。

% cat /tmp/mtrace.log
= Start
@ ./a.out:[0x4006e7] + 0x1481460 0x64
@ ./a.out:[0x4006f5] + 0x14814d0 0x64
@ ./a.out:[0x400705] - 0x14814d0
= End

"+"がmalloc、"-"がfreeで、"0x1481460"や"0x14814d0"がアドレスですね。

7.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

C/C++の#if 0とは

October 3,2017 12:03 AM
Category:[C/C++]
Tag:[C/C++]
Permalink

C/C++の"#if 0"について調べてみました。

1.はじめに

既存システムのC++のプログラムに、下記の"#if 0"という記述がありました。

#if 0
    // 処理A
#else
    // 処理B
#endif

ビルドすると、どちらが動作するのか分かりません。

ということで、C/C++の"#if 0"について調べてみました。

2.#if 0とは

まず、"#if"ディレクティブはプリプロセッサの1つで、"#if 0"と書くことで判定結果は常に偽となり、処理Aはコンパイル対象にならないことを意味します。

つまり、前述のプログラムをコンパイルすることで、プリプロセッサでプログラムから処理Aが除外され、

    // 処理B

という部分のみがコンパイル対象になります。

ちなみに、"0"を"1"に書き換えて、

#if 1
    // 処理A
#else
    // 処理B
#endif

とすれば、常に処理Aのみがコンパイル対象になります。

処理Aや処理Bの部分のコード量が多い場合、処理を切り替えるコメントアウト代わりに使えそうです。

Comments [0] | Trackbacks [0]

セブンイレブンのプリンタでスキャンする方法

October 2,2017 12:03 AM
Category:[サービス]
Tag:[Print]
Permalink

セブンイレブンのプリンタでスキャンする方法を紹介します。

1.はじめに

以前、「コンビニで文書や画像をプリントする方法」という記事を書き、ネットプリントでスキャンできることを知り、この記事で操作方法をまとめてみることにしました。

スキャナをとるために必要なものは、スマホまたはUSBメモリです。

ここではUSBメモリを利用したスキャンについて紹介します。

2.ネットプリントでスキャンするる

左側にある「スキャン」をタップ。

スキャン

左側の「USBメモリー」をタップ。

USBメモリー

スキャン使用同意画面になるので「同意する」をタップ。

スキャン使用同意画面

画面上にある機械の静電除去マットに触れて「確認」をタップ。

機械の静電除去マット

USBメモリをセットして「セット確認」をタップ。

USBメモリをセット

USBメモリの容量を確認して問題なければ「確認」をタップ。

USBメモリの容量を確認

スキャンするモード(カラー・白黒)およびサイズを確認し、問題なければ「これで決定」をタップ。原稿はまだセットしなくても大丈夫です。

スキャンするモード(カラー・白黒)およびサイズを確認

ファイルの形式を選択して「これで決定」をタップ。この記事ではPDFを選択します。

ファイルの形式を選択

原稿をセットして「原稿を読み取る」をタップ。お金はまだ入れなくても大丈夫です。

原稿をセット

原稿を読み取っています。

原稿読み取り

スキャンのプレビューを確認して、問題なければ「これで決定」をタップ。この画面で画像を回転させることもできます。

スキャンのプレビュー

続けてスキャンする場合はこの画面で「原稿を読み取る」をタップ。

続けてスキャン

スキャンを終了する場合は「これで決定 読み取り終了」をタップ。

スキャンを終了

「保存スタート」をタップ。タップする前にお金をいれてください。

保存スタート

USBメモリに書き込み中です。

書き込み中

書き込みが完了しました。「USBメモリーを取りはずす」をタップ。

書き込みが完了

USBメモリーを取りはずします。

USBメモリーを取りはずし

領収書が必要であれば「領収書をプリントする」をタップ。

領収書をプリント

これで完了です。おつかれさまでした。

完了

Comments [0] | Trackbacks [0]

JenkinsをRPMでインストールする方法

September 25,2017 12:03 AM
Category:[Jenkins]
Tag:[Jenkins]
Permalink

JenkinsをRPMでインストールする方法を紹介します。

1.はじめに

JenkinsをLinuxにyumでインストールするには、OS標準のパッケージにJenkinsのリポジトリが含まれていないので、Jenkins公式サイトが公開しているリポジトリを追加します。

% sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
% sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key

その後yumコマンドを実行すればインストールできます。

% sudo yum install jenkins

が、マシンがネットに接続されていない環境ではwgetが使えません。

ということで、JenkinsをRPMでインストールする方法を紹介します。

ここではRedHat Linuxを例に説明します。

2.JenkinsをRPMでインストールする

JenkinsをRPMでインストールするには、「RedHat Linux RPM packages for Jenkins」のページにアクセスして、「Individual Package Downloads」の下に表示されているrpmの一覧から任意のリンクをクリックします。

Jenkins RPM

ダウンロードしたrpmをサーバにアップロードして、ファイルを配置したディレクトリで下記のrpmコマンドを実行します。

# rpm -ivh jenkins-1.658-1.1.noarch.rpm
警告: jenkins-1.658-1.1.noarch.rpm: ヘッダ V4 DSA/SHA1 Signature, key ID d50582e6: NOKEY
準備中...                ########################################### [100%]
   1:jenkins                ########################################### [100%]

これでJenkinsがインストールされました。

Jenkins本体のwarファイルは"/usr/lib/jenkins"に配置されます。

ちなみにJenkinsの起動は、

# service jenkins start
Starting Jenkins                                           [  OK  ]

で、エラーメッセージがなく、"[OK]"が表示されればOKです。

あとはブラウザでサーバの8080ポートにアクセスすれば、

http://xx.xx.xx.xx:8080/

Jenkinsの画面が表示されます。

Jenkinsの画面

なお、インストールしたサーバにはOpenJDK 1.7.0がインストールされていて、jenkinsを2017年9月現在の最新バージョン「jenkins-2.79-1.1.noarch.rpm」をインストールしたところ、Jenkinsの起動で、

# service jenkins start
Starting Jenkins Jenkins requires Java8 or later, but you are running 1.7.0_09-icedtea-mockbuild_2013_01_16_18_52-b00 from /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.9.x86_64/jre
java.lang.UnsupportedClassVersionError: 51.0
        at Main.main(Main.java:124)
                                                           [  OK  ]

というエラーになりました。

Javaバージョンが1.7の場合、Jenkins1.x系が対応するようです。

3.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

lessコマンドを"tail -f"として使う方法

September 21,2017 1:55 AM
Category:[Linux]
Tag:[Linux]
Permalink

lessコマンドを"tail -f"として使う方法を紹介します。

1.はじめに

tailは名前のとおり、ファイルの最後の10行を表示するコマンドです。

このコマンドに"-f"オプションをつけることで、表示したファイルが更新されて末尾行が追加されると、追加された行も表示されます。

% tail -f ファイル名

このためtailコマンドはログの監視によく使われます。

ただこのtailコマンドでファイルの前方に戻る場合、tailをCtrl-cで一旦終了させ、TeraTermなどのターミナルをスクロールし、ログ監視を再開する場合はtailコマンドを入力し直すという、ちょっと操作が面倒です。

ということで、lessコマンドを"tail -f"として使う方法を紹介します。

2.lessコマンドを"tail -f"として使う方法

lessコマンドを"tail -f"として使うには、"+F"オプションを利用します。

% less +F ファイル名

"+F"は、前方にスクロールし、ファイルの終端に達しても読み続けるオプションです。

つまりこのオプションで"tail -f"と同じように動作します。

この状態でCtrl+Cを入力すると、通常のless状態に戻ります。

通常のless状態からShift+fを入力すれば、再び監視状態になってくれ、コマンドを終了させる手間がなくなります。

Comments [0] | Trackbacks [0]

C++で#ifdef/#if defined/#elseを利用する方法

September 14,2017 12:03 AM
Category:[C/C++]
Tag:[C/C++]
Permalink

C++で#ifdef/#if defined/#elseを利用する方法を紹介します。

1.問題点

下記のサンプルコードがあります。

test.cpp

#include <stdio.h>
 
int main(void) {
#ifdef TEST
    printf("test\n");
#else
    printf("no test\n");
#endif
    return 0;
}

ビルドと実行で、

% g++ test.cpp
% ./a.out
no test

となります。

このコードで、

    printf("test\n");

の行を通過させたいのですが、方法がわかりません。

ということで、C++で#ifdef/#if defined/#elseを利用する方法を紹介します。

ちなみに"#ifdef"の部分は、下記のように"#if defined()"に置き換えることもできます。

#include <stdio.h>
 
int main(void) {
#if defined(TEST)
    printf("test\n");
#else
    printf("no test\n");
#endif
    return 0;
}

2.#ifdef/#if defined/#elseを利用する

#ifdef/#if defined/#elseを利用するには、gccに"-D"オプションを適用します。

"-D"はプリプロセッサオプション(コンパイルする前に、Cプリプロセッサにかけられる)で、フォーマットは、

-Dmacro

または、

-Dmacro=defn

のいずれかになります。

これは"-D"の後方にあるmacro(マクロ)の有効・無効を指定するもので、有効であれば、"#ifdef/#if defined()"で括られた部分がコンパイル対象になり、そうでなければ"#else"で括られた部分がコンパイル対象になります(#elseがなければコンパイル対象なし)。

上記のサンプルであれば、マクロが"TEST"なので、

% g++ -DTEST test.cpp

としてビルド・実行すれば、マクロ"TEST"が有効となるので、

    printf("test\n");

がコンパイル対象となり、結果、この行を通過します。

% g++ test.cpp

としてビルド・実行すれば、マクロ"TEST"は無効なので、

    printf("no test\n");

がコンパイル対象となり、結果、この行を通過します。

Comments [0] | Trackbacks [0]

nmコマンドでシンボルのサイズを調べる方法

September 1,2017 12:03 AM
Category:[Linux]
Tag:[Linux]
Permalink

nmコマンドでシンボルのサイズを調べる方法を紹介します。

1.問題点

次のサンプルプログラムを作りました。目的は配列変数a,b,cのサイズ取得です。

test.cc

int main() {
    static int a[1000];
    static int b[10000];
    static int c[100];
    return 0;
}

ビルドして実行ファイルa.outを作成します。

% g++ test.cc
% ls -l
合計 16
-rwxr-xr-x 1 root root 8561  8月 31 00:18 a.out
-rw-r--r-- 1 root root  102  8月 31 00:19 test.cc

nmコマンドで実行ファイル指定すると、次のように表示されます。"--demangle"はシンボルをデマングルするためのオプションですが、今回の問題を解決するための本質ではないので説明は省略します。

% nm --demangle a.out
0000000000600df8 d _DYNAMIC
0000000000601000 d _GLOBAL_OFFSET_TABLE_
0000000000400640 R _IO_stdin_used
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
                 w _Jv_RegisterClasses
000000000060ae40 b main::a
0000000000601200 b main::b
0000000000601060 b main::c
0000000000400778 r __FRAME_END__
0000000000600df0 d __JCR_END__
0000000000600df0 d __JCR_LIST__
0000000000601030 D __TMC_END__
000000000060102c B __bss_start
0000000000601028 D __data_start
0000000000400560 t __do_global_dtors_aux
0000000000600de8 t __do_global_dtors_aux_fini_array_entry
0000000000400648 R __dso_handle
0000000000600de0 t __frame_dummy_init_array_entry
                 w __gmon_start__
0000000000600de8 t __init_array_end
0000000000600de0 t __init_array_start
0000000000400630 T __libc_csu_fini
00000000004005c0 T __libc_csu_init
                 U __libc_start_main@@GLIBC_2.2.5
000000000060102c D _edata
000000000060bde0 B _end
0000000000400634 T _fini
0000000000400468 T _init
00000000004004c0 T _start
0000000000601040 b completed.6337
0000000000601028 W data_start
00000000004004f0 t deregister_tm_clones
0000000000400580 t frame_dummy
00000000004005b0 T main
0000000000400520 t register_tm_clones

サンプルプログラムの中にある各データは、

000000000060ae40 b main::a
0000000000601200 b main::b
0000000000601060 b main::c

で、それぞれのサイズを知るには、次のシンボル開始アドレスから自分の開始アドレスを引けばいいはずです。

が、より簡単に調べたい方法が分かりません。

ということで、nmコマンドでシンボルのサイズを調べる方法を紹介します。

2.シンボルのサイズを調べる

シンボルのサイズを調べるには、"--size-sort"オプションを利用します。

% nm --demangle --size-sort a.out
0000000000000001 b completed.6337
0000000000000002 T __libc_csu_fini
0000000000000004 R _IO_stdin_used
000000000000000b T main
0000000000000065 T __libc_csu_init
0000000000000190 b main::c
0000000000000fa0 b main::a
0000000000009c40 b main::b

"--size-sort"はシンボルをサイズの順にソートするオプションです。

表示されている値はシンボルの値ではなくサイズで、シンボルの値を次に現われる シンボルの値から引いたものです。

これで配列変数a,b,cのサイズがそれぞれ"fa0","9c40","190"であることが分かります。

さらに"--reverse-sort"オプションを付与すると、サイズの大きい順にソートしてくれます。

% nm --demangle --size-sort --reverse-sort a.out
0000000000009c40 b main::b
0000000000000fa0 b main::a
0000000000000190 b main::c
0000000000000065 T __libc_csu_init
000000000000000b T main
0000000000000004 R _IO_stdin_used
0000000000000002 T __libc_csu_fini
0000000000000001 b completed.6337

これで配列変数a,b,cのサイズが、b>a>cであることが一発でわかります。

Comments [0] | Trackbacks [0]

yumでJavaをインストールする方法

August 24,2017 12:03 AM
Category:[Linux]
Tag:[Linux]
Permalink

yumでJavaをインストールする方法を紹介します。

1.はじめに

RHELでJavaを使いたいのですが、Javaはプリインストールされていません。

JavaといえばOracle Javaですが、yumでサクッとインストールしたいところです。

ということで、yumでJavaをインストールする方法を紹介します。

2.yumでJavaをインストールする

Oracle Javaではなく、オープンソースのOpenJDKであればyumでインストールすることができます。

yumリポジトリからOpenJDKを検索してみます。

# yum search openjdk
読み込んだプラグイン:product-id, search-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use su                                                                 bscription-manager to register.
警告: 一致するものが見つかりません: openjdk
No matches found

間違えました、「スタンドアロンのLinuxでyumを利用する方法」で紹介した環境なので、リポジトリを指定して再実行します。

# yum search --disablerepo=\* --enablerepo=media_default openjdk
読み込んだプラグイン:product-id, search-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-ma                                                    nager to register.
=================================== N/S matched: openjdk ====================================
java-1.6.0-openjdk.ppc64 : OpenJDK Runtime Environment
java-1.6.0-openjdk-devel.ppc64 : OpenJDK Development Environment
java-1.7.0-openjdk.ppc64 : OpenJDK Runtime Environment
java-1.7.0-openjdk-devel.ppc64 : OpenJDK Development Environment
java-1.7.0-openjdk-headless.ppc64 : The OpenJDK runtime environment without audio and video
                                  : support
java-1.8.0-openjdk.ppc64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-devel.ppc64 : OpenJDK Development Environment
java-1.8.0-openjdk-headless.ppc64 : OpenJDK Runtime Environment

インストールできるOpenJDKのパッケージがいくつか表示されました。

ここでは最新バージョンのjava-1.8.0-openjdkをインストールしてみます。インターネットに接続された環境であれば、「--disablerepo=\* --enablerepo=media_default」は不要です。

# yum --disablerepo=\* --enablerepo=media_default install java-1.8.0-openjdk
読み込んだプラグイン:product-id, search-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
media_default                                                                                                             | 4.1 kB  00:00:00
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ java-1.8.0-openjdk.ppc64 1:1.8.0.102-4.b14.el7 を インストール
--> 依存性の処理をしています: java-1.8.0-openjdk-headless = 1:1.8.0.102-4.b14.el7 のパッケージ: 1:java-1.8.0-openjdk-1.8.0.102-4.b14.el7.ppc64
--> 依存性の処理をしています: libjava.so(SUNWprivate_1.1)(64bit) のパッケージ: 1:java-1.8.0-openjdk-1.8.0.102-4.b14.el7.ppc64
--> 依存性の処理をしています: libjli.so(SUNWprivate_1.1)(64bit) のパッケージ: 1:java-1.8.0-openjdk-1.8.0.102-4.b14.el7.ppc64
--> 依存性の処理をしています: libjvm.so(SUNWprivate_1.1)(64bit) のパッケージ: 1:java-1.8.0-openjdk-1.8.0.102-4.b14.el7.ppc64
--> 依存性の処理をしています: xorg-x11-fonts-Type1 のパッケージ: 1:java-1.8.0-openjdk-1.8.0.102-4.b14.el7.ppc64
--> 依存性の処理をしています: libXtst.so.6()(64bit) のパッケージ: 1:java-1.8.0-openjdk-1.8.0.102-4.b14.el7.ppc64
--> 依存性の処理をしています: libawt.so()(64bit) のパッケージ: 1:java-1.8.0-openjdk-1.8.0.102-4.b14.el7.ppc64
--> 依存性の処理をしています: libgif.so.4()(64bit) のパッケージ: 1:java-1.8.0-openjdk-1.8.0.102-4.b14.el7.ppc64
--> 依存性の処理をしています: libjava.so()(64bit) のパッケージ: 1:java-1.8.0-openjdk-1.8.0.102-4.b14.el7.ppc64
--> 依存性の処理をしています: libjli.so()(64bit) のパッケージ: 1:java-1.8.0-openjdk-1.8.0.102-4.b14.el7.ppc64
--> 依存性の処理をしています: libjvm.so()(64bit) のパッケージ: 1:java-1.8.0-openjdk-1.8.0.102-4.b14.el7.ppc64
--> トランザクションの確認を実行しています。
---> パッケージ giflib.ppc64 0:4.1.6-9.el7 を インストール
--> 依存性の処理をしています: libICE.so.6()(64bit) のパッケージ: giflib-4.1.6-9.el7.ppc64
--> 依存性の処理をしています: libSM.so.6()(64bit) のパッケージ: giflib-4.1.6-9.el7.ppc64
---> パッケージ java-1.8.0-openjdk-headless.ppc64 1:1.8.0.102-4.b14.el7 を インストール
--> 依存性の処理をしています: copy-jdk-configs >= 1.1-3 のパッケージ: 1:java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.ppc64
--> 依存性の処理をしています: tzdata-java >= 2015d のパッケージ: 1:java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.ppc64
--> 依存性の処理をしています: jpackage-utils のパッケージ: 1:java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.ppc64
---> パッケージ libXtst.ppc64 0:1.2.2-2.1.el7 を インストール
---> パッケージ xorg-x11-fonts-Type1.noarch 0:7.5-9.el7 を インストール
--> 依存性の処理をしています: mkfontdir のパッケージ: xorg-x11-fonts-Type1-7.5-9.el7.noarch
--> 依存性の処理をしています: mkfontdir のパッケージ: xorg-x11-fonts-Type1-7.5-9.el7.noarch
--> 依存性の処理をしています: ttmkfdir のパッケージ: xorg-x11-fonts-Type1-7.5-9.el7.noarch
--> 依存性の処理をしています: ttmkfdir のパッケージ: xorg-x11-fonts-Type1-7.5-9.el7.noarch
--> トランザクションの確認を実行しています。
---> パッケージ copy-jdk-configs.noarch 0:1.2-1.el7 を インストール
---> パッケージ javapackages-tools.noarch 0:3.4.1-11.el7 を インストール
--> 依存性の処理をしています: python-javapackages = 3.4.1-11.el7 のパッケージ: javapackages-tools-3.4.1-11.el7.noarch
---> パッケージ libICE.ppc64 0:1.0.9-2.el7 を インストール
---> パッケージ libSM.ppc64 0:1.2.2-2.el7 を インストール
---> パッケージ ttmkfdir.ppc64 0:3.0.9-42.el7 を インストール
---> パッケージ tzdata-java.noarch 0:2016g-2.el7 を インストール
---> パッケージ xorg-x11-font-utils.ppc64 1:7.5-20.el7 を インストール
--> 依存性の処理をしています: libXfont.so.1()(64bit) のパッケージ: 1:xorg-x11-font-utils-7.5-20.el7.ppc64
--> 依存性の処理をしています: libfontenc.so.1()(64bit) のパッケージ: 1:xorg-x11-font-utils-7.5-20.el7.ppc64
--> トランザクションの確認を実行しています。
---> パッケージ libXfont.ppc64 0:1.5.1-2.el7 を インストール
---> パッケージ libfontenc.ppc64 0:1.1.2-3.el7 を インストール
---> パッケージ python-javapackages.noarch 0:3.4.1-11.el7 を インストール
--> 依存性解決を終了しました。
 
依存性を解決しました
 
=================================================================================================================================================
 Package                                     アーキテクチャー       バージョン                               リポジトリー                   容量
=================================================================================================================================================
インストール中:
 java-1.8.0-openjdk                          ppc64                  1:1.8.0.102-4.b14.el7                    media_default                 226 k
依存性関連でのインストールをします:
 copy-jdk-configs                            noarch                 1.2-1.el7                                media_default                  14 k
 giflib                                      ppc64                  4.1.6-9.el7                              media_default                  42 k
 java-1.8.0-openjdk-headless                 ppc64                  1:1.8.0.102-4.b14.el7                    media_default                  30 M
 javapackages-tools                          noarch                 3.4.1-11.el7                             media_default                  73 k
 libICE                                      ppc64                  1.0.9-2.el7                              media_default                  66 k
 libSM                                       ppc64                  1.2.2-2.el7                              media_default                  40 k
 libXfont                                    ppc64                  1.5.1-2.el7                              media_default                 154 k
 libXtst                                     ppc64                  1.2.2-2.1.el7                            media_default                  21 k
 libfontenc                                  ppc64                  1.1.2-3.el7                              media_default                  31 k
 python-javapackages                         noarch                 3.4.1-11.el7                             media_default                  31 k
 ttmkfdir                                    ppc64                  3.0.9-42.el7                             media_default                  49 k
 tzdata-java                                 noarch                 2016g-2.el7                              media_default                 180 k
 xorg-x11-font-utils                         ppc64                  1:7.5-20.el7                             media_default                  90 k
 xorg-x11-fonts-Type1                        noarch                 7.5-9.el7                                media_default                 521 k
 
トランザクションの要約
=================================================================================================================================================
インストール  1 パッケージ (+14 個の依存関係のパッケージ)
 
総ダウンロード容量: 32 M
インストール容量: 109 M
Is this ok [y/d/N]: y
Downloading packages:
-------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                             132 MB/s |  32 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : libfontenc-1.1.2-3.el7.ppc64                                                                                    1/15
  インストール中          : libICE-1.0.9-2.el7.ppc64                                                                                        2/15
  インストール中          : libSM-1.2.2-2.el7.ppc64                                                                                         3/15
  インストール中          : giflib-4.1.6-9.el7.ppc64                                                                                        4/15
  インストール中          : libXfont-1.5.1-2.el7.ppc64                                                                                      5/15
  インストール中          : 1:xorg-x11-font-utils-7.5-20.el7.ppc64                                                                          6/15
  インストール中          : libXtst-1.2.2-2.1.el7.ppc64                                                                                     7/15
  インストール中          : copy-jdk-configs-1.2-1.el7.noarch                                                                               8/15
  インストール中          : tzdata-java-2016g-2.el7.noarch                                                                                  9/15
  インストール中          : ttmkfdir-3.0.9-42.el7.ppc64                                                                                    10/15
  インストール中          : xorg-x11-fonts-Type1-7.5-9.el7.noarch                                                                          11/15
  インストール中          : python-javapackages-3.4.1-11.el7.noarch                                                                        12/15
  インストール中          : javapackages-tools-3.4.1-11.el7.noarch                                                                         13/15
  インストール中          : 1:java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.ppc64                                                        14/15
  インストール中          : 1:java-1.8.0-openjdk-1.8.0.102-4.b14.el7.ppc64                                                                 15/15
  検証中                  : libXfont-1.5.1-2.el7.ppc64                                                                                      1/15
  検証中                  : 1:java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.ppc64                                                         2/15
  検証中                  : xorg-x11-fonts-Type1-7.5-9.el7.noarch                                                                           3/15
  検証中                  : libSM-1.2.2-2.el7.ppc64                                                                                         4/15
  検証中                  : 1:java-1.8.0-openjdk-1.8.0.102-4.b14.el7.ppc64                                                                  5/15
  検証中                  : python-javapackages-3.4.1-11.el7.noarch                                                                         6/15
  検証中                  : 1:xorg-x11-font-utils-7.5-20.el7.ppc64                                                                          7/15
  検証中                  : libICE-1.0.9-2.el7.ppc64                                                                                        8/15
  検証中                  : giflib-4.1.6-9.el7.ppc64                                                                                        9/15
  検証中                  : ttmkfdir-3.0.9-42.el7.ppc64                                                                                    10/15
  検証中                  : javapackages-tools-3.4.1-11.el7.noarch                                                                         11/15
  検証中                  : libfontenc-1.1.2-3.el7.ppc64                                                                                   12/15
  検証中                  : tzdata-java-2016g-2.el7.noarch                                                                                 13/15
  検証中                  : copy-jdk-configs-1.2-1.el7.noarch                                                                              14/15
  検証中                  : libXtst-1.2.2-2.1.el7.ppc64                                                                                    15/15
 
インストール:
  java-1.8.0-openjdk.ppc64 1:1.8.0.102-4.b14.el7
 
依存性関連をインストールしました:
  copy-jdk-configs.noarch 0:1.2-1.el7         giflib.ppc64 0:4.1.6-9.el7                java-1.8.0-openjdk-headless.ppc64 1:1.8.0.102-4.b14.el7
  javapackages-tools.noarch 0:3.4.1-11.el7    libICE.ppc64 0:1.0.9-2.el7                libSM.ppc64 0:1.2.2-2.el7
  libXfont.ppc64 0:1.5.1-2.el7                libXtst.ppc64 0:1.2.2-2.1.el7             libfontenc.ppc64 0:1.1.2-3.el7
  python-javapackages.noarch 0:3.4.1-11.el7   ttmkfdir.ppc64 0:3.0.9-42.el7             tzdata-java.noarch 0:2016g-2.el7
  xorg-x11-font-utils.ppc64 1:7.5-20.el7      xorg-x11-fonts-Type1.noarch 0:7.5-9.el7
 
完了しました!

これでjavaコマンドが実行可能になりました。

# which java
/usr/bin/java

ただし、javacはまだインストールされていません。

# which javac
/usr/bin/which: no javac in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

javacも使いたい場合は、java-1.8.0-openjdk-develをインストールします。

# yum --disablerepo=\* --enablerepo=media_default install java-1.8.0-openjdk-devel
読み込んだプラグイン:product-id, search-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ java-1.8.0-openjdk-devel.ppc64 1:1.8.0.102-4.b14.el7 を インストール
--> 依存性解決を終了しました。
 
依存性を解決しました
 
=================================================================================================================================================
 Package                                   アーキテクチャー       バージョン                                リポジトリー                    容量
=================================================================================================================================================
インストール中:
 java-1.8.0-openjdk-devel                  ppc64                  1:1.8.0.102-4.b14.el7                     media_default                  7.8 M
 
トランザクションの要約
=================================================================================================================================================
インストール  1 パッケージ
 
総ダウンロード容量: 7.8 M
インストール容量: 40 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : 1:java-1.8.0-openjdk-devel-1.8.0.102-4.b14.el7.ppc64                                                             1/1
  検証中                  : 1:java-1.8.0-openjdk-devel-1.8.0.102-4.b14.el7.ppc64                                                             1/1
 
インストール:
  java-1.8.0-openjdk-devel.ppc64 1:1.8.0.102-4.b14.el7
 
完了しました!
Comments [0] | Trackbacks [0]

スタンドアロンのLinuxでyumを利用する方法

August 22,2017 12:03 AM
Category:[Linux]
Tag:[Linux]
Permalink

スタンドアロンのLinuxでyumを利用する方法を紹介します。

1.はじめに

Linuxでyumを利用する場合、インターネット接続されている状態が普通だと思いますが、検証環境によってはインターネット接続されていないケースもあります。

yumが利用できないとRPMパッケージからのインストールか、ソースコードからのコンパイルが必要になり、面倒です。

ということで、スタンドアロンのLinuxでyumを利用する方法を紹介します。

2.スタンドアロンのLinuxでyumを利用する

スタンドアロンのLinuxでyumを利用するには、メディアとして、Linuxディストリビューション(ここではRHEL)のisoファイル・イメージ(CD/DVD等)を利用します。

まず、メディア(/dev/cdrom)を(/media/redhat)にマウントします。mountコマンド実行で「~mounting read-only」が表示されますが問題ありません。

# cd /media
# mkdir redhat
# mount -t iso9660 /dev/cdrom /media/redhat
mount: /dev/sr0 is write-protected, mounting read-only
# ls -l /media/redhat
合計 780
-r--r--r--.  1 root root   8266  4月  4  2014 EULA
-r--r--r--.  1 root root  18092  3月  6  2012 GPL
dr-xr-xr-x.  2 root root   2048 10月 20  2016 LiveOS
 :
dr-xr-xr-x.  2 root root   4096 10月 20  2016 repodata

次にリポジトリ定義用設定ファイル(.repo)を作成します。

# cd /etc/yum.repos.d
# vi media_default.repo

下記の内容を設定してmedia_default.repoを保存します。

[media_default]
name=media_default
baseurl=file:///media/redhat
gpgcheck=0
enabled=0

/etc/yum.repos.d配下にはデフォルトの.repoファイルがありますが、次のyumコマンドを実行するとデフォルト状態に書き替わってしまったため、ここではmedia_default.repoという別ファイルを作りました。

設定は以上です。

yumコマンドでパッケージリストを取得します。

# yum --disablerepo=\* --enablerepo=media_default list
読み込んだプラグイン:product-id, search-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
インストール済みパッケージ
GeoIP.ppc64                            1.5.0-11.el7                @anaconda/7.3
NetworkManager.ppc64                   1:1.4.0-12.el7              @anaconda/7.3
NetworkManager-config-server.ppc64     1:1.4.0-12.el7              @anaconda/7.3
  :
(後略)

"--disablerepo"は通常有効になっているリポジトリを無効にするオプション、"--enablerepo"はリポジトリを指定するオプションです。

ためしにglibc-develをyumでインストールしてみます。

# yum --disablerepo=\* --enablerepo=media_default install glibc-devel
読み込んだプラグイン:product-id, search-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ glibc-devel.ppc64 0:2.17-157.el7 を インストール
--> 依存性解決を終了しました。
 
依存性を解決しました
 
================================================================================
 Package            アーキテクチャー
                                 バージョン          リポジトリー          容量
================================================================================
インストール中:
 glibc-devel        ppc64        2.17-157.el7        media_default        1.1 M
 
トランザクションの要約
================================================================================
インストール  1 パッケージ
 
総ダウンロード容量: 1.1 M
インストール容量: 1.4 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
警告: RPMDB は yum 以外で変更されました。
  インストール中          : glibc-devel-2.17-157.el7.ppc64                  1/1
media_default/productid                                  | 1.6 kB     00:00
  検証中                  : glibc-devel-2.17-157.el7.ppc64                  1/1
 
インストール:
  glibc-devel.ppc64 0:2.17-157.el7
 
完了しました!

正常にインストールできました。

Comments [0] | Trackbacks [0]

PostgreSQLをLinuxでソースコードからビルドして利用する方法

August 17,2017 1:23 AM
Category:[PostgreSQL]
Tag:[]
Permalink

PostgreSQLをLinuxでソースコードからビルドして利用する方法を紹介します。

1.PostgreSQLソースのダウンロード

PostgreSQLのソースは、最新バージョンである下記のページにアクセスします(2017年8月現在)。

このページにある、"postgresql-9.6.3.tar.gz"をダウンロード。

2.ソースコードのビルド

ソースコードをビルドします(コマンドは赤色)。

# ./configure --without-readline
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking which template to use... linux
 :
config.status: linking src/backend/port/dynloader/linux.h to src/include/dynloader.h
config.status: linking src/include/port/linux.h to src/include/pg_config_os.h
config.status: linking src/makefiles/Makefile.linux to src/Makefile.port
# make
make -C src all
make[1]: ディレクトリ `/home/y-araki/postgresql-9.6.3/src' に入ります
make -C common all
make[2]: ディレクトリ `/home/y-araki/postgresql-9.6.3/src/common' に入ります
make -C ../backend submake-errcodes
make[3]: ディレクトリ `/home/y-araki/postgresql-9.6.3/src/backend' に入ります
prereqdir=`cd 'utils/' >/dev/null && pwd` && \
          cd '../../src/include/utils/' && rm -f errcodes.h && \
          ln -s "$prereqdir/errcodes.h" .
make[3]: ディレクトリ `/home/y-araki/postgresql-9.6.3/src/backend' から出ます
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -O2 -DFRONTEND -I../../src/include -D_GNU_SOURCE  -DVAL_CONFIGURE="\"'--without-readline'\"" -DVAL_CC="\"gcc\"" -DVAL_CPPFLAGS="\"-DFRONTEND -D_GNU_SOURCE\"" -DVAL_CFLAGS="\"-Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -O2\"" -DVAL_CFLAGS_SL="\"-fpic\"" -DVAL_LDFLAGS="\"-L../../src/common -Wl,--as-needed -Wl,-rpath,'/usr/local/pgsql/lib',--enable-new-dtags\"" -DVAL_LDFLAGS_EX="\"\"" -DVAL_LDFLAGS_SL="\"\"" -DVAL_LIBS="\"-lpgcommon -lpgport -lz -lrt -lcrypt -ldl -lm  \""  -c -o config_info.o config_info.c
 :
make -C config all
make[1]: ディレクトリ `/home/y-araki/postgresql-9.6.3/config' に入ります
make[1]: `all' に対して行うべき事はありません.
make[1]: ディレクトリ `/home/y-araki/postgresql-9.6.3/config' から出ます
All of PostgreSQL successfully made. Ready to install.
# make install
make -C src install
make[1]: ディレクトリ `/home/y-araki/postgresql-9.6.3/src' に入ります
make -C common install
make[2]: ディレクトリ `/home/y-araki/postgresql-9.6.3/src/common' に入ります
make -C ../backend submake-errcodes
 :
make[1]: ディレクトリ `/home/y-araki/postgresql-9.6.3/src' から出ます
make -C config install
make[1]: ディレクトリ `/home/y-araki/postgresql-9.6.3/config' に入ります
/bin/mkdir -p '/usr/local/pgsql/lib/pgxs/config'
/usr/bin/install -c -m 755 ./install-sh '/usr/local/pgsql/lib/pgxs/config/install-sh'
/usr/bin/install -c -m 755 ./missing '/usr/local/pgsql/lib/pgxs/config/missing'
make[1]: ディレクトリ `/home/y-araki/postgresql-9.6.3/config' から出ます
PostgreSQL installation complete.

3.DBD::Pgインストール

Perlで利用したいため、DBD::Pgをインストールしました。

CPANからダウンロードしたDBD-Pg-3.6.2のアーカイブをLinux上で展開し、インストールします。

# cd DBD-Pg-3.6.2
# ls -l
合計 640
-rw-r--r--. 1 1000 1000  59734  5月 23 23:23 2017 Changes
drwxr-xr-x. 2 1000 1000   4096  5月 23 23:24 2017 LICENSES
-rw-r--r--. 1 1000 1000    747  4月 20 08:44 2017 MANIFEST
-rw-r--r--. 1 1000 1000    359  4月 20 08:44 2017 MANIFEST.SKIP
-rw-r--r--. 1 1000 1000   1675  5月 23 23:23 2017 META.yml
-rw-r--r--. 1 1000 1000  11177  5月 23 23:23 2017 Makefile.PL
-rw-r--r--. 1 1000 1000   8567  3月 29 07:03 2017 Pg.h
-rw-r--r--. 1 1000 1000 176872  5月 23 23:23 2017 Pg.pm
-rw-r--r--. 1 1000 1000  19749  4月  3 23:46 2017 Pg.xs
-rw-r--r--. 1 1000 1000  12217  5月 23 23:23 2017 README
-rw-r--r--. 1 1000 1000  30715  4月 26 11:19 2017 README.dev
-rw-r--r--. 1 1000 1000   2436  3月 29 06:10 2017 README.win32
-rw-r--r--. 1 1000 1000   3734  5月 23 23:24 2017 SIGNATURE
-rw-r--r--. 1 1000 1000   1887  3月 31 09:03 2017 TODO
-rw-r--r--. 1 1000 1000 162413  5月 23 23:22 2017 dbdimp.c
-rw-r--r--. 1 1000 1000  11296  4月  5 21:36 2017 dbdimp.h
-rw-r--r--. 1 1000 1000   2016  3月 29 06:10 2017 dbivport.h
drwxr-xr-x. 3 1000 1000   4096  5月 23 23:24 2017 lib
-rw-r--r--. 1 1000 1000  34222  4月 20 08:37 2017 quote.c
-rw-r--r--. 1 1000 1000   1501  3月 29 06:10 2017 quote.h
drwxr-xr-x. 3 1000 1000   4096  5月 23 23:24 2017 t
-rwxr-xr-x. 1 1000 1000   5419  4月  7 23:02 2017 testme.tmp.pl
-rw-r--r--. 1 1000 1000  42748  3月 29 07:03 2017 types.c
-rw-r--r--. 1 1000 1000   6198  3月 29 06:23 2017 types.h
-rw-r--r--. 1 1000 1000   2487  3月 29 06:10 2017 win32.mak
# perl Makefile.PL
Configuring DBD::Pg 3.6.2
PostgreSQL version: 90603 (default port: 5432)
POSTGRES_HOME: (not set)
POSTGRES_INCLUDE: /usr/local/pgsql/include
POSTGRES_LIB: /usr/local/pgsql/lib
OS: linux
Checking if your kit is complete...
Looks good
Warning: prerequisite Time::HiRes 0 not found.
Using DBI 1.636 (for perl 5.010001 on x86_64-linux-thread-multi) installed in /usr/local/lib64/perl5/auto/DBI/
Writing Makefile for DBD::Pg
# make
cp lib/Bundle/DBD/Pg.pm blib/lib/Bundle/DBD/Pg.pm
cp Pg.pm blib/lib/DBD/Pg.pm
/usr/bin/perl -p -e "s/~DRIVER~/Pg/g; s/^do\(/dontdo\(/" /usr/local/lib64/perl5/auto/DBI/Driver.xst > Pg.xsi
/usr/bin/perl /usr/share/perl5/ExtUtils/xsubpp  -typemap /usr/share/perl5/ExtUtils/typemap  Pg.xs > Pg.xsc && mv Pg.xsc Pg.c
gcc -c  -I/usr/local/pgsql/include -I/usr/local/lib64/perl5/auto/DBI -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DPGLIBVERSION=90603 -DPGDEFPORT=5432 -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic  -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc -DVERSION=\"3.6.2\" -DXS_VERSION=\"3.6.2\" -fPIC "-I/usr/lib64/perl5/CORE"   Pg.c
 :
chmod 755 blib/arch/auto/DBD/Pg/Pg.so
cp Pg.bs blib/arch/auto/DBD/Pg/Pg.bs
chmod 644 blib/arch/auto/DBD/Pg/Pg.bs
Manifying blib/man3/Bundle::DBD::Pg.3pm
Manifying blib/man3/DBD::Pg.3pm
# make install
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /usr/local/lib64/perl5/auto/DBD/Pg/Pg.so
Installing /usr/local/lib64/perl5/auto/DBD/Pg/Pg.bs
Installing /usr/local/lib64/perl5/Bundle/DBD/Pg.pm
Installing /usr/local/lib64/perl5/DBD/Pg.pm
Installing /usr/local/share/man/man3/Bundle::DBD::Pg.3pm
Installing /usr/local/share/man/man3/DBD::Pg.3pm
Appending installation info to /usr/lib64/perl5/perllocal.pod

4.PostgreSQLユーザアカウント作成

PostgreSQL用のアカウントを作成します。下記のページを参考にしました。

17.1. PostgreSQLユーザアカウント

# groupadd postgres
# useradd -d /home/postgres -g postgres -s /bin/tcsh postgres
# passwd postgres
ユーザー postgres のパスワードを変更。
新しいパスワード:
よくないパスワード: 辞書の単語に基づいています
新しいパスワードを再入力してください:
passwd: 全ての認証トークンが正しく更新できました。
# chown postgres /usr/local/pgsql
# ls -l
合計 48
drwxr-xr-x. 17 root     root 4096  4月 10 11:17 2017 apache2
drwxr-xr-x.  2 root     root 4096  7月 27 10:52 2017 bin
drwxr-xr-x.  2 root     root 4096  9月 23 20:50 2011 etc
drwxr-xr-x.  2 root     root 4096  9月 23 20:50 2011 games
drwxr-xr-x.  2 root     root 4096  4月 10 10:08 2017 include
drwxr-xr-x.  4 root     root 4096  4月 10 10:08 2017 lib
drwxr-xr-x.  3 root     root 4096  4月 10 11:30 2017 lib64
drwxr-xr-x.  2 root     root 4096  9月 23 20:50 2011 libexec
drwxr-xr-x.  7 postgres root 4096  7月 27 14:10 2017 pgsql
drwxr-xr-x.  2 root     root 4096  9月 23 20:50 2011 sbin
drwxr-xr-x.  8 root     root 4096  4月 10 11:30 2017 share
drwxr-xr-x.  2 root     root 4096  9月 23 20:50 2011 src
# su - postgres
$ setenv LD_LIBRARY_PATH /usr/local/pgsql/lib
$ set path = ( /usr/local/pgsql/bin $path )

5.データベースクラスタの作成

PostgreSQLユーザでデータベースクラスタを作成します。下記のページを参考にしました。

17.2. データベースクラスタの作成

$ initdb -D /usr/local/pgsql/data
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
 
The database cluster will be initialized with locale "ja_JP.UTF-8".
The default database encoding has accordingly been set to "UTF8".
initdb: could not find suitable text search configuration for locale "ja_JP.UTF-8"
The default text search configuration will be set to "simple".
 
Data page checksums are disabled.
 
creating directory /usr/local/pgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
 
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
 
Success. You can now start the database server using:
 
    pg_ctl -D /usr/local/pgsql/data -l logfile start

6.データベースサーバの起動

データベースサーバを起動します。起動方法はいろいろあるようですが、下記のページを参考にしました。

17.3. データベースサーバの起動

$ pg_ctl -D /usr/local/pgsql/data -l logfile start
server starting

7.データベースユーザの作成

データベース用のユーザ"mtuser"を作成します。

$ createuser -P --no-adduser --no-createdb --no-createrole mtuser
Enter password for new role:
Enter it again:

8.データベースの作成

データベース"hoge"を作成します。

$ createdb --owner mtuser hoge

9.その他

ここまでの作業でMovableTypeをPostgresQLで動かせると思ったのですが、起動しても「データベースモジュールが見つかりません」となり、インストールしたはずのDBD::Pgが表示されます。

postgresql.confに下記の1行を追加し、ldconfigを実施することで解消しました。

下記のページを参考にしました。

15.6. インストール後の設定作業

# cd /etc/ld.so.conf.d
# vim postgresql.conf

下記の1行を追加。
--------------------
/usr/local/pgsql/lib
--------------------

# /sbin/ldconfig

これを行わないとMovableTypeの画面で「再試行」を実施しても状況が変わりません。

10.ノウハウ

"pg_ctl -D /usr/local/pgsql/data -l logfile start"はバックグラウンド起動しません。

バックグラウンド起動すると正常に起動されません。

上の状態に気が付かずにcreateuserすると、「could not connect to database postgres: could not connect to server」というエラーになります(下)。

$ pg_ctl -D /usr/local/pgsql/data -l logfile start 2>&1 &
[1] 6217
[postgres@mnet-host11 ~]$ createuser
createuser: could not connect to database postgres: could not connect to server: そのようなファイルやディレクトリはありません
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
[1]  + 1で終了しました pg_ctl -D /usr/local/pgsql/data -l logfile start 2 >& 1

11.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages