10.0-RELEASE pkg install

FreeBSD 10.0-RELEASEが公開されて少し経ってしまったけれど、VMwareでためしてみる。

pkgng

10.0-RELEASEで標準のような扱いになったのでpkgと呼ぶべきかもしれないけれど、new generationのpkg管理ツール。pkg_*のツール類はさくっと削除されたので、新しいツールに移行しなければならない。

とりあえず使ってみると、debian系で利用できるapt-getのような感じ。使いやすいと思う。現時点で、すでにportsとも互換性がある。

これまで、インストールするportsのリストを作って、perlスクリプトportsからコンパイルとインストールを自動化してきた。今後どのようにするのが良いのか考えてみた。基本的な方針は、pkgでインストールできるものはしたい。ただし、lang/php5のWITH_APACHEのように、portsからインストールしたいものもある。その他の大物として、math/RのWITH_ATLASがある*1。でも、必要なものはこの2つくらいかもしれない。

小飼弾さんが書いているように、portsからオプションをカスタマイズしたものは、pkg lockすることで、pkg updateを回避できるらしい。すごい。

これを使って新しいpkgインストールの手順を考えよう。

方針

基本的な方針は、何でも入れること! サーバー用途であろうとデスクトップ用途であろうと同じ構成のFreeBSD boxにする。デスクトップ環境を整えるだけならば、基本的にブラウザがちゃんと動けば、それなりには使える。でも、せっかくFreeBSD boxを構成するのだから、やりたいことを思いついた時にすぐできる環境が良い。自分が必要そうなものはすべてインストールしておく。

今までも、この方針でportsのリストを書いてきた。ただし、今回は、もうそれはobsoleteだろうと思われるものは削除する。

なるべく、簡単な手順が望ましいのでシェル・スクリプトを書く。情弱.jpさんのシェル・スクリプトは、FreeBSDをインストールした後の作業が、ほぼ完全にスクリプト化されていて、すごい。とてもインスパイア(笑)された。感謝。

ただ、pkgのリストは別に管理したい。pkgコマンドは、portsのwww/apache22のような表記を受け入れるので、いままでのportsリストを流用できる! やる気が出てくる。

デスクトップ環境をシェル・スクリプトで整える。KDE4と言いたいんだけど、現状KDE4はパッケージはなし、portsコンパイルできなさそう。なので、MATEにする。とうとうgnome系に移行することになる。マテ茶はあんまり好きじゃないんだけど。。。

をインストールする。

pkgInstaller.sh

引数で指定したファイルに書かれたportsリストを順番にpkgでインストールするスクリプト。一行にpkgが分かるpkgネームを書く。apache22-2.2.26でもいいし、www/apache22でもよい。単にapache22でも良いようだ。#で始まる行はコメントで無視される。
pkgInstaller.sh

#!/bin/sh

filename=$1

if [ ! -e ${filename} ]; then
    echo "${filename} does not exist. Stopped."
    exit 1
fi

export ASSUME_ALWAYS_YES=yes

cat ${filename} | grep -v "^#" | grep -v "^$" | while read line
do
    pkg install ${line}
done

こんな感じのportsリストファイルを用意した。
ports_list_1st.txt(一部。最後に全部を掲載する。)

#
x11/xorg
#
japanese/ibus-mozc
japanese/jls
japanese/less
japanese/nkf
japanese/p5-Jcode
japanese/kterm
japanese/a2ps
#
editors/emacs
japanese/mozc-el
japanese/teTeX
print/dvipdfmx
print/yatex
print/latex-beamer
textproc/prosper
japanese/dvi2tty
#
net/samba36
www/apache22
databases/mysql55-server
#
x11/mate
x11/slim
x11-themes/slim-themes
japanese/font-std
japanese/font-vlgothic
japanese/font-takao
#
(後略)

freebsdPostInstall.sh

あとは、これを呼び出すスクリプトを書く。やることの順番としては、

  1. freebsd-update
  2. portsnap
  3. /etc/rc.confに追記
  4. /etc/fstabに追記
  5. ./pkgInstaller.shでports_list_1st.txtに書かれたpkgをインストール
  6. www/linux-f10-flashplugin11とjapanese/acroread9をportsからインストール
  7. /etc/sysctl.confに追記(chrome用)
  8. /etc/rc.conf.localを作成
  9. /usr/local/etc/hal/fdi/policy/10-x11-kbd.fdiを作成
  10. lang/php5をWITH_APACHEのオプションだけつけてportsからインストール
  11. ./pkgInstaller.shでports_list_2nd.txtに書かれたpkgをインストール

