Spinnakerを試したメモ

継続的デリバリーのためのシステムであるSpinnakerを試したメモをまとめておきます.
今回はGoogle Compute Engineを使用しました.
Spinnaker: Getting Started
基本的には公式サイトのGetting startedに従います.AWSでのセットアップも載っているので見た感じ面倒くさそうですが思っていたよりも簡単でした.

インスタンスの準備

指示されているAPI(Compute Engine APIとCompute Engine Autoscaler API)を有効にした後,google cloud launcherを用いることで簡単にインスタンスを用意する事ができます.
Cloud Launcher — Google Cloud Platform
Launch on Google Cloud Platform ボタンから順にたどっていけば構築で迷うことはないと思います.インスタンスの起動からspinnakerのインストール,起動を自動で行ってくれます.
この後の操作はspinnakerのサイトにはあまり書かれていませんが,cloud launcherで指示されます.

Google Cloud SDKのインストール

次にGoogle Cloud SDKがなければ入れておきます.Google Compute Engineとやりとりするコマンドラインツールが提供されます.
インストールした後はgcloud initコマンドで使用するgoogleアカウントの設定などを行います.windowsの場合はGoogle Cloud SDK shellは管理者として実行する必要もあると思います.
sshの鍵がない場合は自動的に生成プロンプトが表示されます.

Spinnakerへの接続

あとはGoogle Cloud SDK shellからsshで接続します.コマンドは以下の通りです.

gcloud compute ssh spinnaker-test --ssh-flag="-L 8084:localhost:8084" --ssh-flag="-L 9000:localhost:9000" --ssh-flag="-L 8087:localhost:8087"

spinnaker-testの部分は自分で決めたインスタンス名です.他にも方法があるようですが一番簡単そうなのがこのやり方です.
ただし,windowsの場合はこのままでは動きません.以下の記事で対応策が紹介されています.
NETFLIXのSpinnakerをさわってみた備忘禄 - ゆるふわカウンターアタック

gcloud compute ssh spinnaker-test --ssh-flag="-L" --ssh-flag="8084:localhost:8084" --ssh-flag="-L" --ssh-flag=" 9000:localhost:9000" --ssh-flag="-L" --ssh-flag="8087:localhost:8087"

-Lはポートフォワーディングのオプションです.初めて使いましたが,特定ポートへのアクセスを別のコンピュータの特定ポートへと送る機能だそうです.
SSH ポートフォワーディング
後はブラウザを開きlocalhost:9000にアクセスするとspinnakerのロゴが表示されたページが出るはずです
僕の環境のFireFoxでは先に進めなかったのでChromeを使用しました.

実行

公式のGetting startedにしたがってデリバリーのパイプラインを作り,実行します.
うまくいけば,Google Developers Consoleからinstance groups,VM instancesの下に新しいインスタンスが設定した分だけ起動されているのが確認できるはずです.

テストが終わったら,起動したインスタンスを止めておくのを忘れずに.こちらもspinnakerのコントロールパネルからできます.また,spinnakerのインスタンスを止めて再起動した後もspinnakerは自動的に起動するようです.

Clojure環境の構築からshadertoneを試してみるまでのメモ

github.com
Shadertoneで遊んでみた – 導入編 | yoppa org

shadertoneを動かしてみました.Clojure環境ないしwindowsだしで苦労したので,Clojure環境構築からメモしておきます.OSはwindows8.1です.

JDKの用意

まずJDKを用意します.理由は後述しますが,32bit用を使います.JDK7でもJDK8でもあまり変わりはないように思います.
Java SE Development Kit 8 - Downloads
インストール先はパスに空白のない方が良いみたいな話もありますが実際のところは分かりません.僕は一度嫌な思いをしたことがあるので,デフォルトから変えています.

Leiningenをインストール

ライブラリ等を管理してくれるLeiningenを入れます.
leiningen-win-installer
windowsインストーラを使ってインストールできます.インストール時に複数JDKがある場合は選択させられます.ちなみに,インストール後は.lein以下にあるconfigure-leiningen-installerを動かすことで使用するJDKを変えることができます.

overtone, shadertoneを試す

overtone, shadertoneが動くか試します.
このリポジトリのものがシンプルな構成で試すことができます.
rogerallen/sot · GitHub
コマンドプロンプトでこのプロジェクトのルートに移動し,以下のコマンドを打ちます.

lein deps
lein run

