Introduction

ブログ内検索

  • このサイトの記事を検索 by Google

おすすめの一冊!

無料ブログはココログ

コンピュータ全般

2014-08-05

Debian 7.6 (wheezy) を Virtual PC に入れてみた

とある事情で、職場で気軽にいじれる Linux 環境がほしくなりました。
デスクトップ環境は不要で、各種サーバとか開発環境とかがほしい。

いちおう遊びに使っている物理サーバはあるのですが、部署内の NIS サーバとかも
やってたりするサーバなので、新しい RPM パッケージの導入とはか遠慮してます。
というわけで、Node.js とか新しい perl とか python3 とかを使いたいときは、
nodebrew とか perlbrew とか使ってローカルにインストールしてしのぐ日々・・・・。

で、ふと思ったのですが、Virtual PC にテキトーなディストリビューションを
入れれば使えるんじゃない、と。ホスト側が Windows7 Pro 32bit (mem 4GB)  というのが
一抹の不安ですが、Virtual PC 自体は自宅でも使っているので、いけそうな気が。

ちょっとググってみると、
    ・Ubuntu server は 64bit (x86_64) しかサポートしてないっぽ
    ・CentOS はみんな使ってて面白くないし、基本 x86_64 のみっぽ
    ・Fedora はよくわからん
    ・Debian は自宅 VPS でも使っていてサポートしているアーキテクチャも多い
というわけで、Debian をターゲットに決定!

さて、Debian 公式サイトからインストーライメージ DVD (debian-7.6.0-i386-netinst.iso) を
ダウンロードするところから始まります。もちろん x86_64 なんて贅沢を言わずに "-i386" です。
Virtual PC でメモリ量(ちなみに 1GB)とか設定して、ISO イメージをマウントして、
インストール開始。とりあえずあっさり最後までインストールは進んで再起動。
しかし、GRUB 画面でどちらを選んでも(通常起動 or Recovery mode) panic するだけ・・・。

失敗です。

気を取り直して Debian Live DVD を試してみることに!
すると、起動時の GRUB 画面で "-686-pae" の他に "-486" というカーネルも選べるようになってて、
"-486" を選ぶとあっさり起動してくれました。

というわけで、Virtual PC は PAE (Physical Address Extension) に未対応っぽいです。
もちろん Virtual PC そのものが動いている計算機の CPU は対応しているんですけどね。
仕方ないので、"-486" なカーネルをインストールしなきゃダメなことがわかりました。

さて、前置きが長くなってしまいましたが、本日の本題である
「"-486" カーネルの Debian を Virtual PC に インストール」
について説明します。


■■■ インストール手順 ■■■

まず、Virtual PC 側は仮想 HDD は可変サイズにしました。めんどうなので。
また、インストールメディアはネットインストールのものを選びましたが他意は無く、
フツーの3枚組の DVD でもインストールできるんじゃないでしょーか(未確認)。

  1. インストールメディアをマウントして Virtual PC を起動!
  2. 最初のメニューで "Advanced options" の "Rescue mode" を選択して進める。
  3. 途中で「パーティションが無いよ」と怒られるが、気にせず先に進む。
  4. "Execute a shell in the installer environment" を選択。
  5. 途中で「ファイルシステムが無いよ」と怒られるが、気にせず先に進む。
  6. Rescue shell のプロンプトまで進んだら、apt-install コマンドを実行する。
~ # apt-install linux-image-3.2.0-4-486
※先頭の "~ #" はプロンプトです("apt-install" 以降を入力してください) 7. 画面がリセットされ、最下行にプロンプトが表示されるだけになったら、exit する。
~ # exit
8. さっきと同じメニュー画面に戻ったハズ。 9. ESC キーを押すとまたもや「パーティションが無いよ」と怒られるので、もう一度 ESC を押す。 10. "Debian installer main menu" が表示される。 11. 中央付近の "Enter rescue mode" が選択された状態になっているので、 すぐ下の "Partition disks" を選んで実行(エンターキー)。 12. あとはパーティーションを設定してそのままインストールを進める。 13. 途中で linux-image-3.2.0-4-486 がインストールされたっぽいのが見えるかも(一瞬だけです) 14. そのまま GRUB もインストールしてインストール終了。リブート。 これでブート時の GRUB 画面に "-686-pae" と "-486" と両方表示されるようになります! すばらしい! あとは GRUB の設定を変えて "-486" で自動起動するようにしておいてください。
# vi /etc/default/grub ← "GRUB_DEFAULT=0" を "GRUB_DEFAULT=2" に変更 # update-grub2
ちなみに、このままでは root のパスワード設定とかされていないので、 GRUB 画面でシングルユーザモード (recovery mode) を選択して起動。
# passwd # adduser hogehoge # exit
これで普通にログインできるようになったハズ。 ネットインストーラだと途中で設定したプロキシ情報がデフォルトで設定されているので、 足りないパッケージをどんどん aptitude で入れちゃいましょう! ■■■ 蛇足 ■■■ Debian や Ubuntu を仮想マシンにインストールする方法をググっていると、 おまじないとして「noreplace-paravirt vga=791」の カーネルオプションを付ける、という話がちらほら出てきます。 今回、この設定をしても症状(panic しちゃう)が変わらなかったので、 あきらめて設定するのをやめました(設定しなくても動いています)。 Debian 7.6 に上がってどっか変わったのかもしれませんね。

