ようこそゲストさん

無能日記

メッセージ欄

2011年6月の日記

一覧で表示する

2011/06/28(火) 外からKVM上のSEILx86にPPTPやL2TPv2を張って、実験環境のLinuxにSSHログインしてみる

はてブ 2011/06/28 19:36 R&D (SEIL)poti
SEILにもちゃんとPPTPとL2TPv2/IPSECが実装されているのでそれを使って、
実験環境のLinuxにログインしてみる。

出先から自宅につないであれこれやるのは大事だと思います!
というわけで、大体こんな感じ
SEILx86-pptp-l2tp.png

SEILにはPPTPやL2TPv2のユーザー認証としてローカル認証やradius認証や
アカウントリストによる認証があるが、設定変更のたびにSEILにログインするのも
面倒なので、アカウントリストによる認証をやってみる。

アカウントリストはURL先に所定のフォーマットで書かれたCSVファイルを
定期的にとってきて、認証情報として利用する。

なので、実験環境にWEBサーバーを建ててそこにCSVファイルを置いておくと、
ユーザー情報を追加、削除、変更したい場合は、そのCSVファイルを修正すれば
いいので、CSVファイルを編集するWEBインターフェイスをサクッと作ってしまえば
いちいちログインする必要もなくなる

1. 先ず実験環境にwebサーバーを立ち上げる

  # aptitude install apache2
  # vi /var/wwww/account-list
  "User-Name","User-Password","Framed-IP-Address","Framed-IP-Netmask","(Description)"
  "username","password",,,"test user"
アカウントリストが取得できることを確認
# wget http://192.168.200.128/account-list

2. SEILの設定

  • 認証設定
  # authentication realm add realm0 type account-list username-suffix @mydomain
  # authentication account-list realm0 url http://192.168.200.128/account-list interval 60
  • プロトコル設定
アイドルタイマーは3時間にした。なので3時間通信がなかったら切れる。
アドレスプールはdynamicにした。dynamicだと自動でアドレスが割り当てられる。
  # pppac pool add pool0 address 10.0.0.0/24 type dynamic
  # pppac ipcp-configuration add ipcp0 pool pool0 dns-use-forwarder on
  # pppac protocol l2tp add l2tp0 accept-interface pppoe0 idle-timer 10800
  # pppac protocol pptp add pptp0 accept-interface pppoe0 idle-timer 10800
  • 認証設定とプロトコル設定をインターフェイスにバインドする
ユーザーの最大セッション数は 3 にした
  # interface pppac0 ipcp-configuration ipcp0
  # interface pppac0 bind-tunnel-protocol pptp0,l2tp0
  # interface pppac0 bind-realm realm0
  # interface pppac0 user-max-session 3
  # interface pppac0 tunnel-end-address 10.0.0.1
  • L2TPv2/IPSECのIPSEC部分の設定
  # ipsec anonymous-l2tp-transport enable
  # ipsec anonymous-l2tp-transport preshared-key "presharedkey"
  • NATの設定
これがないとインターネットに出られない
  # nat napt add private 10.0.0.2-10.0.0.255 interface pppoe0

3. 繋ぐ前のアドレス確認

pptp,l2tpのaccept-interfaceがpppoe0になっているので
pppoe0のアドレスを確認する。
  # show status ppp pppoe0
  Interface: pppoe0
    LCP state: opened
    IPCP state: opened
    IPv6CP state: initial
    BCP state: initial
    LCP negotiated options:
          magic number 0x3dfe65432
    IPCP negotiated options:
          address 1.1.1.1 <- これ
          primary dns address xxx.xxx.xxx.xxx
          secondary dns address xxx.xxx.xxx.xxx
    IPv6CP negotiated options:
          none
    BCP negotiated options:
          none
    keepalive: 30 seconds interval
本来はDNSやDDNSに登録するのが吉ですね

4. 繋いでみる

windowsから繋いでみる
スタートボタンからコンピュータを開いて、
コントロール パネル\ネットワークとインターネット\ネットワークと共有センター
にアクセス
|
v
新しい接続またはネットワークのセットアップ
|
v
職場に接続します
|
v
いいえ、新しい接続を作成します
|
v
インターネット接続(VPN)を使用します
|
v
アドレスに 確認したアドレス ここでは 1.1.1.1 を入れる
接続の名前は "自宅" にでもしとく

ユーザー名は、csvのユーザー名にrealmのuser-namesuffixを足したもの
  username@mydomain
