Comfortable Life with NetBSD

小技集

NetBSD (別に NetBSD に限りませんが)を使っていく上でのちょっとした 小技についてまとめてみましょう。

メニュー


キーボードが変

何も指定せずに keyboard をつなぐと、us keyboard と解釈されます。 お使いの keyboard が106 や 109 だと、記号が正しく入力できません。 対応方法は

  1. console での使用の場合
    簡単です。NetBSD の wsconsole ではキーマップを動的に変更することが できます。次のコマンドを実行してください。詳細は manual page をどうぞ。
    # wsconsctl -w encoding=jp
  2. X Window System での使用の場合

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

慌てず騒がず、まずは shutdown しましょう。こういう時に備えて、 普段使っている user を operator グループに登録しておくと便利です。

/etc/ttys の console 行の設定によってこの先は異なります。

  1. secure な場合

    single user mode で boot すると、

    "Enter pathname of shell or RETURN for sh: "

    というプロンプトが出ます。RETURN キーを押せばプロンプトが出るはずです。 この先は

          # fsck -p
          # mount -u /
          # mount /usr
          # passwd root
         

    を実行すれば、root のパスワードが変更できます。

  2. insecure な場合

    この場合は、single user mode で boot しても、root のパスワードが 要求されます。仕方がないので、かねて用意してある、install 用フロッピーで boot して下さい。installer が立ち上がったら、exit to shell を選んで プロンプトを出します。この先は

          # fsck -p /dev/rsd0a
          # fsck -p /dev/rsd0e
          # mount /dev/sd0a /mnt
          # mount /dev/sd0e /mnt/usr
          # chroot /mnt
          # passwd root
         

    でパスワードの変更ができます。ここでsd0aは root partition を、 sd0eは /usr の partition を指定して下さい。

    install 用のフロッピーがない場合は、インストールされているものよりも 新しいインストール用フロッピーを ftp://ftp.jp.netbsd.org/pub/NetBSD/から 探してきて使えばいいでしょう。


root の login shell を変えたら root で login 出来なくなった

おそらくタイプミスで login shell が存在しないものになってしまっているのでしょう。 rootのパスワードを忘れてしまったを 参考にして root の login shell を存在するものに直せば OK です。passwd(1)の 代りに、chfn(1)vipw(8)を用います。ちなみに 私は root の shell は /bin/sh にしています。set -o emacsと すれば、ヒストリー機能も使えますしなれれば便利です。


mailing list を local news へ

NetBSD に関する一番の情報源は 本家日本 NetBSD ユーザーグループなどの mailing lists です。本家の メーリングリストは当然ながら英語で読み書きする必要があります。 敷居が高いと思われる方は日本語メーリングリストで 聞いてみるのも良いでしょう。

これだけ多くのメーリングリストがあると、local news group を作って そこで読みたいなぁと思ったあなたにはmail2newsが お勧めです。:-) これはもともと学生だったころ研究室で使っていたものですが、 複数の mailing list に投稿された記事をきちんと netnews 的な cross post の記事に変換します。使用する message-id は原則として 元の mail の message-id を用います。ちまたに落ちている mail2news だと 複数の mailing list に投稿された記事が一ヶ所でしか読めなくて thread がたどれなくなったりするのが不満で作りました。


pkgsrc を更新したあと、pkg がうまく動かない

pkgsrc を更新したあとには念のため、.../pkgsrc からmake clean しましょう。依存している pkg が更新されていて、さらにそのディレクトリに work があると、新しくできません。make updateを使えば、 インストールした後に、make cleanもしてくれて便利です。 必ず package もつくるぞ!という方は /etc/mk.confDEPENDS_TARGET?= packageというのを入れておけば十分です。


pkg からいれた library がうまく使えない

pkg から入れたものは /usr/pkg や /usr/X11R6 に入ります。 したがって library は /usr/pkg/lib に include ファイルは /usr/pkg/include に 入ります。これらのディレクトリはデフォルトでは見てくれません。 compile 時に -I/usr/pkg/include -L/usr/pkg/lib -R/usr/pkg/lib などの オプションをつけましょう。


もっとパーティションを切りたい

2001/01/02 以降の NetBSD-current では 16 パーティションまでサポートされています。 ここは、それ以前の NetBSD を使っていてどうしても、upgrade 出来ない場合にのみ 参考にしてください。(2001/01/04)

