検討!目論見委員会Z

サーバインフラ屋10年余りやってる人

Immutable Infrastructureの擬人化やってみた

どうもこんにちは。毎度の季節でございます。夏コミで薄い本を頒布します。 スペースは、8/17(日) 3日目 西き36b「松浦リッチ研究所」です。詳細は第7開発セクションのサイトをご覧ください

ななかInside PRESS vol.5

前回の内容はこんな感じ Chefの擬人化やってみました - 検討!目論見委員会Z でした。webサービス屋がよってたかって作る技術マガジンも、早いもので第5号です。表紙はこちらです。Immutable Infrastructureを擬人化してみました。

f:id:tboffice:20140810003754j:plain

Immutable Infrastructureの擬人化を考えていたところ、神様がいいんじゃないかと思いました。サーバやインスタンスを生み出すまさに神様なイメージです*1

特集記事が2つあります。

1つ目が表紙にもなっている「Immutable Infrastructureの最適解を探る」です。私が書きました。先に結論から申し上げますと、いま出ている技術やレガシーな技術を組み合わせて、安全なデプロイをやっていこうというという趣旨です。まずは、Immutable Infrastructureが生まれた背景を簡単に説明し、次に、それを実現するためのソフトウエアのいくつかを実際に触ってみました。 Serverspec、Ansible、Vagrant、Docker、Serfを取り上げています。実際に触ってみると罠にハマります。今回、これらの罠を回避しているので、とりあえずどういうものか試してみたいという方にはうってつけな入門書だと思います。なお、実験環境として、DigitalOceanを使いました。 今回の執筆で、1ドルくらいかかりました*2

f:id:tboffice:20140810004952p:plain

基本的にCentOSUbuntuDebianFedoraが選べ、Docker入りのUbuntuイメージなんかもあります。1分くらいでDroplet(DigitalOceanでのインスタンスの名称)が立ち上がってすぐ使えます。環境がすぐ欲しいなという時にオススメです。 こちらから登録していただけると検証費の足しになります。

2つ目の特集は、「恐怖 シェルショッカーの掟 ~Webアプリ早く作れぬ言語は rm -rf の巻~」です。最終的にシェルスクリプトはショッピングカートを作っています。こちらの記事を書いたのは、松浦リッチ研究所Rich Mikanさんです。

今回、「第7開発セクション」は抽選漏れになりました。前回のコミティアで「第7開発セクション」で私が店番をしていたところ、たたまたまrich mikanさんが通りかかりまして、今回、特集記事を書いていただき、「松浦リッチ研究所」様に本を置かせていただけることになりました。

その他、記事が6本あります。これについては、またいずれ。

今回表紙を書いていただきました、により様、 査読を担当していただきました id:mtgto、 その他、IIの執筆でお世話になりました方々 (@JAGAxIMO, @eigo_s, @r_rudi, @ringohub)、 この場をお借りしてお礼申し上げます。ありがとうございました。またよろしくお願いします。

コールドフォイルという印刷について

印刷沼へようこそ。

表紙は、みかんの樹さんに印刷をお願いし、コールドフォイルという印刷を使っています。表紙がキラキラしています。まだ手元にないので、どんな刷り上がりになっているか分かりません。具体例は野口尚子 「小さな雑誌の編集者(あるいは在庫タワーの管理人)たち」 第1回 PLOTTER(前編):個人発注で工場を動かす - DOTPLACEをご覧ください。べ、べつにPLOTTER vol.2をみて今回コールドフォイルを使おうなんておもったんじゃないんだからねっ!*3

表紙を刷った機械はSpeedmaster CX 102 全長20メートルほど。

160ページになってしまった件

表紙込で160ページになってしまいました。特集記事だけで、それぞれ40ページ強あります。背幅は10mmと、これまででいちばん厚いです*4。100冊積み上げると1mになります。想像できてません。 コールドフォイルでこの厚みの本を見たことがないので、今から楽しみです*5

通販

2014/8/17よりCOMIC ZINさんでも販売しております。まだ情報が出ていませんが、通販ページはこちらになる予定です。

解説Coreutils 第2版

f:id:tboffice:20140502221312j:plain

第2版ができております。この画像は初版です。