パスワードはcsvに書かれているもの
  password
FYI: L2TPv2/IPSECの事前共有鍵
L2TPv2/IPSECの事前共有鍵を設定する場合は、
"自宅"の接続のプロパティのセキュリティの
VPN種類の下の詳細設定から事前共有鍵を設定できる。
SEILx86に設定した"presharedkey"を入れる

5.SEILでshow status pppac

  pgw2# show status pppac
  Ppp Id     Assigned IPv4   Username             Proto Tunnel From
  ---------- --------------- -------------------- ----- -------------------------
           1 10.0.0.176      username@mydomain        PPTP  xxx.xxx.xxx.xxx:54906
           2 10.0.0.193      username@mydomain        PPTP  xxx.xxx.xxx.xxx:51080

6. sshでログインしてみる

teratermで192.168.200.128に接続してみる

2011/06/26(日) SEILx86をKVMで動かしてみたというかいろいろ統合してみた

はてブ 2011/06/25 27:26 R&D (SEIL)poti
SEILx86をvrrpのbackupとして動かしているPCとLINUXの実験環境が別のPCだったり、
plalaからIPv6をもらうために別のルータが動いていたりしてたので、
節電も兼ねて、新しいPC(以降new serverと表す)を調達して、KVMに統合してみた。

最終的にはこんなイメージ
構成図.png

1. SEILx86の出力をVGAに出す必要がないのでシリアルコンソールで動作するようにする。
前に作ったFATフォーマットのUSBメモリのboot.cfg-sampleをboot.cfgにして以下のようにする。
  console=com0
  speed=115200
2. ubuntu 11.04のインストール
vhost_netも対応してそうなので、今回はubuntu 11.04を使用。
ubuntuをインストールしたnew serverの構成は以下の通り。
BTOパソコンに若干手を加えたものです。ここで購入
2TのHDDをソフトウェアRAID 1にしてインストールした。
  • case : AC420-55B ブラック # どうでもいいけど、このケースいけてない
  • board:GIGABYTE GA-H67M-D2-B3
  • cpu : Core i5-2500 # vt-x, vt-d 対応
  • memory : CFD製 DDR3-1333 8GB (4GBx2枚)
  • hdd:2TB seagate ST-2000DL003 SATA3 6Gbps x2 # AF採用
  • dvd:DVDスーパーマルチ 日立LG GH24NS70BL ブラック
  • その他 : pcie gigabit ether x 2
3. とりあえず、入れておく物
  aptitude install uuid	    #uuidを決めるとき使っただけ
  aptitude install screen  # virshを使わないでKVMで動かした場合にコンソール取るときに使う
4. KVM周りのインストール
  aptitude -y install kvm kvm-pxe qemu-kvm libvirt-bin virtinst bridge-utils
5. vhost_netを有効にする
  modprobe vhost_net
  echo vhost_net >> /etc/modules
6. ファイアウォールを切る
  ufw disable
  iptables --list #でフィルタが無いことを確認。
7. インターフェイスの設定
以下のようにしてみた。
  vi /etc/network/interfaces
  # The loopback network interface
  auto lo
  iface lo inet loopback

  # eth0 -> dmz
  # eth1 -> local
  # eth2 -> global
  auto eth0
  iface eth0 inet manual
  	up ifconfig $IFACE up
  	down ifconfig $IFACE down

  auto eth1
  iface eth1 inet manual
  	up ifconfig $IFACE up
  	down ifconfig $IFACE down

  auto eth2
  iface eth2 inet manual
  	up ifconfig $IFACE up
  	down ifconfig $IFACE down

  # br0 -> global
  # br1 -> dmz
  # br2 -> local
  auto br0
  iface br0 inet manual
  	up ifconfig $IFACE up
  	down ifconfig $IFACE down
  	bridge_ports eth2

  auto br1
  iface br1 inet manual
  	up ifconfig $IFACE up
  	down ifconfig $IFACE down
  	bridge_ports eth0

  auto br2
  iface br2 inet static
  	address 172.16.50.10
  	netmask 255.255.255.0
  	gateway 172.16.50.1
  	bridge_ports eth1

  /etc/init.d/networking restart
FYI: virbr0がいらない場合
virsh net-autostart default --disable
virsh net-destroy default
8. FATなSEILx86のUSBからSEILx86.bootdisk作成
new serverに以前作ったFATなSEILx86のUSBメモリを挿し、
ddを使ってそのイメージを保存する。
また、このイメージはinstallboot時にtimeoutを0にした物を使用した。
理由は後述のFYIを参照。
/root/kvmというディレクトリを作ってそこで作業することにする。
  mkdir /root/kvm
  cd /root/kvm
  dd if=/dev/sdc of=SEILx86.bootdisk bs=512