freebsdPostInstall20140311.sh

#!/bin/sh

freebsd-update fetch
freebsd-update install

portsnap fetch extract

cp /etc/rc.conf /etc/rc.conf.ORG
cat >> /etc/rc.conf <<EOF
# sendmail off
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
# other settings
snddetect_enable="YES"
mixer_enable="YES"
linux_enable="YES"
EOF

cp /etc/fstab /etc/fstab.ORG
cat >> /etc/fstab <<EOF
proc /proc procfs rw 0 0
linprocfs /compat/linux/proc linprocfs rw 0 0
EOF

./pkgInstaller.sh ports_list_1st.txt

make BATCH=yes -C /usr/ports/www/linux-f10-flashplugin11 install clean
make BATCH=yes -C /usr/ports/japanese/acroread9 install clean

cp /etc/sysctl.conf /etc/sysctl.conf.ORG
cat >> /etc/sysctl.conf <<EOF
kern.ipc.shm_allow_removed=1
EOF

cat >> /etc/rc.conf.local <<EOF
dbus_enable="YES"
hald_enable="YES"
avahi_daemon_enable="YES"
avahi_dnsconfd_nable="YES"
#vmware_guest_vmblock_enable="YES"
#vmware_guest_vmhgfs_enable="YES"
#vmware_guest_vmmemctl_enable="YES"
#vmware_guest_vmxnet_enable="YES"
#vmware_guestd_enable="YES"
slim_enable="YES"
EOF

cat >> /usr/local/etc/hal/fdi/policy/10-x11-kbd.fdi <<EOF
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.keyboard">
      <match key="info.udi" string="/org/freedesktop/Hal/devices/atkbd_0">
        <merge key="input.x11_options.XkbRules" type="string">xorg</merge>
        <merge key="input.x11_options.XkbModel" type="string">jp106</merge>
        <merge key="input.x11_options.XkbLayout" type="string">jp</merge>
        <merge key="input.x11_options.XkbOptions" type="string">ctrl:nocaps</merge>
      </match>
    </match>
  </device>
</deviceinfo>
EOF

make -C /usr/ports/lang/php5 config
make -C /usr/ports/lang/php5 config-recursive
make -C /usr/ports/lang/php5 install clean

./pkgInstaller.sh ports_list_2nd.txt

cat <<'EOF'


Don't forget these commands before rebooting.
# cp dot.xinitrc /home/${LOGNAME}/.xinitrc
# chown ${LOGNAME}:${GROUP} /home/${LOGNAME}/.xinitrc


EOF

lang/php5は最初のmake configでapacheだけオプションを追加し、次のmake config-recursiveはすべてオプションを変更せずOKすることを想定している。lang/php5のあとに入れるべきものをports_list_2nd.txtに書いてある。lang/php5が必要ない場合は、

make -C /usr/ports/lang/php5 config
make -C /usr/ports/lang/php5 config-recursive
make -C /usr/ports/lang/php5 install clean

./pkgInstaller.sh ports_list_2nd.txt

の部分を削除するか、コメントアウトすることでfreebsdPostInstall.shの処理の間、まったく入力の必要がなくなる。

freebsdPostInstall.shが実行されたあとrebootするとログインマネージャのslimが起動する。なのでユーザーに$HOME/.xinitrcがないとログインできなくなる。次のような.xinitrcを作成する。
dot.xinitrc($HOME/.xinitrc用)

export LANG=ja_JP.UTF-8
mozc_server_start
export XIM=ibus
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=xim
export XMODIFIERS=@im=ibus
export XIM_PROGRAM="ibus-daemon"
export XIM_ARGS="--daemonize --xim"
#vmware-user-suid-wrapper &
exec mate-session

LANG=ja_JP.UTF-8とする必要がある。試しにja_JP.eucJPとしたら、iBusが動かなかった。

fonts.conf(3月12日追記、下記ファイルは変更済み)

これらの作業の後に、rebootするとデスクトップ環境を整えられる。しかし、これだけだと日本語フォントの一部が少し変なところがある。特にMATE端末のフォントが変なので、使いにくい。