lein depsでproject.cljに記述された依存関係にあるライブラリが自動的にダウンロードされます.lein runで画面が表示され,音と共に色が変わるのが確認できればokです.

このとき引っかかったのが,overtoneの環境です.overtoneは後ろでSuperColliderが動いているらしいのですが,overtone.liveでcan't connect to native serverのようなエラーが出ます.このnative serverの部分のライブラリがJDK 32bitでできているせいか,64bit版のJDKでinternal serverを動かすことができず,これに気付くのにかなり時間がかかりました.
ちなみに,SuperColliderを手でインストール,起動してconnect-external-serverで接続することもできますが,overtone.liveをuseするには,設定ファイルをいじる必要があるみたいです.ファイルのいじり方は分かりません.

emacsemacs-liveの準備

とりあえず動くことがわかったので,shadertoneのサンプルをいじってみましょう.そのためにはエディタが必要です.エディタにはemacsを使います.また,今回はライブコーディング用にチューンされたemacs-liveを使用します.これを使えば簡単にciderに加え,paredit(S式単位でのコードの編集,移動を扱う拡張)やauto-complete等の機能が使えます.普段使いにはどうなのかわかりませんが,とりあえずClojure書いてみたいという人にはすぐに環境が揃ってよいかも.

まず,.lein以下にあるprofile.cljを編集し,

  :plugins [[cider/cider-nrepl "0.9.1"]
           [refactor-nrepl "1.1.0"]]
  :dependencies [[org.clojure/tools.nrepl "0.2.7"]]

を追記します.

こちらの環境はwindowsなので,公式に書かれているemacs-liveの導入は,あまり参考にならないかもしれません.
以下は僕がやったやり方です.
まずはemacsのバイナリを落としてきます.
Index of /pub/gnu/emacs/windows
emacs-24.5-bin-i686-mingw32.zipを落として展開します.
次にemacs-liveをダウンロードするなり,クローンするなりします.
overtone/emacs-live · GitHub
bin/run-emacsemacsを起動し,emacs-liveのディレクトリにあるinit.elを開き,M-x eval-bufferで全部読み込むとemacsemacs-liveに変身します.
もしも,既にemacsを使っていて,なんらかの設定がされていれば,その内容によっては,正しくemacs-liveの機能が使えない場合があります.emacs-liveしか使わないのであれば.emacs.dにemacs-liveフォルダの中身を全部突っ込んでも良いかもしれません.
僕は試していませんが,他の環境と競合しないので,gnupackをダウンロードして.emacs.dに突っ込んでしまう方法でもよいかもしれません.

shadertoneのサンプルを試す

overtone/shadertone · GitHub
shadertoneのリポジトリをダウンロードするなり,クローンするなりしたらexample/00demo_intro_tour.cljを開き,M-x cider-jack-inします.
あとはC-c C-eでコードを評価していくだけ.結構楽しいです.
それと,僕が試した限りだと,(def snare (sample (freesound-path 26903)))等はダウンロードがタイムアウトして全て使えませんでした.自分で用意する必要があるかも.

感想

結構楽しいし,何か作りたいとは思いますが,僕の環境では不安定で,すぐ落ちます.overtoneが悪いのか,shadertoneが悪いのかはわかりませんが,このままだとパフォーマンスなんかには使えそうにもありませんね…
あとメモリも1GB以上は食うみたいですね.僕のノートPCは4GBしかメモリがないのですが,StackOverflowで落ちたりもしました.
安定化しないかもう少しいじってみる予定ではありますが,今後の開発に期待でしょうか…
現在,ライブコーディングの作品を作ろうとしているのですが,今回は音楽が中心なので,映像はquilにやってもらう方が良いかなぁと思っています.

自動デプロイをちょっとセキュアにしたメモ

前にやったTravis CIでの自動デプロイを少しだけセキュアにしたのでメモしておきます。

sshのポート変更

CentOS 7 で sshd のポートを変更する(firewalld, SELinuxの設定) | CentOS | daily memorandum 3.0.0
SELinuxの設定変更という部分は無視して、この記事と通りに従えば大丈夫です。
途中firewall-cmdがfirewalld-cmdになっていますが、おそらくミスですね。

ユーザー作成