2014-08-04

tmux でログ保存

screen では、C-a H でログ採取を開始/終了のトグルができます。
ターミナルに表示されたものをそのまま ~/screenlog.0 とかに吐いてくれます。
もちろんファイル名は変更可能です (C-a : logfile screenlog.hogehoge)

さて、同じことを tmux にさせようと思ったわけです。

やり方は簡単で、tmux 上のコマンドラインで
$ tmux pipe-pane 'cat > screenlog.0'
とかやればよいです。 ログ記録を止めるときは、
$ tmux pipe-pane
とだけ実行すれば OK。 ちなみに、ログファイルを上書きせず追記させたい場合は、
$ tmux pipe-pane 'cat >> screenlog.0'
とすればよいです。シェルのリダイレクトそのものですね。

tmux で multi display mode

tmux で screen -x みたいなことをしたい、というお話。

TeraTerm を2枚開いて、両方でひとつの screen セッションに接続して使っています。
1枚目の TeraTerm では "screen -r" でアタッチ、
2枚目の TeraTerm では "screen -x" でアタッチすれば OK。
あるウインドウを左側の TeraTerm で開いたり右側の TeraTerm で開いたりできます。
こういう使い方は "Multi display mode" と呼ぶらしい (by "man screen")。

で、tmux で同じような使い方がしたかったのですが、なかなか情報が見つからず。
あまりこのような使い方をしているひとはいないのかもしれません・・・・。
ようやく英語のサイトで情報を見つけました。

http://www.fail2fail.com/archives/45-Screen-like-tmux-Attach-a-tmux-session-from-multiple-clients-and-view-different-windows-per-client.html

まず、1枚目のターミナルでは普通に "tmux attach -t 0" とアタッチします。
次に、2枚目のターミナルで "tmux new-session -t 0" とすると、
セッション 0 のクローン(?)として新たにセッション 1 が作られ、
この2枚目のターミナルはセッション 1 となります。
セッション 1 はセッション 0 のクローンなので、同じウインドウを共有しています。
つまり、同じウインドウを両方のターミナルに同時に表示させたり、
ターミナル間で表示するウインドウを入れ替えたりできます。

すばらしい!

ちなみに、作業を終えてデタッチし、つぎに改めてアタッチするときは、
1枚目のターミナルでは普通に "tmux attach -t 0" とし、
2枚目のターミナルでも普通に "tmux attach -t 1" とします。
もうセッション 1 は存在しているので普通にアタッチすればよいわけです。
もしここで "tmux new-session -t 0" としてしまうと、2個目のクローン
セッション(セッション 2)が作られてしまいます。たぶん害はないですが、
tmux のメモリ消費量がどんどん増えてしまいそうな予感。

tmux 導入

職場で同僚にオススメされて、tmux を使ってみました。
GNU screen の改良版(?)みたいなものです。


設定ファイルは ~/.tmux.conf ということで、
ちょっとググって設定してみました。

# おまじない? set-window-option -g utf8 on # プレフィックス(デフォルトでは C-b)を C-z にする unbind C-b set -g prefix ^Z bind a send-prefix # ステータスラインの右半分の現在時刻とか邪魔(ウインドウが多いとき) set -g status-right-length 0
使ってみた感想ですが、tmux の画面分割(ペイン)はウインドウと独立なので、 ちょっと使いにくい気がしてます。逆にペインの中でウインドウを切り替えられると よかったかも。「ペイン=ターミナル」みたいに使えるとうれしかった。 ただ、ネット上では、分割した画面そのものをひとつのウインドウとして切り替え られるのが便利、みたいな評判なので、私の使い方が特殊なのかも・・・・。

2013-04-18

KMmacro (その2)


KMmacro Tips 第二弾です。

  ⇒ 第一弾の記事はこちら


■ いつでもキャンセルできる sleep

