Hatena::ブログ(Diary)

(ひ)メモ このページをアンテナに追加 RSSフィード

2009-02-24 (Tue)

gPXEを試してみた→が、失敗

id:viver に gPXE というのを教えてもらいました。

gPXEは、TFTPじゃなくてHTTPでkernelやinitramfsをダウンロードできるところにぐっときたのでちょっと試してみたメモ。

NICのROMを書き換えるのはちょっとアレなので、PXE→gPXEのchainloadingを試した。

内容は↓に書いてある通り。

  if not ( option user-class = "gPXE" ) {
    filename  "undionly.kpxe";
  } else {
    filename  "http://ore.no.webserver.local/bububunoboot";
  }

とか

  if substring( option vendor-class-identifier, 0, 9 ) = "PXEClient" {
    filename  "undionly.kpxe";
  } else {
    filename  "http://ore.no.webserver.local/bububunoboot";
  }

とか

option space gpxe;
option gpxe-encap-opts code 175 = encapsulate gpxe;
option gpxe.bus-id code 177     = string;
(snip)
  if exists gpxe.bus-id {
    filename  "undionly.kpxe";
  } else {
    filename  "http://ore.no.webserver.local/bububunoboot";
  }

とか試すも、gPXEがHTTPでゲットしてきてくれない。

ただ、gPXEは立ち上がり、C-b で対話モードには入れるので、そこで config で filename http://.../bububunoboot を指定して、後、autoboot すれば bububunoboot で書いた通り

#!gpxe
kernel http://ore.no.webserver.local/boot/linux/vmlinuz
initrd http://ore.no.webserver.local/boot/linux/initramfs
boot

kernelとinitramfsをHTTPでGETしてくれてスコスコブートしてくれたす。

なのでもうちょっといけそうかなーと思うのですがちと保留。

メモ

メニューも出せるっぽい。

2009-02-17 (Tue)

日本語入力のときはkey-chordをoffにする

最近kaとかwaとかうまく入力できないなーと思ったので、日本語入力モードのときはkey-chordをoffってみたす。

d:id:grandVin:20080917:1221653750 を参考にしつつ。

