Ports を検索する

コマンド名はわかるけど、/usr/ports の下のどこにあるか分からない場合。

cd /usr/ports
make search name=<keyword>

とする。 こんな感じ。

make search name=hexdump

最新版にアップデートする(9.0R)

FreeBSD 8.1R 環境で、アップデートをかけた記録

# freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 4 mirrors found.
Fetching public key from update5.FreeBSD.org... done.
Fetching metadata signature for 8.1-RELEASE from update5.FreeBSD.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 311 patches.....10....20....30....40....50....60....70....80....
90....100....110....120....130....140....150....160....170....180....190
....200....210....220....230....240....250....260....270....280....290
....300....310 done.
Applying patches... done.
Fetching 6 files... done.

The following files will be added as part of updating to 8.1-RELEASE-p8:
/usr/src/lib/libc/gen/libc_dlopen.c

The following files will be updated as part of updating to 8.1-RELEASE-p8:
/bin/chflags
/bin/csh
/bin/pax
/bin/tcsh
(略)

終わったら、インストール

# freebsd-update install
Installing updates... done.

再起動して、確認してみる

% uname -a
FreeBSD www22025u.sakura.ne.jp 8.1-RELEASE-p5 FreeBSD 8.1-RELEASE-p5 #0: Tue Sep
27 16:18:26 UTC 2011     root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/
GENERIC  i386

変わった?

p5 がついてるのが変わったみたい。 /var/log/messasges を見たら、作業前は「FreeBSD 8.1-RELEASE #0:」だった。

続いて、9.0R へのアップグレード。

# freebsd-update -r 9.0-RELEASE upgrade
Looking up update.FreeBSD.org mirrors... 4 mirrors found.
Fetching metadata signature for 8.1-RELEASE from update3.FreeBSD.org... done.
Fetching metadata index... done.
Fetching 1 metadata files... done.
Inspecting system... done.

The following components of FreeBSD seem to be installed:
kernel/generic src/base src/bin src/gnu src/lib src/libexec src/sbin
src/secure world/base world/dict world/doc world/manpages

The following components of FreeBSD do not seem to be installed:
src/cddl src/contrib src/crypto src/etc src/games src/include src/krb5
src/release src/rescue src/share src/sys src/tools src/ubin src/usbin
world/catpages world/games world/info world/proflibs

Does this look reasonable (y/n)? <font color=red><b>y</b></font>

Fetching metadata signature for 9.0-RELEASE from update3.FreeBSD.org... done.
Fetching metadata index... done.
Fetching 1 metadata patches. done.
Applying metadata patches... done.
Fetching 1 metadata files... done.
Inspecting system... done.
Fetching files from 8.1-RELEASE for merging... done.
Preparing to download files... done.
Fetching 9088 patches.....10....20....30....40....50....60....70....80....
90....100....110....120....130....140....150....160....170....180....190
....200....210....220
(snip)
9000....9010....9020....9030....9040....9050....9060....9070....9080.... done.
Applying patches... done.
Fetching 1959 files...

この後、/etc の各ファイルのマージできなかった部分(conflict)を手作業で修正するステップがあり、更新ファイルリストを確認。

続いてインストール

# freebsd-update install
Installing updates...rmdir: ///boot/kernel: Directory not empty

Kernel updates have been installed.  Please reboot and run
"/usr/sbin/freebsd-update install" again to finish installing updates.

指示どおりリブートしてから、もう一度コマンドを実行

# freebsd-update install
Installing updates...
Completing this upgrade requires removing old shared object files.
Please rebuild all installed 3rd party software (e.g., programs
installed from the ports tree) and then run "/usr/sbin/freebsd-update install"
again to finish installing updates.

と言われたので、OpenSSL をリビルドしてから再起動。さらにコマンドを実行。

# freebsd-update install
Installing updates... done.

終わった。 確認してみる。

# uname -a
FreeBSD www22025u.sakura.ne.jp 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Tue Jan
3 07:15:25 UTC 2012     root@obrian.cse.buffalo.edu:/usr/obj/usr/src/sys/
GENERIC  i386

いいみたい。

と思ったら、mysql やら wget など、zlib を呼んでるやつがこける

so を更新しないとダメだったみたい。 更新したら起動できた。

あと、misc/compat8 入れてなかったので、入れた。
これがないばっかりに、ssh ログインできなかったりして、ずいぶん時間を食った。

freebsd-update

root にて、

freebsd-update -r 7.2-RELEASE upgrade