9. SEILx86をlibvirtに登録する
XMLファイルを作成する。
   vi SEILX86.xml

  <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
    <name>SEILx86</name>
    <uuid>XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX</uuid> #uuidコマンドで
    <memory>524288</memory>
    <currentMemory>524288</currentMemory>
    <vcpu>1</vcpu>
    <os>
      <type arch='i686' machine='pc-0.14'>hvm</type>
      <boot dev='hd'/>
      <bootmenu enable='yes'/>
    </os>
    <features>
      <acpi/>
      <apic/>
      <pae/>
    </features>
    <cpu match='exact'>
      <model>Nehalem</model> #自分の環境に合わせる
    </cpu>
      <clock offset='utc'/>
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>destroy</on_crash>
    <devices>
      <emulator>/usr/bin/kvm</emulator>
      <disk type='file' device='disk'>
        <driver name='qemu' type='raw'/>
        <source file='/root/kvm/SEILx86.bootdisk'/>
        <target dev='hda' bus='ide'/>
        <address type='drive' controller='0' bus='0' unit='0'/>
      </disk>
      <controller type='ide' index='0'>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
      </controller>
      <interface type='bridge'>
        <mac address='xx:xx:xx:xx:xx:xx'/> #自分の環境に合わせる
        <source bridge='br0'/>
        <model type='e1000'/>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
      </interface>
      <interface type='bridge'>
        <mac address='xx:xx:xx:xx:xx:xx'/> #自分の環境に合わせる
        <source bridge='br1'/>
        <model type='e1000'/>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
      </interface>
      <interface type='bridge'>
        <mac address='xx:xx:xx:xx:xx:xx'/> #自分の環境に合わせる
        <source bridge='br2'/>
        <model type='e1000'/>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
      </interface>
      <serial type='pty'>
        <target port='0'/>
      </serial>
      <console type='pty'>
        <target type='serial' port='0'/>
      </console>
      <memballoon model='virtio'>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
      </memballoon>
    </devices>
  </domain>
 
  libvirtに登録する
  virsh define SEILX86.xml
FYI: seilx86の起動トラブル
ubuntuにする前にdebian(squeeze)のKVMでSEILx86を動かしてみたけど、
mouseの設定や-usbなどのusb設定があると起動中に再起動して起動できなかった。
そして、libvirtが-usbを付けるのでdebianではlibvirtでSEILx86の起動は断念。
ubuntuでは-usbで起動途中に再起動したりはしないけど、
kvmで起動した場合system_resetしないとブートしない場合があった。
もちろんvirshで起動しても同様の問題が起こる。
どうもブートローダーのタイムアウトのカウントが途中で止まっている感じ。
これの原因はよくわかっていないのだけれど、
なぜか、kvmのboot menuをonにするとboot出来る場合が増えた。
さらにclock等の設定を追加するとだいぶboot出来る様になったが、
それでもとまることがあり、もう面倒なのでタイムアウト時間が0秒の
DISKイメージを作り直した。そのほうが速いし…
その後は問題は起きてない。
10. SEILx86の起動
/etc/libvirt/qemu.confのuserとgroupをrootにして、
virsh startで起動する
 vi /etc/libvirt/qemu.conf 
 # The user ID for QEMU processes run by the system instance.
   user = "root"
   # The group ID for QEMU processes run by the system instance.
   group = "root"
   ( rootにしちゃうのは若干手きか。。。)

  /etc/init.d/libvirt-bin restart
  virsh start SEILx86
11. SEILx86のコンソールに入る
  virsh console SEILx86
FYI : virshを使わない方法
例えば、以下の3つのファイル
- boot.sh
- qemu-ifdown-custom
- qemu-ifup-custom
を作成しboot.shを実行することで起動可能であることを確認
コンソールは出力にどのデバイスを使うかが以下の様にコンソールにでるので
char device redirected to /dev/pts/2
screen /dev/pts/2
として取れる

====== boot.sh ======
#!/bin/sh
export LC_ALL=C
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export QEMU_AUDIO_DRV=none

