今日は2021年6月17日です。
今週は、DELL Latitude 3340でNomadBSDを試すという遊びを楽しんでいます。

NomadBSDは……ハードドライブにインストールせずともUSBメモリからライブ起動できるFreeBSDの派生物だそうです。(https://nomadbsd.org/)
しかも、OpenboxとはいえデスクトップGUI環境がついていて、Webブラウザ(Firefox)もLibreOfficeもPCMan File ManagerもLeafpad Text Editorもプリインストール済み??
素晴らしすぎる。 (バカにしてはいけません。 Openboxはいいんですよ。)
ハードディスクにインストールせずに、あなたのPCでFreeBSDを走らせたらX.orgが起動するか、スピーカーから音が出るか、ビデオがヌルヌルと再生できるか、ネットワークがつながるか、Wi-Fiが使えるか、タッチパッドが使えるか、動作確認できるんですか?
夢のようですね。

ちなみに、デスクトップフレンドリーな割と箱から出してGUIもすぐ使えるFreeBSDというのは、ちょっと昔からいくつかありました。
PC-BSDとかTrueOSとかUbuntuBSDとかGhostBSDとかFreeSBIEとか。 ダメですね。 死屍累々です。
どれも開発休止か終了です。(追記:GhostBSDはまだ生きているようです。 失礼しました。 おかしいな、もうやめだ、という告知を読んだ記憶があるのですが。 夢だったのか、作られた記憶なのか。)

なんとなく、時間ができたので遊んでみました。 ブートするUSBメモリには、Toshibaの32GB USBペンドライブを使用。 USB3.0対応です。
最初に、DELL Latitude 3340のHDDにインストール済みのUbuntu 20.04 LTSを使います。 まずはNomadBSDの公式Handbookletに従ってUSBメモリにOSイメージを書き込み。

ダウンロードしたのはnomadbsd-130R-20210508.amd64.img

最初は公式Handbookletどおりに古典的なddコマンドを使いました。

# lzma -d nomadbsd-x.y.z.img.lzma
# dd bs=1M if=nomadbsd-x.y.z.img of=/dev/sdX conv=fsync

OSのイメージを書き込むデバイスファイルの名前(/dev/sdナントカ)の部分は、ご自分のシステムで何回も確認してください。 自己責任ですよ。 間違えて大事なシステムの起動パーティションを消してしまっても、私は責任を持てません。

NomadBSDのブートイメージファイルは4GB以上あるので、USBメモリへの書き込みにも割と時間がかかります。 気長に行きましょう。
ライブ起動用USBメモリが出来上がりました。 が、何故かUSBメモリからDELL Latitude 3340をブートしようとすると、「OSイメージがない」というようなことを言われます。
便利なFreeBSD派生物登場、というニュースがあったときは、その後の展開としてよくあることです。
諦めようかと思いました。

が、 今のインターネットにはbalena Etcherというのがあって、これがUSBメモリへのOS書き込みの際、書き込み後に検証もしてくれるというのですね。 エンジニアがなんと言おうとddコマンドでは、ブートしないUSBメモリを作ってしまうことは時々あるそうです。
5年前だったら、未熟者はUNetbootinを使うところです。 Unetbootinもけっこう見た目が古臭くなっていますねえ。

ものは試しとUbuntu用balena Etcherを公式からダウンロードして、試しました。 すると、なんと一発で有効なUSBメモリが作れたではありませんか。
結局ddコマンドではバイナリイメージの書き込みに失敗していたということです。

起動してみるとNomadBSDの初回ブートはこんな感じです。

01 NomadBSD 32GB USB Flash Drive
今回は32GBのUSBメモリからブートします。
02 NomadBSD DELL Latitude 3340
NomadBSDライブ起動を試すPCは、DELL Latitude 3340

カーネルが読み込まれています。FreeBSDのカーネルです。かっこいいですね。


もしかして、ネットワークインターフェイスまで進んでいる? しかも接続中? FreeBSDで?

鬼門。キーボードの設定。 Japaneseですけど、PC98とかいまどき言われても困ります。 

NomadBSDセットアップが終わって再起動中。悪い予感がする。FreeBSDのセットアップがこんなに簡単でいいわけがない。 Qアノンの陰謀だ。(笑)

夢じゃない。 本当にいきなりWi-Fiが動いている。 FreeBSDで???

プリインストール済みのアプリケーション。クローズアップ。 VLCとかmpvとか。夢でも見ているのではないか。 すごいぞNomadBSD。

VLCプリインストールなので、Openboxでビデオも再生可能。(スクリーンショット画像は大人の事情で加工しています)

screenfetchコマンドを打ったところ。 すごいやNomadBSD

別のPC(4Kディスプレイのラップトップ、hpのSpectre X360)でUSBメモリからブートすると、こんな感じです。
あっさりと4KディスプレイでFreeBSDのデスクトップ環境が立ち上がっています。 感動しました。
上のスクリーンショットは、リサイズされています。クリックすると外部のイメージホスティングサイトに保存してある、本当の4Kの画像を表示します。
スマートフォン&モバイル回線でアクセス中の方は、うかつにクリックしない方がいいです。

 

NomadBSDは素晴らしい、ということで、簡単にセットアップ(ライブブートしたUSBメモリにシステムファイルは入ったままなので、インストールしたとはいいにくい)した結果の、設定ファイル類を後学のために残しておきます。

/boot/loader.confの中身。

# graphics_enable="YES"
# beastie_theme="/boot/themes/default/theme.conf"

loader_logo="nomadbsd"
loader_brand="nomadbsd"
loader_menu_frame="none"
loader_menu_title="Welcome to NomadBSD"
loader_menu_title_align="left"

ums_load="YES"
aio_load="YES"

hint.pcm.0.eq="1"
hint.pcm.1.eq="1"
hint.pcm.2.eq="1"
hint.pcm.3.eq="1"
hint.pcm.4.eq="1"
hint.pcm.5.eq="1"
hint.pcm.6.eq="1"
hint.pcm.7.eq="1"
hint.pcm.8.eq="1"
hint.pcm.9.eq="1"

hw.snd.vpc_autoreset=0
hw.syscons.bell=0
hw.usb.no_pf=1
hw.usb.no_boot_wait=0
hw.usb.no_shutdown_wait=1
hw.psm.synaptics_support=1
hw.psm.trackpoint_support=1

kern.cam.scsi_delay=10000

# Use new virtual terminal driver
hw.vga.textmode=1
kern.vty=vt

# Make sure to wait for the root device to appear before trying root mount
vfs.root_mount_always_wait=1

 

/etc/rc.confの中身

allscreens_flags=”green”
bsdstats_enable=”NO”
clear_tmp_X=”NO”
cupsd_enable=”YES”
dbus_enable=”YES”
devfs_system_ruleset=”desktopuser”
dsbdriverd_enable=”YES”
dsbmd_enable=”YES”
entropy_file=”NO”
hostname=”NomadBSD”
kld_list=”cuse4bsd”
ldconfig_insecure=”YES”
local_startup=”/usr.local.etc/rc.d”
lpd_enable=”NO”
ntpd_enable=”YES”
ntpd_sync_on_start=”YES”
powerdxx_enable=”YES”
savecore_enable=”NO”
sendmail_enable=”NO”
sendmail_msp_queue_enable=”NO”
sendmail_outbound_enable=”NO”
sendmail_submit_enable=”NO”
setup_mouse_enable=”YES”
syslogd_enable=”YES”
update_motd=”NO”
webcamd_enable=”YES”
economy_cx_lowest=”C2″
performance_cx_lowest=”C2″
initgfx_enable=”YES”
slim_enable=”YES”
init_vbox_enable=”YES”
avahi_daemon_enable=”YES”
ipv6_activate_all_interfaces=”YES”
ackfwl_enable=”YES”
load_iichid_enable=”YES”
keymap=””
initgfx_kmods=”/boot/modules/i915kms.ko”
ifconfig_em0=”DHCP”
ifconfig_em0_ipv6=”inet6 accept_rtadv”
wlans_iwm0=”wlan0″
create_args_wlan0=”down country JP”
ifconfig_wlan0=”up scan WPA DHCP”
ifconfig_wlan0_ipv6=”inet6 accept_rtadv”
ifconfig_ue0=”DHCP”
ifconfig_ue0_ipv6=”inet6 accept_rtadv”

/etc/sysctl.confの中身。

# $FreeBSD: src/etc/sysctl.conf,v 1.8.34.1 2009/08/03 08:13:06 kensmith Exp $
#
#  This file is read when going to multi-user and its contents piped thru
#  ``sysctl'' to adjust kernel values.  ``man 5 sysctl.conf'' for details.
#

# Uncomment this to prevent users from seeing information about processes that
# are being run under another UID.
#security.bsd.see_other_uids=0

# Allow users to mount devices
vfs.usermount=1

vfs.vmiodirenable=0
vfs.read_max=16
vfs.write_behind=0

kern.maxvnodes=60000

# Sync files, directories and metadata every 15/14/13 sec. This performs better
# than mounting / with -osync but fsck is still possible after crashes.
kern.filedelay=15
kern.dirdelay=14
kern.metadelay=13

# Disable creating *.core files
kern.coredump=0

# Disable bell
kern.vt.enable_bell=0

# Improve responsiveness on high work load.
kern.sched.preempt_thresh=224

# Runtime of each thread before rescheduling in units of 10ms.
kern.sched.slice=3

# A table of 100000 file descriptors should be enough for desktop system.
kern.maxfiles=100000

kern.evdev.rcpt_mask=12

# Good sound sampling quality
hw.snd.feeder_rate_quality=3

# Max. number of virtual channels
hw.snd.maxautovchans=32

# Improve write speed a little bit
vfs.lorunningspace=1048576
vfs.hirunningspace=5242880

# Fixes an iterrupt problem on MacBook Air
dev.hdac.0.polling=1
dev.hdac.1.polling=1
dev.hdac.2.polling=1
dev.hdac.3.polling=1
dev.hdac.4.polling=1
dev.hdac.5.polling=1

 

/etc/fstabの中身(USBメモリからのライブ起動ですから、ちょっと風変わりかもしれません)。

/dev/label/nomadroot		/			ufs	  rw,noatime       1 1
tmpfs			/tmp			tmpfs	  rw,mode=1777     0 0
tmpfs			/var/log		tmpfs	  rw               0 0
proc			/proc			procfs	  rw		   0 0

/dev/label/nomaddata	/data			ufs	rw,noatime	1 1
/data/compat	/compat			nullfs	rw,late	0 0
/data/var/tmp	/var/tmp			nullfs	rw,late	0 0
/data/var/db	/var/db			nullfs	rw,late	0 0
/data/usr/ports	/usr/ports			nullfs	rw,late	0 0

 

/usr/local/etc/X11/xorg.conf.d/10-input-keyboard.confの中身。

Section "InputClass"
    Identifier      "Keyboard0"
    MatchIsKeyboard "on"
    MatchDevicePath "/dev/input/event*"
    Driver          "libinput"
    Option          "XkbRules"   "evdev"
    Option          "XkbLayout"  "nec_vndr/jp"
    Option          "XkbVariant" ""
    Option          "XkbOptions" "terminate:ctrl_alt_bksp"
EndSection

# いや、”XkbLayout” “nec_vndr/jp”って…PC98のキーボードなんて使ってませんよ。(笑)
# セットアップの時ちゃんとOADGって選択したのに、なぜPC98に戻しちゃうかな…。 バグ?
# 悪い予感がする。(Star Wars)

 

 

/usr/local/etc/X11/xorg.conf.d/10-input-touchpad.confの中身。

Section "InputClass"
    Identifier      "Touchpad"
    MatchIsTouchpad "on"
    MatchDevicePath "/dev/input/event*"
    Driver          "libinput"
    Option          "MiddleEmulation"    "on"
    Option          "DisableWhileTyping" "on"
EndSection

 

/usr/local/etc/X11/xorg.conf.d/00-video-initgfx.confの中身。

Section "Device"
    Identifier    "Intel Graphics"
    Driver        "modesetting"
    BusID         "PCI:0:2:0"
EndSection

 

~/.xinitrcの中身。

#!/bin/sh
export EDITOR=vim

. ~/.xprofile


[ -z "$1" -o "$1" = "default" ] && exec ck-launch-session openbox-session
exec ck-launch-session "$1"

 

 

 

~/.xprofileの中身。

#!/bin/sh
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/nomad/bin

export QT_QPA_PLATFORMTHEME=qt5ct
export QT_FONT_DPI=96

#
# Some display managers don't source the login files /etc/login.conf and
# ~/.login_conf. Make sure the environment variables defined in those files
# are set.
#
for e in $(env -L $(whoami); env -U $(whoami)); do
    export "$e"
done

#
# If not set to "unix", gvfs will use bsdisks which fails to unmount volumes
# mounted on directories it does not expect.
#
export GIO_USE_VOLUME_MONITOR=unix

xrdb ~/.Xresources

uid=$(id -u)

#
# Check if ~/.cache is a symbolic link to a directory owned by the user.
# If the link's target is not a directory or does not exist, create a
# directory owned by the user under /tmp, and make ~/.cache a symbolic
# link to it.
#
if [ -L ~/.cache ]; then
    if [ -d ~/.cache ]; then
        ownerid=$(stat -L -f %u ~/.cache)
        if [ "${ownerid}" != "${uid}" ]; then
            recreate_cache=1
        fi
    else
        recreate_cache=1
    fi
    if [ "${recreate_cache}" = "1" ]; then
        user=$(whoami)
        unlink ~/.cache
        cachedir=$(mktemp -d /tmp/${user}.XXXXXX)
        ln -s ${cachedir} ~/.cache
    fi
fi

#
# Kill dbus services from a previous session in order to prevent hangs.
#
for s in 15 9; do
    for p in dbus-launch gvfsd-fuse; do
        pgrep -U ${uid} -q $p && pkill -$s $p
    done
done
eval $(dbus-launch --sh-syntax)

# Apply screen settings from DSBDisplaySettings
~/.config/DSB/dsbds.sh

# Apply screen settings from ArandR
~/.screenlayout/default.sh

tpquirk
enable_tapping
~/.config/xkbdmap.sh

 

 

~/.config/xkbdmap.shの中身。

#
setxkbmap -rules evdev -layout "nec_vndr/jp" -variant ""
#
#

 

bsdinfoコマンドの結果。

nomad@NomadBSD:~% bsdinfo


          100010100111110111000       00       
100001100101011110100000011111001000010001Hostname: NomadBSD
100011011001111100000011100010010110110001Bootmethod: BIOS
100111001111101110110100110111100111010011OS: FreeBSD amd64
10000000001101100110101111001100110011110 Version: 13.0-RELEASE
111001001001100110111001110010000111100101CPU: Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz
011010100000100001000001011100000110011111RAM: 1404M / 16272M
000110100010001100010100111000010000110101Processes: 90
11010111000010111100110010001110110101001 Shell: csh
010100010010111101101111101100000000011111Uptime: 0:04
11001000111011001001001111000100100100111       
00010111000010100010010001101001111001110        
 010100010111001000110011100101011011101         
  00001110010000001100111100000110100101           
   00001000001000100101010111111011111              
     1011011110010010110000101011101
       011000011001110110010100000
            00000101100000000


nomad@NomadBSD:~% 
nomad@NomadBSD:~% freebsd-version
13.0-RELEASE
nomad@NomadBSD:~% uname -a
FreeBSD NomadBSD 13.0-RELEASE FreeBSD 13.0-RELEASE #0: Tue May  4 21:43:29 UTC 2021     root@NomadBSD:/usr/obj/usr/src/amd64.amd64/sys/NOMADBSD  amd64
nomad@NomadBSD:~%

 

screenfetchコマンドの結果。

nomad@NomadBSD:~% screenfetch
                                      nomad@NomadBSD
   ```                        `       OS: FreeBSD 
  ` `.....---.......--.```   -/       Kernel: amd64 FreeBSD 13.0-RELEASE
  +o   .--`         /y:`      +.      Uptime: 41m
   yo`:.            :o      `+-       Packages: 792
    y/               -/`   -o/        Shell: csh (Astron)
   .-                  ::/sy+:.       Resolution: 1366x768
   /                     `--  /       WM: OpenBox
  `:                          :`      WM Theme: 8
  `:                          :`      GTK Theme:  Adapta [GTK3]
   /                          /       Icon Theme: Papirus
   .-                        -.       Font: Droid Sans 12
    --                      -.        Disk: 39G / 195G (21%)
     `:`                  `:`         CPU: Intel Core i5-4210U @ 1.70GHz
       .--             `--.           GPU: Haswell-ULT Integrated Graphics Controller
          .---.....----.              RAM: 1549MiB / 16384MiB
                                     
                                     
nomad@NomadBSD:~% 

 

問題点と今後の改善テーマ

(1)
そもそもインストーラの挙動がおかしかったのですが、日本語キーボードの設定がなんだかおかしいです。 今どきなんですか、NECとかPC98とか。(笑)オワコンにもほどがある。
vim使って設定ファイルいじって、普通の日本語キーボードにしないといけません。 実際、どうも端末でパイプが使えないようです。 | が入力できない。
ページャーが使えないと、割と不便です。

(2)
日本語のインプット環境ができていません。
uim-mozcかfcitx-mozcをインストールする予定。

(3)
日本語スクリーンフォントが「ギリギリ」とか「なんか微妙」な世界です。
NotoかMiguをインストールする予定です。

ヒノトリホンヤクの代表(私のことですが)はFreeBSDのインストールとセットアップだけなら百戦錬磨のベテランです。
なにしろ、自宅にはいまだに1997年発行の「FreeBSDフルコース」という入門書があるくらいです。
当時のFreeBSDのバージョンなんか、2.2-RELEASEですよ。 インストーラのブートがフロッピーディスクで、データがCD-ROMだった頃の神話です。
インストールだけなら何十回もやりました。
PC-BSDもTrueOSもUbuntuBSDもGhostBSDもFREESBIEも、みなお試し済みです。
そんな私が言うのだから、多少は説得力があってもいいと思います。

NomadBSDはすごくいいです。 USBからブートできて、HDDを犠牲にしないでもFreeBSDを試すことができます。
LibreOfficeまでプレインストールされていて、すぐに使えます。
ちょっとしたUSBメモリ(8GBくらい)さえあればあなたのPCでFreeBSDを使ってみることができます。
ぜひお試しを。

NomadBSD簡単に使えて感動したので第二話に続きます。