気になることメモ

日常の気になることを、とにかくメモしていきます。

Go言語、はじめました

なぜか思い立ってGo言語

某製品がGo言語主体で開発されているようなので、いじるためにGo言語を始めます。とりあえず、インストールから…。
手持ちのUbuntu 16.04にインストールしましたが、公式のリポジトリは古いバージョン(1.6)しかないので、1.8を扱っている非公式リポジトリを登録しました。

参考
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go

コマンドを実行すれば、しれっと入ります。

$ sudo apt-get install golang-go
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  golang-1.8-go golang-1.8-race-detector-runtime golang-1.8-src golang-race-detector-runtime
  golang-src
提案パッケージ:
  bzr git mercurial subversion
以下のパッケージが新たにインストールされます:
  golang-1.8-go golang-1.8-race-detector-runtime golang-1.8-src golang-go golang-race-detector-runtime
  golang-src
アップグレード: 0 個、新規インストール: 6 個、削除: 0 個、保留: 0 個。
31.0 MB のアーカイブを取得する必要があります。
この操作後に追加で 169 MB のディスク容量が消費されます。
続行しますか? [Y/n]
<ご参考>某製品について

Hyperledger Fabric 1.0 概要

海芝浦駅へ行きました!

ライトノベル「RAIL WARS!」のアニメに誘われて、聖地巡礼

Facebookには大量の写真をアップロードしたのですが、はてなブログには、大量アップロードできない(というか、1枚1枚アップロードしなければならない)ので、一枚だけです。

f:id:usedk:20141103215448j:plain

でも、こう時代を感じさせる施設というのは、独特のノスタルジーがありますねぇ。僕も昭和生まれだからでしょうかね。言うほど、昭和経験は長くないですが…。今では、当たり目のように平成経験が長いですねー。

また、いろいろな歴史的な産業系施設を巡ってみたいなぁ。

Ubuntu 14.04 LTS でNginx + Fluentd + Easticsearch + Kibana を試してみた

1.はじめに

Ubuntu 14.04 LTSで、Kibanaの実行WebサーバをNginxとした、Nginxのアクセスログ可視化環境を試してみました。
ポイントとしては、Aptリポジトリには、FluetndのパッケージがUbuntu 10.04用と12.04用のものしかありません。そこで、gemパッケージマネージャを用いてFluentdをインストールしました。

<Kibana実行画面>

f:id:usedk:20141004220340j:plain

なお、アクセスログを取得しているNginxは、Kibanaを表示しているNginxのアクセスログです。つまり、Kibanaを操作する度にアクセスログが記録されます。

2.方法

下記の参考サイトを参照しながら、構築しました。各サイトを執筆された方、ありがとうございました。

<参考サイト>
1. Ruby GemからFluentdをインストールする
2. Fluentd + ElasticSearch + Kibana3で簡単に様々なログを可視化・解析する

2.1 前提

  • マシンはVirtualBox仮想マシン1台のみ
  • OSはUbuntu 14.04 Desktop
    (bashはアップデート済み。関係ないけど…。)
  • Nginxはapt-getでインストール済み
  • 全作業はrootで実施

2.2 作業時のポイント

(1) Fluentd実行ディレクトリのセットアップ
(2) 不足パッケージ
(3) Fluentd実行シェル

2.2(1) Fluentd実行ディレクトリのセットアップ

実行ディレクトリのセットアップは、Fluentd公式サイトのインストール手順にある通りです。ポイントとしては、1台のマシンでFluentdの送信側・受信側を構成する点です。具体的には、下記のように同一ディレクトリに2つのFluentd実行ディレクトリをセットアップしました。

# tree fluentd/
fluentd
|-- fluent.conf
|-- fluentd.pid
|-- log
|   |-- fluentd.log
|-- plugin
|-- run_fluentd.sh

2 directories, 4 files

# tree fluentdRecv/
fluentdRecv/
|-- fluent.conf
|-- fluentd.pid
|-- log
|   |-- fluentd.log
|-- plugin
|-- run_fluentd.sh

