vagrantにxpdfを入れる

yumコマンドで入れます。
[pre]
yum install xpdf
[/pre]

依存性関連をインストールしました:
desktop-file-utils.x86_64 0:0.15-9.el6
lcms-libs.x86_64 0:1.19-1.el6
libXmu.x86_64 0:1.1.1-2.el6
libXp.x86_64 0:1.0.2-2.1.el6
libpaper.x86_64 0:1.1.23-6.1.el6
openjpeg-libs.x86_64 0:1.3-16.el6_8
openmotif.x86_64 0:2.3.3-9.el6
poppler.x86_64 0:0.12.4-12.el6_9
poppler-data.noarch 0:0.4.0-1.el6
poppler-utils.x86_64 0:0.12.4-12.el6_9
urw-fonts.noarch 0:2.4-11.el6
xdg-utils.noarch 0:1.0.2-17.20091016cvs.el6
xorg-x11-fonts-ISO8859-1-100dpi.noarch 0:7.2-11.el6
xorg-x11-fonts-ISO8859-1-75dpi.noarch 0:7.2-11.el6

完了しました!

etcのディレクトリの xpdfrcを編集します。

# Choose a text encoding for copy-and-paste and for pdftotext output.
# The Latin1, ASCII7, and UTF-8 encodings are built into Xpdf. Other
# encodings are available in the language support packages.

textEncoding UTF-8

コマンドラインから、pdftotext origin.pdf create.txt でtxtファイルを作成する。

[vagrant@localhost translator]$ pdftotext boj.pdf boj.txt

うおおおおおおおおおおおおおおおおおお
テキストファイルになってる!!!!!!!!!!!
ヘッダーの「日本銀行」とフッターの「以上」が改行されているが、他は問題なさそう。すげー

xpdfをazureのvmに入れられるのかわからんが、まずはvagrantで構築していきましょう。
pdftotextはcrontabでやるにしても、コマンドラインではなく、phpファイルから実行できるんだろうか?

cronでgunzipを実行する

crontabでgunzipと書くだけです。

20 * * * * root cd /home/vagrant/cookie/cron; gunzip GeoLite2-Country.mmdb.gz

ほお~

sudo cat /var/log/cron
Apr 26 22:20:02 localhost CROND[17108]: (root) CMD (cd /home/vagrant/cookie/cron; gunzip GeoLite2-Country.mmdb.gz)

無償版は毎月3日に更新されるそう(真偽は不明です)なので、日本との時差を考慮して、毎月5日の1時15分にwgetして、1時20分にgunzipするよう設定します。

15 1 5 * * root cd /home/vagrant/cookie/cron; /usr/bin/wget "http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz"
15 1 5 * * root cd /home/vagrant/cookie/cron; /usr/bin/wget "http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz"
20 1 5 * * root cd /home/vagrant/cookie/cron; gunzip GeoLite2-Country.mmdb.gz
20 1 5 * * root cd /home/vagrant/cookie/cron; gunzip GeoLite2-City.mmdb.gz

geolite側はこれでOK
次はmongodbに入れる前に、phpでipから、continent, country, cityを取得して配列にpushするところをやりたいと思います。

cronでwgetを実行する

wget:ノンインタラクティブなダウンローダー

wgetがどこにあるか確認します。

/usr/bin/wget

bin:Binary codeのこと、実行可能プログラム置き場
/bin:FHSによって定められたシングルユーザを含めたどのユーザでも使えるコマンド
/usr/bin:ユーザーが一般的に使用するコマンド

続いて、crontabを編集します。

sudo vi /etc/crontab

任意のディレクトリ(ここでは/home/vagrant/cookie/cron)に、wgetでdownloadしたいとすると、まず、cdで移動する必要があります。そのため、以下のように書きます。
root cd で移動して、/usr/bin/wgetで、”http://hogehoge”をダウンロード
※ここでは、テスト用に毎時55分にwgetする

55 * * * * root cd /home/vagrant/cookie/cron; /usr/bin/wget "http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz"
/etc/rc.d/init.d/crond start

