mattintosh note

Hello Raspberry Pi!

Panasonic Let's note CF-N10 のメモリ情報

メモリ増設予定なのでメモ。公式だと最大 8 GB っぽいが、dmidecode で見てみると最大 16 GB だな。+ 4 GB で SSD にすりゃいいか…。

$ sudo dmidecode -t memory
# dmidecode 3.0
Getting SMBIOS data from sysfs.
SMBIOS 2.6 present.

Handle 0x000C, DMI type 16, 15 bytes
Physical Memory Array
    Location: System Board Or Motherboard
    Use: System Memory
    Error Correction Type: None
    Maximum Capacity: 16 GB
    Error Information Handle: Not Provided
    Number Of Devices: 2

Handle 0x000E, DMI type 17, 28 bytes
Memory Device
    Array Handle: 0x000C
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 4096 MB
    Form Factor: SODIMM
    Set: None
    Locator: DIMM 1
    Bank Locator: DIMM 1
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1067 MHz
    Manufacturer: Not Specified
    Serial Number: 61B63AAE
    Asset Tag: Not Specified
    Part Number: Not Specified
    Rank: Unknown

Handle 0x0010, DMI type 17, 28 bytes
Memory Device
    Array Handle: 0x000C
    Error Information Handle: Not Provided
    Total Width: Unknown
    Data Width: Unknown
    Size: No Module Installed
    Form Factor: SODIMM
    Set: None
    Locator: DIMM 2
    Bank Locator: DIMM 2
    Type: Unknown
    Type Detail: Synchronous
    Speed: Unknown
    Manufacturer: Not Specified
    Serial Number: Not Specified
    Asset Tag: Not Specified
    Part Number: Not Specified
    Rank: Unknown

Handle 0x0012, DMI type 16, 15 bytes
Physical Memory Array
    Location: System Board Or Motherboard
    Use: Flash Memory
    Error Correction Type: None
    Maximum Capacity: 8 MB
    Error Information Handle: Not Provided
    Number Of Devices: 1

Handle 0x0014, DMI type 17, 28 bytes
Memory Device
    Array Handle: 0x0012
    Error Information Handle: Not Provided
    Total Width: 8 bits
    Data Width: 8 bits
    Size: 8192 kB
    Form Factor: TSOP
    Set: None
    Locator: Flash ROM
    Bank Locator: Flash ROM
    Type: Flash
    Type Detail: Non-Volatile
    Speed: Unknown
    Manufacturer: Not Specified
    Serial Number: Not Specified
    Asset Tag: Not Specified
    Part Number: Not Specified
    Rank: Unknown

CentOS 6/7 CUI Installation

GUI インストールが嫌いなので。VirtualBox で試してみたけど10分かからずにインストール終わった。(CentOS 6 は5分もあればいける)

CentOS 7

インストーラメニューで TAB キーを押す。

f:id:mattintosh4:20170718221720p:plain

ブートオプションに text を追加して ENTER

f:id:mattintosh4:20170718221740p:plain

タイムゾーンの設定

1 を入力してタイムゾーンの設定へ進む。6 を入力して Asia を選択。

f:id:mattintosh4:20170718221852p:plain

一覧が表示されるので ENTER を押して進む。

f:id:mattintosh4:20170718221956p:plain

71Tokyo を選択。

f:id:mattintosh4:20170718222034p:plain

インストール先(ストレージ)の設定

4 でインストール先の設定へ。

f:id:mattintosh4:20170718222103p:plain

x の付いているストレージがインストール先に指定されている状態。c を押して進む。

f:id:mattintosh4:20170718222208p:plain

x が付いているパーティショニングオプションが選択される。デフォルトは 2 の “Use All Space"(すべての領域)。c を入力して進む。

f:id:mattintosh4:20170718222249p:plain

パーティションスキームを選択する。デフォルトは 2 の “LVM"(Logical Volume Manager)。c を入力して進む。

f:id:mattintosh4:20170718222449p:plain

なお、この画面は TMUX で動いているので CTRL+b, n を押せば隣のシェルウィンドウへ移動することができる。fdiskparted など、パーティショニングに必要なものは一通り揃っているのでここで好みのパーティショニングをすることもできる。

f:id:mattintosh4:20170718224519p:plain

f:id:mattintosh4:20170718224332p:plain

ネットワークの設定

5 を入力してネットワーク設定へ進む。

f:id:mattintosh4:20170718222809p:plain

1 を入力してホスト名を設定する。