ルートのログイン禁止をする前にユーザーを作成します。
CentOS で root 権限を持ち、sudo を実行できるユーザーを作成する | Webセキュリティの小部屋
sudoのパスワード入力要求はつけておきました。ユーザーを作成した後は、rosコマンドは使えたのですがlisp処理系の再インストールが必要でした。

sudo時にPATHを引き継ぐ

サーバーの起動にはsudoが必要みたいなのですが、sudoするとPATHがリセットされてしまうようです。roswell等々が使えなくなるので設定を行います。
Linux - sudo時にPATHを引き継ぐ方法 - Qiita

.travis.ymlの編集

sshの接続先ポートという環境変数が増えたので、前回の記事と同様に暗号化して追加します。
Travis CIでCommon Lisp Webアプリを自動デプロイするメモ - 心鏡曼荼羅
デプロイ用のスクリプトはsudoをつけて実行する必要があるのと、ポートの指定が必要なのでコマンドを編集します。

after_success:
    - if [[ "$TRAVIS_BRANCH" == "master" ]]; then
        export SSHPASS=$DEPLOY_PASS;
        sshpass -e ssh -t -t -p $DEPLOY_PORT -o "StrictHostKeyChecking"=no $DEPLOY_USER@$DEPLOY_HOST "echo ${DEPLOY_PASS} | sudo -S ${DEPLOY_PATH}/deploy.sh" 1>/dev/null 2>/dev/null;
      fi

sudoには、パスワードが必要なので-Sオプションをつけてechoで渡します。ここらへん、本当にセキュアか怪しいですね…特定コマンドのみsudoのパスワードなしができるみたいなので、こちらの方が良いかもしれません。
特定のコマンドをパスワードなしでsudo する設定 - Slow Dance

文字列中に変数を繋げるためには${}で囲む必要があるみたいですね。
シェルスクリプトで変数を繋げる
シェル・スクリプト・リファレンス - 【 複数の変数を連結する 】:ITpro

また、sshした先でsudoを使用するには色々あるみたいで、とりあえず-t -t オプションをつけておけばよいみたいです。
SSHで「-t」オプションを付けても、失敗するときの対処法 : 元うなぎ屋

終わり

少しだけセキュアにしました。ポート変更前は結構攻撃のログが残っていたのですが、変更だけで攻撃は見られなくなりました。sudo周りが色々面倒くさそうですが、少しずつ勉強していくしかないですね。

gnupack EmacsのDoing Vfork: resource temporarily unavailableを解決する

ノートPCに最新のgnupackのEmacsをいれました。しかし、diredやshell-modeを使おうとするとDoing Vfork: resource temporarily unavailableと表示され、使えない問題があり困ったので解決する方法のメモです。デスクトップの方にインストールしたときは普通に使えたのでよくわかりませんね。

イッチョカマーの徒然草: Cygwin+Emacs Problem
基本的にはこのサイトの通りに、rebaseallしてlibncursesを再インストールでいけるみたいです。少し補足が必要なので記載しておきます。

1

gnupackフォルダにstartup_rebaseallが存在するので、実行します。多分右クリックで管理者として実行する必要があります。rebaseallが何をしてくれているのかは不明。ちょっと調べましたけど実行しろとしか書かれていませんね…

2

次にcygwinのHPからcygwinのsetupファイルをダウンロードします。
Cygwin Installation
どうやらgnupackは32bit版を使用しているようですのでそれダウンロードしたら起動し、rootディレクトリをgnupack\cygwin\cygwinに設定してlibncursesを再インストールします。rootディレクトリの設定が間違っていなければ、自動的にインストール済みライブラリなどが認識されるとはずです。もしもディレクトリ指定が間違っているとそこに新たにcygwinがインストールされてしまうので注意が必要です。

終わり

これで恐らくエラーが消えます。

Distance Estimated 3D Fractalsを理解するためのロードマップ

mandelbulbやmandelboxをご存知でしょうか?これらのフラクタルはDistance Estimation という手法を用いて描画されることが多いです。この手法を用いることで、複雑なフラクタル形状を高速で綺麗に描画することができます。
最近この手法を勉強していました。クライン群に関しては以下の二つのようなものを描画することができます。といっても僕がこれらのDistance Estimationのアルゴリズムを考案したわけではないので、まだまだなのですが…これらに関してはそのうち文章にまとめたいと思います。
3D kissing-Schottky orbit spheres
kissing-Schottky limit set

