pkg in FreeBSD
言いたいことはわかる気がするけど、ただひたすら軽いというだけでアピールするのかな。Windowsはもちろん、OS Xと比べてもパッケージ管理がぐちゃぐちゃにならず、開発環境の整備と維持が楽になる点が重要。
と書きました。私の意図は、Linuxを使うことの利点が軽いという点以外にもあるのでは?ということでした。それに対して、id:miyakawa_taku さんに、
ことArch Linuxについては、「パッケージ管理がぐちゃぐちゃにならず」とは言いづらいです。ぐちゃぐちゃにならないように日々注意を怠らず、時と場合によってはためらわず腕力をふるう必要があります。
とコメントをいただきました。ありがとうございます。
Arch Linuxについては詳しくありません。使ってみたいと思ってるのですが。また私はFreeBSDを使っていて、LinuxもUbuntuに触っている程度です。というわけで、あまり詳しくないのにもかかわらず、FreeBSDをArch Linuxに置き換えても同じことが言えるんじゃね?的なノリでコメントしたことについては、反省しています。
このblogはFreeBSDを利用する上での私のメモなのですが、パッケージ管理は主要なテーマのひとつです。
FreeBSDには、Debian系のapt-getに類似したpkgコマンドがあります。リポジトリは実質的にFreeBSDの公式のものしかありませんが、portsコレクションに入っているソフトウェアがバイナリで提供されています。
これを使って一気にインストールするために、ファイルからパッケージのリストを読んで順次インストールするシェルスクリプトを使っています。ここにあるpkgInstaller.shがそれです。ports_list.txtはパッケージのリストです。
FreeBSDをインストールした直後に、その後にこのスクリプトを走らせて必要なパッケージを一気にインストールします。それ以外の作業(FreeBSD自体のアップデートと設定ファイルの書き換えなど)もまとめたのが上記リンクのfreebsdPostInstall.shです。アップデートの際は、パッケージを(X.orgなども含めて)すべて削除して、再度pkgInstaller.shを走らせます。pkgを使ってアップデートもできますが、1〜2時間の作業ですので、複雑な依存関係の変化に頭を悩ますくらいなら、入れなおしたほうが良いように思っています。数週間に一度アップデートすると最新のChromiumが使えて幸せです。
このような方法でパッケージ管理のぐちゃぐちゃから解放されています。私の中では、FreeBSDを使っていてよかったなと思う瞬間です。たぶんLinuxでも同じことができるのでは?と思います。Arch Linuxはそれを試してみたいと思うディストロです。
シェルスクリプトひとつでパッケージ管理を楽にできるという点を主張してみました。元のエントリに書いてあることについて異論を差し挟むつもりはありません。Arch Linuxについての感想を寄せていただいたmiyakawa_takuさんにも感謝いたします。
freebsdPostInstall
管理が面倒になったので、freebsdPostInstallをgithubに置くことにした。
eoffice server update memo
研究室のサーバーを10.1にアップデートしたときのメモ。完全に自分向け。
unbound
BINDからunboundへ移行する。
% diff /etc/unbound/unbound.conf /etc/unbound/unbound.conf.ORG 3,6d2 < interface: 127.0.0.1 < interface: 192.168.11.10 < access-control: 127.0.0.1/32 allow < access-control: 192.168.11.0/24 allow 11c7 < #auto-trust-anchor-file: /var/unbound/root.key --- > auto-trust-anchor-file: /var/unbound/root.key
自分自身とローカルネットワークからのアクセスを許可する。auto-trust-anchor-file:行は、DNSSECを有効にするもので、これがあると上流に名前が引けなくなったのでコメントアウト。
デフォルトの/etc/unbound/unbound.confでは、
include: /var/unbound/conf.d/*.conf
とあるので、/etc/unbound/conf.dにローカルのデータを置いておいた。
% head -10 /etc/unbound/conf.d/eoffice.lan.conf local-zone: "eoffice.lan." static local-data: "eoffice.lan. NS hermes.eoffice.lan." local-data: "hermes.eoffice.lan. A 192.168.11.10" local-data: "10.11.168.192.in-addr.arpa. PTR hermes.eoffice.lan." local-data: "mercury.eoffice.lan. A 192.168.11.11" local-data: "11.11.168.192.in-addr.arpa. PTR mercury.eoffice.lan." local-data: "venus.eoffice.lan. A 192.168.11.12" local-data: "12.11.168.192.in-addr.arpa. PTR venus.eoffice.lan." local-data: "aphrodite.eoffice.lan. A 192.168.11.13" local-data: "13.11.168.192.in-addr.arpa. PTR aphrodite.eoffice.lan." %
上流は、192.xx.xx.123。
/etc/unbound/forward.conf
% cat /etc/unbound/forward.conf # Generated by local-unbound-setup # Do not edit this file. forward-zone: name: . forward-addr: 192.xx.xx.123 %
/etc/rc.conf
local_unbound_enable="YES"
NIS
/etc/rc.confの中で
# # portmap # rpcbind_enable="YES" # # NIS # nisdomainname="eoffice"
を有効にして、再起動。
/var/yp にmaster.passwdとypserversを作成
% less /var/yp/ypservers hermes.eoffice.lan hermes.eoffice.lan %
このあと、ユーザー関連のgroupを/etc/groupに追加する。
# cd /var/yp # make
最終的な/etc/rc.confは、次のようにする。
# # portmap # rpcbind_enable="YES" # # NIS # nisdomainname="eoffice" nis_client_enable="YES" nis_client_flags="-S eoffice,hermes.eoffice.lan" nis_server_enable="YES" nis_yppasswdd_enable="YES" nis_yppasswdd_flags="-t /var/yp/master.passwd"
NFS
% less /etc/exports /home -alldirs -maproot=root:wheel -network=192.168.11 %
/etc/rc.conf
# # NFS # nfs_client_enable="YES" nfs_server_enable="YES" rpc_lockd_enable="YES" rpc_statd_enable="YES"
NTP
上流は172.xx.xx.1とする。
% diff /etc/ntp.conf /etc/ntp.conf.ORG 22,24c22,24 < #server 0.freebsd.pool.ntp.org iburst < #server 1.freebsd.pool.ntp.org iburst < #server 2.freebsd.pool.ntp.org iburst --- > server 0.freebsd.pool.ntp.org iburst > server 1.freebsd.pool.ntp.org iburst > server 2.freebsd.pool.ntp.org iburst 26,27d25 < server 172.xx.xx.1 iburst < server ntp.nict.jp 71d68 < restrict 192.168.11.0 mask 255.255.255.0 noquery nomodify notrap 83d79 < driftfile /var/db/ntpd.drift %
わかりにくいので有効な行だけを表示すると次のようになる。
% cat /etc/ntp.conf | grep -v '^#' | grep -v '^$' server 172.xx.xx.1 iburst server ntp.nict.jp restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict -6 ::1 restrict 127.127.1.0 restrict 192.168.11.0 mask 255.255.255.0 noquery nomodify notrap driftfile /var/db/ntpd.drift %
/etc/rc.conf
ntpd_enable="YES"
Samba
ファイル名をutf-8に変更した。
% diff /usr/local/etc/smb.conf /usr/local/etc/smb.conf.ORG 24,28d23 < # Japanese setting. < < dos charset = CP932 < unix charset = UTF8 < display charset = UTF8 31c26 < workgroup = EOFFICE --- > workgroup = MYGROUP 46c41 < hosts allow = 192.168.11. 127. --- > ; hosts allow = 192.168.1. 192.168.2. 127. 90c85 < passdb backend = smbpasswd --- > ; passdb backend = tdbsam 170c165 < map archive = no --- > ; map archive = no 312,321d306 < # Simple Public Space < [public] < comment = Public Space < path = /home/public < guest ok = yes < read only = no < force group = user < force create mode = 0664 < force directory mode = 0775 < map archive = no %
[global]に、map archive = noを追加した。
# ypcat passwd | make_smbpasswd > /usr/local/etc/samba/smbpasswd # smbpasswd -e username
/etc/rc.conf.local
samba_enable="YES"
FreeBSD 10.1-RELEASE update trouble
最近、10.1-RELEASEに移行して、updateのトラブルが殆どなかったので甘かったのだが、今日VMware上の10.1-RELEASEをいつもの通りupdateしたら、2つのトラブルが発生。
- xorgでのキーボードがjp106にならず英語キーボードとして認識される。halの設定は変えていないのに。
- x11-drivers/xf86-input-vmmouseを入れているのだが、入れ忘れたような状態になっている。マウスがVMwareのウインドウから出た場合、次に入るときにゲストのマウスポインタに変わらない。クリックした場合でも、ウインドウから出た場所に戻るので、非常に使いにくい。
ここのところ問題がほぼなかっただけに、ショック。。。
追記:2014/12/28
解決策は、小飼弾さんが示してくれていた。
#FreeBSD + xorg-server-1.14 で vmmouse を復活させる
XSERVER 1.14 UPDATE READY
というわけで、2つの問題は、xorg-serverが1.14になってデバイスの検知がHALからdevdに戻ったため。がんばって、HALに対応してきたのにねー。
やったことは、弾さんが書いてくれたことをもとに、キーボードとマウスの設定を/etc/X11/xorg.conf.d/input.confに書く。
# Xorg -configure # mv /root/xorg.conf.new /etc/X11/xorg.conf # mkdir /etc/X11/xorg.conf.d # cat > /etc/X11/xorg.conf.d/input.conf Section "InputClass" Identifier "Keyboard Defaults" Driver "keyboard" MatchIsKeyboard "on" Option "XkbRules" "xorg" Option "XkbModel" "jp106" Option "XkbLayout" "jp" Option "XkbOptions" "ctrl:nocaps" EndSection Section "InputClass" Identifier "Mouse Defaults" Driver "vmmouse" MatchIsPointer "on" EndSection #
これで、このエントリの2つの問題は解決した。
ただ、細かい問題だが、slimのログインの際のuserとpasswordの入力での表示が微妙に変。フォントがあっていないような感じで、2文字目を入力してから表示が始まったり、最後の文字が表示されなかったり、という問題が残った。
FreeBSD memo [2014/12]
10.1-RELEASEへの移行は問題ないことを確認した。
freebsdPostInstall 20141207版のメモ
- アカウントを作成できるようにした。それに伴い、必要なファイルを自動的にコピーするようにした。
- --group, -gは機能していない。
- VMwareの処理をオプション指定 (--vmware, -w) で自動的に行う。
- /homeを作成する。
- uidは1000を使う。
- 単なる好みだが、adduserで指定をしない場合、ユーザーのuidは1001から始めるようだが、freebsdPostInstallで作成するアカウントはuidを1000にする。
- csh (tcsh) を使う。
- 単なる好み。
ports_list.txtに、sysutils/tmuxとmath/Rを追加した20141218版
freebsdPostInstall20141218.tar.gz
pkg
その他
MATEのシャットダウンボタンは、ときどき機能しない場合がある。ログイン画面からhaltまたはrebootユーザーでログインすることで、シャットダウンまたはリブートが可能。パスワードはrootのものを使用する。
freebsdPostInstall [20141207版]
概要
freebsdPostInstallは、FreeBSDのインストール後の設定をシェルスクリプトを用いて自動化するものです。インストール後の設定とは、基本的なFreeBSDの設定、X Window System + MATEデスクトップ環境の導入と設定、アプリケーションの導入を含みます。
インストールされるアプリケーションは、
- X Window System + MATE
- Chromium (ブラウザ)
- Thunderbird (メーラ)
- LibreOffice (オフィスソフト)
- Gimp (フォトレタッチソフト)
- VLC (メディアプレイヤー)
などです。通常のPC使用に必要なアプリケーションを網羅しています。
前提
FreeBSDのインストールは、デフォルトのインストーラであるbsdinstallなどを用いて、インストールされているとします。root以外のユーザー・アカウントは登録していないとします。またネットワークに適切に接続しているとします。
使用方法
インストール作業を完了したFreeBSDを起動したら、rootでログインします。デフォルトのプロンプトは
root@hostname:~ #
などとなるはずですが、ここでは単に
#
で表します。rootで次のコマンドを実行します。これらのコマンドで、freebsdPostInstall20141207.tar.gzをダウンロード (fetch) して、圧縮されたファイルを展開し、配布ファイルのあるディレクトリに入ります。
# fetch http://coildomain.net/freebsdPostInstall/freebsdPostInstall20141207.tar.gz # tar xvf freebsdPostInstall20141207.tar.gz # cd freebsdPostInstall
次のアカウントでFreeBSDを使用する場合を説明します。適宜読み替えてください。
- ユーザー名: densuke
- 本名: Densuke Okonogi
- パスワード: dennoucoil
VMwareでない環境で使用する場合は、次のコマンドを実行します。
# ./freebsdPostInstall.sh -u densuke -n "Densuke Okonogi" -p dennoucoil
Vmware上のFreeBSDで使用する場合は、次のコマンドを実行します。
# ./freebsdPostInstall.sh -u densuke -n "Densuke Okonogi" -p dennoucoil -w
オプションは次のとおりです。
- -u または --user: ユーザー名の設定
- -n または --gecos: 本名の設定 (GECOSフィールドを設定します)
- -p または --passwd: パスワードの設定
- -w または --vmware: VMware用に設定する
オプションを指定せずにfreebsdPostInstall.shを起動した場合、次のアカウントをデフォルトで登録します。
このコマンドの実行には、数時間かかります。終了したあと次のコマンドでリブートします。
# shutdown -r now
リブート後、グラフィカル・ユーザー・インターフェースのログイン画面が表示されます。登録したアカウントでログインすると、MATEデスクトップ環境がスタートします。
Mozcの設定
ログイン後に、日本語入力システムであるMozcを設定する必要があります。[システム]->[コントロール・センター]を選び、[iBusの設定]を開き、[インプットメソッド]タブから、[インプットメソッドの選択]->[日本語]->[Mozc]を選択して、[追加]ボタンを押します。その後、ウィンドウを閉じます。日本語入力ができる状態にするためには、一旦ログアウトしログインし直す必要があります。再ログイン後は、[半角/全角]キーで日本語入力を選択できるようになります。
少し詳しい説明
このスクリプトは、
- 使用するユーザー・アカウントの登録
- システム全体のアップデート
- システム全体の追加設定
- アプリケーションのインストール
- ユーザー設定の追加
を実行します。
基本的にすべての工程を自動的に実行します。「システム全体のアップデート」の変更されるファイルの表示で、一旦停止が発生する場合があります。その場合は、スペース・キーを数回押すことで、続行することができます。
バグ
- -gオプション (または --groupオプション) の処理を書いていますが、今のところ何の機能も持っていません。
- たぶん、見つけられていないバグがあります。
ファイル
freebsdPostInstall20141207.tar.gz
このスクリプトの使用は、自己責任でおねがいします。
Fontconfig
このエントリにコメントされたが、fontconfigに2つ問題があった。
fonts.conf
後藤大地さんが書いたfonts.confを使用していたが、例えばeclipseを起動した時などに次のようなwarningが出る。
Fontconfig warning: "/home/densuke/.config/fontconfig/fonts.conf", line 88: Having multiple values in <test> isn't supported and may not work as expected Fontconfig warning: "/home/densuke/.config/fontconfig/fonts.conf", line 203: Having multiple <family> in <alias> isn't supported and may not work as expected Fontconfig warning: "/home/densuke/.config/fontconfig/fonts.conf", line 217: Having multiple <family> in <alias> isn't supported and may not work as expected Fontconfig warning: "/home/densuke/.config/fontconfig/fonts.conf", line 229: Having multiple <family> in <alias> isn't supported and may not work as expected Fontconfig warning: "/home/densuke/.config/fontconfig/fonts.conf", line 229: Having multiple <family> in <alias> isn't supported and may not work as expected Fontconfig warning: "/home/densuke/.config/fontconfig/fonts.conf", line 240: Having multiple <family> in <alias> isn't supported and may not work as expected Fontconfig warning: "/home/densuke/.config/fontconfig/fonts.conf", line 248: Having multiple <family> in <alias> isn't supported and may not work as expected Fontconfig warning: "/home/densuke/.config/fontconfig/fonts.conf", line 259: Having multiple <family> in <alias> isn't supported and may not work as expected
1行目は、要するに
<match target="font"> <test name="family" compare="contains"> <string>IPAGothic</string> <string>IPAMincho</string> <string>IPAMonaGothic</string> ... </test> ... </match>
のような書き方は許されず、
<match target="font"> <test name="family" compare="contains"> <string>IPAGothic</string> </test> <test name="family" compare="contains"> <string>IPAMincho</string> </test> <test name="family" compare="contains"> <string>IPAMonaGothic</string> </test> <test name="family" compare="contains"> ... </test> ... </match>
のように、
2行目以降は、
<alias binding="strong"> <family>MS PGothic</family> <family>MS Pゴシック</family> <prefer> <family>IPAMonaPGothic</family> <family>IPAPGothic</family> <family>TakaoPGothic</family> <family>Ume P Gothic C4</family> <family>Ume P Gothic C5</family> <family>Ume P Gothic</family> <family>Ume P Gothic O5</family> </prefer> </alias>
のように、
<alias binding="strong"> <family>MS PGothic</family> <prefer> <family>IPAMonaPGothic</family> <family>IPAPGothic</family> <family>TakaoPGothic</family> <family>Ume P Gothic C4</family> <family>Ume P Gothic C5</family> <family>Ume P Gothic</family> <family>Ume P Gothic O5</family> </prefer> </alias> <alias binding="strong"> <family>MS Pゴシック</family> <prefer> <family>IPAMonaPGothic</family> <family>IPAPGothic</family> <family>TakaoPGothic</family> <family>Ume P Gothic C4</family> <family>Ume P Gothic C5</family> <family>Ume P Gothic</family> <family>Ume P Gothic O5</family> </prefer> </alias>
のように、
ホームディレクトリにfontconfigという名前のcacheディレクトリが作られる
これは、fontconfigのバグのようだ。この情報に従って、/usr/local/etc/fonts/local.confを作成し、内容を次のようにした。
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <cachedir prefix="~">.fontconfig</cachedir> </fontconfig>
これによって、~/.fontconfigがcacheディレクトリとなる。本来は、~/.cache/fontconfigがcacheディレクトリとなるべきなのかもしれない。ただし、$XDG_CACHE_HOMEに~/.cacheをセットしてもうまく行かないようなので、とりあえずfontconfigのcacheディレクトリは~/.fontconfigとする。
まとめ
この2つの設定の修正で、fontconfigのトラブルは解消された。フォントは正しくIPAフォントが使用されているようだ。
これらの修正をしたfreebsdPostInstallを置いておく。これ以外の修正もしているので、もう一度クリーンに説明するエントリを書く予定。
freebsdPostInstall20140818.tar.gz