f:id:mattintosh4:20170718222853p:plain

ホスト名を入力する。

f:id:mattintosh4:20170719001716p:plain

2 を入力してネットワークアダプタの設定へ進む。

f:id:mattintosh4:20170719001739p:plain

7 を入力して自動起動を有効にする。これを忘れた場合は通常起動後に /etc/sysconfig/network-scripts/ifcfg-eth0ONBOOT=noONBOOT=yes にすればよい。

f:id:mattintosh4:20170719001802p:plain

c を入力して先へ進む。

f:id:mattintosh4:20170719001814p:plain

c を入力して先へ進む。

f:id:mattintosh4:20170719002006p:plain

ルートパスワードの設定

6 を入力して進む。

f:id:mattintosh4:20170719002222p:plain

パスワードと確認用パスワードを入力する。

f:id:mattintosh4:20170718233745p:plain

脆弱なパスワードの場合、注意されるがここでは yes で無視する。

f:id:mattintosh4:20170718233813p:plain

インストー

b を入力して進む。

f:id:mattintosh4:20170718233855p:plain

インストールが開始される。

f:id:mattintosh4:20170718234013p:plain

インストールが終わったら ENTER で再起動する。

f:id:mattintosh4:20170718234052p:plain

CentOS 6

そのうち書く。

Docker で Ubuntu Xenial な Zabbix Server を立てる

CentOS 版やったし、Ubuntu 版もやるよねってことで。

mattintosh.hatenablog.com

CentOS よりは楽な印象。

ubuntu:xenial でコンテナ作る。

docker run -ti --name hogehoge ubuntu:xenial /bin/bash

こっからコンテナ内のシェルで実行していく。

apt-get update
apt-get install -y curl language-pack-ja
curl -O http://repo.zabbix.com/zabbix/3.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.0-2+xenial_all.deb
dpkg -i zabbix-release_3.0-2+xenial_all.deb
rm zabbix-release_3.0-2+xenial_all.deb
apt-get update
apt-get install -y --install-recommends zabbix-server-mysql zabbix-agent zabbix-frontend-php php7.0-bcmath php7.0-mbstring php7.0-xml

なんとびっくり vi すら入ってないので sed で。

sed -i'' '/php_value date.timezone/{s|# ||;s|Europe/Riga|Asia/Tokyo|}' /etc/zabbix/apache.conf

これやっとかないと「PID ファイル作れないんぢゃ!!!」って怒られる。

install -d -o zabbix -g zabbix /var/run/zabbix

mysqld_safe はバックグラウンドで動かさないと返ってこれなくなる。(別の端末で docker exec /bin/bash とかしなきゃいけない)

mysqld_safe &
mysql -uroot
create database zabbix character set utf8 collate utf8_bin;
grant all on zabbix.* to zabbix@localhost
quit

テンプレートからテーブル作る。これが一番時間かかる。

zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix zabbix

一回デタッチしてコミット。すごく…大きいです。

$ docker commit hogehoge ubuntu:zabbix3.0
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              zabbix3.0           f3f706f706f2        26 seconds ago      690.2 MB
centos              zabbix3.0           22e1f36e12f7        12 hours ago        603.5 MB

各種サーバーを起動してみる。

zabbix_server
zabbix_agentd
apache2ctl start

問題なさげ。

f:id:mattintosh4:20170718022808p:plain

使い捨てで起動する場合。

docker run --rm -ti ubuntu:zabbix3.0 sh -c 'mysqld_safe & zabbix_server && zabbix_agentd && . /etc/apache2/envvars && apache2 -DFOREGROUND'

全作業をスクリプト化。

(まだ作ってないけど)Dockerfileでやるときは Apache をフォアグランドに持ってきて動かさないとだめかも。Zabbix Server と Zabbix Agent には --foreground オプションがあるけど root で実行できない。

CMD sh -c '. /etc/apache2/envvars && apache2 -DFOREGROUND'

Docker で CentOS 7 な Zabbix Server を立てる

Docker 覚えよーってことで Zabbix がすぐに使えるコンテナを作ることにした。

いまこんな状態。

  • LXC は使ってるけど Docker はほとんど使ってない
  • Mastodonインスタンスを作るときに Docker を触った
  • 知ってるよ!クジラのアレでしょアレ!!

つまりよく知らない。

Ubuntu に Docker を入れる

とりあえず Docker を使えるように。docker というパッケージはすでに Mac ライクなドックを実現するためのパッケージで使われているので Docker は docker.io というパッケージ。