編集後、crond start
/etc/rc.d/init.d/crond start

結果
->取れてる!!!

sudo cat /var/log/cron でログも確認

Apr 26 21:55:01 localhost CROND[17001]: (root) CMD (cd /home/vagrant/cookie/cron; /usr/bin/wget "http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz")

OK牧場!

2000万ファイルの作成について

東京都の電話番号の全てのパターンをつくりたいとする

03-XXXX-YYYY

市外局番:03
市内局番:3100~6999(2264件)
加入者番号:0000~9999(9999件)

仮に全て、ファイルを作ったとすると、2264万ファイル作成することになる。

「Linuxの場合、一つのディレクトリの配下に10000個から15000個程度のファイルを作成することが出来るが、実際には5000個もファイルを作成するとディスクI/Oの性能が落ち、ファイル読み書きのパフォーマンスが落ちる」、とのこと。

vagrant・centosからsendmailでメールを送信する

まず完成版から

vagrantのコマンドラインで以下のように打ちます

[vagrant@localhost postfix]$ sendmail myaccount@gmail.com
Subject: test
test content
.

自分のgmailアカウント
vagrantからのメールが届いてますね。

ここまで来るのに5~6時間かかりました。。。

まず、postfixをインストール後、

sudo yum -y install cyrus-sasl-md5 cyrus-sasl-plain

そして、/etc/postfix/main.cfファイルの編集

# 116行目 inet_interfaces = localhostを編集
inet_interfaces = all

# 119行目 inet_protocols = allを編集
inet_protocols = ipv4

# 318行目 以下追加
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_sasl_security_options = noanonymous
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt

因みに、main.cfの「318行目」は末尾ではありませんのでご注意を。

続いて、16桁のGmailのアプリパスワードを生成します。
https://secuirty.google.com/settings/security/apppasswords

その後、/etc/postfix/に、sasl_passwdファイルをvimで作成します。パスワードはつくったアプリパスワードを入力。

[smtp.gmail.com]:587 example@gmail.com:app_password(16桁)

ここで、passwordにgmailの普通のパスワードを入れると、authentification errorになるのでご注意。

その後、postfixのディレクトリからコマンドラインで

postmap sasl_passwd

として、sasl_passwd.dbを作成します。

そして

sudo service postfix restart

また、gmailの設定で、安全性の低いアプリ(失礼な!)の設定を変更する必要があります。

これでsendmailが使えるようになります。あて先は、gmail以外でもOKです。送信元がvagrantになってました。カッコいい!

[vagrant@localhost postfix]$ sendmail myaccount@gmail.com
Subject: test
test content
.

受信されてないようでしたらログを確認。

sudo cat /var/log/maillog

smtp結構複雑ですね。
別のvagrant環境立ち上げて試すなど、迷走しまくってました。。。

sudo yum -y install postfix

postfixを入れます。

  更新                    : 2:postfix-2.6.6-8.el6.x86_64                    1/2
  整理中                  : 2:postfix-2.6.6-6.el6_7.1.x86_64                2/2
  Verifying               : 2:postfix-2.6.6-8.el6.x86_64                    1/2
  Verifying               : 2:postfix-2.6.6-6.el6_7.1.x86_64                2/2

更新:
  postfix.x86_64 2:2.6.6-8.el6

完了しました!
[vagrant@localhost /]$ sudo alternatives --config mta

2 プログラムがあり 'mta' を提供します。

  選択       コマンド
-----------------------------------------------
   1           /usr/sbin/sendmail.postfix
*+ 2           /usr/sbin/sendmail.sendmail

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:1
[vagrant@localhost /]$ sudo chkconfig --add postfix
[vagrant@localhost /]$ sudo chkconfig postfix on
[vagrant@localhost /]$ chkconfig --list postfix
postfix         0:off   1:off   2:on    3:on    4:on    5:on    6:off

vagrantでのsendmail

SMTPサーバーはメールを相手のメールサーバーまで届けるサーバー

