そんな今日この頃でして、、、

コード書いたり映画みたり。努力は苦手だから「楽しいこと」を探していきたい。

今更ながらCentOS6.4にDocker導入してみる

アプリ側の人間なんでインフラいじりは本業ではないのだけど、だからこそその辺の煩わしさを減らして気軽に色々試したいなーということでDocker勉強始めてみた。

Docker導入

インストール

EPELより

# yum install -y docker-io

起動

# service docker start

バージョン確認

# docker version
Client version: 1.0.0
Client API version: 1.12
Go version (client): go1.2.2
Git commit (client): 63fe64c/1.0.0
Server version: 1.0.0
Server API version: 1.12
Go version (server): go1.2.2
Git commit (server): 63fe64c/1.0.0

自動起動設定

# chkconfig docker on

使ってみる

Hello world

とりあえず仮想CentOS上でechoしてみる。

# docker run centos echo "Hello world"
Unable to find image 'centos' locally
Pulling repository centos
b157b77b1a65: Download complete
511136ea3c5a: Download complete
34e94e67e63a: Download complete
Hello world

最初はイメージをダウンロードしてきた後にコマンドが実行される。

結構サクッと。

当たり前だけど二度目はダウンロードなし。

# docker run centos echo "Hello world"
Hello world

コンテナを起動してみる

# docker run -i -t centos /bin/bash
bash-4.2#

オプションはインタラクティブ・ターミナルの意。

こんな感じでコンテナ内に入れる。

ここで諸々の操作をして環境を作る。

ちなみにexitコマンドで抜けられる。

コンテナ確認

docker ps -aで起動していたコンテナの確認ができる。

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
a67741966c87        centos:latest       /bin/bash           2 minutes ago       Exited (0) About a minute ago                       tender_sammet

ちなみに消すには

# docker rm [コンテナID]

イメージの保存

環境作ったらイメージを保存。

# docker commit 3fd1c5b1e0a4 blue1st/test
933754bdc3d046930813b8f42ec36b8de3a6079fcedb5e1129cf47361652f354

IDとイメージ名を指定する。

イメージ名は「ユーザ名/〜」の形が一般的らしい。

imagesで確認できる。

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
blue1st/test        latest              933754bdc3d0        28 seconds ago      243.7 MB
centos              latest              b157b77b1a65        4 days ago          243.7 MB

ほいでもって、runでもって起動できる

# docker run -i -t blue1st/test
bash-4.2#

ちなみにイメージ削除は

# docker rmi [イメージID]

バックグランド実行とか

現実には何がしかのコンテナで何かしらのミドルウェアなりアプリなりを動かし、ポートフォワーディングでホストから接続する形になると思う。

この場合は

# docker run -p [ホストのポート]:[コンテナのポート] -d [リポジトリ]

みたいな形で起動する。

ちなみに止める時は

# docker kill [コンテナID]

その他

実用上は、必要な操作等を記述したDockerfileを使って自動でコンテナの環境を作成してそれを使っていくらしい。

こっちの方はおいおい勉強していきたい。


ちょっと前まではVagrant+Chefで環境つくって云々と考えていたけど、何気に勉強が必要な要素多いしサーバリソース食うしで実のところやる気がダダ下がってったんだけど、こっちは割とシンプルでサクッとできそうなのが好感触。

CentOS6.4にVNC導入、VirtualBoxを使ってリモートWindows環境を作成

MacBook Airをメインに使うようになってから数年。

存外「Windowsじゃないと」な状況というのはそんなにないもんで、不調なWindowsデスクトップも何年もそのままになっている。

(Web系エンジニア的にはむしろOS Xの方が都合が良いことが多い)


とはいえ、偶にWindows環境が必要となることもある。

ゲームなんかはやはりWindowsが優勢だし、周辺機器との兼ね合いで必要になったりする。

そんな時に毎度デスクトップの所に行って作業するのも面倒だったりするので、CentOSサーバ上にWindows環境を構築し、VNC経由でリモート接続できるようにした。

xwindow 導入

VNCを動かすためには、ひとまずGUI環境を使えるようにする必要がある。

とりあえずインストール

# yum -y groupinstall "X Window System" "Desktop" "General Purpose Desktop"