kvm_cmd=/usr/bin/kvm
vm_name=SEILx86
uuid_cmd=/usr/bin/uuid
disk_image=/root/kvm/SEILx86.bootdisk
mac_addr_prefix=xx:xx:xx:xx:xx       #自分の環境に合わせる
ifup_script=/root/kvm/qemu-ifup-custom
ifdown_script=/root/kvm/qemu-ifdown-custom
tap_idx_offset=0

# 以下1行で
$kvm_cmd -M pc -cpu kvm64 -enable-kvm -m 512 -smp 1 -name $vm_name -uuid `$uuid_cmd` -rtc base=utc -boot order=c,menu=on -hda $disk_image -net nic,model=e1000,macaddr=$mac_addr_prefix:00 -net tap,ifname=tap`expr 0 + $tap_idx_offset`,script=$ifup_script,downscript=$ifdown_script -net nic,model=e1000,macaddr=$mac_addr_prefix:01 -net tap,ifname=tap`expr 1 + $tap_idx_offset`,script=$ifup_script,downscript=$ifdown_script -net nic,model=e1000,macaddr=$mac_addr_prefix:02 -net tap,ifname=tap`expr 2 + $tap_idx_offset`,script=$ifup_script,downscript=$ifdown_script -chardev pty,id=serial0 -device isa-serial,chardev=serial0 -nographic -usb

===== qemu-ifdown-custom =====
#!/bin/sh

switch=br0
if [ "$1" = "tap1" ]; then
switch=br1
elif [ "$1" = "tap2" ]; then
switch=br2
fi

/usr/sbin/brctl delif $switch $1
/sbin/ifconfig $1 0.0.0.0 down

===== qemu-ifup-custom =====
#!/bin/sh

switch=br0
if [ "$1" = "tap1" ]; then
switch=br1
elif [ "$1" = "tap2" ]; then
switch=br2
fi

/sbin/ifconfig $1 0.0.0.0 up
/usr/sbin/brctl addif $switch $1

12. SEILx86の設定
構成図にある設定をちゃちゃっとやってみた。
以下のような感じの設定にした
filterとsnatはあとでもうちょっと追加するので暫定設定。
  • ユーザー設定
  # password admin
  # password user
  • ホスト名の設定
  # hostname "pgw2"
  • インターフェイス設定
  # interface lan0 address 192.168.1.3/24
  # interface lan1 address 192.168.200.1/24
  # interface lan2 address 172.16.50.3/24
  • タイムゾーンの設定
  # timezone "Japan"
  • 環境設定
  # environment login-timer none
  # environment terminal auto-size on
PPPoE設定
  # ppp delete PPPOE-SAMPLE 
  # ppp add v4pppoe keepalive 30 ipcp enable ipcp-address on ipcp-dns on ipv6cp disable authentication-method chap identifier myid@isp.jp passphrase password tcp-mss auto
  # ppp add v6pppoe keepalive 30 ipcp disable ipcp-address on ipcp-dns on ipv6cp disable authentication-method chap identifier myid@v6.isp.jp passphrase password tcp-mss auto
  # interface pppoe0 ppp-configuration v4pppoe 
  # interface pppoe1 ppp-configuration v6pppoe
  # interface pppoe0 over lan0
  # interface pppoe1 over lan0
  • 経路設定
  # route6 add default pppoe1
  • DHCP6設定
  # dhcp6 client enable
  # dhcp6 client interface pppoe1
  # dhcp6 client prefix-delegation subnet lan1 sla-id 0x1 enable
  # dhcp6 client prefix-delegation subnet lan2 sla-id 0x2 enable
  # dhcp6 server interface lan1 enable
  # dhcp6 server interface lan2 enable
  # dhcp6 server interface lan1 dns add dhcp6 
  # dhcp6 server interface lan2 dns add dhcp6
  • RTADVD設定
  # rtadvd enable
  # rtadvd interface lan1 enable
  # rtadvd interface lan1 other-flag on
  # rtadvd interface lan1 advertise auto
  # rtadvd interface lan1 advertise add interface-prefix
  # rtadvd interface lan2 enable
  # rtadvd interface lan2 other-flag on
  # rtadvd interface lan2 advertise auto
  # rtadvd interface lan2 advertise add interface-prefix
  • FILTER設定 (暫定)
  # filter add pe0_dns_block interface pppoe0 direction in action block protocol tcpudp srcport 0-65535 dst pppoe0 dstport 53 state disable logging off enable
FILTERT6設定
  # filter6 add lan1_dns_block interface pppoe1 direction in action block protocol tcpudp srcport 0-65535 dst xxxx:xxxx:xxxx:1::1/128 dstport 53 state disable logging off enable
  # filter6 add lan2_dns_block interface pppoe1 direction in action block protocol tcpudp srcport 0-65535 dst xxxx:xxxx:xxxx:2::1/128 dstport 53 state disable logging off enable
  • NAT設定
  # nat logging off
  # nat upnp off
  # nat napt delete all
  # nat napt add private 192.168.200.2-192.168.200.254 interface pppoe0
  # nat napt add private 172.16.50.4-172.16.50.254 interface pppoe0
  • DHCP設定
  # dhcp interface lan0 disable 
  # dhcp interface lan0 pool none 
  # dhcp interface lan0 dns delete all 
  # dhcp interface lan0 expire system-default 
  # dhcp enable
  # dhcp mode server
  # dhcp interface lan2 enable
  # dhcp interface lan2 expire 1
  # dhcp interface lan2 gateway 172.16.50.1
  # dhcp interface lan2 pool 172.16.50.150 50
  # dhcp interface lan2 static add xx:xx:xx:xx:xx:xx xx.xx.xx.xx 
  # dhcp interface lan2 domain "xxxxx.xxxxxx" 
  # dhcp interface lan2 dns add 172.16.50.21
  # dhcp interface lan2 dns add 172.16.50.3
  • DNS FORWARDER設定
  # dns forwarder delete all
  # dns forwarder enable
  # dns forwarder add dhcp6
  # dns forwarder add ipcp
  • NTP設定
  # ntp enable
  # ntp server add 133.243.238.164
  # ntp server add 210.173.160.27
  • SYSLOG設定
  # syslog debug-level on
  # syslog alternate-timestamp on
  # syslog command-log on
  # syslog sequence-number on
  # syslog facility local1
  # syslog remote on
  # syslog remote-server add locallogserver address 172.16.50.21 hostname pgw2 facility local2 sequence-number on alternate-timestamp on log-level info src 172.16.50.3
  • RESOLVER設定
  # resolver enable
  # resolver address add 172.16.50.3
  # resolver address add xxxx:xxxx:xxxx:1::1
  # resolver address add ipcp
  • HTTP設定
  # httpd disable
  • TELNET設定
  #telnetd disable 
  • SSHD設定
  # sshd hostkey rsa1 none 
  # sshd hostkey dsa auto 
  # sshd hostkey rsa auto 
  # sshd enable 
  • VRRP設定
  # vrrp watch-group add pppoe interface pppoe0 route-up default 
  # vrrp lan2 add vrid 1 address 172.16.50.1/32 priority 1 watch pppoe virtual-mac on delay 1 dead-detect 3
FYI: エージング
上記の設定を行い。しばらく様子を見たところ。
SEILx86が通信ができない状態になっていた。
tcpdumpやnetstatやshowコマンドでいろいろ調べてみると、
パケットの受信ができていないという状況になっているようだった。
report-to stdinの情報を見ていると定期的にmbufの使用量が上がり、
8000を超えた辺で通信が途絶え、mclplのfailのカウントが上がり始めた。
この状態になるとパケットが受信できなくなる。
kvmのインターフェイスをいろいろ変えて試したが変わらず、
kvmを使わずqemuのみで動かしても症状は変わらなかった。
増え方が一定なので何かの機能が問題なのかなと思い。
増え方と通信パケットで同期してそうなものを調べると、
vrrpのアドバタイズをうけるとmbufの使用量が上がっているようだった。
なので、vrrpの設定を削除すると、mbufの使用量の増加が止まった。
環境によっては、問題なく動く場合もあると思うが、
自分の環境では、長期の安定利用をしたいのでvrrpは断念し、
冗長化は他の方法を考えることにした。
13. 実験環境LINUXの作成
インストールdvdをpcにいれて、
vir-installでゲストをインストール
  virt-install --virt-type=kvm --cdrom=/dev/cdrom --name=LinuxHack --ram=1024 --vcpus=2 --file=/root/kvm/LinuxHack.img --file-size=100 --os-type=linux --os-variant=ubuntumaverick --network=bridge:br1 --mac=xx:xx:xx:xx:xx:xx --vnc --vnclisten=172.16.50.10 --keymap=ja
その後、vncで172.16.50.10につないで操作する。

