2013年12月8日日曜日

FreeBSDの進化

これは ディストリビューション/パッケージマネージャ Advent Calender 8日目の記事です.

最近OSSというとLinuxがフィーチャーされがちで、BSDは古臭いイメージを持たれている方が多いかとおもいます.

ports? make install? めんどくせー、バイナリパッケージないのかよ.
えっバイナリパッケージあるけどインストールと削除とインストール済みリスト表示が全部別々のコマンドだって?
しかも削除するときはバージョン番号まで指定?
やってらんねー.

そんなあなたでも大丈夫、次期リリースのFreeBSD 10からはpkg(8)がパッケージ管理の標準になります.
現行の最新版リリースであるFreeBSD 9.2でも、このパッケージマネージャは試すことができるので、試してみてください

これで記事を終えるのは流石にひどいのでざっと使い方など説明

なにができるのか
# pkg                                                                                                        
usage: pkg [-v] [-d] [-l] [-N] [-j <jail name or id>|-c <chroot path>] [-C <configuration file>] <command> [<args>]

Global options supported:
        -d             Increment debug level
        -j             Execute pkg(1) inside a jail(8)
        -c             Execute pkg(1) inside a chroot(8)
        -C             Use the specified configuration file
        -l             List available command and exit
        -v             Display pkg(1) version
        -N             Test if pkg(1) is activated and avoid auto-activation

Commands supported:
        add            Registers a package and installs it on the system
        annotate       Add, modify or delete tag-value style annotations on packages
        audit          Reports vulnerable packages
        autoremove     Removes orphan packages
        backup         Backs-up and restores the local package database
        check          Checks for missing dependencies and database consistency
        clean          Cleans old packages from the cache
        convert        Convert database from/to pkgng
        create         Creates software package distributions
        delete         Deletes packages from the database and the system
        fetch          Fetches packages from a remote repository
        help           Displays help information
        info           Displays information about installed packages
        install        Installs packages from remote package repositories
        lock           Locks package against modifications or deletion
        plugins        Manages plugins and displays information about plugins
        query          Queries information about installed packages
        register       Registers a package into the local database
        remove         Deletes packages from the database and the system
        repo           Creates a package repository catalogue
        rquery         Queries information in repository catalogues
        search         Performs a search of package repository catalogues
        set            Modifies information about packages in the local database
        ssh            ssh packages to be used via ssh
        shell          Opens a debug shell
        shlib          Displays which packages link against a specific shared library
        stats          Displays package database statistics
        unlock         Unlocks a package, allowing modification or deletion
        update         Updates package repository catalogues
        updating       Displays UPDATING information for a package
        upgrade        Performs upgrades of packaged software distributions
        version        Displays the versions of installed packages
        which          Displays which package installed a specific file

Commands provided by plugins:

For more information on the different commands see 'pkg help <command>'.
以上がpkgコマンドのusageです.
pkgにはコマンドというものがあって、upgrade, install, remove, infoなどがそうです.
たとえば、
# pkg install パッケージ名
# pkg info
# pkg remove パッケージ名
でそれぞれ、指定パッケージのインストール、インストール済みパッケージのリスト表示、
指定パッケージのアンインストールが可能です.
# pkg autoremove
とすることで、pkg removeで消したパッケージの依存関係にあって要らなくなったパッケージを自動削除することができます.
# pkg search 検索文字列
で指定した文字列を使ってレポジトリからパッケージを検索することも可能です.

こうして見るとわかる通り、DebianやUbuntuのaptライクなコマンドで、現代的にパッケージ管理をすることができます.なので、Debian系Linuxユーザーが移行しても苦もなく使えるのではないでしょうか.

パッケージ追加でpkg_add -r パッケージ名、  インストール済みリスト表示にpkg_info、
パッケージ削除でpkg_delete パッケージ名なんて別々のコマンドを使う必要はもうありません

また、既存のバイナリパッケージシステムを使ってた人でも、
# pkg2ng
とするだけでpkg(8)での管理に移行できます! このコマンドを実行するとpkg(8)を管理するためのsqliteなデータベースが生成されます.
(: ただしこれは非可逆な操作なので気をつけてください )

FreeBSD 10.x以前のものなら/etc/make.confに
WITH_PKGNG=yes
と書き加える必要もあります


古いFreeBSDでpkgコマンドが入っていない場合でも、
# pkg_add -r pkg
ないしは
# cd /usr/ports/ports-mgmt/pkg && make && make install
でpkgコマンドを入手し、pkg2ngをつかうことでpkg(8)を使えます.

すでにこの管理システムのためのバイナリのミラーは国内に存在しています
http://ftp.jaist.ac.jp/pub/FreeBSD-pkgng/ [JAIST]

これを/usr/local/etc/pkg.confに書いてあげることで、より高速に使用することができるでしょう.


FreeBSD 10の追加される機能

ついでにFreeBSD 10自体の紹介も
今回のアップデートはかなり大規模で、さまざまな追加/変更が存在します.
そのなかで個人的におもしろそうなものをピックアップ

・ デフォルトコンパイラをGCCからClangに変更
・ DNSサーバーソフトをBINDからLDNSとUnboundに置き換え
・ Raspberry Piのサポート(!!)
・ BHyVe(ハイパーバイザ)
・ Hyper-V
・ AMD(Radeon)のGPUのKMSドライバ追加
・ SMP(マルチコア)フレンドリィなファイアウォール(pf)
・ 802.11nスタックの改善、AtherosのPCI/PCIeインターフェースな無線LANカードのサポート追加
  などなどといった無線LAN関係の改善
・ ZFSでTRIMやLZ4圧縮のサポート
・ FUSEのサポートをBaseシステムに追加
・ USBオーディオ2.0のサポート追加

などなどおもしろい機能が目白押しです.
Radeonと無線LANサポートの向上はデスクトップユースに嬉しいですね
(このマシン(ThinkPad x121e AMD)がグラフィックも無線もダメで悲しい思いをしていました)


おわりに

今回紹介した内容は、公式のwikiを参考にするともっとよく理解できるとおもいます
https://wiki.freebsd.org/pkgng
https://wiki.freebsd.org/WhatsNew/FreeBSD10

LinuxでwikiといえばArchかGentooだったりしますが、実はFreeBSDも公式のwikiやハンドブックが
充実しているので是非参考にしましょう.

正直、pkg(8)は既存のバイナリパッケージのコマンドの単なる置き換えなのですが、
aptライクになっていてユーザーフレンドリィでしかもいくつか機能が便利になってるように思われます.
また、FreeBSD10自体色々な機能の進化が見られるので、もう古臭いとか言わせません.
wikiなどが充実しているということは初心者にも安心です.

ということで、Linuxも良いですがFreeBSDも使ってみませんか?という話でした.


PC-BSDというディストリビューション(もし余裕があれば別記事で紹介します)なら
最初からXが入っておりpkg(8)を採用しててローリングリリースなので、
WindowsユーザーがUNIXライクOSの手習いにUbuntuだけじゃなくてこっちも候補に挙がるようになると、それはとってもうれしいなって.