2 directories, 4 files

2.2(2) 不足パッケージ

「mkmf」(Fluentdインストール時)および「curl-lib」(FluentdのElasticsearchプラグインインストール時)が不足していました。不足は、gemコマンドによりパッケージをインストールする際に不足エラーメッセージが出力されます。mkmfおよびcurl-libは、OS側でapt-get installによりパッケージ追加を行って下さい。

2.2(3) Fluentd実行シェル

最後は、Fluentdの実行シェルです。これは、fluentdコマンドのヘルプを見れば誰でも作れる物で恐縮ですが、こうやって組んだよ、というサンプルとして掲載しておきます。(備忘録用)

<run_fluentd.sh>

#! /bin/sh

fluentd -d fluentd.pid -c ./fluent.conf -o ./log/fluentd.log

fluent.confについては、送信側・受信側それぞれについて、参考サイト2をご参照下さい。また、ログ出力先として、Fluentd実行ディレクトリ内にlogディレクトリを作成し、そこへ出力するようにしました。

3.Kibana実行

下記のコマンドで、各プロセスを実行しました。

# /opt/elasticsearch/elasticsearch -d

# ./run_fluentd.sh  ←各実行ディレクトリで実行

# service nginx start

あとは、http://localhost/kibana をブラウザで参照すればOKです。なお、小ネタとして下記をメモしておきます。

  • Elasticsearchは、/opt/elasticsearchへインストール
  • Kibanaは、/opt/kibanaへインストール
  • KibanaをNginxのコンテンツディレクトリへ入れるため、/opt/kibanaのシンボリックリンクを/usr/share/nginx/htmlに作成

おつかれさまでした!

【小ネタ】PandocでMarkdownからPDF変換

1. PandocでMarkdownをPDFに変換

ネットで調べると、PandocというHaskell製のドキュメント変換ツールでMarkdownからPDFを生成できるらしいです。ということで、Pandoc環境をつくろう!となったのですが、なんか苦労したのでメモです。

対象環境は、以下の通りです。
- Ubuntu 14.04 Desktop
- LaTeXはインストール済み

Ubuntuに対してLaTeX(日本語環境)をインストールするには、下記のコマンドを実行します。

# apt-get install texlive-lang-cjk

参考サイト
1. 多様なフォーマットに対応!ドキュメント変換ツールPandocを知ろう
2. Font OT1/ptm/m/n/9=ptmr7t at 9.0pt not loadable: Metric (TFM) file not found
3. lualatex query

2. Pandocをインストール

PandocをUbuntuへインストールのは、おなじみapt-getでインストールOKです。

# apt-get install pandoc

この状態で変換を掛けてみます。

$ pandoc -t beamer target.md -o target.pdf

するとエラーが出ました。

pandoc: Error producing PDF from TeX source.
! Font \T1/cmr/m/n/10=ecrm1000 at 10pt not loadable: metric data not found or bad.
<to be read again> 
relax 
l.100 \fontencoding\encodingdefault\selectfont

変換されるのをワクワク待っていたので、地味に凹みました。
ネット(参考サイト2.)を見ると、fontsを入れろとのことです。

# apt-get install texlive-fonts-recommended

無事にインストールが終わった後、再度実行してもエラーです。ちなみに実行時、参考サイト1を見ると、下記のオプションで変換するようでした。そのため、これ以後、下記のオプションでPandocを実行します。

$ pandoc input.md -o output.pdf -V documentclass=ltjarticle --latex-engine=lualatex  

下記は実行時のエラーです。