特に問題なくインストールできた。

起動

# startx

変なエラーがでなければOK。

VNCサーバー導入

リモート接続するためにVNCサーバを導入する。

インストール

yum -y install tigervnc-server

CentOS6系はvnc-serverではなく、tigervnc-serverらしい。

接続設定

/etc/sysconfig/vncserversにある設定ファイルに必要な設定を記述する。

元々のコメントアウトされている記述を下記のように書き換える。(USERにVNC接続するユーザ名を記述)

ちなみに、ここの"1:〜"の部分の数字が接続時のポート番号590Xになる。

VNCSERVERS="1:USER"
VNCSERVERARGS[1]="-geometry 1024x768 -nolisten tcp -nohttpd"

パスワード設定

VNCで接続した際の認証パスワードを設定する。

接続設定で設定したユーザにsuで成り、下記のコマンドでパスワード設定。

$ vncpasswd

画面設定

設定ファイルを出力するために、一旦起動して止める。

# /etc/init.d/ vncserver start
# /etc/init.d/ vncserver stop

起動ユーザのホームディレクトリに

.vnc/xstartup
というファイルが出力されているので、最下部をコメントアウト+記述追加する。

#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &

export GTK_IM_MODULE="scim"
scim -d &
gnome-session &

起動

再度起動する。

# /etc/init.d/vncserver start

接続

OS Xなら、open [サーバのIP]:5901で接続できる。

Windowsなら何かしらのクライアントを導入しよう。

VirtualBox導入

Chefの勉強のために既にやっていたので割愛。

CentOSにVirtualBoxをインストール、あとNerfの話 - そんな今日この頃でして、、、

そこそこ面倒くさかった記憶がある。

Windows導入

あとは普通にVNC接続してGUIで操作していく。

VirtualBoxを起動し、普通にディスクからインストール。

今手持ちでは(あまり望ましくはないが)WindowsXPがあるのでインストール。

特に問題なく起動できた。


とりあえずここまででリモートのWindows環境を作ることができた。

VirtualBoxにより普通にサーバにつないだUSB機器も使うことができた。


将来的にはWindows8を入れて常時起動させておき、必要に応じてリモートデスクトップソフトで接続して使用するってのが音も出るし操作感的にもベターかもしれない。


ただ、僕は別にリモートでエロゲがやりたかったわけじゃなくて、主目的はNasneからBDに録画データを焼きたかったからだったりする。

付属ソフトにインストール(実はこれだけだとダメで、ネットからアップデートを落とさないとダメ)、機器の接続までは全く問題無かったのだが、どうもソフトの不具合によりドライブが認識されないorz

どうやらこの事象は他の環境でも起こってるようなので、ソフト側のアップデート待ちになりそう。(頃合い的に2014が出るのかも)

Windowsデスクトップでやってみようとしたら、こっちはこっちでUSB電源の電力が足りず。

ACアダプタなりなんなりでの電源強化手段が必要なので、試す前に心が折れた。


そんなわけで主目的からすると7割型サクサク進んだのに、最後の最後で断念・・・


追記

結局BD焼きは不本意ながらもWindows8デスクトップでやることに。

こっちに関してはちゃんとドライブ認識できた。(IEコンポーネント利用してるっぽく、OSとIEの状況が重要らしい)

正直ソフトは使いにくいのだが、他に選択肢がないので致し方無い。

CentOSでwmaファイルをmp3に変換する

ゴールデンウィークは有給使ってガッツリ11連休取った割に、全然有効活用できてなくて絶望する今日この頃。

いつも「仕事したくない、休みたい」とか言ってるけど、いざガッツリ休みあっても存外使い切れないもんですな。


さて、ゴールデンウィーク後半は専らVitaをいじって遊んでいた。

VitaにはNASにアクセスして音楽や動画を再生したり画像を表示することができるnaspocketというアプリがある。

奇しくも前にNASを構築して昔からのファイル資産を移していたので、ごろごろしながら昔のメディアファイルを色々再生して楽しんでいる。

CentOSでメディアサーバを立てる〜その2:MediaTombでメディアサーバを構築しよう〜 - そんな今日この頃でして、、、

iPadほど重くないしスマホよりは画面が大きいしで中々快適で良い感じである。