delay 命令を使えばカンタンに sleep できます。

しかし、その間はマクロ実行をキャンセルできない、という問題があります。

たとえば、

SetBreakkey [Shift] ; ESCはうまく効かないことがあるので…
としておいても、delay 命令の実行中に Shift キーを押してもキャンセルできません。 そこで、短時間の delay 命令を繰り返し実行する関数を使います。
:SLEEP_WITH_YIELD if (< %sleepPeriod 1) goto :SLEEP_WITH_YIELD_END if (< %sleepPeriod 200) goto :SLEEP_WITH_YIELD_LAST dec %sleepPeriod 200 delay 200 goto :SLEEP_WITH_YIELD :SLEEP_WITH_YIELD_LAST delay %sleepPeriod :SLEEP_WITH_YIELD_END set %sleepPeriod 0 ; 念のためリセット return
メインルーチンではあらかじめ変数宣言が必要です。
DIM %sleepPeriod ; SLEEP_WITH_YIELD ルーチン用(非保持)
あとは、delay 命令の代わりにこの関数を call するだけ。
set %sleepPeriod 5000 call :SLEEP_WITH_YIELD
これで5秒間 sleep しますが、その間いつでもマクロの実行をキャンセルできます。 上記の関数定義は独立ファイルにしておいて、各マクロで include するのがオススメです。

2013-02-08

KMmacro (その1)

KMmacro というフリーソフトをご存じでしょうか?

http://www.geocities.jp/trick_room/kmmacro.html
http://www.vector.co.jp/soft/win95/util/se211440.html

たわしとさんが公開してくださっている「キーボード・マクロ&マウス・マクロ」です。

http://www.geocities.jp/trick_room/


KMmacro は、一言で言えば「マクロツール」なのですが、条件分岐とか使えるので
いろいろ遊べるツールだったりします。特に、指定座標ピクセルの色 (RGB) の取得が
できるところがすばらしい(理由は別途)。

しばらく前に、とあるソフトの自動操作プログラムを作ったときに
だいぶ使い込んだのですが(そのプログラムはお蔵入りしました)、
最近、Web ページの Evernote 取り込みの自動化をしたくなって、
再びお世話になってます。

最新版のリリースが 2006年なのですが、Windows 7 64bit でも問題なく動きます。
Virtual PC 上での Windows XP でもまったく問題なし。
すばらしいです!

で、せっかくなので、ちょっとしたノウハウを記事にしておこうかと思います。
ちなみに、添付のドキュメント (KMmacro.txt) を読んでいることが前提です。



■ ログファイルをリアルタイムに吐く

KMmacro にはテキストファイルを読み書きする機能が備わっています。

たとえば、長いマクロを書くときに、途中途中でログを吐かせると
デバッグの役に立ちます。いわゆる printf デバッグですね。

単純にテキストファイルに書き込むなら write 文を使えば OK です。

open "log_kmmacro.txt" append 1 : : write 1 (& (date "yyyy/mm/dd hh:nn:ss") " " "hogehoge") : : close 1
open して write して close する、という基本パターンですね。 # ちなみに、write 文は自動的に最後に改行をしてくれます。 # あと、write の引数の間にカンマは不要です(KMmacro.txt の誤記)。 マクロの冒頭で open しておけば、あとはログを吐きたいところで write 文を呼び出すだけです。カンタン。 ただし、これだとバッファをフラッシュしてくれないので、 いわゆる「リアルタイム」なログにはなりません。 何行か出力したところでまとめて数行分がログに書き込まれます。 fflush みたいなコマンドは(今のところ)ありません。 もちろん、マクロが終了した時点で自動的に close してくれるので ログとして破綻しているわけではありません。 しかしながら、仮想マシン上で KMmacro を実行して、 その状況だけ "tail -f" でモニタしたい、みたいな ニッチな需要が個人的にあったりします。 答えは単純で、毎回 close してあげればいいだけです。 あまり美しくないですが、とりあえず動きます。 まず、マクロのどこかで次のような関数を定義しておきます。
:MyLog1 open "log_kmmacro.txt" append 1 write 1 (& (date "yyyy/mm/dd hh:nn:ss") " " %myLog1Message) close 1 return
さらに、マクロの冒頭で次のように変数宣言しておきます。
dim %myLog1Message
あとは、ログを吐きたいところで、write 文の代わりに以下を実行します。
set %myLog1Message "hogehoge" call :MyLog1
これだけで、ログに1行吐き出すごとにバッファがフラッシュされるので、 リアルタイムにログを監視することができます。 ちなみに、組み込み関数と組み合わせることも可能です。
set %myLog1Message (& "DEBUG: getwindowpos=" (getwindowpos)) call :MyLog1
以上、ご参考まで! (つづく)