とする。  インターネットに直接アクセスできない環境(プロキシを経由しないといけない環境)では、環境変数 "http_proxy" を設定すれば良い。 次のように(csh の例)

setenv http_proxy http://proxy-server.example.com:8080

 途中、質問が出てくるので答える。  ダウンロードまで終わったら、

freebsd-update -r 7.2-RELEASE install

 として、インストール。ここで再起動する。  再起動が終わったら、再度上記コマンドを実行して、ユーザランドを更新すれば終わり。

kern.maxfiles の変更

FreeBSD 7.0R にて自宅サーバを運用しているが、LAN 内向けにプロキシサービスも動かしている。

が、このサービスが時々死ぬ。 ついでに、他のサービスも一部死ぬ。

その際の、messages には次のようなメッセージが出力されている。

May  8 19:48:43 hostname kernel: kern.maxfiles limit exceeded by uid xxx, Please see tuning(7).

意味は書かれている通りなので、kern.maxfiles の値を増やせば良いことになる。

現在の値を確認してみる。

% sysctl kern.maxfiles
kern.maxfiles: 3192

これがデフォルト値みたい。

これを最大値に変更する。

% sysctl -w kern.maxfiles=65536

で、変更されたことを確認。

% sysctl kern.maxfiles
kern.maxfiles: 65536

恒久設定にするので、/etc/sysctl.conf にも追記する。

kern.maxfiles=65536

これでOK。

理屈としては、プロキシサービスが FD (File Descriptor) を食い尽くしたところに他のサービスがファイルを開こうとすると、FD 用領域を確保できずにこけてしまう。と言う事になるんだろうが、それならそれで異常終了してくれればいいのに、中途半端にいくつかのプロセスが死んでしまっていたからタチが悪い。

半死だったのは mailman サービスだが、mailman サービスがこの状態になってしまうと、稼働監視の方で検知が難しい。

mailman 自身はどこかのポートをつかんでるわけじゃない(Postfix 経由)し、プロセスリストを見てチェックするか、実際にテスト用 ML を用意して、そこに定期的にポストして、配送状況をチェックするしかないのかな。

AP #1 (PHY# 1) failed!

CD/DVD からの FreeBSD 7.1R のインストールが終わり、HDD からブートさせると、

AP #1 (PHY# 1) failed!

と言う、見慣れないエラーが出て、

panic y/n?

とまで訊かれる。

ここで [n] を押すと、そのままブートする。

ブート後、messages を見るとこんな感じ。

Mar 19 17:43:50 host syslogd: kernel boot file is /boot/kernel/kernel
Mar 19 17:43:50 host kernel: Copyright (c) 1992-2009 The FreeBSD Project.
Mar 19 17:43:50 host kernel: Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
Mar 19 17:43:50 host kernel: The Regents of the University of California. All rights reserved.
Mar 19 17:43:50 host kernel: FreeBSD is a registered trademark of The FreeBSD Foundation.
Mar 19 17:43:50 host kernel: FreeBSD 7.1-RELEASE #0: Thu Jan  1 14:37:25 UTC 2009
Mar 19 17:43:50 host kernel: root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC
Mar 19 17:43:50 host kernel: Timecounter "i8254" frequency 1193182 Hz quality 0
Mar 19 17:43:50 host kernel: CPU: Intel(R) Core(TM)2 Duo CPU     E8200  @ 
2.66GHz (3554.54-MHz 686-class CPU)
Mar 19 17:43:50 host kernel: Origin = "GenuineIntel"  Id = 0x10676  Stepping = 6
Mar 19 17:43:50 host kernel: Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,
CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
Mar 19 17:43:50 host kernel: Features2=0x8e3fd<SSE3,DTES64,MON,DS_CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,
PDCM,SSE4.1>
Mar 19 17:43:50 host kernel: AMD Features=0x20100000<NX,LM>
Mar 19 17:43:50 host kernel: AMD Features2=0x1<LAHF>
Mar 19 17:43:50 host kernel: Cores per package: 2
Mar 19 17:43:50 host kernel: real memory  = 3756916736 (3582 MB)
Mar 19 17:43:50 host kernel: avail memory = 3672891392 (3502 MB)
Mar 19 17:43:50 host kernel: ACPI APIC Table: <GBT    GBTUACPI>
Mar 19 17:43:50 host kernel: AP #1 (PHY# 1) failed!
Mar 19 17:43:50 host kernel: panic y/n? [y] FreeBSD/SMP: Multiprocessor
System Detected: 2 CPUs
Mar 19 17:43:50 host kernel: cpu0 (BSP): APIC ID:  0
Mar 19 17:43:50 host kernel: cpu1 (AP): APIC ID:  1