$ sudo apt-get install docker.io

docker グループに所属していないと毎回 sudo することになるので usermodgpasswd で自分を docker グループに追加しておく。

$ sudo usermod -aG docker $UID

ここで一旦ログアウト。

イメージを入手する

docker images でローカルのイメージを見てみる。当然まだ何もない。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

docker searchcentos にマッチするものを探してみる。デフォルトの表示件数は25件まで。

$ docker search centos
NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                         The official build of CentOS.                   3475      [OK]
jdeathe/centos-ssh             CentOS-6 6.9 x86_64 / CentOS-7 7.3.1611 x8...   77                   [OK]
tutum/centos                   Simple CentOS docker image with SSH access      32
kinogmt/centos-ssh             CentOS with SSH                                 15                   [OK]
centos/postgresql-94-centos7   PostgreSQL 9.4 SQL database server              10
centos/mysql-57-centos7        MySQL 5.7 SQL database server                   8
centos/php-56-centos7          PHP 5.6 platform for building and running ...   6
centos/python-35-centos7       Python 3.5 platform for building and runni...   4
centos/mongodb-26-centos7      MongoDB 2.6 NoSQL database server               4
 :

オフィシャルなリポジトリだけに絞り込みたいときは -f|--filter オプションで is-official=true を追加する。

$ docker search -f is-official=true centos
NAME      DESCRIPTION                     STARS     OFFICIAL   AUTOMATED
centos    The official build of CentOS.   3475      [OK]

STARS が 3 以上のものに絞り込みたい場合は stars=3 とする。

$ docker search -f stars=3 centos
NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                         The official build of CentOS.                   3475      [OK]
jdeathe/centos-ssh             CentOS-6 6.9 x86_64 / CentOS-7 7.3.1611 x8...   77                   [OK]
tutum/centos                   Simple CentOS docker image with SSH access      32
kinogmt/centos-ssh             CentOS with SSH                                 15                   [OK]
centos/postgresql-94-centos7   PostgreSQL 9.4 SQL database server              10
centos/mysql-57-centos7        MySQL 5.7 SQL database server                   8
centos/php-56-centos7          PHP 5.6 platform for building and running ...   6
centos/mysql-56-centos7        MySQL 5.6 SQL database server                   4
centos/mongodb-26-centos7      MongoDB 2.6 NoSQL database server               4
centos/python-35-centos7       Python 3.5 platform for building and runni...   4
centos/redis                   Redis built for CentOS                          3                    [OK]

せっかくなので ubuntu も検索してみる。CentOS より星の数が多い。

$ docker search -f stars=3 ubuntu
NAME                     DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                   Ubuntu is a Debian-based Linux operating s...   6269      [OK]
rastasheep/ubuntu-sshd   Dockerized SSH service, built on top of of...   91                   [OK]
ubuntu-upstart           Upstart is an event-based replacement for ...   74        [OK]
neurodebian              NeuroDebian provides neuroscience research...   37        [OK]
ubuntu-debootstrap       debootstrap --variant=minbase --components...   30        [OK]
32bit/ubuntu             Ubuntu for i386 (32bit)                         30
armhf/ubuntu             Ubuntu is a Debian-based Linux operating s...   27
nuagebec/ubuntu          Simple always updated Ubuntu docker images...   22                   [OK]
tutum/ubuntu             Simple Ubuntu docker images with SSH access     18
ppc64le/ubuntu           Ubuntu is a Debian-based Linux operating s...   10
sameersbn/ubuntu                                                         9                    [OK]
aarch64/ubuntu           Ubuntu is a Debian-based Linux operating s...   9
nimmis/ubuntu            This is a docker images different LTS vers...   7                    [OK]
i386/ubuntu              Ubuntu is a Debian-based Linux operating s...   7
libmesos/ubuntu                                                          3
darksheer/ubuntu         Base Ubuntu Image -- Updated hourly             3                    [OK]

よくわからない場合は https://hub.docker.com/explore/ を見に行けばいいんじゃないかな。

とりあえず CentOS 入れましょう。NAME[:TAG] 書式でタグが指定できます。タグの一覧は https://hub.docker.com/r/library/centos/tags/ とかで。

$ docker pull centos:latest

端末上でタグの一覧が見たければ https://registry.hub.docker.com/v1/repositories/${name}/tags の結果を jq でパース。