さて、これらを理解するために、ネット上には多くのテキストが存在しますが、僕個人がこの順番だったら楽だったろうなぁというものをまとめておきます。僕もまだなんとなく理解できた、程度ですし、色々な文章を何度も読み返す必要はあると思います。

(独学とは再帰なり)

素数夜曲 by 吉田 武

日々精進あるのみですね。

GLSL、レイマーチングについて学ぶ

wgld.org | GLSL |

glslの基本とレイマーチングの基本が学べます。

http://www.demoscene.jp/?p=811

Distance functionについての項目でレイマーチングについてとてもわかりやすい図が載っているので一度目を通すべきです。

フラクタルの描画について学ぶ

Distance Estimated 3D Fractals (Part I) | Syntopia
Syntopiaでは8回にわたってDistance estimationを用いたフラクタル描画に関しての連載があります。非常に参考になるのですが、ところどころ展開が急で面食らうと思います。とりあえずpart1~3を読むのが良いと思います。
レイマーチング等の基本とカラーリングの話、そしてKaleidoscopic IFSについての解説があります。Kaleidoscopic IFSはある面での反転等を行うことによって構築するフラクタル図形です。

distance estimationについて

distance estimation

平面において、ある数式で表される図形から、ある点までの距離を測るにはどうすれば良いのか解説しています。
{ |\epsilon| \geq \frac{|f(x)|}{|\nabla f(x)|}
}
の関係式が重要です。

distance rendering for fractals

リンク先が変わったようです↓

distance to fractals

マンデルブロ集合をdistance estimationを用いた方法で描画する解説です。

mandelbulb

ここまで来たらSyntopiaのpart4から読んでいくと良いと思います。僕は唐突にヤコビアンがでてきてびっくりしましたが、{|\nabla f(x)|}を求めるためだと考えればなんとなく納得できます。ここら辺は色々なやり方や、論文があるため、一筋縄ではいかないと思います。あまり深入りしない方が良いのではないでしょうか…
Distance Estimated 3D Fractals (IV): The Holy Grail | Syntopia

Syntopiaでも紹介されていますが、そのほかは以下の二つ辺りを読むのがよいかと。mandelbulbまでがなんとなくわかれば残りのSyntopiaの他のパートも比較的楽に読めます。
mandelbulb
Mandelbulb: The Unravelling of the Real 3D Mandelbrot Fractal

その他

What is a Mandelbox - Mandelbox

mandelboxを考案した人のページ。一部表示されていない動画はこれです
2d Mandelbox fold from Tom Lowe on Vimeo

GLSL Sandbox Gallery Shadertoy BETA

これらのサイトで組んでみたり、shadertoyで既存のコードを検索し、値をいじることで理解が深まる場合もあります。

Fragmentarium

Syntopiaの方がつくったGLSLベースのレイトレーサで、シェーダのコードを含むexampleが豊富です。漁ってみればものすごく参考になるのではないでしょうか

おわり

他にも本やFractal Forums、論文など様々なテキストが存在します。もしも理解に詰まったら、あまり固執しすぎずに別のテキストを読んだり、コードを読んだりしてみると良いのではないでしょうか。一人前のフラクタルレンダラ―への道は長いですね。
あとはライティングや色付けに関する勉強ができていないので勉強したいです。そこら辺の理解ができたらまたまとめようと思います。

Travis CIでCommon Lisp Webアプリを自動デプロイするメモ

TravisCIを用いてcavemans2で作成したCommon Lisp製Webアプリのテストを回し、サーバーに自動デプロイするまでのメモです。

自動テスト

まずは自動テストを試します。
4. Roswell as a Testing Environment (Travis CI and Coverall) · snmsts/roswell Wiki · GitHub
Roswellを用いることで簡単にテストすることができます。TravisCIでCommon Lispをネイティブにサポートしようとする動きもあるようですが、どちらにせよRoswellを用いるのが一番簡単なのではないでしょうか。

language: common-lisp
sudo: required

install:
  - curl -L https://raw.githubusercontent.com/snmsts/roswell/release/scripts/install-for-ci.sh | sh

script:
  - ros -s prove -e '(or (prove:run :quri-test) (uiop:quit -1))'

が基本で、quri-testをテストを含むプロジェクト名に書き換えればテストが走ります。
テストフレームワークにはfukamachi/prove · GitHubが使用されています。現状、テストコードは全く書いていません。テストに関する勉強も必要ですね。

このままではテストを回すたびにRoswellや処理系等のインストールが走るので時間がかかります。そこで、TravisCIは処理系等をキャッシュしたりできるようです。
Caching Dependencies and Directories - Travis CI
sudo: falseを指定し、適切にパスを設定すれば以前インストールされた処理系などでテストが走り、時間短縮になります。このやり方もRoswellのwikiに載っているので参照してみてください。

自動デプロイ

ここの記事を参考にしました。
neemzy - Deploy to your own server through SSH with Travis CI - A blog by Tom Panier, web developer

テストが通るのを確認したら自動デプロイの作業に入ります。基本的にはテストが通った後にSSHのパスワード認証でサーバーにログインし、デプロイ用のシェルスクリプトを実行するだけです。

環境変数の設定

デプロイ先のホストや、ユーザー名を環境変数として設定します。travisCIのWebサイトでも設定できるみたいですが、さすがにパスワードとかをおいておくのはアレですかね。そのために、それらの環境変数を暗号化します。これは、gemで入るtravis encryptコマンドを使用します。僕はWindows環境で用意するのが大変そうだったのでVPSに入れて実行しました。

yum install gem
yum install ruby-devel
gem install travis

で入ります。ruby-develなしではtravisのビルドが通りませんでした。
後はいくつかの環境変数を暗号化し、.travis.ymlに環境変数として貼り付けます。上記のサイトには書いていなかったのですがリポジトリのユーザー名とリポジトリ名を入れなければ暗号化できませんでした。ここら辺は詳しくわかりません。

travis encrypt -r soma-arc/travis-test DEPLOY_HOST=123.45.67.8
travis encrypt -r soma-arc/travis-test DEPLOY_PATH=~/common-lisp/project
travis encrypt -r soma-arc/travis-test DEPLOY_USER=hogehoge
travis encrypt -r soma-arc/travis-test DEPLOY_PASS=foobar

それぞれ実行すると長い文字列が得られます。それらを以下のように貼り付けると、環境変数として使用できます。

env:
    global:
        - secure: "長い文字列"
デプロイ処理の記入

あとはテスト終了後の処理を書きます。デプロイはmasterブランチにプッシュされたときだけ行って欲しいので$TRAVIS_BRANCHを見ています。

addons:
    apt:
        packages:
            - sshpass

after_success:
    - if [[ "$TRAVIS_BRANCH" == "master" ]]; then
        export SSHPASS=$DEPLOY_PASS;
       sshpass -e ssh -o "StrictHostKeyChecking"=no $DEPLOY_USER@$DEPLOY_HOST $DEPLOY_PATH/deploy.sh 1>/dev/null 2>/dev/null;
      fi

sshpassはあらかじめパスワード等を指定してログインできるコマンドだそうです。
デプロイ先のdeploy.shを実行することでデプロイします。-o "StrictHostKeyChecking"=noはホストを知らない場合に出るホスト鍵のチェックプロンプトを抑制するためにつけています。
これに関してはknown hostを加えればいらなくなるのかと思い、

addons:
    ssh_known_hosts: $DEPLOY_HOST
    apt:
        packages:
            - sshpass

を加えてみたのですが、どうにもログインに失敗しているみたいで駄目でした。
また、

1>/dev/null 2>/dev/null

をつけることでいらない入出力は切り捨てています。

デプロイ用のスクリプトの用意
#!/bin/sh
killall sbcl
cd ~/common-lisp/travis-test
git pull
nohup ~/.roswell/bin/clackup --server :woo --port 80 app.lisp 1>/dev/null 2>/dev/null &
chmod a+rwx deploy.sh

を使って実行属性をつけるのと、読み書きもできるようにしておきます。
Linuxコマンド集 - 【 chmod 】 ファイルやディレクトリのアクセス権を変更する:ITpro

~/common-lispに配置しましたが、アプリのリポジトリに配置してしまった方が良いかもしれませんね。
現在動いているサーバーはkillallで落としています。本来ならばフォークして云々とかがあるのかもしれませんが、そこら辺の知識が全くないので、とりあえずsbclを強制終了し、git pullで更新した後に再びclackupでアプリを起動しています。
killallはCentOS7の場合yum install psmiscで入れる必要があります。
また、clackupは~/.roswell/binにパスを通していたはずなのですが、通らなかったので絶対パスを通しています。
nohupはsshログアウトした後もプロセスを残すために使用します。
ログアウトしてもバックグラウンド ジョブを継続する方法