NetBSD/i386 では c, d パーティションが実際上使えないためデフォルトでは a, b, e, f, g, h の 6つしかパーティションが切れません。さらにディスクが1台しか 無いような場合は、b を swap に使用するので 5つになってしまいます。 私のように /, /var, /usr/local, /usr/pkg, /usr/X11R6, /var/users, /usr/src と 切りたい場合には一台のハードディスクでは無理になってしまうのです。

今までの私の解決策は「あきらめる」でした。が、NetBSD の mailing list で いいことが流れていたのでメモしておきます。それは「ccdを使う」と 言うものでした。言われてみればなるほどなのですが思い付きもしませんでした。 まだまだ修行が足りません。 やることは簡単。
ccd0 0 0 /dev/wd0e
という内容の /etc/ccd.conf を作り、/etc/rc.conf に ccd=YESと書くだけで、一つのパーティション(この場合だと /dev/wd0e)が 一つのデバイスになります。物理形状因子は元々の disk の情報を元にして あとはディスクラベルを書けば完成です。

参考までに私のディスクの disktab はこんな感じです(disklabel -t の出力です)。

    tampII|Automatically generated label:\
        :dt=unknown:se#512:ns#63:nt#15:sc#945:nc#13328:\
        :pa#511245:oa#516915:ta=4.2BSD:ba#8192:fa#1024:\
        :pb#615195:ob#1028160:tb=swap:\
        :pc#12078045:oc#516915:\
        :pd#12594960:od#0:\
        :pe#4095630:oe#1643355:te=4.2BSD:be#8192:fe#1024:\
        :pf#2047815:of#5738985:tf=4.2BSD:bf#8192:ff#1024:\
        :pg#4808160:og#7786800:tg=4.2BSD:bg#8192:fg#1024:\
        :ph#512127:oh#63:th=MSDOS:
    ccd|Automatically generated label:\
        :dt=ccd:se#512:ns#63:nt#15:sc#945:nc#4334:\
        :pa#818370:oa#0:ta=4.2BSD:ba#8192:fa#1024:\
        :pd#4095630:od#0:\
        :pe#1638630:oe#818370:te=4.2BSD:be#8192:fe#1024:\
        :pf#1638630:of#2457000:tf=4.2BSD:bf#8192:ff#1024:

df の出力はこんな感じ。

    [tamp]~/% df -l  
    Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
    /dev/wd0a      247173   197367    37447    84%    /
    /dev/wd0g     2325195  1832556   376379    82%    /var
    /dev/ccd0a     401688   223122   158481    58%    /usr/local
    /dev/ccd0e     804473   160277   603972    20%    /usr/X11R6
    /dev/ccd0f     804473   304617   459632    39%    /usr/pkg
    /dev/wd0f      990160   628508   312144    66%    /var/users

注意: NetBSD のインストーラを使って update する際には あらかじめ /etc/fstab 中の ccd partition を コメントアウトしておく必要があるようです。そうしないと fsck が失敗してうまく更新できません。 したがって sysinst を使ってこれから更新していくつもりならば /usr などの基本的な領域を ccdにしてはいけません。

XMODEM で転送するはめになった...

悲惨な状況ですね。私が今まで必要になったのは、スイッチに tftp でインストールしたファームウェアが何らかの原因で壊れていたらしく boot しなくなり、途方にくれかけたときに boot loader のメニューに あった 「XMODEM download update System Software」という文字列に 頼ろうとしたときだけです。

何はともあれ。

まず、net/lrzszをインストールします。

次に tip(8)を使うために、/etc/remoteに適切な 設定を入れます。私は USB → シリアル変換を使っているので、次のような 行を追加しました。

ttyU0:dv=/dev/ttyU0:br#9600:pa=none:dc:

root で tip を実行し、~Clsxを 使ってリモートにファイルを送り込みます。もちろん、リモート側で受け取る準備を しておかなければなりません。

    # tip ttyU0
    connected
    ~C /usr/pkg/bin/lsx firmware_file
    ~.
    #
   

徐々に増やしていこうと思ってます。なんかあれば tacha@tack.fukui-med.ac.jpまで お知らせ下さい。


Return to Comfortable Life With NetBSD

Driven By NetBSD Accesses to this page:


tacha@tack.fukui-med.ac.jp
$Tera: tech.html,v 1.4 2005/07/07 01:30:08 tacha Exp $