14. 実験環境LINUXの起動
virsh start LinuxHack
15. 設定
  • アドレス設定
  vi /etc/network/interfaces

  auto lo
  iface lo inet loopback

  auto eth0
  iface eth0 inet static
          address 192.168.200.128
          netmask 255.255.255.0
          gateway 192.168.200.1

  • resolver設定
  vi /etc/resolv.conf
  nameserver 192.168.200.1
以上でひとまず完了。
細かい設定はまたあとで。


メモ:
  • bootdiskをマウントしたくなった時
mount -o loop,offset=`expr 32 \* 512` -t msdos SEILx86.bootdisk /mnt 

2011/06/15(水) ぬ。

はてブ 2011/06/15 25:11 R&D (SEIL)poti
kvm -hda SEILx86.bootdisk -boot c -curses -m 512
なんか動いた。

2011/06/11(土) SEILx86が起動するUSBメモリを作ってみた

はてブ 2011/06/11 17:47 R&D (SEIL)poti
SEILx86のブートディスクイメージをddで書き込むと32Mになり、
ファイルシステムがufsなのでwindowsでUSBメモリが使えないのでどうにかする。
今回は、128MのUSBメモリと4GのUSBメモリにインストールしてみた

先に結果を言っておくと
  • windows 7でDISKとして見えることを確認
  • 手持ちの3台のPCでSEILx86の起動のみを確認 (機能の動作確認していない)
    • M2N-VM DH + Athlon 64 X2 5600+
    • let's note CF-Y2
    • atom D510 atom 230
      • D510 atom 230はBIOSのUSB mass storage emulation typeのところをfixed diskにすること

ただし、必ず動作を保証するものではないので、あしからず。

補足:
出来たUSBメモリをLINUX上で
    # dd if=/dev/sdb of=SEILx86bootdisk.img bs=512 
    # qemu -hda SEILx86bootdisk.img -boot c -m 512 -curses
として、qemuで起動する事を確認
次はKVMかな

手順

0. 環境設定
WINDOWS上のVMware serverにnetbsd5.1をインストール。
さらに、VMwareコンソールは使いにくいのでteratermでsshでログインしてリモートから作業する
      // NetBSD環境設定例
      // # vi /etc/rc.conf
      // sshd=YES
      // ifconfig_pcn0="inet 10.0.0.120 netmask 255.255.255.0"
      // defaultroute="10.0.0.1"
      // hostname="NetBSD"
      // # vi /etc/resolv.conf
      // nameserver 10.0.0.20
      // # /etc/rc.d/network restart
      // # /etc/rc.d/sshd start
      // # useradd -m -g wheel user
      // # passwd user      
1. SEILx86のファイルを取り出す作業
seilx86-180-bootdisk.zipを解凍してできたファイルをNetBSDへコピー
コピーにはwinscpをつかった
  # fdisk -r ./seilx86-180-bootdisk/bootdisk.img
  (これで32セクタから始まっていることがわかるので)
  # dd if=./seilx86-180-bootdisk/bootdisk.img of=./seilx86-180-bootdisk/bootdisk.img.strip bs=512 skip=32
  # vnconfig /dev/vnd1d ./seilx86-180-bootdisk/bootdisk.img.strip
  # mount /dev/vnd1d /mnt
  # cp -r /mnt ./
  # umount /mnt
  # vnconfig -u /dev/vnd1d 
2. 正しいジオメトリ情報がほしいので、windowsでUSBメモリのFAT(規定値)フォーマットを行う
      // もし、USBメモリにすでにseilx86のイメージを書き込んでしまっていたら
      // おそらく32Mに見えているはずなので、NetBSD環境上で、
      // # dd if=/dev/zero of=/dev/sd1d count=2048
      // をしてなかったことにしておく (sd1dのdはディスク全体を示している)
      // また、 windowsとvmware上のゲストOSへのUSBの接続切り替えは
      // vmware serverの管理インターフェイスからできる