Web を調べてみたけど、さっぱり分からない。

ports ツリーの更新 (portsnap)

ずっと cvsup を使ってたけど、プロキシ経由での作業ができないため、情報を探していたところ、portsnap の記事を見つけた。

なぜこれまで知らなかったのか…

コマンドは 6 系以降はシステムに最初から付いてるので、ちょっと設定をするだけで使える。

/etc/portsnap.conf の REFUSE に不要なカテゴリを列挙する。

最初から言語周りのがコメントのところにあるので、コメントアウトを解除して、japanese を削ってできあがり。

あとは、

portsnap fetch
portsnap extract
portsnap update

でOK。

プロキシ経由の場合は、

setenv HTTP_PROXY proxy.example.com:8080

じゃなくて、

setenv HTTP_PROXY "http://proxy.example.com:8080/"

としてから実行する。

簡単。

emacsをX11なしでインストール

portsでemacsを入れると、X11関係も含めてたくさんのアプリやデータが入るため、非常に時間がかかる上、X11は使わないので不要。

/etc/make.confに、

WITHOUT_X11=yes

と書いておけば、シンプルにインストールしてくれる。

FreeBSD 7.0Rでipfw

カーネル作り直さなきゃと思って、カーネルコンフィグファイルを見たけど、LINTファイルは近くにないし、IPFIREWALLオプションも見当たらない。

いつのまにか、カーネル作り直さなくても良くなってたのね。知らなかった。

rc.confで、firewall_enable="YES"にするだけで済んだ。 便利。

rootのパスワードを忘れてしまった

rootのパスワードを忘れてはいけないが、忘れてしまった場合は、シングルユーザモードで起動してから、passwdコマンドを使えば変更できる。

ただ、一度だけこれがうまくできなくて困ったことがあるので、メモを残しておく。

 VMWare上にFreeBSD6.3-RELEASEの環境を作って、rootのパスワードは簡単にrootにしておいた。  しばらく作業をしていて、一般ユーザからsuしようとした際に、上がれなかったため、コンソールから直接rootでログインしようとしたら、やっぱりだめだった。  もしかして、rootのパスワードを、OSインストールの際に入力ミスしたのかもしれないと思い、シングルユーザモードで起動(6からはブートメニューでシングルユーザモード起動が選べるようになってんですね)して、passwdコマンドを発行したが、pam関係のエラーがでてしまって、変更できなかった。

 で、なんとなくdfコマンドを打って、ディスクはマウントされてることを確認したが、念のために mount -aを発行するとエラーが出た。  fsckをかけて、あらためてマウントすると、今度はpasswdコマンドで問題なくパスワードを変更できた。  rootでログインできなかった際に、VMをぶちっと落としてしまったためにディスクに問題が発生してたようだ。

jvim3

 Teratermでつないでから、jvim3を使うと、文字が表示されなくなる。

 動いているのは動いてるみたいで、:q!で抜け出せる。

 標準の/usr/bin/viや、jvim2だと問題ない。 jvim3でも、本体のコンソール画面では表示できる。 Teratermで使う場合だけみたい。

 理由不明。

 jvim2でも全く問題ないので、そっちに切り替えた。

ユーザのデフォルト設定ファイル

/usr/share/skel配下にある各種ファイルを操作。

追加する場合、たとえば ".vimrc"を今後作成する場合に、各ユーザのホームディレクトリに置きたい時は、

dot.vimrc

ファイルを作って置けばいい。

アカウントの一括登録

pwコマンドを使って以下のようにします。

pw useradd hoge -d /home/hoge -s /bin/csh -g staff -w yes -m

オプション"-w"はパスワード割当の振る舞いを調整します。意味は下記の通り(manページより)

パラメータ意味
no新しく作成されたアカウントでのログインを不可とします
yesアカウント名をパスワードにします
noneパスワードを空欄にします
randomランダムパスワードを生成します

suid/sgidビットの立ったファイルを検索する

このビットはセキュリティ上、注意が必要なので、定期的にチェックして、出力結果を比較するようにした方がいいです。FreeBSDの場 合は、dailyスクリプトに変更チェックが含まれているので、dailyレポートを見れば簡単

find / \( -perm -2000 -o -perm -4000 \) -print > result

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS