なんとか、ちゃんとブートする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
hint.apm.o.flags="0x20"
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
なんとか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の設定を変更したところ、無事ブートしてくれました。
ここまで到達するのにかなり時間を使っていたので、ホッとしました。
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を経由して接続されている場合は、この情報は全く当てにならないので無視してかまいません。
自宅の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
というメッセージが出てきました(数値は適当です)。
ということで、当初の目的が達成できたあかつきにはVMWare Fusionのライセンスを購入したいと思います。
先日、自宅のFirewallにpfSense-1.2.2 を入れたばかりなのに、pfSense-1.2.3がリリースされてしまいました。今回のリリースではベースのFreeBSDが7.2になっていますが、私としてはembeddedのベースがNanoBSDになっていることの方に興味を惹かれます。
2台のNASを使ったレプリケーション機能まで付いています。
一般家庭で導入できる価格帯でここまでできるとは凄すぎます。
自ドメインのメール環境の可用性を確保するために、Google Appsを利用しようと決心して設定を行いました。
必要な設定を順次行った結果、メール、カレンダー、サイト、ドキュメント、という全機能を自ドメインのアドレスで利用できるようになりました。
しかし、コントロールパネルで確認すると、メールだけ「更新中」という表示のままです。
MXレコードの更新は行い、ネット上のツールを利用してMXの設定を確認してみましたが、全てのMXレコードがGoogleのメールサーバーを指定の優先順位で指しています。
「完了するまでに 48 時間程度かかることがあります。」とは書いてありますが、48時間経過しても表示に変わりがありません。
いったいどうしたんでしょう?
とりあえず、自ドメイン宛の全てのメールはGoogleを経由して、自宅のメールサーバーへ転送されているようなので、所望の動作はしているのですが、どうもスッキリしません。
予約注文していた、Amazon Kindleが届きました。
第一印象ですが、薄いです。これなら持ち歩くのもあまり苦にならないでしょう。
あとe-inkのものと思われるディスプレイですが、白黒ではありますがかなりコントラストがはっきりしてるうえに、結構解像度も高く読みやすそうです。
ただ、今後日本語対応となって感じ漢字を表示するようになったときに十分な解像度となっているかは不明です 。
とりあえず、英字新聞、米国の新聞やいくつかの専門書を買ってみようと思います。
ITアーキテクト Vol.25を購入しました。私は知らなかったのですが、今号をもって休刊となるそうです。連載や特集が私の興味にマッチしていたので、Vol.1から全て持っているのですが、今回で休刊とは残念です。そういえば、先日はUNIXマガジンも休刊(廃刊?)となりました。IT系の情報がネット上に溢れている昨今では、雑誌の需要というのはあまり無いのでしょうか。
新しく記事も書きましたが、バージョンアッ... read more
on Alix.2d13 + pfSense