ただ、Vitaではwmaやwmvファイルを再生できないのが不満だったりする。

(まぁ、それ言うとスマホのアプリも大概はwma形式ダメだったりするけど)


wmaはWindow Media Player用のエンコード形式。

Media PlayerでCDを取り込んだ際のデフォルトがこれだったりするので、iPodが影も形も無い時代からPCを弄ってた人は結構この形式のファイルを持ってたりするんじゃないだろうか。

(あと、あまり大きな声で言えないけどインターネットでストリーミング配信してるラジオをダウンロードすると大体wmaを格納したasfだったりする)


Windowsならwmaファイルをmp3に変換するフリーソフトはかなり豊富にある。

しかし、今メインで使ってるMacではあまり良さそうなフリーソフトは見つからなかった。

(有料のための機能制限版だったりUIがよく分からなかったり)

そんなわけで、いっそのことNASとして使ってるCentOS上で変換出来るようにしようと思い調べてみた。

準備

変換をかけるにはwma→wav→mp3の2段階のステップを辿る。

(というか普通エンコーダーは内部的に全部同じ)

Linux上でwmaファイルを再生するにはmplayer、mp3への変換にはlameコーディックを用いる。

兎にも角にもyumでインストールする。

$ sudo yum install -y mplayer lame

存外時間かかったりする。

※もしかしたらデフォのリポジトリにないかも。rpmforgeあたり入れときましょう。

変換してみる

wma→wav

以下のmplayerコマンドで変換をかける。

$ mplayer [wmaファイル名]  -ao pcm:file=temp.wav

上記コマンドでtemp.wavという名前の一時ファイルが出力される。

wav→mp3

以下のlameコマンドで変換する。

$l lame temp.wav [mp3ファイル名]

上記の第二引数で指定したファイル名でmp3ファイルが出力される。

できあがり

あとは適当にrm temp.wavで一時ファイルを削除すれば良い。

スクリプト化してみる

スクリプト

流石に一杯あるファイルを一々コマンドでやるのはしんどいので自動化スクリプトを書いてみる。

#!/bin/sh
for input in $*
do
  echo input:$input
  output=`echo $input|sed -e "s/\..*/.mp3/"`
  mplayer $input -ao pcm:file=temp.wav
  lame temp.wav $output
  rm temp.wav
  echo output:$output
done

これをwma2mp3.shとでもしてホームディレクトリにでも置いておく。

使ってみる

例えばどっかのディレクトリ以下にあるwmaファイルを全部mp3に変換する場合は下記のコマンドのようにlsで探してパイプで渡せば良い。

$ ls *.wma|xargs sh ~/wma2mp3.sh

入り組んだディレクトリ構造もls *.wmafind ./ -name *.wmaに変えればいけるんじゃないかと思う。


とりあえずこれで音楽ファイルは目的を達せそう。

存外簡単にできた。

今のとこそこまでやろうとは思わないけど、NASにファイル追加されたタイミングでスクリプト叩くようにすれば面白いかも。


動画ファイルはもっと色々面倒くさそうだから悩ましい。

[改訂新版] シェルスクリプト基本リファレンス  ??#!/bin/shで、ここまでできる (WEB+DB PRESS plus)

[改訂新版] シェルスクリプト基本リファレンス  ??#!/bin/shで、ここまでできる (WEB+DB PRESS plus)

追記

このスクリプト&起動コマンドだと、ファイル名にスペースが含まれると、引数が別れてしまって別ファイル扱いになり上手く動かない…

CentOS6.4にdaemontools入れてみた&GrowthForecast入れて空き容量監視してみた

ガキ使を流し見しつつサーバいじってたら新年になってた。

ここ数年は「流行りの音楽」という概念自体に感心が無くなってしまったせいか、紅白みてても全くピンと来ないのなー。


daemontools

世代がら同名の仮想ディスクドライブツールがちらつくけど、こっちはUnixのサービス管理ツール。

ざっくり言えば起動スクリプトを登録すると自動で起動してくれて、プロセスが落ちたら再起動してくれるツール。


インストール

検索するとOSによる色々な入れ方とかディレクトリの変更とか色々出てきて若干戸惑ったのだけど、シンプルに以下の手順でなんとか動いている。

とりあえずroot権限になり…

# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
# tar xvzf daemontools-0.76.tar.gz
# cd admin/daemontools-0.76
# wget http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch
# patch -p1 < daemontools-0.76.errno.patch
# package/install

パッチ入れるの注意。


サービス管理用のディレクトリを用意する

# mkdir /service

後述するが、上記ディレクトリ内にサービスごとのディレクトリを作り、起動スクリプトを入れることにより、daemontoolsによるサービス管理を行うことができる。


起動と登録

下記のコマンドで起動できる。

# csh -cf '/usr/local/bin/svscanboot &'


問題なさそうなら、ブート時に起動できるように上記コマンドを/etc/rc.localに追記する。


サイトによってログがどうのこうのリンクがどうのこうのといったことが書かれているが、ひとまずここまでの手順で動きはしそう。


GrowthForecast

データをhttpで投げると保存&グラフ化してくれる便利ツール。

最近だとFluentdと連携してゴニョゴニョって所で使うのが定番らしいけど、残念ながら僕はそっちは詳しくない・・・


例えば僕のいるソシャゲ業界なんかだと業務で「イベントの参加UUの推移を監視したい」だとか「新アイテムの売上を監視したい」みたいな状況はよくある。

スクリプト書いて数値を出すだけなら大した手間ではないのだが、それを運営側がわかりやすい形にグラフ化するのは意外と面倒くさかったりする。


そんな時にぴったりなのがこのツールで、予めサーバを立ち上げておいた上でcronで定期的に実行するようにした一行コマンドなりスクリプトなりからサーバのapiに集計値をpostすると、時系列で綺麗なグラフにしてくれる。

というか公式が日本語なんで、うだうだ言うよりはそっち見た方が早い。

GrowthForecast - Lightning fast Graphing / Visualization

インストール

公式記載の依存パッケージを入れる。

# groupinstall "Development Tools"
# install pkgconfig glib2-devel gettext libxml2-devel pango-devel cairo-devel


おなじみcpanmで一発インストール。

# cpanm -n GrowthForecast


起動とdaemontoolsで管理

データ保存用に適当なディレクトリ(例として/home/user/growforecastとする)を作り、以下のコマンドで起動できる。

$ growthforecast.pl --data-dir /home/user/growthforecast


さて、daemontoolsで起動できるように、上記コマンドを記載したスクリプトを作る。

$ vi /home/user/growthforecast/run

以下を記載

#!/bin/bash
growthforecast.pl  --data-dir /home/user/growthforecast/

起動権限を追加し、daemontoolsで管理できるようにシンボリックリンクを作る

$ chmod +x /home/user/growthforecast/run
$ ln -s /home/user/growthforecast /service/growthforecast


ちなみにデフォルトではサーバはポート5125で起動しているので、まずはhttp://[サーバのドメイン]:5125にアクセスして表示されることを確認。

問題なさそうなら下記のコマンドでデータを投げてみよう。

$ curl -F number=[数値] http://localhost:5125/api/[サービス名]/[グラフ名]/[要素名]

レスポンスのerrorが0なら成功。

再度ページにアクセスすると、新たなページリンクが追加されているので、たどっていくとグラフが表示される。

数分おいてnumberの値を変えて投げてみると、感じがつかめると思う。

空き容量監視をやってみる

GrowthForecastは必要があって入れたというよりは面白そうだから入れてみたって感じなので、折角だからサーバの空き容量監視をしてみることにした。

サーバの空き容量はdf -kコマンドで確認できる。

僕のサーバの場合はNASの共有領域として使うために、/home以下を別のHDDに割り当てている。

MicroServer N54L にハードディスクを増設したよー - そんな今日この頃でして、、、

そこで/home以下だけを取り扱うことにする。


正規表現を駆使して空き領域の割合の前にある空き容量の値を取り出す。

$ df -k|grep '/home'|sed 's/^.* \([0-9]\+\) \+[0-9]\+%.*$/\1/'

上記で正しく値が取り出せたなら、諸々のタイトルを決め、numberに値が入るようなpostをするコマンドを組み立てる。

