pkg in FreeBSD

このエントリブックマークコメント

言いたいことはわかる気がするけど、ただひたすら軽いというだけでアピールするのかな。Windowsはもちろん、OS Xと比べてもパッケージ管理がぐちゃぐちゃにならず、開発環境の整備と維持が楽になる点が重要。

と書きました。私の意図は、Linuxを使うことの利点が軽いという点以外にもあるのでは?ということでした。それに対して、id:miyakawa_taku さんに、

ことArch Linuxについては、「パッケージ管理がぐちゃぐちゃにならず」とは言いづらいです。ぐちゃぐちゃにならないように日々注意を怠らず、時と場合によってはためらわず腕力をふるう必要があります。

とコメントをいただきました。ありがとうございます。

Arch Linuxについては詳しくありません。使ってみたいと思ってるのですが。また私はFreeBSDを使っていて、LinuxUbuntuに触っている程度です。というわけで、あまり詳しくないのにもかかわらず、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さんにも感謝いたします。

FreeBSD update memo

freebsdPostInstall

管理が面倒になったので、freebsdPostInstallをgithubに置くことにした。

https://github.com/masakeida/freebsdPostInstall

目標は、FreeBSDの一撃環境構築シェルスクリプトを作ること。

ここまでの変更点

  • -u オプションを使用しない場合、ユーザーは作成されないようにした。
  • xorgのHALからdevdへの変更に対応した。
  • ports_list.txtの加除。

修正しなくてはならない点

  • VMwareのオプションをつけなくても、/etc/X11/conf.d/input.confがVMware用になってしまっているので、直す必要がある。
  • ヒアドキュメントとファイルが混ざってておかしい。整理したい。
  • その他もろもろ。

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つのトラブルが発生。

  1. xorgでのキーボードがjp106にならず英語キーボードとして認識される。halの設定は変えていないのに。
  2. 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

  • www/linux-f10-flashplugin11は諦める。
    • FORBIDDENがマークされてて、インストールするためにはNO_IGNOREを指定しなければならないこと、入れてもchromiumで利用できなくなっていることから、諦める。flashは見れなくなるが、YouTubeHTML5に移行していて見ることができる。
  • japanese/acroread9はなくなった。
    • Atrilドキュメントビューアで十分。
  • www/chromiumで"「"が綺麗に表示されない。

Adobeの製品が必要なければ、とりあえずLinuxエミュレーションは必要がない。

その他

MATEのシャットダウンボタンは、ときどき機能しない場合がある。ログイン画面からhaltまたはrebootユーザーでログインすることで、シャットダウンまたはリブートが可能。パスワードはrootのものを使用する。

freebsdPostInstall [20141207版]

概要

freebsdPostInstallは、FreeBSDのインストール後の設定をシェルスクリプトを用いて自動化するものです。インストール後の設定とは、基本的なFreeBSDの設定、X Window System + MATEデスクトップ環境の導入と設定、アプリケーションの導入を含みます。

インストールされるアプリケーションは、

などです。通常の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を起動した場合、次のアカウントをデフォルトで登録します。

  • ユーザー名: freebsd
  • 本名: FreeBSD User
  • パスワード: password

このコマンドの実行には、数時間かかります。終了したあと次のコマンドでリブートします。

# shutdown -r now

リブート後、グラフィカル・ユーザー・インターフェースのログイン画面が表示されます。登録したアカウントでログインすると、MATEデスクトップ環境がスタートします。

Mozcの設定

ログイン後に、日本語入力システムであるMozcを設定する必要があります。[システム]->[コントロール・センター]を選び、[iBusの設定]を開き、[インプットメソッド]タブから、[インプットメソッドの選択]->[日本語]->[Mozc]を選択して、[追加]ボタンを押します。その後、ウィンドウを閉じます。日本語入力ができる状態にするためには、一旦ログアウトしログインし直す必要があります。再ログイン後は、[半角/全角]キーで日本語入力を選択できるようになります。

少し詳しい説明

このスクリプトは、

  • 使用するユーザー・アカウントの登録
  • システム全体のアップデート
  • システム全体の追加設定
  • アプリケーションのインストール
  • ユーザー設定の追加

を実行します。

基本的にすべての工程を自動的に実行します。「システム全体のアップデート」の変更されるファイルの表示で、一旦停止が発生する場合があります。その場合は、スペース・キーを数回押すことで、続行することができます。

バグ

  • -gオプション (または --groupオプション) の処理を書いていますが、今のところ何の機能も持っていません。
  • たぶん、見つけられていないバグがあります。

ファイル

freebsdPostInstall20141207.tar.gz
このスクリプトの使用は、自己責任でおねがいします。

freebsdPostInstallを実行し、ログイン後にchromiumを起動した状態のスクリーンショットです。

Fontconfig

このエントリコメントされたが、fontconfigに2つ問題があった。

  1. fonts.confの書き方に問題があり、warningがでる。
  2. ホームディレクトリにfontconfigという名前のcacheディレクトリが作成される。

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>

のように、MS PGothicMS Pゴシックに共通の設定をまとめることはできず、

    <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