(require 'key-chord nil t)
(if (featurep 'key-chord)
    (progn
      (defadvice toggle-input-method
        (around toggle-input-method-around activate)
        (let ((input-method-function-save input-method-function))
          ad-do-it
          (setq input-method-function input-method-function-save)
          (key-chord-mode (if current-input-method 0 1))))

      (setq key-chord-two-keys-delay 0.1)
      (key-chord-mode 1)
      (key-chord-define-global "jk" 'view-mode)
      (key-chord-define-global "cw" 'kill-word)
      ))

2009-02-14 (Sat)

あるあるおハマリ大事典 - Macでシリアル接続したいの

Macからjermでシリアル接続するときには、SUNTACのVS-60Rを使ってました。TigerやLeopardで、ドライバ要らずで挿せばすぐ使える (/dev/cu.usbmodemUSB-COM) のがポイントでした。

今までは Linux が動いている PC のシリアルポートに繋ぐために使ってたんですが、先日某スイッチングハブのコンソールに繋ぐのに使ってみるとどうも反応がない。

…ってのをtwitterでつぶやいてたら id:vm_converter さんにいろいろ教えていただきました。


まず、VS-60Rがスイッチで使えなかった原因はこうです。

スイッチのシリアルコンソールの仕様で、接続するアプリケーションでハードウエアのフロー制御をオフにする必要がありました。それに従ってjermやminicomの設定ではオフにしていたんですがそれでも繋がらない。おかしーなーと思ったら。。。

SUNTAC VS-60R

Mac OS X標準のCDCドライバが使える*3ので別途ドライバーをインストールする必要がなく使い勝手は良いのだが、ハードウェアフロー制御を切ることができないなどクセが強い。記事を書いている時点で既に製造終了のようだ。

no title

ナ、ナニー!!! 衝撃のあまりイスからずり落ちそうになりましたが原因が判明してすっきり。


次。

たまたま手元にI-O DATAのUSB-RSAQ3があったので、これがLeopardで使えないかと。

結局、

の通りに、ProlificのドライバをインストールしてVendor IDとProduct IDを書き換えたらばっちりでした。LinuxのシリアルコンソールもスイッチのシリアルコンソールもOK

めでたしめでたし

参考

あるあるおハマリ大事典 - bashのevalとセミコロン

今日のおハマリは、とあるシェル関数の出力をevalするスクリプトです。

このシェル関数は、bashの配列を定義してそれをexportするものです。ですので、いつくかの配列がexportされるのが期待する結果です。

いまだに挙動がよくわかったようなわかってないようななんで、おしえてえらいひと!


比較のために、

  • シェル関数: 行末にセミコロンをつけるかつけないか
  • eval: するっとevalするか、evalする関数を呼ぶか

の組み合わせで 4 通り試します。

こんなスクリプトを:

call=$1
semicolon=$2

if [ "$semicolon" = "ari" ]; then
  evalme() {
    cat <<EOF
HAHAHA_A=(Ei); export HAHAHA_A;
HAHAHA_B=(Bi); export HAHAHA_B;
HAHAHA_C=(Ci); export HAHAHA_C;
EOF
  }
elif [ "$semicolon" = "nasi" ]; then
  evalme() {
    cat <<EOF
HAHAHA_A=(Ei); export HAHAHA_A
HAHAHA_B=(Bi); export HAHAHA_B
HAHAHA_C=(Ci); export HAHAHA_C
EOF
  }
else
  echo abort1
  return 1
fi


if [ "$call" = "direct" ]; then
  #set -x
  eval $(evalme)
  #set +x
elif [ "$call" = "func" ]; then
  func_do_eval() { eval $(evalme); }
  #set -x
  func_do_eval
  #set +x
else
  echo abort2
  return 1
fi

引数を変えてsourceして、3つの配列 HAHAHA_A, B, Cが定義されるかみてみます:

$ unset HAHAHA_A HAHAHA_B HAHAHA_C; declare -x|grep HAHAHA; \
  . sourceme.sh direct ari; declare -x|grep HAHAHA
declare -ax HAHAHA_A='([0]="Ei")'
declare -ax HAHAHA_B='([0]="Bi")'
declare -ax HAHAHA_C='([0]="Ci")'

$ unset HAHAHA_A HAHAHA_B HAHAHA_C; declare -x|grep HAHAHA; \
  . sourceme.sh direct nasi; declare -x|grep HAHAHA
declare -ax HAHAHA_A='([0]="Ei")'
declare -ax HAHAHA_B='([0]="Bi")'
declare -ax HAHAHA_C='([0]="Ci")'

$ unset HAHAHA_A HAHAHA_B HAHAHA_C; declare -x|grep HAHAHA; \
  . sourceme.sh func ari; declare -x|grep HAHAHA
declare -ax HAHAHA_A='([0]="Ei")'
declare -ax HAHAHA_B='([0]="Bi")'
declare -ax HAHAHA_C='([0]="Ci")'

$ unset HAHAHA_A HAHAHA_B HAHAHA_C; declare -x|grep HAHAHA; \
  . sourceme.sh func nasi; declare -x|grep HAHAHA
declare -ax HAHAHA_A='([0]="Ei")'

最初の3つは、A,B,Cの3つの配列がexportされているので期待した結果です。

んがっ!最後のはなんでかAしかexportされてません。

set -xすればexportされない理由はなんとなくわかるんですが。。。んじゃなんで2つめの直接evalったときはexportされるのでしょうか。。。

$ bash --version
GNU bash, version 3.2.39(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.

ス。

2009-02-02 (Mon)

「cw」でkill-wordする

M-dよりcwのほうが慣れてるので。。。

(require 'key-chord nil t)
(if (featurep 'key-chord)
    (progn
      (setq key-chord-two-keys-delay 0.1)
      (key-chord-mode 1)
      (key-chord-define-global "jk" 'view-mode)
      (key-chord-define-global "cw" 'kill-word)
      ))
2003 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 12 |
2012 | 01 | 02 | 03 | 06 | 08 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 |
2015 | 01 | 02 | 07 | 10 |
2016 | 01 | 05 | 10 | 12 |
2017 | 07 |
2018 | 05 |