pandoc: Error producing PDF from TeX source.
! Package fontenc Error: Encoding file `eu2enc.def' not found.
(fontenc)                You might have misspelt the name of the encoding.

See the fontenc package documentation for explanation.
Type  H <return>  for immediate help.
...                                              

l.99 \ProcessOptions*

参考サイトの3を見ると、「eneuc」パッケージをインストールしろとの事でした。「apt-cache search eneuc」で検索すると、texlive-xetexパッケージに含まれているようです。texlive-xetexをインストールします。

# apt-get install texlive-xetex

さて、これで再度、Pandocを実行します。下記のオプションで実行します。(再掲)

$ pandoc input.md -o output.pdf -V documentclass=ltjarticle --latex-engine=lualatex

無事にPDFに変換出来ました!

どうも書式がおかしいですが、なんとか、日本語のMarkdownをPDFに変換する事ができました。お疲れ様でした。

【作成途中】Docker+Ansibleで思うこと

1.はじめに

本資料は、Ansibleでdockerコンテナを管理することを考えてみた資料です。

2.dockerとは何か

  • コンテナ
  • ホストマシンのKernel上で動作するため軽快な動作
  • ネットワークはホストOSとのポートマッピングでアクセス
  • Dockerのベストプラクティス記事では、sshでdocker内を操作しない方が良いとのこと

■【翻訳】Dockerコンテナ内でSSHDを実行してはいけない理由 | POSTD

 ⇒ 皆、sshd動かしてるみたいだけどね。便利だからね。

3.Ansibleとは何か

え…
ssh…?
どうしたらいいんだ…(;´Д`)

 ⇒ Ansible公式サイトのドキュメントに下記の記述が。

■Getting Started - Ansible Documentation

As an advanced topic, Ansible doesn’t just have to connect remotely over SSH. The transports are pluggable, and there are options for managing things locally, as well as managing chroot, lxc, and jail containers. A mode called ‘ansible-pull’ can also invert the system and have systems ‘phone home’ via scheduled git checkouts to pull configuration directives from a central repository.

超意訳すると次の解釈でいます。

SSHでのリモート接続は必須じゃないよ~。コンテナの操作は、リモート接続なしでローカルで動作させるAnsibleの使い方が良いんじゃないかな。

あー、そうなんだ…。うーん、AnsibleのPlaybookをローカルで動かすのかな。どういう組合せが良いのかな。わかんないな。
(たしかにコンテナ内でsshdを動作させていた場合、新規にコンテナを作成するごとにsshdのホスト識別IDが変わっちゃうかもしれない。そうすると、鍵認証をしたい場合は面倒かも。)
ちょっと組合せを考えてみようかな。

4.Docker+Ansibleにおける組合せパターンと最適解

