Raspberry Piにh2oをインストール

Raspberry PiをRaspbian Jessie Liteにアップグレード - kame-tの日記の続き
こちらもメモ程度
Jessieにするとcmakeも3になるのでh2oのインストールOK
方法はh2oのマニュアルhttps://h2o.examp1e.net/のとおり

% sudo apt-get install cmake mruby libmruby-dev bison
% git clone https://github.com/h2o/h2o.git
% cd h2o
% cmake -DWITH_MRUBY=ON
% make
% sudo make install

あとLet's Encryptでサーバ証明書を取得する
これもKazuho's Weblog: Using H2O with Let's Encryptに書いてあるとおり

% git clone https://github.com/letsencrypt/letsencrypt.git
% cd letsencrypt
% ./letsencrypt-auto certonly --standalone \
    --email $EMAIL \
    --domain $HOSTNAME

あとはお好みで

  • /usr/local/etc/h2o.conf
  • /var/log/h2o/{access_log,error_log}
  • /var/run/h2o.pid
  • /etc/init.d/h2o

起動時はmasterモード(-m master)で

Raspberry PiをRaspbian Jessie Liteにアップグレード

以前Raspberry Piのインストールログ - kame-tの日記
インストールログをまとめたが
先日Raspbian Jessie Liteがリリースされたのを受けて
https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=127060
自宅のサーバをアップグレードしてみた

前回同様メモ程度

  • 作業端末でイメージの書き込み
% sudo dd if=2015-11-21-raspbian-jessie-lite.img of=/dev/sdd

サーバ利用するのでIPアドレスを固定に変更
/etc/network/interfacesではなく
DHCPを使うので/etc/dhcpcd.confの設定を下記に変更

interface eth0
static ip_address=192.168.0.xx/24
static routers=192.168.0.oo
static domain_name_servers=192.168.0.oo 8.8.8.8

SSHがデフォルトで動作しているのでリモートで接続

% ssh pi@192.168.0.xx
  • root領域の拡張
$ sudo raspi-config

localtimeは作業PCからscp

$ sudo cp ~/localtime /etc/localtime
$ sudo localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
$ cat /etc/locale.gen
ja_JP.UTF-8 UTF-8
  • apt-get
# apt-get upgrade
# apt-get install postfix
# apt-get install postfix-policyd-spf-python
# apt-get install dnsutils
# apt-get install procmail
# apt-get install fetchmail
# apt-get install telnet
# apt-get install emacs
# apt-get install emacs-mozc
# apt-get install mozc-data
# apt-get install gnupg2
# apt-get install ruby
# apt-get install sqlite3
# apt-get install ruby-sqlite3
# apt-get install ruby-dbd-sqlite3
# apt-get install stunnel4
# apt-get install git
# apt-get install tcsh
# apt-get install screen
# apt-get install ntpdate
# apt-get install pwgen
# apt-get install libssl-dev
# apt-get install ntpdate
# apt-get install squid
# apt-get install pptpd
# apt-get install golang
# apt-get autoremove

pptpdはデフォルトでdisableなので

# systemctl is-enabled pptpd.service
disable
# systemctl enable pptpd.service

不要なサービス起動の停止

# insserv -r rsync
# insserv -r fetchmail
# insserv -r stunnel4
# insserv -r saned
  • ユーザの作成とバックアップからのホーム領域の復元
% rsync -ac bk/home/xx 192.168.0.xx:/home/xx

すでにgit cloneしているので

% cd Mew
% make distclean
% git pull
% ./configure
% make
% sudo make install
% sudo cp /usr/share/emacs/24/site-lisp/subdirs.el /usr/local/share/emacs/site-lisp
  • hyperestraier and qdbm

バージョンは変わらず(T_T)なのでそのまま再コンパイル

% cd qdbm-1.8.78
% make distclean
% ./configure --enable-zlib
% make
% sudo make install
% sudo ldconfig
% cd hyperestraier-1.4.13
% make distclean
% ./configure
% make
% sudo make install
  • fetchmailMewのstunnel用に.certsファイルを作成
