2014年5月4日日曜日

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ネタを中心に記事を書いていきたいと思いますので、引き続きよろしくお願いいたします。




2013年12月24日火曜日

続:イブの夜はIaaSをCommon Lispでキめる!


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


2つのアドベントカレンダーの合同ネタです。

OpenStack Advent Calendar 2013 JP
Wakame Users Group Advent Calendar 2013

Common Lispの基礎に関しては2012年の OpenStack Advent Calendar 2012 JP 12/24 イヴの夜はOpenStackをCommon Lispでキメる!をご覧ください。

Common Lispを使って、OpenStackとWakame-VDCの操作を行いながら、Lispの世界を見ていきましょう。



2013年12月15日日曜日

世の中の Common Lisp OpenStack Clients を眺めてみる


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


タイトルの通りです。気になったので調べて見ます。

github で 「openstack common lisp」で検索してみたところ・・・

2013/12/15


4つのリポジトリが見つかりました。


russell/cl-openstack

 とてもシンプルな実装でnovaに対して最低限の操作が実装されています。マクロを活用して実装されておりLISPっぽいつくりです。行数も少ないので、入門として読むのに適していると思います。


novaを操作するための関数をマクロによって定義しています。
(defmacro nova-call (name args documentation lambda-list &body body)
  (let ((documentation (if (stringp documentation) documentation "")))
    (destructuring-bind (&key url content (method :get)) lambda-list
      `(defun ,name ,args
         ,documentation
         (assert *token*)
         (assert *service-catalog*)
         (let* ((service-url (car (service-catalog-query "compute")))
                (url (merge-uris ,url service-url)))
           (let ((data (restart-case
                           (rpc-call url ,method ,content)
                         (retry ()
                           :report "Retry Openstack Call."
                           (rpc-call url ,method ,content)))))
                 ,@body))))))


stackforge/cl-openstack-client

 こちらも機能としてはシンプルですが、CLOSを活用した実装がなされています。

(defclass resource ()
  ((id :initarg :id
       :reader resource-id)
   (connection :initarg :connection
               :reader resource-connection)
   (attributes :initform (make-hash-table))))

(defmethod resource-error-class ((resource resource))
  'openstack-error)

(defmethod print-object ((resource resource) stream)
  (if (slot-boundp resource 'id)
      (print-unreadable-object (resource stream :type t :identity t)
        (format stream "~A" (resource-id resource)))
      (print-unreadable-object (resource stream :type t :identity t))))

(defmethod decode-resource (resource parent type)
  ;; TODO (RS) currently extra keys are just ignored in all resources,
  ;; it would be best if they were saved somewhere.
  (apply #'make-instance
         type
         :connection (resource-connection parent)
         :parent parent
         (concatenate 'list
                      (alist-plist resource)
                      '(:allow-other-keys t))))

(defmethod decode-resource-list (resources parent type)
  (loop :for resource :in resources
        :collect (decode-resource resource parent type)))

(defgeneric resource-authentication-headers (resource)
  (:documentation "Return a list of the authentication headers that
  should be added to the request."))


AeroNotix/cl-stack

 こちらは先の二つと違い、Novaではなくオブジェクトストアに対する基本的なファイルアップロードを実装しているようです。

(defmethod upload-file ((client openstack-client) (filename string)
                        &key (container "/testainer") (content-type "application/text") headers)
  "Upload file will upload `filename' into the ObjectStore."
  (let* ((url (format nil "~a~a~a/~a"
                      *computeurl*
                      (slot-value client 'tenantid)
                      container
                      (pathname-name filename)))
         (md5-hash (md5-digest-file filename)))
    (base-request url :PUT
                  :content-type content-type
                  :content (pathname filename)
                  :headers (base-headers client headers)
                  :after-request #'(lambda (request)
                                     (let* ((recvdheaders (nth 2 request))
                                            (etag (cdr (assoc :ETAG recvdheaders))))
                                       (string= etag md5-hash))))))

irixjp/cl-openstackclients

 どっかでみたリポジトリですね。全然できていませんXD




この4つを眺めてみましたが、実装としてはどれも実験的、といった印象です。

Lispっぽい使い方をOpenStack上で実装しているものや、アイデアのある方はぜひ教えてください。


2013年12月9日月曜日

OpenStack Tips with Emacs


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


OpenStack Advent Calendar 2013 JPネタ

OpenStackに関する作業をしているとReST APIを直接コールする事がよくあります。

ReSTを操作するにはたくさんのツールがありますが、一番イケてるのはEmacsから操作する方法です(妄想
ちなみにイケてない人は curl -X POST とかしたりします(大嘘


ということで、Emacs用のReSTクライアントを紹介します。
https://github.com/pashky/restclient.el


利用方法は簡単で、git clone して得られる el ファイルを load-path の通ったパスへ配置します。

その後は、
(require 'restclient)
と、ロードして、
M-x restclinet-mode
で restclinet-mode へ移行出来ます。


■使用方法
シンプルです。リクエストした内容をバッファに書いて、C-c C-c とするだけです。
使用感はこんな感じです。

■便利な設定
popwin.el と連携して出力結果ウインドを制御してやると使い勝手が向上します。

popwinの詳細はこちら。
http://aikotobaha.blogspot.jp/2013/04/popwinel.html

popwinの設定に以下を追加しておきます。
(push '("*HTTP Response*") popwin:special-display-config)


■mailcap-parse-mailcaps がねえよ的なエラー
使ってるEmacsのバージョンや、導入しているelファイルによっては、mailcap-parse-mailcaps に関するエラーが出ることがあります。
【参考】http://d.hatena.ne.jp/rubikitch/20080124/1201180306

エラー例
Symbol's function definition is void: mailcap-parse-mailcaps

ほとんどの場合はFLIMを使ってる場合に出ます。
flim の mailcap.el はもう使われていないので最新版に変更した上で削除するか、(require 'restclient) する直前に (load "c:/gnupack/app/emacs/emacs/lisp/gnus/mailcap.el") としてEmacsが標準で持っている mailcap.el をロードさせてやると回避できます。


2013年12月8日日曜日

書評:独習Linux専科(中井悦司 著)


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


献本いただきました。ありがとうございます(下書きにしたまま公開を忘れてました、すみません。

「独習Linux専科」サーバ構築/運用/管理 ――あなたに伝えたい技と知恵と鉄則 (Software Design plus)



著者の中井さんは「10年シリーズ」「プロのためのLinuxシステム」の著者でもあり、こちらも大変有益な本です。

本書は前2シリーズに比べるとライトな内容に仕上がっています。これからLinuxを始めたい若手のエンジニアや、今までネットワーク中心やってきたエンジニア、もしくはアプリ開発を中心やってきたけど、これからLinuxを覚えたい、といった方々に向けて書かれている本です。原理原則を中心としてなぜ?なぜ?と解説している前2シリーズに比べると、実際の動作に着眼して操作と設定に基づく解説がなされているため、システムがイメージしやすく入門書としては最適かと思います。

本書を4章までを実際に操作しながら読み進めると、Linuxを使った基礎的なシステム構築できるようになれると思います。ここからさらなるスキルアップを目指したい方は「10年シリーズ」「プロのためのLinuxシステム」へとステップアップしていく事で、体系的にLinuxのについて学習していくことができる、といった具合です。

また本書で学習し、RedHat社が提供する認定プログラムの基礎コースであるRHSCや、LPICに挑戦するのも良い選択だと思います。

5章ではLinux/計算機の基礎的な動作原理にも触れており、文系の方でSEをやられている方にはこの章は良い参考資料です。

ぜひとも本書を入り口にして、Linuxシステムの世界へ入門してみてください。



【補足】
本書のおいて sl コマンドを「ジョークコマンド」として紹介していますが、実はどんでもない誤解(え!?)です。
稼働中の仮想環境をライブマイグレーション or ストレージマイグレーション するようなデモを実施する際にコンソールに sl コマンドをループで走らせておくと、「ほらオンラインで切り替わりますよね?」とドヤ顔するのに最適です。実に実用的なコマンドですね。

参考:「信頼と実績の sl コマンドでインパクトのあるデモシナリオを構築する @LightningX(嘘 」