最後の&はプロセスをバックグラウンドで実行するためにつけます。
clackupでも入出力を切り捨てていますが、こうしないとサーバーからの応答を延々と待ち続けてしまい、ログアウトされません。当然TravisCIの実行もここで止まり続けてしまうので注意が必要です。

最終的な.travis.yml
language: common-lisp
sudo: false

install:
  - curl -L https://raw.githubusercontent.com/snmsts/roswell/release/scripts/install-for-ci.sh | sh

cache:
    directories:
        - $HOME/.roswell

script:
  - ros -s prove -e '(or (prove:run :travis-test-test) (uiop:quit -1))'

env:
    global:
        - secure: "......"
        - secure: "......"
        - secure: "......"
        - secure: "......"
        - PATH=~/.roswell/bin:$PATH
        - ROSWELL_INSTALL_DIR=$HOME/.roswell

addons:
    apt:
        packages:
            - sshpass

after_success:
    - if [[ "$TRAVIS_BRANCH" == "master" ]]; then
        export SSHPASS=$DEPLOY_PASS;
        sshpass -e ssh -o "StrictHostKeyChecking"=no $DEPLOY_USER@$DEPLOY_HOST $DEPLOY_PATH/deploy.sh 1>/dev/null 2>/dev/null;
      fi

これでmasterにpushがあった時にテストが走り、成功すればデプロイ用のコマンドが実行されます。

公開鍵認証

公開鍵認証する方法もあるみたいです。これもいつかそのうち…
Travis-CI でコミットして GitHub にプッシュする - 公開鍵認証を利用してみる | そんなこと覚えてない

おわり

Linuxコマンドに関する知識が乏しかったため、自動デプロイは結構つっかかりました。しかし、自動テスト自体は非常に簡単でした。僕はRoswell登場以前の状況は分かりませんが、Roswellのおかげですね。
現状あまりセキュアではありませんが、これで自動デプロイ環境が整いました。便利ですね、ありがとうございます。

Common LispのWebアプリをVPSで動かすまでのメモ

Mathe Vital Japan*1に代わるようなクライン群に関するウェブサイトを開発しようとしています。裏側をCommon Lispで作ってみようと思い、とりあえず原型ができた感じなのでVPSで動かしてみました。
僕はUnixもサーバー周りも初心者なのでメモにしておこうと思います。

VPSドメインの契約

VPSはConoHaのメモリ1GBの一番安いものにしました。どうやら登録時に、1000円分のクーポンがもらえる登録フォームもあるみたいなのですが失念していました。悲しい。
ドメインはお名前.comで取得ました。アカウントの作成に迷いましたが、初めてのドメイン取得と同時にアカウントを作成するようになっています。
VPSドメインの契約を済ませたらVPSIPアドレスドメインを紐つけます。以下の記事を参考にしました。
お名前.comでドメインを取得してConoHaで公開するまで - Qiita

ログイン

OSはCentOS64bitの7.1、6.7、6.6をそれぞれ試しました。パッケージが新しいのでCentOS7.1の方がちょっと楽だと思います。SSHクライアントにはTeraTermを使用しました。ConoHaではWebコンソールが使用できますが、Webコンソールから操作を行うと何故かネット周りでトラブルがあり使えませんでした。例えばgitでgithubからcloneできないとか、pingやtracerouteが返ってこないとか…

ログインしたら一応パッケージのアップデートをしてgit、gccを入れておきます。

yum update
yum install git
yum install gcc

Emacsのインストール

最初からVimが入っていますが使い慣れないので最新版のEmacsを入れます。
CentOSに最新のemacsをインストールする方法 - エンジニア?プログラマ?
24.5がstableなのでインストールします。ビルドオプションはGUI関連のものだと思います。

roswellのインストール

snmsts/roswell · GitHub

yum install libcurl-devel
yum install autoconf
git clone https://github.com/snmsts/roswell.git
cd roswell
./bootstrap
./configure
make
make install

CentOS6系だとyumでインストールできるautoconfのバージョンが低いと言われるので最新版をビルドする必要があります。
autoconf のインストール - ひたすら事務

sbclのインストール

yum install zlib-devel
ros install sbcl