内容については今度はCoreutilsを擬人化しました??? - 検討!目論見委員会Zをご覧ください。第2版の修正点は、testコマンドを重点的に加筆、また、索引をつけました。表紙に「第2版」と書かれています。 初版が若干残っており、コミケでも最初の方は初版がおいてあります。「2版ちょうだい」といってもらえれば第2版を引っ張り出しますのでお気軽にお声がけください。

コミティア109

に「第7開発セクション」でスペースを頂いております。日時・スペースナンバーは、2014/8/31 (日) W23b です。 「ななかInside PRESS vol.5」「ななかInside PRESS vol.4」「解説Coreutils第2版」を持ち込む予定です。こちらもよろしくお願いします。

*1:アルティメットまどかみたいな感じ

*2:7月は0.67ドル、8月は0.16ドル

*3:適当

*4:本文は上質90kg

*5:重さに目を逸らしながら

Sphinxをアップデートしたらchapterが変わっていた件

環境

  • CentOS release 5.7 (Final)
  • さくらのVPS
    • 安定しすぎているので正直あまり手を入れたくない
  • そろそろImmutable Infrastructureを活かしてポータブルな環境づくりをしていきたい

症状

  • SphinxでビルドしたPDFのchapterの見た目が変わっていた

変わる前

f:id:tboffice:20140727110631p:plain

変わってしまった後

f:id:tboffice:20140727110735p:plain

対策

  • easy_install でインストールした Sphinx 1.2.2 を 1.1.3にダウングレード
  • easy_installにuninstall機能はないので、pipをインストールして、
# pip uninstall Sphinx
# easy_install-2.6 Sphinx
  • こんなんで元に戻った
  • なお、pipにSphinx 1.1.3のパッケージはないようだ

原因

  • sphinxmanual.clsがかわっているぽいのでこの辺りだとおもうけど、いつみてもlatexのクラスファイルは波瀾万丈
