2014年12月25日木曜日

OpenStack/CloudStack/Eucalyptusが教えてくれること


このエントリーをはてなブックマークに追加


今年最後のカレンダーネタです。
http://www.adventar.org/calendars/602
http://www.adventar.org/calendars/547


OpenStackやCloudStack、Eucalyptusといった、いわゆるクラウド基盤ソフトウェアを技術的に学習することで得られるものは多々あります。

ビジネス的には、自社のサービス基盤の効率化への活用だったり、SIビジネスを展開する材料にしたりできます。これらを習得する過程で、基礎的なLinux/Unixに関する技術も習得できるようになるため、エンジニアとって有用な教材であるといえます。さらに、構築したクラウド基盤上でどのようにシステムを構築し、運用するのか、という視点を持つことで、従来とは異なった、「クラウドネイティブ」なシステムデザインしていくきっかけにもなるとも思います。

このように様々なことが学習できる優秀な教材でもあるクラウド基盤ソフトウェアでありますが、中でも抑えておくべきポイントとして「抽象化」の考え方があります。


抽象化(ちゅうしょうか、英: Abstraction、独: Abstraktion)とは、思考における手法のひとつで、対象から注目すべき要素を重点的に抜き出して他は無視する方法である。反対に、ある要素を特に抜き出して、これを無視したり、切り捨てる意味もあり、この用法については捨象するという。従って、抽象と捨象は盾の両面といえる。
Wikipedia より

この観点でこちらに記事を書きました。
http://www.atmarkit.co.jp/ait/articles/1412/12/news016.html

その他の関連記事はこちら(宣伝)
http://www.atmarkit.co.jp/ait/subtop/features/kwd/openstack.html

OpenStackやEucalyptus、そしてCloudStackは多岐にわたるITインフラ(サーバー、ネットワーク、ストレージ)を抽象化し、より大量の計算リソースを素早く、簡単に扱えるようにしてくれます。

この流れは計算機の正当な進化に沿ったものであると言えます。計算機の世界は抽象化の層を積み重ね今日に至っており、OpenStackはその抽象化の層をまた1つ追加しようとしています。そして計算機のビジネスは抽象化の一番外側にいる層が現実世界との接点となり、ビジネスが発生するポイントになります。だからこそ、多くのITベンダーがOpenStackに注目し、こぞって開発に参画し、次世代のビジネスを主導権を取ろうと勝負しています。

クラウド基盤ソフトウェアを学習するとき、あるいはビジネスでの活用を検討するときには、この抽象化の意味を良く考える必要があります。一体、何のためにこの層が必要だったのか?この意味を考え、理解すれば自ずと、クラウド基盤ソフトウェアの正しい活用方法というものがわかるはずです。



来年から大学でクラウド基盤ソフトウェアに関する講義を持つ予定ですが、学生の皆様には表層的な「使い方」ではなく、こういった計算機の本質的な考え方を伝えていければと考えています。

それではまた来年もよろしくお願いします。


2014年12月21日日曜日

民明書房刊「クラウドの歴史」より


このエントリーをはてなブックマークに追加


今日は皆様に我が国における、クラウドの歴史について少し紹介させてください。

おぷすたや
あゝおぷすたや
おぷすたや

この句は、江戸時代中期に詠まれたものであると伝えられている。
信越地方の藩主の嫡男が、出島で見かけた”おぷすた”なるものに心を奪われ、思わず口にしてしまったものを偶然に通りかかった魚拓職人が記録し、現代に至る。

それまでは幕府の定めた”くらうど”しか使えなかった諸藩は、このおぷすたに大変な関心を示し、皆がこぞって利用するようになった。
幕府のくらうどは、”くらうど”といいながら、利用するには専門の職人が要求書を書面で送る必要があり、実際に使えるようになるまで、1周間以上待たねばならず、時には1ヶ月以上も待たされる時もあったという。

このような状況に不満が蓄積されていた背景もあり、おぷすたは国内で爆発的に普及した。
ただ利用するだけではなく、足りない機能をみんなで開発し、いかに自分の藩が素晴らしい貢献をするかを競い合い、いつしか貢献度に応じて藩の格付けまでされるようになった。
また、当時は通信手段も乏しく、隣の藩と連絡を取るために街道の整備が急速に進み、これが後の東海道となり、日ノ本の経済を活性化させる要因ともなっていく。

しかし、この状況を面白くないと思った幕府は、禁おぷすた令を発して、諸藩のおぷすたへの取り組みを禁止した。
後の世に言う、「仮想環境憐れみの令」である。

曰く

・仮想マシンはペットのように可愛がらねばならん。
・それにオープンソースなどサポートがなくて使えない
・もし何かあったら誰が保証するんだ

というのが幕府の言い分であった。
当然、多くの人がこの考え方に反発した。中でも強硬に反発したのが大塩平蜂郎であった。大塩は元幕府の役人であったが、幕府のくらうどに対する考え方が我慢できず出奔した経緯を持つ。大塩は幕府に対して、

「1時間後に仮想環境を100台用意しろ」
「俺が寝ているときに負荷が上がったら、勝手に仮想環境を増強しろ」