インストール中は止まりますが心配はないはずです。プログレスバーが全く動かないのは端末の仕様ですかね…
sbclのビルドにはzlib-develが必要です。
error in install sbcl · Issue #65 · snmsts/roswell · GitHub
最初、インストールが失敗したというエラーに気付かず、最新のsbclがビルドされたものと勘違いしていました。sbcl-binはイントールされており、普通に使えていたので気付きませんでした。もしインストールに失敗したら

ros delete sbcl

で消してからでないと再インストールできませんでした。

clackupコマンドのインストール

ros install clack
export PATH=$PATH:~/.roswell/bin

clackupコマンドをインストールしたらパスを通します。この方法は一時的なもので、再ログイン時にはリセットされてしまうそうです。永続的に追加するにはユーザーの.bash_profileをいじるそうです。
パス(PATH)の確認と設定方法は? - Pocketstudio.jp Linux Wiki

ファイアウォールの設定

CentOS6ならiptables
iptablesの設定方法|さくらインターネット公式サポートサイト
CentOS7ならfirewalld
CentOS7 firewalldの設定方法

iptablesはデフォルトでは何も設定されていないみたいなので特に設定しなくてもhttpでアクセスできますがそのままでは危ないですね。

wooのロード

サーバーのwooにはlibevというライブラリが必要です。CentOS7ならyumで入るはずですがCentOS6の場合はビルドが必要です。
ほぼ毎日更新してた、ごくうブログ:[Linux] CentOS5でメールサーバ構築(qmail + tcpserver + libev + vpopmail + qmail-conf + daemontools)
ここを参考にビルドします。

cd /usr/local/src/
wget http://dist.schmorp.de/libev/libev-4.20.tar.gz
tar xvfz libev-4.04.tar.gz
cd libev-4.04
./configure 
make
make install

これだけでは共有ライブラリは参照されないみたいなのでここを参考にパスを通します。
Tomorrow is always fresh with no mistake in it.@備忘録 - ライブラリのパスを設定する
僕は/etc/ld.so.conf.d/にlibevがおいてあるライブラリのパスを書いたファイルを置き、ldconfigで読み込みなおしました。

アプリケーションの起動

Roswell時代のCommon LispのWebアプリケーション運用 - 八発白中

clackのアプリケーションをgitなどで取ってきたらアプリケーションのルートに入って

clackup --port 80 app.lisp

でライブラリが色々ロードされてサーバーが立ち上がります。デフォルトではHunchentootが起動します。他のサーバーは--serverオプションで起動します。これでブラウザからipアドレス、もしくはドメインをを入力すればページにアクセスできるはずです。

この時、ずっと/usr/local/srcにclone等をして作業していましたが、asdfがアプリケーションのシステムを読み込めなかったとエラーが出るときがありました。~/common-lisp/というディレクトリを作成し、ここにアプリケーションを置くとロードしてくれました。asdfのパス設定の関連でしょうかね。

気になる事

Hunchentootで立ち上げると時折エラーが発生しているようです。止まる事はないのですが気になりますね。

[2015-09-10 17:09:56 [ERROR]] Error while processing connection: couldn't read from #<SB-SYS:FD-STREAM
                                                                                      for "socket 133.130.58.156:80, peer: 133.26.34.248:52675"
                                                                                      {1003825813}>:
                                                                   Connection reset by peer

wooは結局動かすことができませんでした。サーバーは立ち上がるのですが、アクセスすると以下のようなエラーが出ます。

Unhandled TYPE-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING
                                  {1002C1F513}>:
  The value 4162984581 is not of type (SIGNED-BYTE 32).

デスクトップのCentOS6.6ではlocalhostですが接続に成功したのでVPSCentOSもバージョンを入れ替えて試してみましたがどれもエラーが出てしまいました。何が悪いのかはまだわかりませんが、大量のアクセスがあるような事も速度が必要になる事もないのでとりあえずHunchentootで動かすことにしました。

追記(2015/9/17)

作者の深町さんにコメントを頂き、このプルリクエストで解決していることがわかりました。
* Fix error on ntoa : support for 64 bit address by kayhman · Pull Request #35 · fukamachi/woo · GitHub

おわり

これで一応外部からページにアクセスすることができるようになりました。それとセキュリティ面等で考慮することは色々ありそうで、これから少しずつ勉強していく必要がありますね。ひとまず、次の課題はTravisCIによる自動デプロイを試してみる事とサイトのコンテンツの開発ですね。
日々精進あるのみです。

*1:今時ジャバアプレットですよ…