2009年12月20日日曜日

Alix.3d3でNanoBSDを動かす(4) ~CFイメージ(slim)の作成~

なんとか、ちゃんとブートするCFイメージが作れるようになったので、次はカーネルや、インストールされるツールから出来る限り不要なものを削ったものを作ります。
CFは4GBの大きさがあるので、容量的にはいろいろ削る必要性は無いのですが、セキュリティ上のリスクを軽減したり、実メモリを有効活用するりはカーネルやインストールされるツールを削減する必要があると思って、出来る限りスリムなイメージファイルを作ることにしました。
今回使ったカーネルコンフィグファイルは以下の通り。

cpu        I586_CPU
cpu        I686_CPU
options        CPU_GEODE
ident        ALIX3D3

options     SCHED_ULE        # ULE scheduler
options     PREEMPTION        # Enable kernel thread preemption
options     INET            # InterNETworking
options     INET6            # IPv6 communications protocols
options     FFS            # Berkeley Fast Filesystem
options     SOFTUPDATES        # Enable FFS soft updates support
options     UFS_ACL            # Support for access control lists
options     UFS_DIRHASH        # Improve performance on big directories
options     UFS_GJOURNAL        # Enable gjournal-based UFS journaling
options     MD_ROOT            # MD is a potential root device
options     PROCFS            # Process filesystem (requires PSEUDOFS)
options     PSEUDOFS        # Pseudo-filesystem framework
options     GEOM_PART_GPT        # GUID Partition Tables.
options     GEOM_LABEL        # Provides labelization
options     COMPAT_43TTY        # BSD 4.3 TTY compat (sgtty)
options     COMPAT_FREEBSD4        # Compatible with FreeBSD4
options     COMPAT_FREEBSD5        # Compatible with FreeBSD5
options     COMPAT_FREEBSD6        # Compatible with FreeBSD6
options     COMPAT_FREEBSD7        # Compatible with FreeBSD7
options     SCSI_DELAY=5000        # Delay (in ms) before probing SCSI
options     KTRACE            # ktrace(1) support
options     STACK            # stack(9) support
options     SYSVSHM            # SYSV-style shared memory
options     SYSVMSG            # SYSV-style message queues
options     SYSVSEM            # SYSV-style semaphores
options     P1003_1B_SEMAPHORES    # POSIX-style semaphores
options     _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
options     PRINTF_BUFR_SIZE=128    # Prevent printf output being interspersed.
options     KBD_INSTALL_CDEV    # install a CDEV entry in /dev
options     HWPMC_HOOKS        # Necessary kernel hooks for hwpmc(4)
options     AUDIT            # Security event auditing
options     MAC            # TrustedBSD MAC Framework
options        FLOWTABLE        # per-cpu routing cache

# CPU frequency control
device        cpufreq

# Bus support.
device        pci

# ATA and ATAPI devices
device        ata
device        atadisk        # ATA disk drives
options     ATA_STATIC_ID    # Static device numbering

# atkbdc0 controls both the keyboard and the PS/2 mouse
device        atkbdc        # AT keyboard controller
device        atkbd        # AT keyboard

device        kbdmux        # keyboard multiplexer

device        vga        # VGA video card driver

device        splash        # Splash screen and screen saver support

# syscons is the default console driver, resembling an SCO console
device        sc

# Power management support (see NOTES for more options)
device        apm
device        apm_saver

# Add suspend/resume support for the i8254.
device        pmtimer

# Serial (COM) ports
device        uart        # Generic UART driver

# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device        miibus        # MII bus support
device        vr        # VIA Rhine, Rhine II

# Pseudo devices.
device        loop        # Network loopback
device        random        # Entropy device
device        ether        # Ethernet support
device        tun        # Packet tunnel.
device        pty        # BSD-style compatibility pseudo ttys
device        md        # Memory "disks"
device        gif        # IPv6 and IPv4 tunneling
device        faith        # IPv6-to-IPv4 relaying (translation)
device        firmware    # firmware assist module

# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
device        bpf        # Berkeley packet filter

# USB support
device        uhci        # UHCI PCI->USB interface
device        ohci        # OHCI PCI->USB interface
device        ehci        # EHCI PCI->USB interface (USB 2.0)
device        usb        # USB Bus (required)
device        uhid        # "Human Interface Devices"
device        ukbd        # Keyboard

