FreeBSD 10.2: Linuxとの違いの気づき

(2015.11.16 新規作成)

FreeBSD は Linux とずいぶん違う。初期設定の際に直面した違いを書いていきます。

FreeBSD 10.2-RELEASE を導入しました。最新の情報に基づいたつもりですが、廃れた方法もあるかもしれません。

(2018.10) NetBSD で似たページを作りました; NetBSD memo

base systemのレベル

FreeBSD base system のレベルを上げる方法。個々のパッケージではない.

freebsd-update コマンドを使う。

# freebsd-update fetch
# freebsd-update install

=> 10.2-RELEASE-p7 に上がった。

[2016-10-12] 11.0-RELEASE に上げるときは, 次のようにする;

# freebsd-update upgrade -r 11.0-RELEASE
# freebsd-update install

この後, pkg-static install -f pkg で, pkg コマンドを新しくする。

FreeBSD のメジャーバージョンアップの場合、ライブラリが入れ替えになったりメジャーバージョンが上がったりして, ABI が変わることがあります。そのままでは依存しているプログラムが動きません。

Packages を更新する必要があります。次のコマンドで, 全パッケージのバージョンを上げます。pkg (または pkg-static) コマンドは, FreeBSD が提供するバイナリ package を扱います。portmaster は, ports パッケージ (ソースからビルド) を管理するためのコマンドです。

# pkg-static upgrade -f
# portmaster -af

ユーザ情報

wheelグループ

suするには、そのユーザを wheel グループに追加しなればならない。現在の所属グループを表示するのは groups コマンド。

たとえば hhorikaw ユーザを追加するには, 1) /etc/group ファイルを編集する。

/etc/group:

wheel:*:0:root,hhorikaw

または, 2) pw group mod コマンドを使う。

# pw group mod wheel -m hhorikaw

[2021.5] FreeBSD 13: sudo パッケージのインストールが必要。

sudo コマンドは /usr/local/etc/sudoers ファイルで制御される。次の例は, wheelグループ所属の人は sudo できる。

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL

[2020.12] CentOS 8, Fedora 33 では, wheel グループに所属しなくても su (root パスワード) できる。他方, sudo (ユーザのパスワードで昇格) は, FreeBSD と同じく wheel グループに加わらなければできない。sudoers で制御するのも同じ。

Linux でのユーザ情報の変更は usermod コマンド. [/2020.12 ここまで]

ログインshell

標準の shell は csh or tcsh.

/etc/passwd ファイルで現在の状況が分かる。このファイルを編集しても反映されない。FreeBSD では /etc/pwd.db ファイルがマスタ。

また, Linux では /etc/shadow ファイルにパスワードハッシュが格納されるが、FreeBSD にはそのファイルはなく, /etc/master.passwd ファイルに格納される。

vipw コマンドでエディタで編集できる。Linux も同様。

chpass コマンドで一人分を画面で編集。pw コマンドにて, コマンドラインで各フィールドを変更可能。いずれも Linux にはないコマンド。

パッケージ管理

パッケージ管理は pkg コマンド.

(2016.11) ページを分けました; パッケージマネジャ: Linux (Yum, DNF) と FreeBSD (pkg) の比較

rc.conf ファイル

FreeBSD には systemd が入っていない。昔ながらのテキストファイル。

例えば, ntp を有効にする方法。 See https://www.freebsd.org/doc/handbook/network-ntp.html

FreeBSD では、サービスの起動は, /etc/rc.conf ファイルに追加する。

ZZZ_enable="YES" と /etc/rc.conf に書くと, /etc/rc.d ディレクトリにあるZZZコマンドを service 経由で呼び出す, ようだ。

service -l でサービスの一覧が表示される。

やってみよう. /etc/rc.conf に次を追加

ntpd_enable="YES"   # dが付く

/etc/ntp.conf ファイル::

server ntp.nict.jp

すぐに時刻を合わせる;

# ntpdate ntp.nict.jp

TODO: スリープやハイバネートから復帰して、ネットワークに接続したときに, 自動的に時刻を合わせる方法?

ホスト名, 静的IPアドレス

ホスト名、IPアドレスも, /etc/rc.conf で設定する。

/etc/rc.conf:

hostname="banana.fruits"
ifconfig_em0="DHCP"
ifconfig_em0_ipv6="inet6 accept_rtadv"

keymap="jp.106.kbd"
sshd_enable="YES"

keymap="jp.106x.kbd" だと, Capsキーと 左Ctrlキーを入れ替える.

静的IPアドレスは, 次のようにする;