2012-11-04

CSS の content プロパティで Unicode 記号を使う

ココログから独自ブログへの移行をすすめてます。

動機はいくつかあって、

    ・ココログの更新処理(リビルド)が遅くて嫌
    ・ココログの有料プランもやめたい
    ・独自ドメインに移行したい
    ・WordPress で遊んでみたい

というわけで、とりあえず、VPS に WordPress を入れてトライアル中。
テーマとかいろいろいじって遊んでます。

せっかくだからブログ本文のフォーマット(HTML タグの使い方)も
見直そうと思って、過去の投稿を1個1個チェックしながら検討中。

そんな中で、ひとつノウハウを得たので、メモ。



CSS の content プロパティを使うと、好きな文字列を生成できます(画像の挿入も可能)。
一般的には疑似要素 :before:after で使われることが多いです。

この content プロパティで指定できる文字列はちょっとわかりにくくて、

    ・HTML の実体参照 ("&quot;" とか)は解釈してくれない
    ・JavaScript 風な Unicode 記述 "\u0123" は解釈してくれない

さらに、WordPress のテーマのカスタム CSS (?)を使おうとすると、
WordPress のルーチンが勝手に HTML エスケープしてくれちゃうので、

    ・不等号が素直に書けない("<" も "&lt;" もダメ)

というのもあります。



で、Unicode 記号とかを使いたいときにどうすれば良いかというと、

content: "\21D2"; /* implication operator */
みたいに「バックスラッシュ(円マーク)+ Unicode コード」とすれば OK. ただし、ちょっと罠があって、 ・バックスラッシュ(円マーク)の直後に数字のゼロが来てはダメ  (文字コードの頭のゼロは省く) ・半角スペースは無視されるっぽい ・直後に「16進数の文字と解釈可能な文字」 (0-9, a-f, A-F) が続くと  正しく解釈されないので、半角スペースを空けておくのが安全 ということがわかりました。特に1個目は気づくまで時間がかかりました・・・ いくつか例を挙げておきます:
content: "xyz \A abc"; /* "xyz" + 改行 + "abc" */ content: "xyz \A0 abc"; /* "xyz" + space + "abc" */
Unicode 記号の文字コードは W3C の HTML5 仕様書をご参照ください。
HTML5 A vocabulary and associated APIs for HTML and XHTML 8.5 Named character references http://www.w3.org/TR/html5/named-character-references.html
例によってブラウザ依存なところがあるかもしれませんが、 とりあえず、Google Chrome と IE9 では確認済みです。 ご参考まで。

2012-07-02

iTunes ライブラリが認識されず

Windows を入れ替えたら iTunes のライブラリが認識されなくなったので、メモ。



先日、PC の起動ディスクを SSD 化するのにあわせて、Windows を 64bit 版にしました。
初めての 64bit 版ということで、いつも使っているソフトウェアが対応していなかったりして、
数週間たってもまだいろいろ足りなかったりします。

まぁ、そのへんの話は、そのうち記事にするつもり。



で、目下のところ一番困っていたのが、iTunes が使えない問題。


Apple の Web サイトで 64bit インストーラをダウンロードできたので
簡単に済むと思ったのですが、iTunes 自体は普通に起動できるものの、
以前のライブラリを認識してくれません。音楽もビデオも空っぽ・・・・
# ちなみに iTunes プログラム自体は 32bit だったりします。
# ファイルも "Program Files (x86)" 配下にインストールされます。



iTunes for Windows では、「編集」メニューの「設定...」の「詳細」タブで
ライブラリのフォルダーを指定できます。うちの PC では外付け HDD (eSATA) に
iTunes ライブラリを置いているので、そのフォルダを指定すれば良いハズ。
これまで何回も Windows の入れ替えをしてきましたが、いつもこれだけで
以前のライブラリがそのまま引き継げました。もちろん iPhone アプリも含めて。

しかし、今回はなぜかライブラリを認識してくれません。困った。

iTunes をインストールし直したり、iTunes 上で「ライブラリを整理」を実行したり
してみましたが、まったく認識されず・・・・