$ curl -F number=`df -k /home|grep '/home'|sed 's/^.* \([0-9]\+\) \+[0-9]\+%.*$/\1/'` http://localhost:5125/api/server_status/storage/home

上記コマンドで投げた値が正しく受け取られることが確認できたら、crontabに登録。

$ crontab -e

↓を追記する

*/5 * * * * curl -F number=`df -k|grep '/home'|sed 's/^.* \([0-9]\+\) \+[0-9]\+\%.*$/\1/'` http://localhost:5125/api/server_status/storage/home >/dev/null 2>&1

ひとまず5分間隔で。流石にちょっと短すぎる気はする。

crontabでの記述の場合、\%という風にエスケープが必要なことに注意。


追記:容量だと変化が緩慢で面白くないので、無闇にロードアベレージもとってみた

とりあえずuptimeの三項目15分平均だけ投げてみた。

*/15 * * * * curl -F number=`uptime|sed "s/.* \([0-9.]\+$\)/\1/"|sed "s/[ .]//g"` http://localhost:5125/api/server_status/load_average/15min >/dev/null 2>&1

残念ながら少数がサポートされないので、100倍の値による表示。



監視用途だったらそれ用のツールを導入した方が良いんだけれど、完全に趣味のサーバなんでそんなにちゃんと管理しないでも良いし、自分好みで細かくいじれるのが楽しい。

postでデータ入力ができるということは、(多少信頼性は犠牲になるけど)ファイルやDBに比べて気楽に入力できるし、ローカルネットワーク上ならどこからでも入力可能なので、非常に汎用性が高いことに気付かされる。

何かしら遊べそう。

MicroServer N54L にハードディスクを増設したよー

f:id:blue1st:20130923232542j:plain

サーバ買った目的の一つがnasneの代替にNASとして使うためだった手前、nasneと同じ250GBだけじゃ不足だなーと思えてきたのでHDD増設してみた。

HDD選定

これまでHDDを買うときはいつも一万円程度の価格帯のものを選んできた。

そんでもって今回もそのあたりのものをと思ったのだけれど、今って一番容量があるのだと3TBもあるんですな。

おっさん的には今だに80GB/万円あたりの感覚なので、軽くカルチャーショックを受けるわけだが、一方でかつて幾度と無くHDDを壊してきた身としては、容量の大きなHDDを使うのはそれはそれで怖いなーと思ったりもする。

ちょっとした葛藤と財布との相談の末、価格的に安くそこそこ容量があり、何よりNAS用と銘打ってあるWDのRed 1.0TBを使うことにした。

とりあえず設置

ひとまず電源を切る。

ホットスワップには対応してないとはいえ、マウント/アンマウントをしっかりやれば問題ないらしいけど、いうても精密機器なので危険は冒したくない。

フロントを開けてマウンターを取り出す

f:id:blue1st:20130923232723j:plain

f:id:blue1st:20130923232756j:plain

HDDをネジ止めする

うっかり買い忘れていて焦ったが、ネジのストックがあってよかった。

(追記:見落としてたけど、よくよく見たらフロントパネルの裏にネジやら工具やらが設置されてた。至れり尽くせり!)

マウンターを挿入

f:id:blue1st:20130923233957j:plain

いつものPCへのHDD増設だとケーブルの取り回しが面倒臭かったりするのだが、N54Lについてはマウンターを挿入するだけなので楽で良い。

システムで使うための設定

共有で使うディレクトリは/home/sambaに設定しているし、システム領域とユーザ領域を物理的に分けたいと思い、今回は/homeを置き換えることにした。

LinuxにHDDを増設するのは初体験だったので、ググったら出てきたext3でフォーマット→マウントという手順でやったものの、どうやら今時はLVMを使うのが良いらしいのでやり直し。

そんなわけで、以下LVMを使ったHDD増設手順。

ひとまずパーテンションを切る

ちなみにSATAのHDDはsda、sdb、sdc…となる。

今回は2つ目なのでsdb。

# fdisk /dev/sdb
デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
新たに DOS ディスクラベルをディスク識別子 0x0c9c3c75 で作成します。
あなたが書き込みを決定するまで、変更はメモリ内だけに残します。
その後はもちろん以前の内容は修復不可能になります。
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.