そして、NanoBSDのBuildに使ったコンフィグファイルは以下の通り。
NANO_NAME=alix3d3
NANO_KERNEL=ALIX3D3
NANO_MEDIASIZE=7835184
NANO_HEADS=16
NANO_SECTS=63
NANO_BOOT0CFG="-o nopacket -s 1 -m 3"
NANO_BOOTLOADER="boot/boot0"

CONF_WORLD='
WITHOUT_ACCT=YES
WITHOUT_ACPI=YES
WITHOUT_AMD=YES
WITHOUT_ATM=YES
WITHOUT_BLUETOOTH=YES
WITHOUT_CALENDAR=YES
WITHOUT_CTM=YES
WITHOUT_CVS=YES
WITHOUT_DICT=YES
WITHOUT_EXAMPLES=YES
WITHOUT_FLOPPY=YES
WITHOUT_FREEBSD_UPDATE=YES
WITHOUT_GAMES=YES
WITHOUT_GCOV=YES
WITHOUT_GDB=YES
WITHOUT_GPIB=YES
WITHOUT_GROFF=YES
WITHOUT_HTML=YES
WITHOUT_INFO=YES
WITHOUT_IPFILTER=YES
WITHOUT_IPFW=YES
WITHOUT_IPX=YES
WITHOUT_IPX_SUPPORT=YES
WITHOUT_NCP=YES
WITHOUT_LOCALES=YES
WITHOUT_LOCATE=YES
WITHOUT_LPR=YES
WITHOUT_MAIL=YES
WITHOUT_MAILWRAPPER=YES
WITHOUT_SENDMAIL=YES
WITHOUT_MAKE=YES
WITHOUT_MAN=YES
WITHOUT_NDIS=YES
WITHOUT_NETCAT=YES
WITHOUT_NETGRAPH=YES
WITHOUT_NETGRAPH_SUPPORT=YES
WITHOUT_NIS=YES
WITHOUT_OBJC=YES
WITHOUT_PF=YES
WITHOUT_AUTHPF=YES
WITHOUT_PKGTOOLS=YES
WITHOUT_PORTSNAP=YES
WITHOUT_PPP=YES
WITHOUT_PROFILE=YES
WITHOUT_QUOTAS=YES
WITHOUT_RCS=YES
WITHOUT_ROUTED=YES
WITHOUT_SHAREDOCS=YES
WITHOUT_SYSINSTALL=YES
WITHOUT_WIRELESS=YES
WITHOUT_WIRELESS_SUPPORT=YES
WITHOUT_ZFS=YES
'

CONF_INSTALL='
WITHOUT_CXX=YES
WITHOUT_TOOLCHAIN=YES
WITHOUT_INSTALLLIB=YES
'
customize_cmd cust_install_files



Alix.3d3でNanoBSDを動かす(3) ~ブートするまで~

なんとかCFが出来たので、早速ブートさせてみました。すると、

  • ブート時に出るはずのOS選択画面が表示されない
  • ローカルディスクのマウントでハングする
という問題が発生しました。
NanoBSDのデフォルト設定は組み込みシステム向けになっているため、ブートローダーとしてはboot/boot0sioを使うようになっているのですが、Alix.3d3はオンボードのVGAを持っているので普通のブートローダーboot/boot0を使うようにする必要がありました。また、このページの情報によると、boot0cfgのオプション設定も変更する必要があるということなので、コンフィグファイルを次のように変更して、再構築しました。
NANO_MEDIASIZE=7835184
NANO_HEADS=16
NANO_SECTS=63
NANO_BOOT0CFG="-o nopacket -s 1 -m 3"
NANO_BOOTLOADER="boot/boot0"
出来上がったイメージファイルをCFに書き込んで、ブートさせてみたところ、無事にOS選択画面が表示されブートを始めたのですが、やはりローカルディスクのマウントでハングします。
ネット上で、NANO_HEADSやNANO_SECTSが実際のメディアと一致していないと、ローカルディスクのマウントでハングするという情報も見つけたので、設定を変えて何度かCFを作り直したりしたのですが、一向に状況が変わりません。途方に暮れつつ、色々ググってみたところ、こんなページを発見しました。結局、VGAが載っているAlixのボードでNanoBSDを動かすためには、電源管理インタフェースとしてACPIではなくAPMを使うようにBIOSの設定を変える必要があるのだそうです。で、そのようにBIOSの設定を変更したところ、無事ブートしてくれました。
ここまで到達するのにかなり時間を使っていたので、ホッとしました。