後藤大地さんのこの記事で扱われているfonts.confが使いやすいので、使わせてもらう。感謝。この記事では、$HOME/.fonts.confに置くと書いているけれど、現在は$HOME/.config/fontconfig/fonts.confが良いようだ。このfonts.confを使うことで、フォントの問題は改善される。

まとめ

これらのスクリプト類をまとめた。
freebsdPostInstall.tar.gz 直 (3月12日追記分のファイルを追加)

FreeBSDのインストールを終了した後、/root/にfreebsdPostInstall.tar.gzを展開したとする。(bsdinstallでユーザーの追加はしてないとする。)

# mkdir /home (これをしないと/homeは/usr/homeへのシンボリックリンクとなる)
# adduser (ここでfreebsdというユーザーを追加したとする)
# cd /root/freebsdPostInstall
# ./freebsdPostInstall20140311.sh (約2時間程度かかる)
# cp dot.xinitrc /home/freebsd/.xinitrc
# chown freebsd:freebsd /home/freebsd/.xinitrc
# mkdir -p /home/freebsd/.config/fontconfig
# cp fonts.conf /home/freebsd/.config/fontconfig/
# chown -R freebsd:freebsd /home/freebsd/.config
# shutdown -r now

これでブートしたら、めでたくデスクトップ環境が整う。

VMwareの場合は、次の修正をしておけば、この手順でデスクトップ環境を整えられることができた。

注意点としては、ports_listと呼んでいるけれどもpkgでインストールできるもののリストでなければならない。名前がちょっとおかしいかな。

2014/03/22追記:訂正記事あり
訂正
修正されたファイル:freebsdPostInstall20140322.tar.gz 直

VMwareの場合の修正

  • freebsdPostInstall20140311.shの
cat >> /etc/rc.conf.local <<EOF
dbus_enable="YES"
hald_enable="YES"
avahi_daemon_enable="YES"
avahi_dnsconfd_nable="YES"
#vmware_guest_vmblock_enable="YES"
#vmware_guest_vmhgfs_enable="YES"
#vmware_guest_vmmemctl_enable="YES"
#vmware_guest_vmxnet_enable="YES"
#vmware_guestd_enable="YES"
slim_enable="YES"
EOF

の部分の#を消す。

#x11-drivers/xf86-video-vmware
#emulators/open-vm-tools

最後の2行の#を消す。

  • dot.xinitrc
#vmware-user-suid-wrapper &

の#を消す。

MATEが起動したら

[iBusの設定]からMozcの設定をする必要がある。

あとの問題は、fontconfigが変なので、$HOME/にfontconfigディレクトリが作られて、cashファイルのようなものができてしまう。消しても問題ないようだ。どうして作られるのかはよくわからない。

ports_list

最後にports_list_1st.txtとports_list_2nd.txtを全部掲載する。
ports_list_1st.txt

#
x11/xorg
#
japanese/ibus-mozc
japanese/jls
japanese/less
japanese/nkf
japanese/p5-Jcode
japanese/kterm
japanese/a2ps
#
editors/emacs
japanese/mozc-el
japanese/teTeX
print/dvipdfmx
print/yatex
print/latex-beamer
textproc/prosper
japanese/dvi2tty
#
net/samba36
www/apache22
databases/mysql55-server
#
x11/mate
x11/slim
x11-themes/slim-themes
japanese/font-std
japanese/font-vlgothic
japanese/font-takao
#
security/sudo
sysutils/screen
ports-mgmt/portupgrade
net/rsync
ftp/wget
devel/llvm32
benchmarks/unixbench
#
java/openjdk6
#
www/firefox
www/firefox-i18n
www/chromium
java/icedtea-web
emulators/linux_base-f10
www/nspluginwrapper
#
japanese/libreoffice
graphics/gimp
multimedia/vlc
net/grive
emulators/virtualbox-ose
#
#x11-drivers/xf86-video-vmware
#emulators/open-vm-tools

ports_list_2nd.txt

lang/php5-extensions
ftp/php5-curl
converters/php5-mbstring
databases/php5-mysql
security/php5-openssl
archivers/php5-zip
japanese/php_doc
www/mediawiki121
lang/ocaml

*1:ただし、math/atlasのコンパイルにものすごい時間がかかるので、math/Rは今回入れていない。コンパイルできることは確認済み。