想定する組合せパターンは以下の通り。(絵もあとで描く ⇒時間なかった(;´Д`))

  1. Dockerコンテナ(sshあり)+Ansible(コンテナ内へssh接続)
  2. Dockerコンテナ(sshなし)+Ansible(コンテナホストへssh接続)
  3. Dockerコンテナ(sshなし)+Ansible(コンテナホストでローカル実行)
  4. Dockerコンテナ(sshなし)+Ansible(コンテナ内でローカル実行)

 ⇒ 色々と考えたけど、まず、Dockerについて勘違いしていた。

 ⇒ Dockerファイルを綺麗に書かないと、ただ単に「特定コマンドを実行して終了するだけのコンテナ」になっちゃう。(docker runで、とりあえずコンテナを作った場合)

 ⇒ やはりコンテナイメージは、予め仕込みが必要そう。

 ⇒ それでコンテナイメージをどのサーバで実行するか、Ansibleで管理する感じかも。

 ⇒ というわけで、上記の組み合わせでは「2」なんじゃないかなぁ。

 ⇒ すまねぇ!ぶっちゃけ最適解がわからねぇ!(;´Д`)

5.「Dockerコンテナ(sshなし)+Ansible(コンテナホストへssh接続)」をやってみる


目標

Tomcatさんをコンテナ内に立てるよ!


方法

  • tomcatを作るAnsibleのplaybookを作成
  • コンテナホスト上でdockerコマンドを叩くplaybookを作成 ⇒ これは間違い
  • ssh経由でコンテナホスト上のplaybookを実行

(絵を描くよ! ⇒時間なかった(;´Д`))

6.実行結果

やってみた

7.おわりに

正直、使い方がわからねぇ!
きっと未だ見ぬペストプラクティスがあるはず!
Google探索の旅に出るね!

( ゚∀゚)ノシ

【小ネタ】 CentOS 7 に DockerとAnsibleを入れてみた

方法

世の中の優秀な皆様の活動により、
EPELリポジトリyumに追加するだけでOKな感じです。
あとは、サービスの起動だけで良いです。

  1. ELEPリポジトリの追加
  2. yum install docker で Dockerをインストール
  3. yum install ansible で Ansibleをインストール

参考サイト


EPELリポジトリの追加

参考サイトの通りですが、一番簡単なのは、EPELリポジトリの設定を内包しているRPMをダウンロードし、RPMをインストールするだけでOKです。

# wget http://ftp.riken.jp/Linux/fedora/epel/beta/7/x86_64/epel-release-7-0.2.noarch.rpm

# rpm -Uvh epel-release-7-0.2.noarch.rpm

Dockerのインストール

yumコマンドで一発インストールです。何も考えなくて良くて、大丈夫なんだろうかと心配になるほど。コミュニティの皆様に感謝。

# yum install docker

Ansibleのインストール

yumコマンドで(ry

# yum install ansible

Dockerデーモンを自動起動設定

CentOS7から、デーモンの自動起動設定というかデーモンの制御コマンドが変わりましたね。
年寄りにはキツい話です。ただ以前は、chkconfigコマンド、serviceコマンドと、複数のコマンドで制御していたものを、1つのコマンドで制御できるようになったのは良いことかもしれません。

Dockerデーモンの自動起動設定

これだけです。

# systemctl enable docker
ln -s '/usr/lib/systemd/system/docker.service' '/etc/systemd/system/multi-user.target.wants/docker.service'
#

続いて、デーモンを起動させましょう。

# systemctl start docker

これだけです。。怖い。僕、何も理解できてない。大丈夫か…。
Dockerデーモンが起動しているか確認しましょう。

# systemctl status docker
docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
   Active: active (running) since 土 2014-08-23 23:26:38 JST; 2min 6s ago
     Docs: http://docs.docker.io
 Main PID: 19109 (docker)
   CGroup: /system.slice/docker.service
           mq19109 /usr/bin/docker -d --selinux-enabled

 8月 23 23:26:36 localhost.localdomain docker[19109]: [c5d89122.init_networkdriver()] creating new bridge ...er0
 8月 23 23:26:36 localhost.localdomain docker[19109]: [c5d89122.init_networkdriver()] getting iface addr
 8月 23 23:26:37 localhost.localdomain docker[19109]: [c5d89122] -job init_networkdriver() = OK (0)
 8月 23 23:26:38 localhost.localdomain docker[19109]: Loading containers: : done.
 8月 23 23:26:38 localhost.localdomain docker[19109]: [c5d89122.initserver()] Creating pidfile
 8月 23 23:26:38 localhost.localdomain docker[19109]: [c5d89122.initserver()] Setting up signal traps
 8月 23 23:26:38 localhost.localdomain docker[19109]: [c5d89122] -job initserver() = OK (0)
 8月 23 23:26:38 localhost.localdomain docker[19109]: [c5d89122] +job acceptconnections()
 8月 23 23:26:38 localhost.localdomain docker[19109]: [c5d89122] -job acceptconnections() = OK (0)
 8月 23 23:26:38 localhost.localdomain systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.
#

「Active」の項目に「active (running)」と出てますね!これで起動しているようです。


感想

コマンドをいくつか打つだけで、インストールが終わってしまいました。簡単なのが怖い。

【小ネタ】CentOS 7 のSSHのバージョンは6.4

CentOS 7 の SSH のバージョンを確認してみた

いや、もう、見ただけなんですが…。だから、小ネタです(笑)

[root@localhost ~]# rpm -qa | grep ssh
libssh2-1.4.3-8.el7.x86_64
openssh-clients-6.4p1-8.el7.x86_64
openssh-server-6.4p1-8.el7.x86_64
openssh-6.4p1-8.el7.x86_64

CentOS 6.5 で苦労してバージョンアップしたのが、ちょっと寂しい。。