PR

FreeBSD アプリケーションメンテナンス パート1

FreeBSD
記事内に広告が含まれています。

非常にだらけたゴールデンウィークも何事もなかったかのように過ぎてしまい、いつもの日常が戻ってきました。日本のゴールデンウィークの前に西洋諸国連中のイースターも終了していました。毎夕ヨーロッパの連中と短いミーティングを行うのですが、その声のトーンで今日が何曜日かがよくわかります。月曜日は、

日

調子は?

欧

あぁ、全てがブルーだ 🙁 お前は?

日

いつも通りだ。

欧

それはよかったなぁ。。。何から手を付けたらいいか

見当もつかないよ。まぁがんばれよ。。

日

お前もな。

金曜日は、

日

調子は?

欧

あぁ、全てがバラ色だ 🙂 お前は?

日

いつも通りだ。

欧

そうか、お前はもうウィークエンドに秒読み状態なんだろ?

羨ましいなぁ。。できることがあったら何でも言ってくれ!

じゃぁまた来週!よい週末をな!

日

あぁ、分かった。お前もな。

    休むことしか考えてないようです。それでも IT は回ってゆきます 🙂

    ソフトウェア アップデート

    さて、私たちの FreeBSD をインストールしてから既に数週間経っており、インストールしたパッケージにも新しいバージョンが出ているのではないかと思います。そこで、今回はソフトウェアのメンテナンスを行ってみましょう。

    FreeBSD 上で使用できるアプリケーションは大きく2種類あります。それらはパッケージとポーツです。パッケージはパッケージのメンテナンスをしている方々がソフトウェアをコンパイルしてパッケージとしてサーバーに置いておいてくれるソフトウェアです。ですので、ダウンロードしてファイルシステム上に展開するだけで使用することができます。一方、ポーツはパッケージのもとになるポーツツリーをローカルシステムにコピーして、ポーツツリー上でソースコードをコンパイルして使用できるようにするものです。基本的にはパッケージとポーツで利用できるソフトウェアは同じなのですが、ポーツはパッケージに比べて汎用性が格段に高くなっています。というのも、パッケージは基本的にデフォルトのコンパイルオプション、あるいは代表的なオプションの組み合わせを使用したバイナリファイルとして使用できるものなのですが、ポーツは自分の好みや必要に応じてコンパイルオプションを変更してソースコードからコンパイルして使用するものです。ですからパッケージに足りない機能を付け加えたり、パッケージから不要な機能を削除したアプリケーションを作ることが可能となっています。また、パッケージは基本的にメンテナンスしてくれる方が作ってくれるまで利用できませんが、ポーツはパッケージよりも早く新しいバージョンが利用できたりします。このようにお話しするとどちらでも問題はないように思わえれるかもしれませんが、ポーツでは、パッケージを作成してくださる方々がやっておられることを自分で行う必要があります。パッケージでは実行に必要なアプリケーションをインストールするだけで大丈夫なのですが、ポーツではこれに加えてコンパイルに必要なツールまでソースコードから作る必要があります。まぁ、めんどくさいといえばそれまでです。ソースコードを読めない方や、最新バージョンであることをあまり気にしない方は、パッケージだけでも構わないとは思います。ここでは、パッケージでのメンテナンスと、ポーツでのメンテナンスを行ってみます。

    パッケージ

    私たちの FreeBSD をインストールしたときに、いくつものパッケージをインストールしたのを覚えておられますか?パッケージの取り扱いは pkg コマンドで行います。OS インストール直後の pkg コマンドは /usr/sbin/pkg として存在します。ところがこの pkg コマンドで他のパッケージをインストールしようとすると、まずパッケージ版の pkg コマンドがインストールされます。そして、パッケージ版の pkg がインストールされるとファイルシステム上に2つの pkg コマンドがあることになります。

    サイズ以外は一見同じもののようです。

    /usr/sbin/pkg はハードリンクでもなくシンボリックリンクでもありません。では何をするものかというと、/usr/local/sbin/pkg の有無を判断して、無ければパッケージ版の pkg コマンドをインストールし、あれば pkg 版の pkg と同じ動きをするというのが機能のようです。ちょっと実験をしてみます。パッケージ版の pkg コマンドを別の名前にリネームします。そのうえで /usr/sbin/pkg を実行すると、パッケージ版 pkg をダウンロードしようとします。具体的にどのように行っているかを知りたい向きには、/usr/src/usr.sbin/pkg ディレクトリに /usr/sbin/pkg コマンドのソースコードがありますので、眺めてみてください。

    OS インストール時に src も入れたのを覚えてますか?OS のソースコードです。

    まずは現在インストールされているパッケージのバージョンを見てみましょう。pkg コマンドに version オプションを付けて実行するとずらずらと出力されます。

    pkg version

    出力された内容を眺めてみると、パッケージ名に続いて “=” が出力されています。これの意味するところは、最新版であるということを意味します。では全部最新版でしょうか?実は調べる方法があります。pkg version に加えて一致条件を追加してやります。

    どれが古い?

    条件を加えて実行すると1つだけが古いと教えてくれます。この古いと判断されるパッケージを新しいパッケージと置き換えてみましょう。pkg upgrade で新しいパッケージと置き換えてくれます。

    超簡単です。

    ではこれでアップデート完了でしょうか?まず lmdb が何者か調べてみましょう。

    何者?

    この情報から openldap の共有ライブラリであることがわかります。共有ライブラリであるということはそれをロードして実行しているプログラムがあるはずです。このパッケージを削除してみましょう。無いと動かないパッケージも削除されるはずです。

    原始的すぎる?

    lmdb パッケージは samba に使用されているようです。えっ?このような方法しかないのかって?正しくはこのように行います。

    共有ライブラリ liblmdb.so.0 を使用しているパッケージをリストするコマンドです。結果、やはり samba が使用しているようです。ということで、samba を再起動しておきます。

    samba の再起動。

    セキュリティ考察

    これで完了です。でも、すべてが最新なのでしょうか?実は /etc/pkg/FreeBSD.conf にそのヒントがあります。

    3か月に一度。

    url として指定されているのは quarterly となっています。ということで、このパッケージが作成されるのは3か月に一度となっています。昨今の IT で何に一番お金をつぎ込んでいるかというと、それはセキュリティです。そしてセキュリティホールを塞ぐという意味では3か月はとても長すぎます。ちょっとこの pkg.FreeBSD.org サイトを眺めてみましょう。

    このサイトを見てみると、4つのディレクトリが見えます。そのうちの1つがこのファイルで指定されているディレクトリです。release_0 と release_1 は何かのタイミングでのパッケージと思われます。注目すべきは latest です。最新のパッケージが置かれているようです。ファイルを変更して調べてみましょう。

    最新版が欲しい!

    これで pkg を最新にしてみましょう。1ページに収まらないくらいの新しいパッケージが見つかりました。

    アップデート

    更新が完了して最後に依存関係で入ったが不要になったものや古くなったものを削除します。

    削除

    最終的にポーツツリーをローカルに作成してパッケージとの差分を見てみると、

    これだけ。

    インストールしたパッケージの総数を調べてみると、83 個ありました。この 83 個のパッケージのうちの1つだけが最新ではなかったという事実をどう見るかということだと思います。たぶんこのパッケージも数日のうちに最新版のパッケージが作成されると思います。次回はポーツによるメンテナンスを行ってみましょう。また脱線してしまいます。VMware player はメニューのどこを探してもスナップショットをとれるオプションはありません。そうなのです。スナップショットは取れないのです。vSphere などのハイパーバイザーではいとも簡単にスナップショットをとることができて、そのスナップショットの時点へ仮想マシンを戻すことも簡単にできてしまいます。そこで、VMware Player ではどうするか?簡単です。Windows で仮想マシンのフォルダをコピーすれば OK です。会社でのサービスではないので、個人レベルでは十分以上です 🙂

    以下広告


    コメント