Orz部屋 - Sasami3 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

!三代目モバイルノート
現在構築中2012/11/09購入
2012/11/30運用開始


!!システム構成
||ベース||NEC LavieG Type-M PC-GL196B3GV||
||メモリ||SanMax SMD-N16G28NTP-16K-D||
||Strage||Plextor M5Pro 512MB||

!!環境構築コンセプト
* Win8 ProとFreeBSDのDual Boot運用
* StrageはGPT/ZFSで運用
* FreeBSDは、UEFIに未対応なうえ、'''gptzfsboot'''に使う '''pmbr'''はDual Bootに未対応
** システムレベルでの、UEFI Bootと Legacy BIOS Bootの使い分けで Dual Bootする
** FreeBSDは、Legacy BIOS Boot経由で '''pmbr'''と '''gptzfsboot'''をGPTに仕込む

!!Windows8のセットアップ
# '''再セットアップメディア作成ツール'''にて、BD-R上に''再セットアップメディア''を作成
# Inetl RSTを解除して、Strage SystemをAHCIモードに設定
# メモリ換装・増設
# HDDをSSDへ換装
# ''再セットアップメディア''で起動、Cドライブを'''208GiB'''でWin8 Proを再インストール

!!!Windows8再セットアップ直後のパーティションテーブル
* PMBR
||index||sysid||begin||end||start||size||flag||
||1||238||0/0/2||1023/255/63||1||4294967295||0||
* GPTテーブル
||index||rawtype||label||begin||length||備考||
||-||-||-||34||2014||free(1M)||
||1||de94bba4-06d1-4d40-a16a-bfd50179d6ac||Basic data partition||2048||1951744||Windows回復環境(RECOVERY)||
||2||c12a7328-f81f-11d2-ba4b-00a0c93ec93b||EFI system partition||1953792||532480||EFIブートブロック||
||3||e3c9e316-0b5c-4db8-817d-f92df00215ae||Microsoft reserved partition||2486272||262144||MSR||
||4||ebd0a0a2-b9e5-4433-87c0-68b6b72699c7||Basic data partition||2748416||437499904|| Cドライブ(208GB)||
||5||ebd0a0a2-b9e5-4433-87c0-68b6b72699c7||Basic data partition||440248320||519710720||Dドライブ(247GB)||
||6||de94bba4-06d1-4d40-a16a-bfd50179d6ac||Basic data partition||959959040||40124416||NEC再セットアップメディア?||
||-||-||-||1000083456||131727||free(64M)||

!!FreeBSDのセットアップ
Windows8上から'''D'''パーティションを削除した上で、Legacy BootにてFreeBSD 9.1-RC3 LiveDVDを起動し、前方 1MiBのギャップに''freebsd-boot''、'''D'''パーティションの跡地に''freebsd-swap'',''freebsd-zfs''を確保してGPT ZFS Rootで構成する

注意すべきは、PMBR上の EFI GPTパーティションに'''active'''フラグが立っているUEFIが EFI System Partitionを認識しなくなる点
* GEOM/GPTが PMBRを書く際に自動的に'''active'''フラグが立つ
** コメントによれば、一部のLegacy BIOSは '''active'''フラグが無いと PMBRのブートコードを読まないらしいらしく、それ対策のhackらしい
** sysctl経由でLegacy BIOS hackを制御するパッチを用意した({{attach_anchor(sys:geom:part.diff)}})
*** ''kern.geom.part.gpt_pmbr_legacy_bios_hack'' sysctlを'''0'''に設定するとlegacy BIOS hackが無効になる
** パッチ無しの場合は、'''gpart'''による操作完了後、第一セクタのオフセット446(0x01BE)を 0x00に書き換えて対応
*** dd/head/tail/catを駆使して頑張る
*** pmbr書き換え&flag非活性化後は、作業前にMBRをファイルに書き出して、作業後書き戻して対応する