$ curl -s 'https://registry.hub.docker.com/v1/repositories/centos/tags' | jq -r .[].name
latest
5
5.11
6
6.6
6.7
6.8
6.9
7
7.0.1406
7.1.1503
7.2.1511
7.3.1611
centos5
centos5.11
centos6
centos6.6
centos6.7
centos6.8
centos6.9
centos7
centos7.0.1406
centos7.1.1503
centos7.2.1511
centos7.3.1611

docker images でイメージを見てみます。名前やタグを指定すれば絞り込みができます。

$ docker images centos:latest
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              36540f359ca3        10 days ago         192.5 MB

コンテナを作る

docker run でコンテナを作ります。

  • -i|--interactive:接続されていなくても標準入力を開いたままにします
  • -t|--tty:疑似端末を割り当てます
  • --rm:コンテナを自動的に削除します
$ docker run -ti centos
[root@dd4b64cdb392 /]# cat /etc/system-release
CentOS Linux release 7.3.1611 (Core)
[root@dd4b64cdb392 /]#

別の端末で docker ps を使って稼働中のコンテナを確認してみる。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
dd4b64cdb392        centos:latest       "/bin/bash"         38 seconds ago      Up 35 seconds                           hungry_blackwell

exit や Ctrl+d でコンテナを終了させる。デタッチだけであれば Ctrl+p, Ctrl+q。

今度は -d|--detach で起動。

$ docker run -dti centos
762ea423472ea002b3c28bb88841bc7a66ce5f3b2b7257404ecb022d1cc4d562
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
762ea423472e        centos              "/bin/bash"         7 seconds ago       Up 4 seconds                            modest_bose

docker exec でコマンドを与えればコンテナ内で実行してくれる。

$ docker exec modest_bose cat /etc/system-release
CentOS Linux release 7.3.1611 (Core)

アタッチ。

$ docker attach modest_bose
[root@762ea423472e /]#

別のシェルを起動してそっちでアタッチ。

$ docker exec -ti modest_bose /bin/bash
[root@762ea423472e /]#

デタッチしてまたアタッチの流れ。

$ docker run -ti centos
[root@f48847bbf999 /]# ここで Ctrl+p, Ctrl+q を押すとデタッチされる
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f48847bbf999        centos              "/bin/bash"         10 seconds ago      Up 6 seconds                            agitated_morse
$ docker attach agitated_morse
[root@f48847bbf999 /]#

コンテナ名は毎回変わるので固定したい場合は docker run --name my-container のように --name オプションでコンテナ名を指定すればよい。

コンテナが量産されるんだけど…

必要なものがあればコミットしときましょう。

$ docker commit コンテナ名 イメージ名

全部要らないならまとめて消せばいいんじゃないかな。

$ docker rm `docker ps -qa`

Zabbix サーバ用の Dockerfile を書くよ

Docker に簡単に慣れたところで Zabbix サーバを構築するための Dockerfile を書いてみることにした。

が、よくよく調べてみると docker build では --privileged オプションが使えないので systemd が動かないらしい。まぁなんとかなるだろ。

Dockerfile を作っている途中、何故か yum install zabbix-server-mysql をしても /usr/share/doc/zabbix-server-mysql-3.0.* が作成されず、SQL のテンプレートがコピーされない問題があった。yum install --downloadonlyyumdownloader zabbix-server-mysqlRPM を落としてきて RPM でインストールするとインストールされる…謎。

とりあえず今のところはローカル再インストールで済ませてる。

# yumdownloader zabbix-server-mysql
# rpm -ivh --replacepkgs zabbix-server-mysql-3.0.*.rpm
# rm -f zabbix-server-mysql-3.0.*.rpm

最初から入れるなら依存関係先に入れないと RPM が怒る。

# yum install -y http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
# yum install -y `yum deplist zabbix-server-mysql | awk '/provider:/{ print $2 }' | grep -v zabbix-server-mysql | sort -u`
# yumdownloader zabbix-server-mysql
# rpm -ivh zabbix-server-mysql-3.0.*.rpm
# rm -f zabbix-server-mysql-3.0.*.rpm

それか RPM をぶちまけるか。

# rpm2cpio zabbix-server-mysql-3.0.* | cpio -idmv

mysqld_safe はバックグラウンドで動かせないし、かなり無理矢理だけどとりあえずモノは出来た。Dockerfile は Gist で作業中。

$ git clone https://gist.github.com/6c7b79b48c11eec3181fc252dd5afb5a.git docker-test
$ cd docker-test
$ docker pull centos:centos7
$ docker build .
$ docker run -ti --name zabbix -p 80:80 -p 10051:10051 ${IMAGE_ID}