警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを
      強く推奨します。 and change display units to
         sectors (command 'u').

コマンド (m でヘルプ):
コマンド (m でヘルプ): p

ディスク /dev/sdb: 1000.2 GB, 1000204886016 バイト
ヘッド 255, セクタ 63, シリンダ 121601
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
ディスク識別子: 0x0c9c3c75

デバイス ブート      始点        終点     ブロック   Id  システム

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
p
パーティション番号 (1-4): 1
最初 シリンダ (1-121601, 初期値 1): 1
Last シリンダ, +シリンダ数 or +size{K,M,G} (1-121601, 初期値 121601): 121601

コマンド (m でヘルプ):
コマンド (m でヘルプ): p

ディスク /dev/sdb: 1000.2 GB, 1000204886016 バイト
ヘッド 255, セクタ 63, シリンダ 121601
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
ディスク識別子: 0x0c9c3c75

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1               1      121601   976760001   83  Linux
Partition 1 does not start on physical sector boundary.

コマンド (m でヘルプ):
コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。

物理ボリューム作成

# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created

ちなみに以下pv、vg、lv系はpvdisplayみたいな〜display系で確認することができる。

ボリュームグループ作成

# vgcreate vg_new /dev/sdb1
Volume group "vg_new" successfully created

論理ボリューム作成

今回は何も考えず全領域を割りあてる。

# lvcreate -n lv_home -l 100%FREE vg_new
Logical volume "lv_home" created

フォーマットする

# mkfs -t ext4 /dev/vg_new/lv_home
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=1 blocks, Stripe width=0 blocks
61054976 inodes, 244189184 blocks
12209459 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
7453 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
    102400000, 214990848

ひとまず/homeを退避

# mkdir /home_bak/
# mv /home/* /home_bak/

元の領域をアンマウント

# umount /home

新領域をマウント

# mount /dev/mapper/vg_new-lv_home /home

退避していた/home内容を移行する

# mv /home_bak/* /home/

起動時にマウントされるようにする

移行後に別窓のターミナルでsshしてみて問題無さそうなら、/etc/fstabに記述して再起動時にマウントされるようにする。

# vi /etc/fstab
#/dev/mapper/vg_old-lv_home /home                   ext4    defaults        1 2 #元々の/homeマウントをコメントアウトしておく
/dev/mapper/vg_new-lv_home /home                   ext4    defaults        1 2

今にして思えば…

共有領域を/home以下ではなく/sambaとか独立したディレクトリに切れば、新規追加したのをそのまま割り当てれば良かったし、SELinux周りの面倒も無かった気がする。

元々の/home以下用の領域をどっかに割り当てようかとも思ったが、とりあえず今は放置。

サーバまわり雑多なメモ

vagrant upがやたらと時間かかる(あと失敗したっぽいメッセージでるけど動いてそう)

sshまわりで時間がかかってタイムアウトになってる可能性。
DNS方面でごにょごにょしても良いけど、ひとまずはVagrantfileのendまでの中に
config.ssh.timeout = 60
と書き加えればちゃんと動きそう。


sshでつながるまでがやたら遅い

ssh -vで確認するとgssapiまわりっぽい。
先にこちらの認証を試した後に通常のパスワード認証に移行するため、時間が掛かってしまう。
/etc/ssh/ssh_config内で
GSSAPIAuthentication no
でひとまずは短縮できる。


ちゃんと鍵作って登録してるのにパスワード入力求められる

パーミッション(.sshが700、各ファイルが600)確認しても問題無さそう。
→クライアント側のknown_hostsを綺麗にしたら行けた!






chef-solo入門ほっときすぎて少し忘れてる・・・orz

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code

『Webサービスのつくり方』読んだよー

Webサービスのつくり方 ~「新しい」を生み出すための33のエッセイ (Software Design plus)

Webサービスのつくり方 ~「新しい」を生み出すための33のエッセイ (Software Design plus)


どんな本か

本書の構成は「心構えと下準備」「企画」「設計」「開発」「プロモーションと運用」の5章からなる。


書店のプログラミング関連の棚によく平積みされてるような「〜を使ってウェブサービスを作ろー」的な本だと環境構築から開発ぐらいが関の山なんだけど、本書は比較的サクッと読める分量ながらも「ウェブサービスを作る」ということの全体を手広くカバーされている。