3. ジオメトリ確認
  # fdisk /dev/rsd1
  fdisk: Cannot determine the number of heads
  Disk: /dev/rsd1d
  NetBSD disklabel disk geometry:
  cylinders: 481, heads: 16, sectors/track: 32 (512 sectors/cylinder)
  total sectors: 246272

  BIOS disk geometry:
  cylinders: 481, heads: 16, sectors/track: 32 (512 sectors/cylinder)
  total sectors: 246272

  Partition table:
  0: unknown (sysid 114)
      start 778135908, size 1141509631 (557378 MB, Cyls 1519796/11/5-3749307/11/3), flag 0x6f
          PBR is not bootable: Sector 778135908 is unreadable (Invalid argument)
  1: Novell Netware 3.xx (sysid 101)
      start 168689522, size 1936028240 (945326 MB, Cyls 329471/11/19-4110776/14/2), flag 0x69
          PBR is not bootable: Sector 168689522 is unreadable (Invalid argument)
  2: unknown (sysid 121)
      start 1869881465, size 1936028192 (945326 MB, Cyls 3652112/3/26-7433417/4/25), flag 0x73
          PBR is not bootable: Sector 1869881465 is unreadable (Invalid argument)
  3: Type 7??? - LBA (sysid 13)
      start 0, size 3637226496 (1775990 MB, Cyls 0-7103957), flag 0x74
  No active partition.
  Drive serial number: 1864397675 (0x6f20736b)
ジオメトリ情報を確認しておく
NetBSDがおもってるのとBIOSがおもってるのが一致していればなんの問題もない

4. パーティション作成
  # fdisk -u /dev/rsd1 
FAT16パーティションを一つ作る
パーティションを消す場合はsysidに0を指定する
sysidは6が正しいと思うけどあえて14にしてみた

5. 作成したパーティションをアクティブにする
  # fdisk -a /dev/rsd1 
6. MBRを書き込む
  # fdisk -i /dev/rsd1
7. パーティション情報の確認
  # fdisk /dev/rsd1
  Disk: /dev/rsd1d
  NetBSD disklabel disk geometry:
  cylinders: 481, heads: 16, sectors/track: 32 (512 sectors/cylinder)
  total sectors: 246272

  BIOS disk geometry:
  cylinders: 481, heads: 16, sectors/track: 32 (512 sectors/cylinder)
  total sectors: 246272

  Partition table:
  0: DOS (16-bit FAT) - LBA (sysid 14)
      start 32, size 246240 (120 MB, Cyls 0-480), Active
          PBR is not bootable: All bytes are identical (0x00)
  1: <UNUSED>
  2: <UNUSED>
  3: <UNUSED>
  Bootselector disabled.
  First active partition: 0
  Drive serial number: 1864397675 (0x6f20736b)
こんな感じにした

8. ディスクラベル情報を設定
  # disklabel -iI /dev/rsd1
Iでジオメトリ情報をBIOSのもに修正する
ディスクラベル情報を書き換える
必ずaがSEILx86の領域になるようにすること

9. ディスクラベル情報の確認
  # disklabel -r /dev/rsd1
  # /dev/rsd1d:
  type: SCSI
  disk: USB DISK 2.0
  label: fictitious
  flags: removable
  bytes/sector: 512
  sectors/track: 32
  tracks/cylinder: 16
  sectors/cylinder: 512
  cylinders: 481
  total sectors: 246272
  rpm: 3600
  interleave: 1
  trackskew: 0
  cylinderskew: 0
  headswitch: 0           # microseconds
  track-to-track seek: 0  # microseconds
  drivedata: 0

  4 partitions:
  #        size    offset     fstype [fsize bsize cpg/sgs]
   a:    246240        32      MSDOS                     # (Cyl.      0*-    480)
   d:    246272         0     unused      0     0        # (Cyl.      0 -    480)
こんな感じにした

10. ファイルシステムを作って取り出したファイルを書き込む
  # newfs_msdos -F 16 -r 16 /dev/rsd1a
  # mount  -t msdos /dev/sd1a /mnt
  # cp -r ./mnt/* /mnt/
  # umount /mnt
  # installboot -v -o timeout=10 -o speed=115200 /dev/rsd1a /usr/mdec/bootxx_msdos
  timeoutやスピード設定は環境や好みに合わせる
11. 起動

起動:
SEILx86を起動するPCにUSBメモリを挿してから起動して、
BIOSで挿したUSBメモリでブートできるように設定してから再起動する
もし、BIOSにUSB mass storage emulation typeの設定がある場合はfixed diskにして起動する

手順 USBメモリ4G版

0. 作業環境やSEILx86のファイルを取り出す作業を行う

1. 正しいジオメトリ情報がほしいので、windowsでUSBメモリのFAT32(規定値)フォーマットを行う