systemd で動くやつ作ろうよ

systemctl start zabbix-server したいじゃん?

centos:centos7 イメージからベースになる temp コンテナを作って --privileged/sbin/init を実行させておく。

$ docker run -dti --privileged --name temp centos:centos7 /sbin/init

temp コンテナで /bin/bash を起動。

$ docker exec -ti temp /bin/bash

コンテナの中にスクリプトをぶち込む。

localedef -i ja_JP -f UTF-8 /usr/lib/locale/ja_JP.UTF-8
yum install -y http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-agent mariadb-server
yumdownloader zabbix-server-mysql
rpm -ivh --replacepkgs zabbix-server-mysql-3.0.*.rpm
rm -f zabbix-server-mysql-3.0.*.rpm
systemctl start mariadb
systemctl enable mariadb
echo 'create database zabbix character set utf8 collate utf8_bin;' | mysql -uroot
echo 'grant all on zabbix.* to zabbix@localhost;' | mysql -uroot
zcat /usr/share/doc/zabbix-server-mysql-3.0.*/create.sql.gz | mysql -uzabbix zabbix
sed -i'' '/# php_value date\.timezone/{s|# ||;s|Europe/Riga|Asia/Tokyo|}' /etc/httpd/conf.d/zabbix.conf
systemctl start httpd
systemctl enable httpd
systemctl start zabbix-server
systemctl enable zabbix-server
systemctl start zabbix-agent
systemctl enable zabbix-agent
exit

temp コンテナから zabbix3.0 イメージを作成。サイズは約600MB。

$ docker commit temp zabbix3.0
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
zabbix3.0           latest              a3c42c570541        21 minutes ago      602.8 MB

temp コンテナを停止して削除。

$ docker stop temp
$ docker rm temp

run するときは --previleged を忘れずに。

$ docker run --privileged -d -p80:80 zabbix3.0 /sbin/init

これでいつでも Zabbix に会えるね!!!(特に嬉しくはない)

f:id:mattintosh4:20170716214352p:plain

会社内での説明用に撮ったもの。YouTubeエディタいいね。

Zabbix Sender 無しで Zabbix Server にデータを送る

Zabbix API について色々調べてたけど…

「あれ?これってアイテムのデータ追加できなくない?」

という問題にぶち当たった。Slack みたいにデータを追加できるものかと思ったのだが、どうも "request": "sender data" を受け付けない。Zabbix のドキュメントルートを探してみても sender data という文字列は見当たらない。ということは Zabbix Sender が使えないデバイスはデータの追加が出来ないのでは?

いやいやでも Python のモジュールとかあるじゃん。

ってことで Python 系の Zabbix モジュールを色々探して読んでみた。

github.com

このコードを見て、サーバーに送る部分で何をやってるかというと、

  1. Zabbix サーバーの 10051 ポートに接続する
  2. JSON ぶん投げる

以上。マジでこれしかやってないっぽい。

ってことは nc コマンドで接続して JSON 投げるだけで出来るんじゃね?

$ nc 10.0.3.3 10051 <<!
{
    "request": "sender data"
,   "data": [
        {
            "host": "raspberrypi"
        ,   "key": "room_temperature"
        ,   "value": "0"
        }
    ]
,   "clock": `date +%s`
}
!
ZBXDZ{"response":"success","info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000074"}

Zabbix Sender 要らないやんけええええええええ

Zabbix Sender とは一体…。

つまり Zabbix Sender さんのお仕事は -s-k-o オプションで受けった引数から JSON を生成して -z のサーバに投げてるだけということだ。これなら Zabbix Sender をインストールできないデバイスでも使えそう。

FlashAir の Lua でも使おうと思ってるので Lua でソケット通信を簡単に書いてみる。Lua は全然やったことがないから作法とかがよくわからない。

#!/usr/bin/lua

local socket = require("socket")
local client = assert(socket.connect("10.0.3.3", 10051))
local json = [[
{
    "request": "sender data"
,   "data": [
        {
            "host": "alarmpi"
        ,   "key": "room_temperature"
        ,   "value": "0"
        }
    ]
}
]]
client:send(json)
socket.sleep(0.5)
local line = client:receive()
print(line)
client:close()

一応 Zabbix にデータは入るんだけど、client:receive()nil で返ってきちゃうなぁ…。そもそも FlashAir で socket が使えるのかどうかわからんな…。HTTP リクエストはできるから REST かなぁ。

$ lua zabbix_sender.lua
nil