PHPで以下のように書いて

$to = "hoge@gmail.com";
$subject = "TEST MAIL";
$message = "Hello!\r\nThis is TEST MAIL.";
$headers = "From: hoge@hoge.com";
 
mail($to, $subject, $message, $headers);

echo "finish!";

以下のようにエラーが出たので

sendmail: fatal: parameter inet_interfaces: no local interface found for ::1

/etc/hostsを修正し

[vagrant@localhost mail]$ vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

それでも全然finishしないので、SMTPサーバーを調べていたら、
>Postfix 2.10.1 ゲストOS上で稼働するMTA(SMTP)サーバー
>Dovecot 2.2.10 ゲストOS上で稼働するPOP3,IMAPサーバー
なるほど、Postfixをインストールしないといけないのね。

centos php7.0.27にintlを入れようとして嵌ったこと

まず、intlを入れようとします。

# sudo yum install --enablerepo=remi --enablerepo=remi-php56 -y php-intl

すると、phpが7.0.27とエラー表示されます。

Error: Package: php-intl-5.6.34-1.el6.remi.x86_64 (remi-php56)
           Requires: php-common(x86-64) = 5.6.34-1.el6.remi
           Installed: php-common-7.0.27-1.el6.remi.x86_64 (@remi-php70)
               php-common(x86-64) = 7.0.27-1.el6.remi
           Available: php-common-5.3.3-49.el6.x86_

phpのバージョン確認

# php -v
PHP 7.0.27 (cli) (built: Jan  2 2018 12:12:41) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies

intlのリストを表示

# yum list | grep intl
intltool.noarch                            0.41.0-1.1.el6              @anaconda       -CentOS-201703281317.x86_64/6.9
perl-libintl.x86_64                        1.20-1.el6                  base
php-intl.x86_64                            5.3.3-49.el6                base
php-symfony-intl.noarch                    2.3.42-1.el6                epel
php54-php-intl.x86_64                      5.4.45-14.el6.remi          remi-safe
php55-php-intl.x86_64                      5.5.38-8.el6.remi           remi-safe
php56-php-intl.x86_64                      5.6.34-1.el6.remi           remi-safe
php70-php-intl.x86_64                      7.0.28-1.el6.remi           remi-safe
php71-php-intl.x86_64                      7.1.15-1.el6.remi           remi-safe
php72-php-intl.x86_64                      7.2.3-1.el6.remi            remi-safe

php70-php-intl.x86_64 を入れます。

# sudo yum install php70-php-intl

はいったか確認します。

# php -i | grep intl
#

なに!? 入ってない。
/opt/remi/php70/root/usr/lib64/php/modules/ に入っている。

/usr/lib64/php/modules にintl.soを入れる。

phpinfo()

コマンドライン

# php -i | grep intl
intl
intl.default_locale => no value => no value
intl.error_level => 0 => 0
intl.use_exceptions => 0 => 0

ふー焦った。

optはアドオンアプリケーションソフトウェアパッケージ(追加アプリケーション)
remiサードパーティのリポジトリの一つ とのこと。

CentOSにLinuxBrewを入れる

himawari.jsを使うため、brewをインストールします。

sudo yum install -y gcc gcc-c++ git
sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
test -d ~/.linuxbrew && PATH="$HOME/.linuxbrew/bin:$HOME/.linuxbrew/sbin:$PATH"
test -d /home/linuxbrew/.linuxbrew && PATH="/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:$PATH"
test -r ~/.bash_profile && echo "export PATH='$(brew --prefix)/bin:$(brew --prefix)/sbin'":'"$PATH"' >>~/.bash_profile
echo "export PATH='$(brew --prefix)/bin:$(brew --prefix)/sbin'":'"$PATH"' >>~/.profile

getting started

brew install imagemagick
brew install graphicsmagick
npm i himawari

というか、himawari.jsってhttp://himawari8.nict.go.jp/ja/himawari8-image.htm から画像化してるだけっぽいですね。