[user@host]/home/nanaka/sphinx-template% diff /usr/lib/python2.6/site-packages/Sphinx-1.2.2-py2.6.egg/sphinx/texinputs/sphinxmanual.cls /usr/lib/python2.6/site-packages/Sphinx-1.1.3-py2.6.egg/sphinx/texinputs/sphinxmanual.cls
2c2
< % sphinxmanual.cls for Sphinx (http://sphinx-doc.org/)
---
> % sphinxmanual.cls for Sphinx (http://sphinx.pocoo.org/)
100d99
<   \pagenumbering{roman}%
118d116
< \pagenumbering{alph}
136,148d133
< 
< % Same for the indices.
< % The memoir class already does this, so we don't duplicate it in that case.
< %
< \@ifclassloaded{memoir}{}{
<   \let\py@OldTheindex=\theindex
<   \renewcommand{\theindex}{
<     \cleardoublepage
<     \phantomsection
<     \py@OldTheindex
<     \addcontentsline{toc}{chapter}{\indexname}
<   }
< }
  • こっちも原因かも
[user@host]/home/nanaka/sphinx-template% diff /usr/lib/python2.6/site-packages/Sphinx-1.2.2-py2.6.egg/sphinx/texinputs/ /usr/lib/python2.6/site-packages/Sphinx-1.1.3-py2.6.egg/sphinx/texinputs/                
diff /usr/lib/python2.6/site-packages/Sphinx-1.2.2-py2.6.egg/sphinx/texinputs/Makefile /usr/lib/python2.6/site-packages/Sphinx-1.1.3-py2.6.egg/sphinx/texinputs/Makefile
19c19
<    for f in *.pdf *.png *.gif *.jpg *.jpeg; do extractbb $$f; done
---
>    for f in *.pdf *.png *.gif *.jpg *.jpeg; do ebb $$f; done
23c23
<    -for f in *.idx; do mendex -U -f -d "`basename $$f .idx`.dic" -s python.ist $$f; done
---
>    for f in *.idx; do mendex -U -f -d "`basename $$f .idx`.dic" -s python.ist $$f; done
diff /usr/lib/python2.6/site-packages/Sphinx-1.2.2-py2.6.egg/sphinx/texinputs/sphinx.sty /usr/lib/python2.6/site-packages/Sphinx-1.1.3-py2.6.egg/sphinx/texinputs/sphinx.sty
11,12d10
< \@ifclassloaded{memoir}{}{\RequirePackage{fancyhdr}}
< 
13a12
> \RequirePackage{fancyhdr}
33,34d31
< % For parsed-literal blocks.
< \RequirePackage{alltt}
51,57d47
< % use pdfoutput for pTeX and dvipdfmx
< \ifx\kanjiskip\undefined\else
<   \ifx\Gin@driver{dvipdfmx.def}\undefined\else
<     \newcount\pdfoutput\pdfoutput=0
<   \fi
< \fi
< 
107c97,98
< \pagestyle{empty}               % start this way
---
> \pagestyle{empty}               % start this way; change for
> \pagenumbering{roman}           % ToC & chapters
123,126d113
<     % define chaptermark with \@chappos when \@chappos is available for Japanese
<     \ifx\@chappos\undefined\else
<       \def\chaptermark##1{\markboth{\@chapapp\space\thechapter\space\@chappos\space ##1}{}}
<     \fi
141c128
< \newcommand{\strong}[1]{{\textbf{#1}}}
(以下略)
  • 私信:私はお手上げなので、打田さん、よろしくお願いします(投げた

ssh公開鍵を対話なしで作る

公開鍵の作成に失敗した - 検討!目論見委員会Z

ssh秘密鍵と公開鍵をssh-keygenコマンドでEnterを1回だけ打つだけで作る方法があった。ssh-keygen batch modeで検索したら見つかった。

Bash script for generating ssh keys - Stack Overflow

こんな感じかな。

ssh-keygen -t rsa -N "" -f .ssh/id_rsa

もし、.sshがなかったら、

ssh localhost

してyesかno打って.sshディレクトリを作れば良い。これバッチモードできないぽい。 愚直にやるには、やっぱこれだね~

mkdir -m 700 .ssh

トッポは最後までチョコたっぷりだそうです。そうですか。

最近気づいたこと(php.iniの位置について)

php.iniが /usr/local/lib/php.ini にあってなんでこんな中途半端なところにあるんだろうと思っていた

なにげなくphp -iの結果を読んでいたりした。

% php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => /usr/local/lib/php.ini

ああ、そういうことかーと思ったりした。etcじゃないんだlibなんだ。なんでだろう。

おしまい

md2inaoを使ってみるの巻

md2inao?

md2inaoというmarkdownから技術評論社の雑誌や書籍のInDesignのタグ付きテキストに変換するツールがあったので使ってみよう。夏コミの本に間に合えば使う感じで一つ(げーって言いたそうな人がいるけど無視

環境はさくらのVPS CentOS5.7(やや古い、が安定しているのに越したことはない)

結論

はい、いきなり結論です。

  • InDesign職人カモーン
    • InDesignのタグ付きテキストに変換するだけなので、タグに対応するスタイルをInDesignで作っておかないといけません[要出典][やってないだけです。はいすいません]
    • InDesignスクリプト処理できんのやろか・・・ ・・・・ ・・・・・・(頭を抱える)
  • CentOS 5.7という古い環境で実行してはいけません
    • perl 5.10以上の環境で実行しましょう。あと依存するcpanのライブラリでコケます[解決済み]

じゃあ早速、動かしてみよう!(てさぐれ!部活ものっぽいアレ

$ git clone git@github.com:naoya/md2inao.git

CPANでモジュールをインストールしておかないといけないのでやってやります。数分かかります。

$ curl -L http://cpanmin.us | perl - --sudo Text::Md2Inao
<snip>
--> Working on Text::Md2Inao
Fetching http://www.cpan.org/authors/id/G/GF/GFUJI/Text-Md2Inao-0.11.tar.gz ... OK
Configuring Text-Md2Inao-0.11 ... OK
Needs perl 5.010_000, you have 5.008008
! Installing the dependencies failed: Installed version (5.008008) of perl is not in range '5.010_000'
! Bailing out the installation for Text-Md2Inao-0.11.

で、案の定失敗します。

原因と対策

perlのバージョンが古い

  • CentOS5のperlは5.8なのでアップデートしないといけないのです
  • perl 5.10.1のソースを持ってきてビルドしてインストール。/usr/local/binに入るので $ rehashすればあら不思議[適当]

FindBin-libs-1.9のビルドで落ちる

  • perlのバージョンをアップデートして再度モジュールをインストール
  • テストでコケる
#   Failed test 'use FindBin::libs;'
#   at t/01-use-ok.t line 7.
#     Tried to use 'FindBin::libs'.
#     Error:  syntax error at /home/chiba/.cpanm/work/1401640234.28022/FindBin-libs-1.9/blib/lib/FindBin/libs.pm line 185, near "abs_path
#             catpath "
# syntax error at /home/chiba/.cpanm/work/1401640234.28022/FindBin-libs-1.9/blib/lib/FindBin/libs.pm line 322, near "abs_path catdir "
# Compilation failed in require at t/01-use-ok.t line 7.
# BEGIN failed--compilation aborted at t/01-use-ok.t line 7.
# Looks like you failed 1 test of 1.
  • 1.9って数日前にでてたのね

  • 最後に念のため

$ curl -L http://cpanmin.us | perl - --sudo Text::Md2Inao

実行してみよう

うさげを見よう

$ cd md2inao/bin
$ ./md2inao.pl
Usage:
        md2inao.pl [--format=in_design|html|inao] your_markdown_text.md > inao_format.txt
  • うさげですね

mdファイルを食わせてやろう

./md2inao.pl ../old_files/00_sample.md > taggedtext.txt
[warn] リストは63文字まで!(現在71使用):
●リスト1.1::キャプション(コードのタイトル)
function **foo**(a) { // コード内強調
    alert(a); (注:こんな風にコメントがつけられます)
}

___foo('bar');___ // コード内___イタリック___★本文と記法を変えています★
**foo('baz');**   // コード内**強調**



[warn] 本文埋め込みリストは55文字まで!(現在74使用):
$ command  **foo** // コマンド内強調
___foo('bar');___  // コマンド内___イタリック___★本文と記法を変えています★
bar (注:こんな風にコメントがつけられます)

(注:見出し的にも使えます)
function bar(b) {
    alert(b);
}



Use of uninitialized value $1 in length at /home/user/repo/md2inao/lib/Text/Md2Inao/Builder/InDesign.pm line 203.
Use of uninitialized value $1 in length at /home/user/repo/md2inao/lib/Text/Md2Inao/Builder/InDesign.pm line 203.
Use of uninitialized value $1 in length at /home/user/repo/md2inao/lib/Text/Md2Inao/Builder/InDesign.pm line 203.
Use of uninitialized value $1 in length at /home/user/repo/md2inao/lib/Text/Md2Inao/Builder/InDesign.pm line 203.
Use of uninitialized value $1 in length at /home/user/repo/md2inao/lib/Text/Md2Inao/Builder/InDesign.pm line 203.
  • 出てきたファイルを見てみよう
% head taggedtext.txt
<SJIS-MAC>
<ParaStyle:本文>章番号:3章(書籍や特集の場合)
<ParaStyle:本文>連載回数:第5回(連載の場合)
<ParaStyle:本文>タイトル:章のタイトルや連載の各回タイトル
<ParaStyle:本文>キャッチ:章のキャッチや記事の各回キャッチ
<ParaStyle:大見出し>見出し1(大見出し、節)
<ParaStyle:中見出し>見出し2(中見出し、項)
<ParaStyle:小見出し>見出し3(小見出し、目)
<ParaStyle:本文> 段落冒頭の字下げは、このように手動でお願いします。改行は、(改行)このように自動で取り除かれます。
<ParaStyle:本文> 通常の本文<CharStyle:太字>強調(ボールド)<CharStyle:>通常の本文<CharStyle:イタリック(変形斜体)>斜体(イタリック)<CharStyle:>通常の本文<CharStyle:コマンド>インラインのコー ド<CharStyle:>通常の本文<cstyle:上付き><fnStart:><pstyle:注釈>注釈ですよ。<fnEnd:><cstyle:>通常の本文<cFont:Key Mother><00A9><cFont:>(←キーボードフォント)<CharStyle:赤字>赤文字<CharStyle:>通 常の本文<cr:1><crstr:ほかむら><cmojir:0>外村<cr:><crstr:><cmojir:>(←ルビ)。
  • よし、あとは任せた[誰]
  • お疲れ様でした
  • 解散!!!