で、今日になって、Google 検索結果の中に気になる記述を発見。
iTunesではオーディオ・ファイルについてのメタデータを2つのファイルで蓄積する。 このiTunesライブラリはMac OS Xの場合オプションキー、Windowsの場合は Shiftキーを押しながら起動する事で、自由に選択できる。
さっそく Shift キーを押しながら iTunes を起動すると、ライブラリの場所を聞いてきました。 外付け HDD 上の iTunes Music と同じフォルダにある iTunes Library.itl を指定すると、 あっさりライブラリを認識してくれました!! もちろん App も認識できていて、数週間ぶりに iPhone を同期できました♪ その後、iTunes を起動しなおしても問題なくライブラリを認識してくれてます。 なんとなく iTunes のバグっぽい気がしないでもないですが、まぁ、OK. Wikipedia の記事を書いてくださった方々に感謝!!

2012-05-23

Linux で日本語メール

Linux 上の Perl スクリプトで日本語メールを送信するのに半日かかったので、メモ。

落とし穴は、Subject の MIME エンコードでした。


まず、本文は Unicode で書いておくのが簡単かと思います。
UTF-8N (BOM 無しの UTF8)で書いておいて、ヘッダには、
Content-Type: text/plain; charset="utf-8"
と指定しておくのが楽。 あとはパイプで /usr/sbin/sendmail に食わせれば OK. ただし、日本語の Subject は UTF-8 で書いておいても化けます。 なぜなら、ヘッダは "Content-Type" の範疇じゃないから。 ヘッダはいわゆる MIME エンコードをしておく必要があります。 MIME エンコードは、Encode::MIME::Header でできます。 具体的に言うと、次のコードでできます。
use Encode qw(encode); $subject = encode('MIME-Header-ISO_2022_JP', $hogehoge);
たぶん、スクリプト先頭で、
use utf8;
をしておく必要があるかもしれません。 最終的には次のようなコードを使いました。
#!/usr/bin/env perl use strict; use warnings; use utf8; use Encode qw(encode); my $text = sub { open my $fh, '<', "./hogehoge.txt" or die $!; local $/ = undef; my $s = <$fh>; close $fh or die; return $s; }->(); my $email = sub { use Email::Simple; return Email::Simple->new($text); }->(); $email->header('To') = 'hogehoge@example.com'; $email->header('Subject') = encode('MIME-Header-ISO_2022_JP', $title); { open $fh, '|-', '/usr/sbin/sendmail -t' or die $!; print $fh $email->as_string; close $fh or die $!; }
ご参考まで。

2012-05-09

Pocket (Read It Later) の Read リストが見つからない

先日、オンラインブックマークサービス "Read It Later" が
"Pocket" という名前に変わりました。
公式ブログの記事 (2012/Apr/17) Introducing the all-new Read It Later - now called Pocket
膨大な数の連携アプリがある(だからこそ利用される)サービスなので、 API のアクセスポイントは変えないらしい。まぁ、賢明な判断かと。 突然の発表だったので、フォロー記事も出ています。
公式ブログの記事 (2012/Apr/18) Pocket Works with Your Old Read It Later Account (and All the Apps that Support It)
上記記事の内容を簡単にまとめると、
1. ユーザ名とパスワードは変わらず使える。 2. 連携アプリの設定を変える必要はない。 3. ブックマークレットとかブラウザ拡張 (extension) もそのまま使える。 4. API もそのまま使える。
という話です。 まぁ、投稿用の自作サービスを使っている身としては、ひと安心。 ところで、PC の Web ブラウザや iPhone アプリで Pocket にログインすると、 ・HomeFavoritesArchive という3種類のリストが見られます。以前の(Read It Later の)旧デザインでは、 ・UnreadRead の2種類だったので、ちょっと違う。 まぁ、"Favorites" はおいておくとして、一見すると、 Home ⇔ Unread Archive ⇔ Read と対応するように思えます。 ところが・・・・ 自作の投稿プログラムで "Read" リストに投げたはずのエントリが見つからない! "Home" リストにも "Archive" リストにも載ってない! ここ数週間のデータがロストしたかと思って、正直かなり焦りました。 結論して、"Read" リストは別物として存在していました。 Read It Later のときの "Read" リストの URL を直接指定すると Pocket の "Read" リスト にリダイレクトしてくれます。 現時点では Pocket に普通にログインしても "Read" リストへのリンクは見当たりません。 移行作業で混乱しているだけかと思われますが、ちょっと不親切な気がしないでもないです。 いや、本気で焦りましたから!! 最後に、Pocket の URL を整理しておきます: ・トップページログイン"Home" リスト"Favorites" リスト"Archive" リスト"Unread" リスト(旧デザイン) ※たぶん "Home" リストと同じ ・"Read" リスト(旧デザイン) ・データの export ※ HTML ファイルとしてダウンロードできる ご参考まで。 蛇足ですが、"Read" リストがいつまでサポートされるのかがちょっと心配ではあります。

より以前の記事一覧