Alix.3d3でNanoBSDを動かす(2) ~CFイメージ(full)の作成~

Build環境はなんとか構築できたので、次はいよいよCFイメージの作成です。まずは、ほぼデフォルトの設定で作ってみることにします。今回使うCFはSanDiskの4GBのタイプなので、以下のコンフィグファイルを使ってbuildしました。

FlashDevice SanDisk 4G

出来上がった_.disk.fullファイルをddコマンドでCFに書き込んだところ、書き込みエラーが発生してしまいました。CFメディアの詳細情報を調べて、出来上がったイメージファイルと比較したところ、出来上がったイメージファイルの方がすこしサイズが大きいことが判明しました。
どうやら、同じSanDiskのCFとはいえ、FlashDeviceのロジック内部に埋め込んであるサイズ情報と、私の持っているメディアのサイズ情報が異なっているようです。
仕方が無いので、手元にあったFreeBSD機にUSBのCard Reader/Writerを接続してdiskinfoコマンドでメディア情報を調べたところ、
/dev/da0    512    4011614208    7835184    7773    255    64

ということがわかったので、以下のコンフィグファイルを使ってイメージを再構築しました。
NANO_MEDIASIZE=7835184
NANO_HEADS=16
NANO_SECTS=63
出来上がったイメージファイルは無事CFへ書き込むことができました。
ところで、diskinfoコマンドで得られる情報のうち、最後の二つは、head数とsector数なのですが、 デバイスがUSB接続のCard Readerを経由して接続されている場合は、この情報は全く当てにならないので無視してかまいません。



2009年12月19日土曜日

Alix.3d3でNanoBSDを動かす(1) ~Build環境構築~

自宅のDNSサーバーを安定して動作させるために、組み込み型PCでサーバーを作ろうと思ていたのですが、ついに実行に移すことにしました。
ハードウェアとしては、PC Engines社のAlix.3d3を選定し、OSはFreeBSD8.0 ReleaseベースのNanoBSDにすることにしました。
なにはともあれ、NanoBSDを構築するための環境が必要な訳ですが、まずはお手軽に私の主力機であるiMac上にParallels Desktop for Mac 4を使って、FreeBSDの仮想環境を用意しました。
インストールなどはあっさりと終了したのですが、NanoBSDを構築しようとすると、

TIMEOUT - READ_DMA retrying (1 retry left) LBA=260889183

というメッセージが出てきました(数値は適当です)。

普通、こんなメッセージが出て来たときにはディスクエラーを疑う訳ですが、今回は仮想ディスクが壊れているとは思えませんでしたので、ちと調査してみたらこんなフォーラムを発見。どうやらこのエラーはParallels Desktop固有のエラーで、VMWare Fusionでは問題ないらしいので、とりあえず評価版をダウンロードしてインストールし、同じようにNanoBSDを構築してみたところ、全く問題なくBuildが終了しました。
ということで、当初の目的が達成できたあかつきにはVMWare Fusionのライセンスを購入したいと思います。


2009年12月12日土曜日

pfSense 1.2.3 Release

先日、自宅のFirewallにpfSense-1.2.2 を入れたばかりなのに、pfSense-1.2.3がリリースされてしまいました。今回のリリースではベースのFreeBSDが7.2になっていますが、私としてはembeddedのベースがNanoBSDになっていることの方に興味を惹かれます。

というわけで、早速バージョンアップしました。まずは無事に動作しているようです。



2009年12月6日日曜日

Alix.2d13 + pfSense

自宅のFirewallをAlix.2d13pfSenseで組み直しました。
Firewallソフトとしては、m0n0wallも検討していましたが、ベースとなっているFreeBSDのバージョンがより新しいことと、この記事pfSenseの方がお薦めとされていたので、表記のような組み合わせに落ち着きました。
インストール作業は、このページが、セットアップ作業はこのページが大変参考になりました。