そう言ってしまうと広くて浅い感じなのかと思ってしまうが、本書に関してはかなり実際的で具体的なことが多く書かれており、「薄く」はあっても「浅く」はないなという印象をもった。


以下面白いなと思った内容



哲学とアイディアとコンセプト

「企画」の章では哲学→アイデア→テーマ→コンセプト→名前→デザインの順に企画を具体化させて行くべきという内容が述べられている。

実際本職でも「何をつくるかという意志が固まっていないためにプロジェクトが一向に進行しない」みたいな状況を間近に見ているため、このプロセスの重要性は骨身にしみて感じる。

僕が見ている現場について考えると、プロジェクトが揺らぐ原因は本書で言う所の哲学とアイディアとテーマとコンセプトがそれぞれ明確化されていないことのように思う。

本書に従って言うならば
哲学はサービスを考える上での確固たる価値観
アイディアは哲学を実現する方法
テーマはサービスがどの領域で勝負していくかという方向性
コンセプトはテーマを具体化したもの
図にすると以下のような感じ。

f:id:blue1st:20130707061239p:plain

哲学という軸なしにアイディアだけ大量に出しても具体案を固めるには弊害にしかならないし、テーマが定まらなければどっちつかずなプロダクトとなってしまう。

環境構築と開発

いわゆる「ウェブプログラミング入門書」では古典的なApache+mod_cgi+MySQLあたりを環境として書かれるのがほとんどなように思うが、本書ではNginx+Starman+memcached+MySQLというかなりイマドキで実際的な環境が挙げられている。

このあたりはPerlを使う人でなければそのまま参考にすることはできない部分ではあるが、古典的な環境での性能的限界とそれに対するアプローチの考え方が書かれているため、その他の言語使用者でもそれなり参考になるのではないかと思う。


また、開発を効率化するためにWAFやCSSフレームワークを積極的に使うこと、そして使い慣れた自分なりの雛形を作っておくことが勧められている。

ここは僕も社内管理画面でMojuliciousLite+TwitterBootStrapを活用するようになってからすごく恩恵を実感するところだったりする。
管理画面づくりとmojoな話 - そんな今日この頃でして、、、

単純に作業量減るというだけではなく、
・より本質的な価値を高めることに注力できる
・構造に統一感があることにより技術的に蓄積していくものが大きい



感想

意外と具体的な環境に合わせて書かれているため予備知識ゼロで読むには辛いし、かと言ってこの一冊を読みこめば何でもできるようになるというほど手厚い内容ではない。

特に開発の部分ではPerlを使わないと何のことやらと思う部分も多い気はする。

しかし、サービスを思いついてから運営するまでのことが網羅的に書かれているため、自分に何が足りていないかを把握して今後の学習の方針を定めるのには良いと思った。


全くの素人がタイトルを素直に受け取って参考にするには厳しい気がするが、「Apache+mod_cgi+MySQLである程度意図したものは作れる」位の人が読むと得るものが大きいと思う。



あと僕は無料なのを重視してHeroku使ったりしていて気楽に使えて良いなとは思うのだけれど、結構PaaS環境独自の知識が必要だし環境構築や運用の知識が付きづらいしで、本書で勧められているようなVPSを借りる方が総合的には良いかもなぁと思ったり。
Sinatra@Heroku とりあえずHerokuで何か動かしたい人向けメモ - そんな今日この頃でして、、、

Webサービスのつくり方 ~「新しい」を生み出すための33のエッセイ (Software Design plus)

Webサービスのつくり方 ~「新しい」を生み出すための33のエッセイ (Software Design plus)


近況

社内でRuby勉強会に参加するために『たのしいRuby』を読み進める今日この頃。

たのしいRuby 第4版

たのしいRuby 第4版

前に個人で学習してた時は、より具体的な使用例が書かれていた『作りながら学ぶRuby入門』を参考にしていたのだけれど、それと比べるとより根本からの説明になっていて、Rubyという言語を理解のには適しているように思う。
Rubyの学習 第7部&まとめ - そんな今日この頃でして、、、

結構読みやすく、確かにRuby入門書の定番と言われるだけのことはある。