$ for i in /usr/share/ca-certificates/mozilla/*; do cp $i ~/.certs/`openssl x509 -hash -noout -in $i`.0; done

動作確認

% openssl s_client -connect imap.gmail.com:993 -CApath ~/.certs/

fetchmailrcはこんな感じ

sslcertck
sslcertpath "~/.certs"

また今回はRaspbianデフォルトのstunnelで接続できた

  • emacsの日本語入力をanthyからmozcへ変更
(require 'mozc)
(setq default-input-method "japanese-mozc")

但し遅い...raspberrypi2なら大丈夫かも

  • cronの設定
  • rsyslogの設定
    • /etc/rsyslog.conf
  • ntpの設定
    • /etc/ntp.conf
  • sshdの設定

イントラネット用とインターネット用デーモン(違うポート番号・公開鍵限定)

Port 22
Port xxxx
PermitRootLogin no
PasswordAuthentication no
Match Address 192.168.0.0/24
    PermitRootLogin without-password
    PasswordAuthentication yes

上位ルータで22番は閉じてハイポートxxxxのみを開放
なおMatchは最下行にする必要あり

わざわざコンパイルしていたが
mackerel-agentのARM版バイナリーはRaspberry PI 2でもさくっと動く - Qiitaみたい
/usr/local/sbin/mackerel-agentにコピーして
/usr/local/etc/mackerel-agent.confをバックアップから復元
/etc/init.d/mackerel-agentを置いて

% sudo insserv mackerel-agent

Raspberry PiでMackerelの続き

本バージョンよりビルドには Go 1.3 が必要となります。ご自分でビルドされ
ている方は、環境のアップデートをお願いいたします。

http://blog-ja.mackerel.io/entry/2014/06/26/164202

おーすごい勢いでバージョンアップしているけど
いちいちビルドしてついていくのはかなり面倒

とりあえずgolang1.3にバージョンアップして
# これは仕方なし
オリジナルのMakefileをコピーして適当なフォルダに置いて

BIN = mackerel-agent

all: clean build test

test: deps
	go test github.com/mackerelio/mackerel-agent/...

build: deps
	go build \
	-ldflags="\
	  -X github.com/mackerelio/mackerel-agent/version.GITCOMMIT `git rev-parse --short HEAD` \
	  -X github.com/mackerelio/mackerel-agent/version.VERSION   `git describe --tags --abbrev=0 | sed 's/^v//' | sed 's/\+.*$$//'` " \
	-o build/$(BIN) \
	github.com/mackerelio/mackerel-agent

install: build
	sudo cp -f ./build/$(BIN) /usr/local/sbin/

deps:
	go get -u -d github.com/mackerelio/mackerel-agent

clean:
	rm -f build/$(BIN)
	go clean
% pkill mackerel-agent
% ln -s ${GOPATH}/src/github.com/mackerelio/mackerel-agent/.git .
% make install

ついでにrcスクリプトも作って

#!/bin/sh
### BEGIN INIT INFO
# Provides:          mackerel-agent
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

PATH=/bin:/usr/bin:/sbin:/usr/local/sbin:/usr/sbin
DAEMON=/usr/local/sbin/mackerel-agent
CONFFILE=/usr/local/etc/mackerel-agent.conf
OPTIONS="-conf=${CONFFILE} -verbose=false"
PIDFILE=/var/run/mackerel-agent.pid
NAME=mackerel-agent

case "$1" in
  start)
    echo -n "Starting $NAME Daemon: "
    start-stop-daemon --start --quiet --pidfile $PIDFILE --background --exec $DAEMON -- $OPTIONS
    ;;
  stop)
    echo -n "Stopping $NAME: "
    start-stop-daemon --stop --quiet --pidfile $PIDFILE
    ;;
  restart)
    echo "Restarting $NAME: "
    start-stop-daemon --stop --quiet --pidfile $PIDFILE
    start-stop-daemon --start --quiet --pidfile $PIDFILE --background --exec $DAEMON -- $OPTIONS
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
    ;;
esac

exit 0
% sudo /etc/init.d/mackerel-agent start

かな

Raspberry PiでMackerel

https://mackerel.ioだが
いきなり本番機ではなくまずは自宅のサーバで動かしてみる
Linux用バイナリをダウンロードするもRaspberryPiのarmでは動かず(T_T)
下記ソースをみると
https://github.com/mackerelio/mackerel-agent
とりあえずgolangをインストール
apt-getがうまく動かなかったのでリポジトリから直接ダウンロード

% dpkg -l | grep golang
ii  golang-go                             2:1.2.1-2
armhf        Go programming language compiler
ii  golang-go-linux-arm                   2:1.2.1-2
armhf        Go standard library compiled for linux_arm
ii  golang-src                            2:1.2.1-2
armhf        Go programming language compiler - source files
% setenv GOPATH ~/gocode
% git clone https://github.com/mackerelio/mackerel-agent.git
% cd mackerel-agent
% make build
% build/mackerel-agent --conf=~/downloaded/mackerel/binary/mackerel-agent/mackerel-agent.conf

で動いた!

VineLinuxでdvipdfmx時にフォントを埋め込む

VineLinux
IPA明朝とIPAゴシックを埋め込む」
http://ml.vinelinux.org/vine-users/msg32074.html
http://trac.vinelinux.org/browser/people/munepi/ptl09vl6/
の指示どおりにする

またTgifのフォントTimes-RomanとHelveticaも埋め込むために
下記を変更する
/usr/share/ghostscript/x.xx/Resource/Init/gs_pdfwr.ps

/.standardfonts [
  /Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique
%  /Helvetica /Helvetica-Bold /Helvetica-Oblique
  /Helvetica-BoldOblique
%  /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic
  /Symbol /ZapfDingbats
] readonly def

/usr/share/texmf/dvipdfmx/dvipdfmx.cfg

%D  "gs -q -dNOPAUSE -dBATCH -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dAutoFilterGrayImages=false \ -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false \ -dColorImageFilter=/FlateEncode-dUseFlateCompression=true \
-sOutputFile=%o -dNOKANJI -c '.setpdfwrite << /NeverEmbed \
[/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique \
/Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique \
/Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic \
/Symbol /ZapfDingbats /Ryumin-Light /GothicBBB-Medium] >> \
setdistillerparams' -f %i -c quit"
D  "gs -q -dNOPAUSE -dBATCH -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dAutoFilterGrayImages=false \ -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false \ -dColorImageFilter=/FlateEncode -dUseFlateCompression=true \
-sOutputFile=%o -dNOKANJI -c '.setpdfwrite << /NeverEmbed \
[/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique \
/Symbol /ZapfDingbats /Ryumin-Light /GothicBBB-Medium] >> \
setdistillerparams' -f %i -c quit"

XOOPS Cube Legacy 2.1を無理やりPHP5.3に対応する

古いパッケージですが
XOOPS Cube Legacy 2.1を無理やりPHP5.3に対応する
http://xoopscube.jp/forum/6557
http://blog.netandfield.com/shar/2010/12/xoops-cube-legacy-php-53.html
のようにdeprecatedなエラーが画面に表示される
なぜか.htaccessphp.iniで制限しても表示されるので
# phpのソースに書いてあるのかも(?)
まじめにエラーと向き合う

基本的にこれ
https://php.net/manual/en/migration53.deprecated.php
を見てねですむがログは残しておく

1. "Deprecated: Assigning the return value of new by reference is deprecated in xxx"
そのまま書いてあるとおりなので
リファレンスではなくそのまま返り値にいれる

//$instance =& new $classname();
//を以下に直す
$instance = new $classname();

かなり数が多いので気合で直す

2. "call_user_func_array() expects parameter 1 to be a valid callback, non-static method xxx() should not be called statically in file core/XCube_Delegate.class.php line xxx"
これは第2引数を参照にする

//call_user_func_array($callback, $args);
//を以下に直す
call_user_func_array($callback, &$args);

下記が大変詳しくて参考になる
http://sotarok.hatenablog.com/entry/20090826/1251312215

3. "Deprecated: Function ereg() is deprecated in xxx"
eregはpreg_matchで書き換える

//ereg("Windows",$ua);
//を以下に直す
preg_match("/Windows/",$ua);

4. require_onceでPEAR.phpを/usr/share/pear/PEAR.phpから読もうとする
原因がよくわからないがとりあえずプルパスでファイル名を記述する

//require_once 'PEAR.php';
//を以下に直す
require_once '/home/foo/var/xoops_trust_path/xanhte/lib/PEAR.php';

kibana3でelasticsearchの9200番ポートを公にしない方法

Kibana3というのもありまして - @johtaniの日記 2nd
にあるようにブラウザが動作するマシンからelasticsearchに接続しないといけないが
大人の事情で9200番ポートが使えなかったり
elasticsearchに直結はなーと悩んだときは

httpd.confにこんな感じにして

ProxyPass /es/ http://127.0.0.1:9200/
ProxyPassReverse /es/ http://127.0.0.1:9200/

/var/www/html/kibana/config.jsは

  return new Settings({
    elasticsearch: "https://www.example.net/es",
    ...
  });

とすると9200番への直結も避けられる

あとはApacheHTTPDにBASIC認証など仕込めばよさげ