mount_nullfs
ez-jail でウマーしようと思ったらどうにもうまくいかない。
ez-jail って何ソレって人は下記のサイトへ。
jail に関しては jail(8) とかがいいかも。
基本的には上記のサイトと jail(8) を眺めつつ作業してたら起動する時になってエラーが。
ログの出力は以下。
ezjailConfiguring jails:. Starting jails:mount_nullfs: Operation not supported by device mount_fdescfs: Operation not supported by device cannot start jail "jail_server": jail: execv: /bin/sh: No such file or directory
mount_nullfs: Operation not supported by device なんて言ってる通り、多分カーネルが悪いんだと思う。
少し話が逸れるが、 FreeBSD を使い始めた時、様々なサイトにお世話になった。そしてそういったサイトのほとんどは通過儀礼の様にカーネルの再構築について書かれていたので、私もそれに従ってカーネル再構築の深みにハマッた方法を覚えた。
しかし、万年ビギナーな私にとってはやる事なす事全てが未知の領域なので、正直上記のようなエラーにぶち当たると思考が停止してしまう。かと言ってエロい方々が集う 2 ちゃんねるは怖くて聞けないし、 ML に投稿するにしても、まずは原因の切り分けが必要。となると停止した思考を再稼動させて自分の思いつく限りの解決策を試してみる。そうすれば大抵の問題は解決するけど、ひじょーに疲れる。ヘタレだからなんだろうけど。
話を戻して。
上記のエラーはそのままの意味で、多分カーネルモジュールが読み込まれてないんだと思う。
ということなので、一旦 GENERIC Kernel をビルドし、関連しそうなものをピックアップしてみた。
以下は GENERIC Kernel でビルドされた *.ko 。
3dfx.ko hwpmc.ko libalias.ko ppi.ko 3dfx_linux.ko i915.ko libiconv.ko pps.ko aac.ko ibcs2.ko libmbpool.ko procfs.ko aac_linux.ko ibcs2_coff.ko libmchain.ko pseudofs.ko accf_data.ko ichsmb.ko linker.hints pst.ko accf_http.ko ichwd.ko linprocfs.ko puc.ko acpi.ko ida.ko linsysfs.ko r128.ko acpi_asus.ko idt.ko linux.ko radeon.ko acpi_fujitsu.ko if_an.ko logo_saver.ko rain_saver.ko acpi_ibm.ko if_ar.ko lpbb.ko random.ko acpi_panasonic.ko if_arl.ko lpt.ko rc.ko acpi_sony.ko if_ath.ko mac_biba.ko rc4.ko acpi_toshiba.ko if_aue.ko mac_bsdextended.ko reiserfs.ko acpi_video.ko if_awi.ko mac_ifoff.ko rp.ko agp.ko if_axe.ko mac_lomac.ko rr232x.ko aha.ko if_bce.ko mac_mls.ko s3.ko ahb.ko if_bfe.ko mac_none.ko safe.ko ahc.ko if_bge.ko mac_partition.ko savage.ko ahc_eisa.ko if_bridge.ko mac_portacl.ko sbp.ko ahc_isa.ko if_cdce.ko mac_seeotheruids.ko sbp_targ.ko ahc_pci.ko if_ce.ko mac_stub.ko scd.ko ahd.ko if_cm.ko mac_test.ko scsi_low.ko aic.ko if_cp.ko mach64.ko sio.ko aio.ko if_cs.ko mcd.ko sis.ko alpm.ko if_ct.ko mem.ko smapi.ko amd.ko if_cue.ko mfi.ko smb.ko amdpm.ko if_cx.ko mfi_linux.ko smbfs.ko amdsmb.ko if_dc.ko mga.ko smbios.ko amr.ko if_de.ko miibus.ko smbus.ko amr_linux.ko if_disc.ko mlx.ko snake_saver.ko aout.ko if_ed.ko mly.ko snd_ad1816.ko apm.ko if_ef.ko mpt.ko snd_als4000.ko apm_saver.ko if_el.ko msdosfs.ko snd_atiixp.ko arcmsr.ko if_em.ko msdosfs_iconv.ko snd_cmi.ko arcnet.ko if_en.ko mse.ko snd_cs4281.ko asr.ko if_ep.ko ncp.ko snd_csa.ko ata.ko if_ex.ko ncv.ko snd_driver.ko atacard.ko if_faith.ko ndis.ko snd_ds1.ko atadisk.ko if_fatm.ko netgraph.ko snd_emu10k1.ko ataisa.ko if_fe.ko nfsclient.ko snd_es137x.ko atapci.ko if_fwe.ko nfsmb.ko snd_ess.ko atapicam.ko if_fwip.ko nfsserver.ko snd_fm801.ko atapicd.ko if_fxp.ko ng_UI.ko snd_ich.ko atapifd.ko if_gif.ko ng_async.ko snd_maestro.ko atapist.ko if_gre.ko ng_atm.ko snd_maestro3.ko ataraid.ko if_harp.ko ng_atmllc.ko snd_mss.ko ath_hal.ko if_hatm.ko ng_atmpif.ko snd_neomagic.ko ath_rate.ko if_hme.ko ng_bluetooth.ko snd_sb16.ko bktr.ko if_ic.ko ng_bpf.ko snd_sb8.ko bktr_mem.ko if_ie.ko ng_bridge.ko snd_sbc.ko blank_saver.ko if_ipw.ko ng_bt3c.ko snd_solo.ko bridge.ko if_iwi.ko ng_btsocket.ko snd_t4dwave.ko cam.ko if_ixgb.ko ng_ccatm.ko snd_uaudio.ko cardbus.ko if_kue.ko ng_cisco.ko snd_via8233.ko cbb.ko if_le.ko ng_device.ko snd_via82c686.ko cd9660.ko if_lge.ko ng_echo.ko snd_vibes.ko cd9660_iconv.ko if_lnc.ko ng_eiface.ko snp.ko ciss.ko if_my.ko ng_etf.ko sound.ko coda.ko if_ndis.ko ng_ether.ko speaker.ko coda5.ko if_nge.ko ng_fec.ko splash_bmp.ko cpufreq.ko if_nve.ko ng_frame_relay.ko splash_pcx.ko crypto.ko if_oltr.ko ng_gif.ko sppp.ko cryptodev.ko if_patm.ko ng_gif_demux.ko star_saver.ko daemon_saver.ko if_pcn.ko ng_h4.ko stg.ko dcons.ko if_ppp.ko ng_hci.ko streams.ko dcons_crom.ko if_ral.ko ng_hole.ko sym.ko digi.ko if_ray.ko ng_hub.ko sysvmsg.ko digi_CX.ko if_re.ko ng_iface.ko sysvsem.ko digi_CX_PCI.ko if_rl.ko ng_ip_input.ko sysvshm.ko digi_EPCX.ko if_rue.ko ng_ipfw.ko tdfx.ko digi_EPCX_PCI.ko if_sbni.ko ng_ksocket.ko trm.ko digi_Xe.ko if_sbsh.ko ng_l2cap.ko twa.ko digi_Xem.ko if_sf.ko ng_l2tp.ko twe.ko digi_Xr.ko if_sis.ko ng_lmi.ko uart.ko dpt.ko if_sk.ko ng_mppc.ko ubsa.ko dragon_saver.ko if_sl.ko ng_nat.ko ubsec.ko drm.ko if_sn.ko ng_netflow.ko ubser.ko dummynet.ko if_sr.ko ng_one2many.ko ubtbcmfw.ko elink.ko if_ste.ko ng_ppp.ko ucom.ko exca.ko if_stf.ko ng_pppoe.ko ucycom.ko ext2fs.ko if_stge.ko ng_pptpgre.ko udbp.ko fade_saver.ko if_tap.ko ng_rfc1490.ko udf.ko fdc.ko if_ti.ko ng_socket.ko udf_iconv.ko fdescfs.ko if_tl.ko ng_source.ko ufm.ko fire_saver.ko if_tun.ko ng_split.ko uftdi.ko firewire.ko if_tx.ko ng_sppp.ko ugen.ko firmware.ko if_txp.ko ng_sscfu.ko uhid.ko g_md.ko if_udav.ko ng_sscop.ko ukbd.ko geom_apple.ko if_ural.ko ng_sync_ar.ko ulpt.ko geom_bde.ko if_vge.ko ng_sync_sr.ko umass.ko geom_bsd.ko if_vlan.ko ng_tag.ko umct.ko geom_ccd.ko if_vr.ko ng_tcpmss.ko umodem.ko geom_concat.ko if_vx.ko ng_tee.ko ums.ko geom_eli.ko if_wb.ko ng_tty.ko unionfs.ko geom_fox.ko if_wi.ko ng_ubt.ko uplcom.ko geom_gate.ko if_xe.ko ng_uni.ko urio.ko geom_gpt.ko if_xl.ko ng_vjc.ko usb.ko geom_label.ko iic.ko ng_vlan.ko uscanner.ko geom_mbr.ko iicbb.ko ngatmbase.ko utopia.ko geom_md.ko iicbus.ko nmdm.ko uvisor.ko geom_mirror.ko iicsmb.ko nsp.ko uvscom.ko geom_nop.ko iir.ko ntfs.ko vesa.ko geom_pc98.ko intpm.ko ntfs_iconv.ko viapm.ko geom_raid3.ko io.ko nullfs.ko vkbd.ko geom_shsec.ko ip6fw.ko nwfs.ko vpd.ko geom_stripe.ko ip_mroute.ko padlock.ko vpo.ko geom_sunlabel.ko ipdivert.ko pccard.ko warp_saver.ko geom_uzip.ko ipfw.ko pcf.ko wlan.ko geom_vinum.ko ipl.ko pcfclock.ko wlan_acl.ko geom_vol_ffs.ko ipmi.ko pecoff.ko wlan_ccmp.ko geom_zero.ko ips.ko pf.ko wlan_tkip.ko green_saver.ko isp.ko pflog.ko wlan_wep.ko hfa.ko ispfw.ko plip.ko wlan_xauth.ko hfa_pci.ko joy.ko portalfs.ko zlib.ko hifn.ko kbdmux.ko ppbus.ko hptmv.ko kernel ppc.ko
こんなにあるとは・・・。
とりあえず、この状態で ez-jail を起動してみる。
# /usr/local/etc/rc.d/ezjail.sh start ezjailConfiguring jails:. Starting jails: [jail_server already running (/var/run/jail_server.id exists)].
特に異常は無さそうなので jls で見てみる。
# jls JID IP Address Hostname Path 1 192.168.*.* jail.server /usr/jails/jail.server
キタ━━━━(゚∀゚)━━━━ッ!!
やっぱり原因は Kernel にあったっぽいです。
なので、更に kldstat でどんなモジュールが読み込まれているか見てみます。
# kldstat Id Refs Address Size Name 1 6 0xc0400000 7c29e4 kernel 2 1 0xc0bc3000 62880 acpi.ko 3 1 0xc5309000 4000 nullfs.ko 4 1 0xc5314000 3000 fdescfs.ko 5 1 0xc53fe000 2000 accf_http.ko
accf_http.ko は Apache のモジュールなので置いといて、 nullfs.ko と fdescfs.ko が怪しそうです。
とりあえず絞り込めた所で man を見てみます。まずは fdescfs から。
ファイル記述子ファイルシステム、別名 fdescfs は、プロセス毎のファイル記述 子の名前空間をグローバルなファイルシステムの名前空間からアクセスする機能 を提供します。通常のマウントポイントは /dev/fd です。
read() とか write() の事だろうか。よくわからない。
次に nullfs ・・・だけどこれが原因っぽいので makeoptions MODULES_OVERRIDE で指定しておく。
で、再構築・・・上手くいった。
疲れたぁ・・・。