#ifconfig_em0="DHCP"
ifconfig_em0_ipv6="inet6 accept_rtadv"
ifconfig_em0="192.168.241.51 netmask 255.255.255.0"
defaultrouter="192.168.241.2"

defaultrouter などは, man 5 rc.conf

IPアドレスを確認するのは ifconfig コマンド, ルーティングを確認するのは netstat -r コマンド.

ログイン時スクリプト

Shell が csh, tcsh だと, ログイン時に ~/.login を見に行く. ~/.profile は Bourne Shell 用。

加えて, それぞれの shell 実行時に, ~/.cshrc を読む。環境変数の設定はこちらに書く。

シェルスクリプトの構文も bash 系統と違う。

setenv GTK_IM_MODULE ibus
setenv QT_IM_MODULE ibus
setenv XMODIFIERS @im=ibus

FreeBSD 13: 環境変数 LANG は, ~/.login_conf ファイルで設定する。

me:\
        :charset=UTF-8:\
        :lang=ja_JP.UTF-8:

KDE

FreeBSD 12 (KDE5 Plasma)

(2019.12) FreeBSD 12.1 では, KDE 5がある。ディスプレイの設定を統合するため, kscreen パッケージも必要。

# pkg install xorg
# pkg install x11/kde5 plasma5-kscreen

次の行を /etc/fstab に追加。

proc           /proc       procfs  rw  0   0

次の行を /etc/rc.conf に追加。

dbus_enable="YES"
hald_enable="YES"

Display manager としては, KDM ではなく, SDDM を使う。設定画面を統合するため, plasma5-sddm-kcm パッケージも必要。

# pkg install x11/sddm plasma5-sddm-kcm

次の行を /etc/rc.conf に追加。これで自動起動。

sddm_enable="YES"

VMware Player で解像度を検出してくれない。それから日本語入力。次のパッケージもインストールする。

  • open-vm-tools - Open VMware tools for FreeBSD VMware guests
  • xf86-video-vmware
  • xf86-input-vmmouse - X.Org vmmouse input driver
  • ja-ibus-anthy

[2021.5] フォントとして, japanese/font-std, noto も入れるとよい。

FreeBSD 10 (KDE4)

FreeBSD 10.2 では KDE4が提供される。KDE5はまだみたい。

パッケージをインストールする。x11 は kde4と別にインストールする。依存になっていない.

  • x11/xorg
  • ja-font-std
  • ja-ibus-anthy

kde4 のパッケージ;

# pkg install x11/kde4 japanese/kde4-l10n 

VMware Workstation 12 Player の場合, 次のパッケージも必要. ディスプレイの解像度の選択肢が広がる。

  • xf86-video-vmware -- X.Org vmware display driver

dbusも必要

KDE を動かすには /proc が必要。/etc/fstab ファイルに次を追加; /etc/fstab::

proc           /proc       procfs  rw  0   0

dbus の設定も必要.

/etc/rc.conf

dbus_enable="YES"
hald_enable="YES"
polkitd_enable="YES" or polkit_enable="YES" は不要。ネット上では, dあり/なしの両方が見えるが、書かなくても立ち上がる。別の方法か?

KDMを有効化

KDM -- KDE Display Manager を有効にする。PC の起動時に X が立ち上がる。

/etc/rc.conf

kdm4_enable="YES"

日本語キーボード配列

fdi ファイルは古いらしい。Xorg -configure も不要。いきなり次のファイルを作ればOK. See http://www.x.org/releases/X11R7.7/doc/xorg-docs/input/XKB-Config.html

/usr/local/etc/X11/xorg.conf.d/keyboard.conf ファイル

Section "InputClass"
    Identifier      "keyboard defaults"
    MatchIsKeyboard "on"

    Option "XkbModel"   "jp106"
    Option "XkbLayout"  "jp"
    Option "XKbOptions" ""
EndSection

再起動後, KDM (ログイン前) に反映されるか確認する。

[[参考: ログイン後、次のコマンドを実行してもよい。KDM にも似たような設定で反映させる方法もある。しかし、上で説明したように, X11の設定をきちんとしたほうが better。

$ setxkbmap -model jp106 -layout jp

~/.xprofile に保存する。~/.xinitrc では (startx ではなく) KDM 経由の場合に呼び出されない。~/.xsession も呼び出されない。

参考ここまで]] ~/.xprofile:

#!/bin/sh

export XMODIFIERS="@im=ibus"
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus   # not xim

巷の解説だと XIM, XIM_PROGRAM などの環境変数が書いてあるが、特に不要。

ログイン後 ibus が立ち上がると, 上の設定に関わらず, ibus のキー配列が優先される。