!!!FreeBSDの動作状況
* 起動時に "gptzfsboot: error 4 lba 4264558496"が出る
** 2TiB境界付近の LBAなので pmbrの問題か?
* 9.1-RC3では、無線LAN(Intel Centrino Advanced-N + WiMAX 6235)を認識しない(Vendor 0x8086/Device 0x088f)
** [[The FreeBSD Forum|http://forums.freebsd.org/showthread.php?t=35467]]の記事(記事は、DeviceID 0x088eの個体)を参考に、/sys/dev/iwn/if_iwn.cの書き換えとiwn6000g2bfw.koの更新を行い、iwn0として認識し、APスキャンが動作する所までは確認した
*** 手元のAP(11a WPA2/PSK運用)相手だと、'''associated'''になった直後に'''no carrier'''で切れるため、実用に耐えない
*** '''ndis'''ドライバを試してみたが、kldloadしてもデバイスノードが生えない(認識しない)
*** しばらくは、USB刺しの''if_run''で運用する
* S3 suspend/resumeは動作するが、resume後にコンソール画面が復旧しない
** LAN経由のloginや、キーボード入力は生きている
** ACPI Video Extensionを組み込んで、''hw.acpi.reset_video'' sysctlを使っても無理
** jfbtermの起動終了でもダメ
** X.org + Intel/KMSでは、復帰後の画面にノイズが残るが'''xrefresh'''による再描画で復旧する
*** dbus/hald無しの状態だと動いたが、dbus/hald有りの状態だと復帰中にX Serverが刺さるような…
*** 現行のIntel/KMS実装では、VT-switchできないという問題は残る
* X.orgでNX Padが使えない
** Windows側のデバイスマネージャーによれば、Synaptics製
** xf86-input-synaptics以前に、psmがsynapticsとして認識しない(新しいFirmwareに未対応?)
** [[dumbbell氏のパッチ|http://people.freebsd.org/~dumbbell/synaptics/psm-synaptics-support-firmware-7.5.patch]]を当てるとうまくいく(Firmware v7.5 or later対応パッチ?)
** xf86-input-synaptics-1.5.0だと、'''Tap'''による''Button 1''イベント以外の Buttonイベントが拾えない
*** マシンは異なるが、[[類似の報告|http://honuhonu.blog.so-net.ne.jp/2012-02-04-1]]有り
*** xf86-input-synaptics-1.6.2には、当該パッチが取り込まれているようで込まれている模様だが問題なく動作するClickPad回りは動かない(Xinput or psm側の対応が必要?)
** Multi touchは、Xinput 2.2/X.org Server 1.12以降までお預け
** [[Synaptics Touch Padに関するまとめ|SynapticsTouchPad]]
'''9-STABLE r243365'''
psm0: current command byte:0065
Synaptics Touchpad v8.1
   Model information:
    infoRot180: 0
    infoPortrait: 0
    infoSensor: 1
    infoHardware: 113
    infoNewAbs: 1
    capPen: 0
    infoSimplC: 1
    infoGeometry: 1
   Failed to read extended capability bits
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
psm0: model Generic PS/2 mouse, device ID 0-00, 2 buttons
psm0: config:00000000, flags:00000008, packet size:3
psm0: syncmask:c0, syncbits:00

'''9-STABLE r243365''' + ''psm-synaptics-support-firmware-7.5.patch''
psm0: current command byte:0065
Synaptics Touchpad v8.1
   Model information:
    infoRot180: 0
    infoPortrait: 0
    infoSensor: 1
    infoHardware: 113
    infoNewAbs: 1
    capPen: 0
    infoSimplC: 1
    infoGeometry: 1
   Extended capabilities:
    capExtended: 1
    capPassthrough: 0
    capSleep: 0
    capFourButtons: 0
    capMultiFinger: 1
    capPalmDetect: 1
   Additional Buttons: 0
psm0: found Synaptics Touchpad
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
psm0: model Synaptics Touchpad, device ID 0-00, 3 buttons
psm0: config:00004000, flags:00000008, packet size:6
psm0: syncmask:c0, syncbits:00
* Analog audio出力は2系統あって、それぞれスピーカーとヘッドホン端子につながっている
** ピンジャック差し込みで、出力が切り替わらないので要注意
** おそらく、マイク入力もピンジャックと液晶モニタ上部のマイクとで別系統と思われる
** Windowsの挙動を見るかぎり、ピンジャック挿入イベントを拾う手段があると思われる
*** 現状では、'''devd'''側にイベントが流れてこないので、''hw.snd.default_unit''を動的に書き換える等の対応は不可
hdacc0: <Realtek ALC269 HDA CODEC> at cad 0 on hdac0
hdaa0: <Realtek ALC269 Audio Function Group> at nid 1 on hdacc0
pcm0: <Realtek ALC269 (Analog)> at nid 20 and 24 on hdaa0
pcm1: <Realtek ALC269 (Analog)> at nid 21 and 18 on hdaa0
* ACライン
** '''devd'''でイベント検知可能
** 電源途絶 '''system=ACPI subsystem=ACAD type=\\_SB_.PCI0.LPCB.EC__.ADP1 notify=0x00'''
** 電源接続 '''system=ACPI subsystem=ACAD type=\\_SB_.PCI0.LPCB.EC__.ADP1 notify=0x01'''
* HotKeyまわり
** 動作するHotKey
*** Fn+F12(Scroll Lock)
*** Fn+F6(Beep ON/OFF)
*** Fn+F2(無線ON/OFF) iwn0/ubt0が同時にON/OFFする
*** Fn+F8/F9(LCD Brightness Down/Up) ''acpi_video.ko''ロード時
** 動作しないHotKey
*** Fn+F1/F10/F11Volume Mute/Down/Up)
** 未確認のHotKey
*** Fn+F3(Display Switch)
*** Fn+F4(ECO)
*** Fn+F5(Wireless Display)
** Fn+F4/F8/F9操作時に、余分なキーボード入力イベントが発生する
** '''devd'''側はイベントを捕捉していない
!!!Live DVDでの作業記録
# kbdcontrol -l jp.106x
# cd /tmp
# gpart add -t freebsd-boot -b 1024 -s 1024 -l gptzfsboot ada0
    サイズに注意(/boot/pmbrが読み込めるブートストラップに 545k制限あり)
# gpart bootcode -p /boot/gptzfsboot -i 6 ada0
# gpart add -t freebsd-swap -s 16g -l bsdswap ada0
# gpart add -t freebsd-zfs -l bsdpool ada0
ここで、PMBRのflagを加工

4kiB境界(ashift=12)な zpoolを作るためのハック
# dd if=/dev/zero of=null.img count=1 seek=486156287
# mdconfig -a -t vnode -f null.img -S 4096
# zpool create -o altroot=/tmp/zsasami3 -o cachefile=/tmp/zpool.cache zsasami3 mirror /dev/md2 /dev/gpt/bsdpool
# zpool detach zsasami3 /dev/md2

# zpool set bootfs=zsasami3 zsasami3
# zfs set checksum=fletcher4 zsasami3
# zfs set atime=off zsasami3

# zfs create -o setuid=off -o compression=lzjb zsasami3/tmp
# chmod 1777 /tmp/zsasami3/tmp

# zfs create -o compression=lzjb zsasami3/home

# zfs create zsasami3/SAD
# zfs create zsasami3/opt
# zfs create zsasami3/compat

# zfs create zsasami3/usr
# zfs create zsasami3/usr/local
# zfs create -o setuid=off -o exec=off -o compression=lzjb -o dedup=sha256,verify zsasami3/usr/doc
# zfs create -o setuid=off -o exec=off -o compression=lzjb -o dedup=sha256,verify zsasami3/usr/src
# zfs create -o setuid=off                  -o compression=lzjb -o dedup=sha256,verify zsasami3/usr/ports
# zfs create                    -o exec=off -o compression=off -o dedup=off               zsasami3/usr/ports/distfiles
# zfs create                    -o exec=off -o compression=off -o dedup=off               zsasami3/usr/ports/packages

# zfs create                                               zsasami3/var
# zfs create -o setuid=off -o exec=off -o compression=lzjb zsasami3/var/crash
# zfs create -o setuid=off -o exec=off -o compression=lzjb zsasami3/var/db
# zfs create               -o exec=on                      zsasami3/var/db/pkg
# zfs create -o setuid=off -o exec=off                     zsasami3/var/empty
# zfs create -o setuid=off -o exec=off -o compression=lzjb zsasami3/var/log
# zfs create -o setuid=off -o exec=off -o compression=gzip zsasami3/var/mail
# zfs create                                               zsasami3/var/obj
# zfs create -o setuid=off -o exec=off                     zsasami3/var/run
# zfs create -o setuid=off             -o compression=lzjb zsasami3/var/tmp
# chmod 1777 /tmp/zsasami3/var/tmp

# cd /tmp/zsasami3
# tar xpvf /usr/freebsd-dist/base.txz
# tar xpvf /usr/freebsd-dist/kernel.txz
# tar xpvf /usr/freebsd-dist/lib32.txz
# tar xpvf /usr/freebsd-dist/doc.txz
# tar xpvf /usr/freebsd-dist/games.txz

# zfs set readonly=on zsasami3/var/empty

# chroot /tmp/zsasami3
# passwd
# tzsetup
# cd /etc/mail
# make aliases

# echo 'zfs_load="YES"'                          >>/boot/loader.conf
# echo 'vfs.root.mountfrom="zfs:zsasami3"'       >>/boot/loader.conf

# echo 'zfs_enable="YES"'                        >>/etc/rc.conf
# echo 'hostname="sasami3.jyurai"'               >>/etc/rc.conf
# echo 'sshd_enable="YES"'                       >>/etc/rc.conf
# echo 'keymap="jp.106x"'                        >>/etc/rc.conf

# cat >/etc/fstab <<EOF
# Device         Mountpoint      FStype  Options         Dump    Pass#
/dev/gpt/bswswap none            swap    sw              0       0
fdescfs          /dev/fd         fdescfs rw,late         0       0
procfs           /proc           procfs  rw,late         0       0
EOF

# cd /usr
# ln -s local X11R6
# ln -s ports/distfiles .
# rmdir obj
# ln -s /var/obj .

# exit

# cp /tmp/zpool.cache /tmp/zsasami3/boot/zfs/
# cd /tmp
# zfs unmount -a
# zfs set mountpoint=/compat zsasami3/compat
# zfs set mountpoint=/home   zsasami3/home
# zfs set mountpoint=/SAD    zsasami3/SAD
# zfs set mountpoint=/opt    zsasami3/opt
# zfs set mountpoint=/usr    zsasami3/usr
# zfs set mountpoint=/var    zsasami3/var
# zfs set mountpoint=/tmp    zsasami3/tmp
# zfs set mountpoint=legacy  zsasami3

# zpool set cachefile='' zsasami3

# shutdown -h now

!!!FreeBSDの初期化に関して
# ''/etc/ssh/sshd_config''の'''PermitRootLogin'''を一時的に '''yes'''へ変更
# /root/.ssh/authorized_keysを母機より転送
# ''/etc/ssh/sshd_config''の'''PermitRootLogin'''を一時的に '''without-password'''へ変更
# 母機から、パッチ済みの''/usr/src''と''/usr/ports''を転送(tar over ssh)
# 母機より、''/etc/master.passwd'', ''/etc/group''を転送し、UID/GIDを母機とすり合わせる
# 母機より、''/etc/make.conf''と''/etc/src.conf''の雛形を転送し、ビルド環境を整える('''KERNCONF'''と'''CPUTYPE'''の修正を忘れずに)
# '''make world'''してシステム更新
# '''ports'''のインストール('''screen'''と'''rsync'''は早めに入れる)
# 作業環境を整えるために'''rsync'''にて''/home''を母機より複製(tar over sshの場合、US-ASCII外のファイル名を扱う localeに注意)
# 電子辞書・追加フォントの類を母機から転送
# 必要な設定ファイルの転送と調整
# '''ports'''管理外のソフトのインストール
## pTeX(そろそろ、[[ptexlive|http://tutimura.ath.cx/ptexlive/]]に乗り換えるべきか)/[[png 1.5対応パッチ|https://raw.github.com/emonkak/portage-overlay/master/app-text/ptex/files/tetex-3.0_p1-libpng15.patch]]
## EmacsLisp(yatex, tramp, bbdb, ma-gnus)
# '''rsync'''にて母機の'''/home'''と再同期(これから作業する)