2. ジオメトリ情報を確認
  #  fdisk /dev/rsd1
  fdisk: Cannot determine the number of heads
  Disk: /dev/rsd1d
  NetBSD disklabel disk geometry:
  cylinders: 3792, heads: 64, sectors/track: 32 (2048 sectors/cylinder)
  total sectors: 7766016

  BIOS disk geometry:
  cylinders: 483, heads: 255, sectors/track: 63 (16065 sectors/cylinder)
  total sectors: 7766016

  Partition table:
  0: unknown (sysid 114)
      start 778135908, size 1141509631 (557378 MB, Cyls 48436/183/40-119492/104/7), flag 0x6f
          PBR is not bootable: Sector 778135908 is unreadable (Invalid argument)
  1: Novell Netware 3.xx (sysid 101)
      start 168689522, size 1936028240 (945326 MB, Cyls 10500/111/30-131012/158/28), flag 0x69
          PBR is not bootable: Sector 168689522 is unreadable (Invalid argument)
  2: unknown (sysid 121)
      start 1869881465, size 1936028192 (945326 MB, Cyls 116394/188/12-236906/234/25), flag 0x73
          PBR is not bootable: Sector 1869881465 is unreadable (Invalid argument)
  3: Type 7??? - LBA (sysid 13)
      start 2885681152, size 55499 (27 MB, Cyls 179625/87/47-179628/203/42), flag 0x74
          PBR is not bootable: Sector 2885681152 is unreadable (Invalid argument)
  No active partition.
  Drive serial number: 1864397675 (0x6f20736b)
  ジオメトリがちぐはぐしているが、BIOSのものを信じる
  この時点でsd0: fabricating a giometryは覚悟
3. パーティションの作成
  # fdisk -u /dev/rsd1
FAT32パーティションを1つ
sysidは12にしてみた

4. パーティションをアクティブにする
  # fdisk -a /dev/rsd1 
5. MBRをインストールする
  # fdisk -i /dev/rsd1
6. パーティション情報の確認
  # fdisk  /dev/rsd1
  Disk: /dev/rsd1d
  NetBSD disklabel disk geometry:
  cylinders: 3792, heads: 64, sectors/track: 32 (2048 sectors/cylinder)
  total sectors: 7766016

  BIOS disk geometry:
  cylinders: 484, heads: 255, sectors/track: 63 (16065 sectors/cylinder)
  total sectors: 7766016

  Partition table:
  0: Primary DOS with 32 bit FAT - LBA (sysid 12)
      start 63, size 7765953 (3792 MB, Cyls 0-483/105/6), Active
          PBR is not bootable: All bytes are identical (0x00)
  1: <UNUSED>
  2: <UNUSED>
  3: <UNUSED>
  Bootselector disabled.
  First active partition: 0
  Drive serial number: 1864397675 (0x6f20736b) 
7. ディスクラベルを情報を設定
  # disklabel -iI /dev/rsd1
Iでジオメトリ情報をBIOSのもに修正する
ディスクラベル情報を書き換える
必ずaがSEILx86の領域になるようにすること

8. ディスクラベル情報の確認
  # disklabel -r /dev/rsd1
  # /dev/rsd1d:
  type: SCSI
  disk: USB Flash Disk
  label: fictitious
  flags: removable
  bytes/sector: 512
  sectors/track: 63
  tracks/cylinder: 255
  sectors/cylinder: 16065
  cylinders: 484
  total sectors: 7766016
  rpm: 3600
  interleave: 1
  trackskew: 0
  cylinderskew: 0
  headswitch: 0           # microseconds
  track-to-track seek: 0  # microseconds
  drivedata: 0

  4 partitions:
  #        size    offset     fstype [fsize bsize cpg/sgs]
   a:   7765953        63      MSDOS                     # (Cyl.      0*-    483*)
   d:   7766016         0     unused      0     0        # (Cyl.      0 -    483*)
9. ファイルシステムを作って取り出したファイルを書き込む
  # newfs_msdos -F 16 -r 16 /dev/rsd1a
  # mount  -t msdos /dev/sd1a /mnt
  # cp -r ./mnt/* /mnt/
  # umount /mnt
  # installboot -v -o timeout=10 -o speed=115200 /dev/rsd1a /usr/mdec/bootxx_msdos
  timeoutやスピード設定は環境や好みに合わせる
11. 起動
SEILx86を起動するPCにUSBメモリを挿してから起動して、
BIOSで挿したUSBメモリでブートできるように設定してから再起動する
もし、BIOSにUSB mass storage emulation typeの設定がある場合はfixed diskにして起動する
sd0: fabricating a geometryという警告がたくさん出ているが、一応起動しているようだ...

とりあえず、すべてのUSBメモリにSEILx86を仕込んでしまえばいいと思うよ!