などと無理難題を要求した。当然これに対応できない幕府は要求を無視するが、これに怒った大塩によって引き起こされたのが有名な「大塩平蜂郎の乱」であるのはあまりにも有名である。

この後も、幕府はなんとかおぷすたの勢力を抑えこもうとするが、一度広がったおぷすたの考え方は市場に浸透し、既に国内から一掃するのは不可能であった。幕府内にも反発する勢力が日に日に増大し、最後には幕府が折れることで、一連の騒動は幕を閉じる。

そしてその後、誰もが自由に使えるおぷすたは大いに広がり、江戸後期には様々なコンテンツビジネスがおぷすた上で展開され、江戸の住民を多いに楽しませたという。














ちなみに全部フィクションであることは言うまでもない( http://www.adventar.org/calendars/602 )


2014年12月11日木曜日

Emacsでプレゼン資料を作る(landslide)


このエントリーをはてなブックマークに追加


OpenStack Advent Calendar 2014 のネタです。
http://www.adventar.org/calendars/569
http://www.adventar.org/calendars/602

なんでEmacsなんだよ、と思われる方もいると思います。まずは話を聞いてください。

OpenStack には Upstream Training というコントリビューターを育成するプログラムがあります。これまで、グローバルで3回開催されています。

1回目 OpenStack Summit Atlanta
2回目 Upstream Training Japan
3回目 OpenStack Summit Paris

今後の予定は、たぶんこんな感じになると思います。

4回目 OpenStack Days Tokyo 2015(予定)
5回目 OpenStack Summit Vancouver(予定)
6回目 OpenStack Summit Tokyo(予定)

実は、世界でこのトレーニングを受けることができるのは、Summitに参加した人か、日本に住んでいる人だけになります。日本のトレーニングはローカライズもされています。貴重ですね。


と、これは本題ではなく、このトレーニングで使われている教材が、githubに公開されています。
https://github.com/openstack/training-guides/tree/master/doc/upstream-training

スライドの実態はこのあたりです。テキストファイルです。
https://github.com/openstack/training-guides/blob/master/doc/upstream-training/01-release-cycle.rst

このテキストファイルを landslide というツールに食べさせると、HTML5のプレゼンファイルができます。
https://github.com/adamzap/landslide


という事で、Okinawa OpenDays 2014 で開催される、OpenStackハンズオンの資料をlandslideで作ってみました。
http://irixjp.github.io/20141212_okinawa/handson.html/


landslide を使ってみた感想をまとめます。

・Emacsで資料を書ける(Markdown or rst形式)
・テキストベースのスライドなら使いやすい
・画像を交えると結構苦しい
・印刷がかなり難しい、PDF変換も綺麗にはいかない(今は)
・CSSに詳しくないと、カスタマイズが難しい。
・レイアウトが環境によってずれる(Win/Mac/Linux/ブラウザ)


と、一長一短かなと思いました。
一方で、これにブログ記事をスライド形式で書くのも面白いと思いました。


ちなみに、S式でプレゼンを書くツールもあります。
https://github.com/fukamachi/L5

Emacs org-mode をプレゼン風に使うelもあります。
http://pastelwill.jp/wiki/doku.php?id=emacs:org-tree-slide


PPT/KEYにはもう飽きたよ、という方は次のOpenStack勉強で使ってみてください(保証もヘルプもしませんが)

それでは良いお年を。


2014年9月24日水曜日

gnupack(cygwin)上でsary をコンパイルする


このエントリーをはてなブックマークに追加


sary: Suffix Arrayのライブラリとツール
http://sary.sourceforge.net/index.html.ja

Suffix Array というデータ構造を使う場合に必要になるコマンドとライブラリ。巨大な辞書ファイルの検索などに用いられます。

Emacs + SDIC で辞書環境を作る際、英辞郎のインデックス化とその後の検索に sary/mksary というコマンドが必要になります。これをgnupackでコンパイルして利用できるようにしてみます。

といっても、gnupack x86_64 00.01 版ではコンパイル済みのバイナリを本体に含めています。自分でコンパイルしたい場合は、gcc-core, gcc-g++, libglib2.0, libglib2.0-devel, pkg-config が必要となります。

$ wget http://sary.sourceforge.net/sary-1.2.0.tar.gz
$ tar zxvf sary-1.2.0.tar.gz
$ cd sary-1.2.0/

このままだとguessファイルが古く、configureに失敗しますので、config.guess関連を以下のファイルで差し替えます。
---------------
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
---------------

後はいつも通りです。
./configure --prefix=/app/cygwin/local
make: make install


2014年9月23日火曜日

もうLenovo製品は永久に買わない、というお話


このエントリーをはてなブックマークに追加


** 2014/09/23 24:00 追記***
想像以上に記事が注目を集めてしまい、私の主観に基づく見解で書かれたT440sとLenovoのイメージが拡散してしまうのは本意ではありませんので、個人的な意見や見解は削除しておきます。よろしくお願いいたします。
---------------------------------------

度重なるT440sのトラブルに、思うことはあるのですが、Lenovo本家が運用している掲示板でも T440s nightmare というスレッドが立ち上がっており、盛り上がってる感じでした。

この1年間にT440sで発生したことを記録しておきます。


openstack clients on windows(cygwin)


このエントリーをはてなブックマークに追加


Windowsからいろいろ使えると便利です。

ここ http://aikotobaha.blogspot.jp/search/label/gnupack から最新版のgnupackを落としてください。

後は、
easy_install virtualenv virtualenvwrapper


環境変数を設定(例
if [ -f /usr/bin/virtualenvwrapper.sh ]; then
   export WORKON_HOME=~/.virtualenvs
   source `which virtualenvwrapper.sh`
fi

export PIP_DOWNLOAD_CACHE=~/.pip_cache


インストール
pip install python-novaclient python-neutronclient python-swiftclient python-cinderclient
* python-glanceclient はコンパイルエラーになります。crypto周り??


cygwin的に必要となるパッケージは以下。
gcc-core
 libxml2
 libxml2-devel
 libxslt
 libxslt-devel
 openssl-devel
 libffi
 libffi-devel
 yaml


gnupack 非公式アップデート x86_64版 00.01 pretest リリース


このエントリーをはてなブックマークに追加


*gnupack 非公式アップデート版に関する最新バージョンは こちら をご確認ください*

もう32bitで使う人も少ないかと思い。64bit版にしました。pretestリリースなので、いろいろ足りていませんが、動作速度は劇的に改善しています。

・gnupackランチャー(mintty.exe) のみオリジナルを配置し、その他は削除しています(改良したいけど、時間もVCもない)
・cygwinを64bit版に入れ替え
・NTEmacs, Gvim, TDMを削除
・CygwinネイティブでコンパイルしたEmacs24.3を配置(IMEパッチ適用済み)
・apt-cygを本家最新版に(2013/12版)

ダウンロードは こちら から。

Windows2008で作成し、Win8で動作確認(中)をしています。


現在のところ確認できた問題点
・manが文字化け(LANG=Cで治る)
・screenが動かない(/tmp/userscreen/xxxxxxx の権限が700云々)
・emacs-w3m のロードが、不定期に重くなり、以下が出力
1 [sig] emacs 6444 get_proc_lock: Couldn't acquire sync_proc_subproc for(5,1), last 6, Win32 error 122
503 [sig] emacs 6444 proc_subproc: couldn't get proc lock. what 5, val 1


2014年9月10日水曜日

LXDE/LXpanel デジタル時計 の日付・曜日・時間表示


このエントリーをはてなブックマークに追加


LXDEのタスクバー(LXpanel)のデジタル時計アプリに日付・曜日・時間を表示させる方法。

時計を右クリックし、「デジタル時計の設定」を選択し、「時刻表示のフォーマット」に、

%F %A %R

とか書くと、こうなります。


使えるフォーマット文字は、man date で出てくるものです。

一部抜粋(man date)
%a ロケール表示による曜日の省略名 (例: Sun、日)
%A ロケール表示での曜日の完全名 (例: Sunday、日曜日)
%b ロケール表示での月の省略名 (例: Jan)
%B ロケール表示での月の完全名 (例: January)
%c ロケール表示での日付と時刻 (例: Thu Mar 3 23:05:25 2005)
%C 世紀。%Y と同様だが下2桁が省略される (例: 20)
%d 月の中の何日目かを表す値 (例: 01)
%D 日付。 %m/%d/%y と同様
%e スペースで字幅調整された月の中の何日目かを表す値。%_d と同様
%F 完全形式の日付。 %Y-%m-%d と同様
%g ISO 週番号の最後の2桁 (%G 参照)
%G ISO 週番号の年部分 (%V 参照)。通常は %V と同時に使用される
%h %b と同様
%H 時 (00..23)
%I 時 (01..12)
%j 年の開始日からの日数 (001..366)
%k スペース詰めの時 ( 0..23)。 %_H と同様
%l スペース詰めの時 ( 1..12)。 %_I と同様
%m 月 (01..12)
%M 分 (00..59)
%n 改行
%N ナノ秒 (000000000..999999999)


2014年9月3日水曜日

ConoHaのオブジェクトストレージサービスについて。


このエントリーをはてなブックマークに追加


ConoHa のサービスにオブジェクトストレージサービスが実装されました。OpenStack Swift ベースとの事です。
https://www.conoha.jp/blog/tech/2642.html

大体の使い方はここに書いてあります。
https://www.conoha.jp/guide/guide.php?g=48


サンプルに書いていない、アップロードしたファイルをクライアントに対して直接参照させる方法について書いてみます。これは画像配信等で有効です。

$ pip install python-keystoneclient python-swiftclient
エラーが出る場合はOS側のライブラリ等が足りません。エラーメッセージを見れば大体何が足りないかはわかると思います。

コンパネから取得できる情報を以下の変数に設定
$ vim openrc_conoha
export OS_AUTH_URL=API Auth URL
export OS_TENANT_ID=テナントID
export OS_USERNAME=ユーザー名
export OS_PASSWORD=自分のパスワード

$ source openrc_conoha
$ swift stat
       Account: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    Containers: 0
       Objects: 0
         Bytes: 0
Meta Quota-Bytes: 110058536960000
   X-Timestamp: 1409734987.60990
  Content-Type: text/plain; charset=utf-8
 Accept-Ranges: bytes


コンテナを作成します。
$ swift post container01
$ swift list
container01

$ swift stat container01
       Account: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
     Container: container01
       Objects: 0
         Bytes: 0
      Read ACL:
     Write ACL:
       Sync To:
      Sync Key:
 Accept-Ranges: bytes
   X-Timestamp: 1409736843.00552
    X-Trans-Id: tx2eb6ef4622c34c1a90c62-005406e0a8
  Content-Type: text/plain; charset=utf-8

ファイルのアップロードを行います。
$ cat hoge.txt
hogehoge

$ swift upload container01 hoge.txt 
hoge.txt

$ swift stat container01
       Account: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
     Container: container01
       Objects: 1
         Bytes: 9
      Read ACL:
     Write ACL:
       Sync To:
      Sync Key:
 Accept-Ranges: bytes
   X-Timestamp: 1409736843.00709
    X-Trans-Id: tx70d3fe1c2c534d2d8f513-005406e148
  Content-Type: text/plain; charset=utf-8

コンテナの属性を変更して、誰でも読み取り可能にします。
$ swift post --read-acl ".r:*,.rlistings" container01

$ swift stat container01
       Account: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
     Container: container01
       Objects: 1
         Bytes: 9
      Read ACL: .r:*,.rlistings
     Write ACL:
       Sync To:
      Sync Key:
 Accept-Ranges: bytes
    X-Trans-Id: txd0161d15696c407cadd5b-005406e2d3
   X-Timestamp: 1409736843.00552
  Content-Type: text/plain; charset=utf-8

オブジェクトストレージのエンドポイントを取得します。この値はスタティックなので、一度取得してしまえば変更されることはありません。
$ keystone endpoint-get --service object-store
+------------------------+---------------------------------------------------------------------------+
|        Property        |                                   Value                                   |
+------------------------+---------------------------------------------------------------------------+
| object-store.publicURL | https://objectstore-r1nd1001.cnode.jp/v1/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------------+---------------------------------------------------------------------------+
xxxxxxxxxxxx 部分にはテナントIDが入ります。


このアドレスに、コンテナ名/ファイル名 をつけてアクセスすると、直接ファイルの中身が参照できます。
$ curl https://objectstore-r1nd1001.cnode.jp/v1/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/container01/hoge.txt
hogehoge

上記の例では Swift のCLIを利用していますが、もちろんReST APIを利用してもよいですし、Pythonであれば swiftclient を import して、プログラムの中からストレージを扱うことが可能になります。

プログラムからアップロード等する場合の例はこちらを参考にしてください。
http://aikotobaha.blogspot.jp/2014/08/how-to-use-python-swiftclient.html


2014年8月29日金曜日

gnupack devel 12.10 非公式アップデート


このエントリーをはてなブックマークに追加


*gnupack 非公式アップデート版に関する最新バージョンは こちら をご確認ください*

アップデートの概要 12.03 to 12.10

・実験的に emacs-w32 を配置(ntemacsとは分離して配置)
・connect-proxy, corkscrew を配置
・cygwin 関連パッケージのアップデート

ダウンロードはこちらから。
gnupack_devel-12.10-unofficial.exe


既知の問題
・Windows8 64bit で特定コマンドが実行できない → export LANG=C する事で回避はできます。
fhandler_disk_file::fixup_mmap_after_fork: requested 0xFFEA0000 != 0x0 mem alloc base 0xFFEA0000, state 0x1000, size 20480, Win32 error 487

・df 時にローカルドライブ以外の容量取得がエラーになる。
# df
df: `/g'
ファイルシス   1K-ブロック     使用    使用可 使用% マウント位置
C:               249954300 59996268 189958032   25% /c


2014年8月18日月曜日

How to use python-swiftclient


このエントリーをはてなブックマークに追加


リファレンスはこのあたり。
http://docs.openstack.org/developer/python-swiftclient/

大体はリファレンスに記載されている。一部サンプルが無くてわかりづらいところをメモ。



2014年7月13日日曜日

複数NIC環境でDHCPを使った際の resolv.conf の上書きについて


このエントリーをはてなブックマークに追加


RHEL6/CentOS6において、複数のNICを持つ環境でそれぞれのインターフェースでDHCPを有効にした場合(以下のようなケース)

eth0(dhcp) → eth1(dhcp) → eth2(dhcp)

この時、 resolv.conf の設定は、最後にUPしたインターフェースの設定で上書きされてしまいます。これを防ぐには、事前に特定インターフェースの resolv.conf 上書きを停止することで問題を回避できます。


resolv.conf を上書きさせたくないインターフェースの ifcfg-ethX に以下を追記します。

PEERDNS="no"

これだけ。


2014年5月25日日曜日

Common Lisp のスレッド処理


このエントリーをはてなブックマークに追加


Common Lispにおけるスレッド処理は処理系依存であり、利用する場合はなかなか悩ましい問題です。そんな頭痛の種を解決してくれる一つの手段として、bordeaux-threads というライブラリがあります。

bordeaux-threads は処理系依存のスレッド処理をラップして、共通の記述が可能となる事を目的として開発されたライブラリです。bordeaux-threads は QuickLisp から導入可能です。
(ql:quickload :bordeaux-threads)

利用イメージは以下となります。



2014年5月20日火曜日

*突然*キーボード*英語*配列*


このエントリーをはてなブックマークに追加


Red Hat Enterprise Linux, CentOS, Fedora 関係なく起こります。

OSを再起動したら突然、キーボードの配列が英語モードになってる現象。特にメディアからインストールした直後の環境を yum update すると起きる気がします。

多分何かのパッケージがアップデートされる時に pre/post スクリプトが走って設定が変更されてしまうんだと思います。

直すのは簡単で、system-config-keyboard を起動して、再度日本語キーボードを選択してやればOKです。

このコマンドは yum install system-config-keyboard でインストールできます。

MacBook AirにFedoraをインストールしたら久々に発生したのでメモです。


2014年5月19日月曜日

Fedora20 on Mac Book Air Late 2010


このエントリーをはてなブックマークに追加


ちょいと古めのMBA2010を借りたのですが、Mac OS X の使い勝手に慣れる事ができず、我慢できず半日で Fedora20 をインストールしてしまいました。


インストール自体は簡単で、

・USBドライブを接続し
・FedoraのメディアをDVDへ焼いものを突っ込んで
・起動時に Option キーを押しっぱなし
・ブートメニューが出てきたら「UEFI」を選択
・Linuxインストーラーが起動 → あとは普通にインストール

パーティションは以下のようにした(Mac OSは削除
Device           Start          End   Size Type
/dev/sda1         2048       411647   200M Apple HFS/HFS+
/dev/sda2       411648      1435647   500M Microsoft basic data
/dev/sda3      1435648      9627647   3.9G Linux swap
/dev/sda4      9627648    214427647  97.7G Microsoft basic data
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       200M   15M  186M   8% /boot/efi
/dev/sda2       477M   96M  352M  22% /boot
/dev/sda4        96G  7.4G   84G   9% /
sda2,sda4 のパーティションが変ですが、ext4 で普通に使えてます。

インストール直後の状態で、モニタ出力、WiFiは問題なく使えています。
スピーカーとカメラも使えます。内蔵マイクは認識して使えるのですが、ゲインが低い?のか拾った音がやけに小さいです。こちらは後で調査します。

キーマップは jp106 として認識され、英数・かなキーは機能していません。
ファンクションキーはそのまま押すと、音量UP/Down、輝度UP/DOWNとなりちゃんと動きます。普通のF1,2として使う場合は、Fnキーと合わせて押すと使えます。
Zenkaku_Hankaku がないのは不便なので、以下のように割り当てました。また、Alt_Lの位置が使いにくいので、英数キーもAlt_Lとして機能するように設定してあります。

~/.xmodmaprc
keycode 130 = Zenkaku_Hankaku
keycode 131 = Alt_L
pointer = 1 2 3 5 4 7 6 8 9 10 11 12

最後の pointer は、タッチパッドを Natural Scrolling
ちなみに option キーは キーコード64でデフォルトはAlt_Lにマップされ、左commondキーは133でSuper_Lになります。別のキーにマップする場合はこのコードを操作してください。

F18以降は$HOME/.xmodmaprc を自動で読み込まなくなっていまるので、 gnome-session-properties から セッション起動時に読み込まれるコマンドを追加してあげてください。

タッチパッドは予想外にちゃんと機能します。2本クリックで右クリック、3本クリックで真ん中クリックとなります。2本スライドでUP/DOWNスクロールしてくれます。ただしデフォルトではMacとは逆方向のスクロールになるので、上記の pointer 設定をいれると Mac と同じように動作します。

ふたを閉じるとスリープして、開けると復活するのもMBAと同じように挙動します。

あとは、MiniDisplayポートの出力が試したいのですが、デバイスを持っていないので今度試すことにします。


まだ1日ほど設定の入れ込みを含めて使っただけですが、個人的にはかなり良いです。ThinkPad がノートPCとして終わってしまったので、後継機としてMBAは十分ありな選択肢な気がします。


2014年5月15日木曜日

「オープンソース・クラウド基盤 OpenStack入門」を執筆しました


このエントリーをはてなブックマークに追加


中井さんと共同執筆させていただきました。Amazonにて予約が可能となっています。前書きと目次についてはこちらで紹介されています。

まだ発売前ですが、ベストセラーの1位となっていました。この時点ではまだ表紙ができていなかったので、下の画像ははめ込みです。

前書きでも書きましたが、OpenStackは進歩が早く、まとまった情報を(特に日本語で)入手することが難しいのが現状です。この書籍でそんな状況が少しでも改善されればと考え中井さんと共に執筆いたしました。OpenStackやクラウドに興味のある方はぜひ読んでみてください。


2014年5月11日日曜日

gnupack devel 12.03 非公式アップデート


このエントリーをはてなブックマークに追加


*gnupack 非公式アップデート版に関する最新バージョンは こちら をご確認ください*

アップデートの概要 12.02 to 12.03

・term.el系(term/ansi-term/multi-term)で起動時、もしくは特定ディレクトリへの cd でエラーになる
・term.el系(term/ansi-term/multi-term)で、コマンド実行時に C:/bin/bash を呼び出そうとしてエラー

以下の問題を修正したものになります。
gnupack devel 12.02 非公式アップデート で確認されている不具合

ダウンロードはこちらから。
gnupack_devel-12.03-unofficial.exe


2014年5月10日土曜日

gnupack devel 12.02 非公式アップデート で確認されている不具合


このエントリーをはてなブックマークに追加


gnupack devel 12.01 非公式アップデート にて確認している不具合です。次回リリースで修正する予定です。

■term.el系(term/ansi-term/multi-term)で起動時、もしくは特定ディレクトリへの cd でエラーになる
No such directory found via CDPATH environment variable
http://aikotobaha.blogspot.jp/2014/05/term-ansi-term-multi-term-cygwin.html で回避できます。


■term.el系(term/ansi-term/multi-term)で、コマンド実行時に C:/bin/bash を呼び出そうとしてエラーになる
私は多段SSHを呼び出したときに発生しました。init.el もしくは、init-loader 化に以下を加えると回避できます。
(setenv "SHELL" "/bin/bash")


term, ansi-term, multi-term + cygwin-mount.el で発生する No such directory found via CDPATH environment variable について


このエントリーをはてなブックマークに追加


少々長いタイトルになってしまいましたが、題記の通りです。cygwin-mount.el を有効化した環境で、term.el系を起動したタイミングや、特定ディレクトリへ cd したタイミングで発生します。

No such directory found via CDPATH environment variable

この現象は、ターミナル側の cd を捕捉して、Emacs 側でも cd を動かそうとして発生しますので、.emacs や init.el で、

;; term側 cd 捕捉によるEmacs側の cd を抑制(term.elで定義されている関数)
(fset 'term-command-hook '(lambda (x)))

として、ターミナル側の入力をキャッチしている関数を無効化すると、とりあえずは現象を回避できます。

この根本原因は、cygwin-mount.el によって変換される cygwin マウントポイント となるディレクトリを直接指定する場合に、末尾に / つきパスでないと変換してくれない、という仕様によるもののようです。

このようなマウントポイントの場合、
(shell-command "df -h")

ファイルシス                                 サイズ  使用  残り 使用% マウント位置
C:/gnupack_devel-12.02/app/cygwin/cygwin/bin   230G  153G   77G   67% /usr/bin
C:/gnupack_devel-12.02/app/cygwin/cygwin/lib   230G  153G   77G   67% /usr/lib
C:/gnupack_devel-12.02/app/cygwin/cygwin       230G  153G   77G   67% /
C:/gnupack_devel-12.02/app/cygwin/local        230G  153G   77G   67% /usr/local
C:/gnupack_devel-12.02/home                    230G  153G   77G   67% /home


これは上手くいきますが、
(cd "/home/")

"c:/gnupack_devel-12.02/home/"

これはエラーになります。
(cd "/home")

Debugger entered--Lisp error: (error "No such directory found via CDPATH environment variable")
  signal(error ("No such directory found via CDPATH environment variable"))
  error("No such directory found via CDPATH environment variable")
  ad-Orig-cd("/home")
  cd("/home")
  eval((cd "/home") nil)
  eval-last-sexp-1(t)
  eval-last-sexp(t)
  eval-print-last-sexp()
  call-interactively(eval-print-last-sexp nil nil)


このあたりをいじるとよくなるかもしれないですが、どんな影響があるかわからないので、今回の対策としました。

cygwin-mount-activate is an interactive Lisp function in
`cygwin-mount.el'.

(cygwin-mount-activate)

Activate cygwin-mount- and cygwin-style-handling.

file-name-handler-alist

(("\\(?:\\.dz\\|\\.xz\\|\\.lzma\\|\\.lz\\|\\.g?z\\|\\.\\(?:tgz\\|svgz\\|sifz\\)\\|\\.tbz2?\\|\\.bz2\\|\\.Z\\)\\(?:~\\|\\.~[-[:alnum:]:#@^._]+\\(?:~[[:digit:]]+\\)?~\\)?\\'" . jka-compr-handler)
 ("\\.gpg\\(~\\|\\.~[0-9]+~\\)?\\'" . epa-file-handler)
 ("\\`/[^/]\\{2,\\}\\'" . tramp-completion-file-name-handler)
 ("\\`/\\([^[/|:]\\{2,\\}\\|[^/|]\\{2,\\}]\\):" . tramp-file-name-handler)
 ("\\.lnk\\'" . w32-symlinks-file-name-handler)
 ("^/cygdrive/[A-Za-z]/" . cygwin-mount-map-drive-hook-function)
 ("^//[A-Za-z]/" . cygwin-mount-map-drive-hook-function)
 ("^/[^:@]*$\\|^/|/[^/:]+\\(\\'\\|/\\)" . cygwin-mount-name-hook-function)
 ("\\`/:" . file-name-non-special))


2014年5月8日木曜日

gnupack devel 12.02 非公式アップデート


このエントリーをはてなブックマークに追加


*gnupack 非公式アップデート版に関する最新バージョンは こちら をご確認ください*

アップデートの概要 12.01 to 12.02

・Emacsの画面描画で問題があったため、Emacsのみ12.00へ戻しました。
・そのほかは 12.01 の通りとなっております。

ダウンロードはこちらから。
gnupack_devel-12.02-unofficial.exe


2014年5月7日水曜日

gnupack devel 12.01 非公式アップデート


このエントリーをはてなブックマークに追加


*gnupack 非公式アップデート版に関する最新バージョンは こちら をご確認ください*

アップデートの概要 12.00 to 12.01

・Emacs24.3を再コンパイル(cmgemo.dllをリンクするようにコンパイル)
・UTF-8での使い勝手を向上
・いくつかのパッケージを追加
・上記にともない、ruby, python, perl, clisp の全てを利用可能に。

ダウンロードはこちらから(Emacsに問題があったため、12.02を利用してください)
gnupack_devel-12.01-unofficial.exe

アップデートの詳細


2014年5月4日日曜日

Helm から Hyerspec/CLtL2 を引く


このエントリーをはてなブックマークに追加


** 2014/05/11 slime をバージョンアップ したらHyperSpec が引けなくなったので修正

HyperSpec と CLtL2 を Helm から引けるようにします。 anything とまったく一緒です。

HyperSpec は ANSI Common Lispのリファレンス、CLtL2 は Common Lisp the Language, 2nd Editionの略記で仕様書風の読み物。CLTL1 → ANSI と仕様がFIXするまでの経緯等にもついて記載されているらしいです。私はほぼ HyperSpec しか使っていません。


設定方法は以下


gnupack devel 12.00 非公式アップデート


このエントリーをはてなブックマークに追加


*gnupack 非公式アップデート版に関する最新バージョンは こちら をご確認ください*

アップデートの概要 11.10 to 12.00

・tdm/mingwをバージョンアップ
・上記に伴いEmacs24.3を再コンパイル
・UTF-8を使うように変更
・Cygwinパッケージを追加
・上記に伴い全体のサイズが約650MB(11.10)→1,100MB(12.00)と増加

ダウンロードはこちらから(DL数カウントのため google shortener経由にしました。実態はDropboxへ配置)
gnupack_devel-12.00-unofficial.exe

アップデートの詳細


2014年5月3日土曜日

gnupack devel 11.10 非公式アップデート


このエントリーをはてなブックマークに追加


*gnupack 非公式アップデート版に関する最新バージョンは こちら をご確認ください*

gnupack を愛用しているのですが、最近更新がとまってしまったので、非公式のアップデート版を作成しました。

ダウンロードはこちらから(DL数カウントのため google shortener経由にしました。実態はDropboxへ配置)
gnupack_devel-11.10-unofficial.exe

アップデートの概要は以下です。

・Emacsのバージョンを24.2 => 24.3
・Cygwinのバージョンを 1.7.17-1 => 1.7.29-2
・apt-cyg をバージョンアップ

以下の問題を解決しています。

apt-cygが失敗します
Win8.1/x86 でのemacs


アップデート内容に関する詳細は付属のREADMEに記載しています。


2014年4月15日火曜日

Fedora on T440s


このエントリーをはてなブックマークに追加


メイン機としていたT440sが半死状態になりました。


OS起動時に高確率でHDD(標準搭載のSAMSUNG MZ7TD256)を認識しません。特に再起動時に高確率で発生します。通常起動した際も最初のブートローダーの立ち上がり前に1~2分待たされてしまいます。
T440sはスペック的にかなりのお気に入りなのですが、ThinkPadとは思えない品質の悪さです。

今回はSSDの不良っぽく、検索してみるとHDD交換になる可能性が高そうなので、eService(Lenovoのサポートリクエスト窓口)に修理依頼をしつつ、手元からなくなる前にFedoraをインストールして遊んでみることにします。

T440sのスペックは以下です。

 ・Windows8.1 64bit
 ・Core-i5 4200U
 ・8GB memory
 ・T440s 14.0FHD WWAN(1920x1080 none touch panel)
 ・Wireless LAN: Intel 7260 BT BGN
 ・720p HD Camera
 ・NVIDIA Geforce GT 730M(Optimus)
 ・指紋センサー
 ・UEFI+Secure Boot(デフォルト)

nVidia Optimus と 指紋センサーはFedora20では認識されません。T440sをLinux機として使いたい人はこの二つをつける必要はないと思います。内蔵のIntel統合ビデオチップでも十分な性能です。


デュアルブート(Win8.1 & Fedora20) + UEFI + Secure boot

Win8.1/T440sは標準の状態で以下のようなパーティション状態になっています。Win8の場合は、末尾の回復パーティション、OEMパーティションが存在していません。GPT形式です。


Windows標準ツールでは表示されませんが、実際はMSRパーティションというものがあり、こんな感じになっています。

 1. 回復パーティション
 2. EFIパーティション
 3. MSRパーティション
 4. 標準パーティション ← Windowsの本体はここ
 5. 回復パーティション
 6. OEMパーティション

デュアルブート構成する場合は、4つ目標準パーティションを縮小して空き領域を作ります。縮小はWindowsの管理ツールから行えます。リカバリメディアを作成 or 手配している場合は回復パーティションとOEMパーティションは削除しても問題ありません。削除は diskpart コマンドを使います。


Fedora20をインストールするときは / のみ作成し、既存のEFIパーティションを /boot/efi へマウントするように設定します。/boot や swap はあってもなくてもいいです。既存パーティションは再初期化しないように注意してください。

GrubからWindowsをブートする方法は上手くいきませんでした。ですがUEFIの場合は、UEFIブートローダーからOSを選択できます。UEFIでは、EFIパーティションに配置されているブートイメージを登録することで、起動するOSを選択できるようになります。

登録されている情報を操作するには、Linux から efibootmgr コマンドを利用します。


シングルブート(Fedora20) + UEFI + Secure boot

特筆すべきことはありません。EFIパーティションを作成して、/boot/efi にマウントするだけで後は普通のインストールと変わりません。


シングルブート(Fedora20) + Legacy Boot

BIOSの設定で、Secure Boot を OFF にする事で、Legacy Bootモードに変更できるようになります。このモードではEFIパーティションは不要で、従来のように /boot からカーネルを起動するようになります。

Linuxオンリーで使う場合はこのモードが一番扱いやすいと思います。Linuxの場合は高速スタートアップも利かないので、UEFIもレガシーブートも起動速度に差はほとんど無いように感じました。


2014年4月2日水曜日

Fedora 19/20 上にリモート開発環境(xrdp & LXDE)を整える


このエントリーをはてなブックマークに追加


リモート作業はいろいろな手法がありますが、これは以下の状況を想定しています。

* 作業端末はWindowsを使わざるを得ない。
* 開発物の連携対象がリモートにあり、開発環境は近い場所に置きたい。
* 開発環境はLinuxじゃないと無理。
* どうしてもXが起動したい(軟弱
* 接続先の回線が細い。

  → xrdp & LXDE

xrdpを使うのは、Windows側に特別なクライアントが必要ないことと、X接続やVNC、Spiceに比べて操作が軽快です。
LXDEはいわずと知れた軽量デスクトップです。xrdp経由だとリッチなエフェクトを備えたGNOME3はオーバースペックすぎます。



まず必要なソフトウェアをインストールしますが全部標準リポジトリに含まれていますので簡単です。

$ sudo yum install xrdp
$ LANG=C yum groupinstall "LXDE Desktop"


xrdpには日本語キーマップファイルが含まれていませんので このリンク先 からkm-xxxxx.ini ファイルを取得します。
取得したファイルを以下の名前で /etc/xrdp 以下へコピーしておきます(同じファイルを違う名前で4つ配置します
km-0411.ini
km-e0010411.ini
km-e0200411.ini
km-e0210411.ini

xrdpサービスを起動しつつ、3389ポートを開けます。
$ sudo systemctl start xrdp.service
$ sudo systemctl enable xrdp.service
$ sudo firewall-cmd --add-port=3389/tcp --permanent

これでWindowsからリモートデスクトップで接続する事が出来るようになりました。
しかしこのままではGNOME3が起動してしまいます。

検索してみると /etc/xrdp/startwm.sh を次のように書きかえる、というのが見つかりますが、Fedoraの場合上手くいきませんでした。
SESSIONS="gnome-session blackbox fluxbox startxfce4 startkde xterm"
↓
SESSIONS="lxsession gnome-session blackbox fluxbox startxfce4 startkde xterm"

原因は、startvm.sh → (ファイルがあれば)/etc/X11/xinit/xinitrc → (ファイルがあれば)/etc/X11/xinit/Xclients という順序でファイルが呼び出されていきますが、最後の /etc/X11/xinit/Xclients が呼ばれると、どんな設定になっていても GNOME3 or KDE のどちらかが起動するようになっています。

このファイルを書き換えてもいいのですが、パッケージに含まれるファイルを編集してしまうとアップデート時の対応が面倒になるので、今回は以下で対処しました。
$ cp /etc/lxdm/Xsession ~/.Xclients

/etc/lxdm/Xsession にはLXDEを起動するためのスクリプトが含まれており、本来はコンソールのログインマネージャから呼ばれます。これをホームディレクトリに、.Xclients という名前でコピーしておくと、 /etc/X11/xinit/xinitrc の中からこのスクリプトが呼び出されるようになり、LXDEが起動できるようになります。

やめたいときはこのファイルを削除するればOKです。



(参考)km-xxxx の中身


2014年2月19日水曜日

Clack & Swank によるインタラクティブなWebシステム開発


このエントリーをはてなブックマークに追加


以前にこんな記事 「実行中 Common Lisp アプリのホットディプロイ」 を書きましたがその続きです。

Swankを使って起動しているCommon Lisp処理系に接続して動的に実行環境を操作しましたが、それをもう少し実践的に使ってみます。



【御礼】100万ページビュー達成


このエントリーをはてなブックマークに追加


気が付いたらこのブログも100万ページビューを超えておりました。

最近更新が滞っており申し訳ない次第です。
これからも、Linux、OpenStack、Lispネタを中心に記事を書いていきたいと思いますので、引き続きよろしくお願いいたします。