トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

ConoHaでNetBSDのサーバーを建てよう

はじめにのはじめに

2016/10/22に改めて確認したところ、ntpdパッケージがインストールされない等、この文書で指摘している不具合?のいくつかは修正されているようです。なので、あなたがこの文書をもとに試してみても、この文書と全く同一にはなりません。念のため。

はじめに

この文書はNetBSD Advent Calendar 2015ConoHa Advent Calendar 2015の14日目の記事として書かれました。(その後、若干更新されています。)

このはさんからのNetBSDの公式サポート発表があったところで、ConoHa Advent Calendar 2015のnomukenさんの前日のエントリ『ConoHaでArchLinuxのサーバーを建てよう』に触発され、この記事はできました。ありがとうございます。

この文書は、いわゆる現行の新しいConoHaでNetBSDのサーバを建てる方法を説明しています。(旧ConoHaにNetBSDをインストールしたい人は、"ConoHaにNetBSDをインストールする方法"を参照して下さい。)

割愛したもの

ConoHaのアカウント登録等については、割愛しました。コントロールパネルにログインしたところから始めます。

Tera Termのインストール方法や公開鍵認証のやりかたも割愛しています。必要に応じて、調べて下さい。

ConoHaでNetBSDの「建て方」

 まずはサーバ追加

まずはサーバ追加からです。イメージのOSについて、「その他」からNetBSDを選ぶと、7.0がインストールできるようになります。

rootパスワードは3文字種の9文字以上なので、注意。

「接続許可ポート」は、"SSH"と"Web"と"メール"だけにしてもよいのですが、自分でサーバを建てる=なんでもできる、ということもありますし、まずはすべて許可しておきましょう。(あとから、変更してもよいですしね。)

「ネームタグ」はわかりやすいものをつけておきましょう。

「SSH Key」については、公開鍵を事前につくっている・もっている人は、ここでインポートしておくと、便利です。わたしは、SSHの公開鍵がありますので、登録しました。「新しいキーを登録」を選び、「インポート」を選択すると、公開鍵[1]のコピペができます。

ない人は作っておきましょう。せっかくですから、ConoHa側でつくってみます。「新しいキーを登録」を選び、「自動作成」を選び、「キー登録」をクリックすると作成されます。秘密鍵(パスワードと同じ大切なもの)は1回だけダウンロードできます。大切に保存しておいてください。

なお、うまくいかなかったときは、左側のコントロールパネルのメニューの"SSH Key"から、削除して、作り直してください。

今回は、最小構成でつくってみます。SSB50GB・メモリ1G・東京リージョン、です。「追加」ボタンをクリックします。

しばらく待ちます。

自動的にサーバリストのページに遷移し、ステータスが"起動中"となり、サーバ追加の完了です。

ネームタグのところのサーバ名をクリックして、必要な情報を先に確認しておきましょう。(自分は、トラブル発生時等にそなえ、あらかじめ"ネットワーク情報"と"VPS情報"は、印刷する等して保存しています。)

コンソールボタンをクリックすると、Webブラウザ上のコンソールが開きます。rootでログインして下さい。

さぁ、設定してゆきましょう。

 NetBSDサーバの設定(コンソールでやること)

まずは、/etc をバックアップ

設定をいじりまくっても、あとで戻せるように、とりあえず、/etc のバックアップをとっておきます。

cp -a /etc /etc.conoha

こうすると、作成時点でのファイルがあるので、安心です。

最初にやること

最初にやることは、キーマップの変更です。サーバ作成時に「コンソールキーマップ」をen-usにした人はそのままでけっこうですが、特に変更していない人は、jaのはずです。しかし、作成されたサーバのキーマップは、en-usなので、Shift + 2を入力すると、@ が出て、困ることになります。

NetBSD標準のエディタはviです。一般的なLinuxディストリビューションで標準のvimではなく、nviというviクローンです。(一番の違いは、undoは1回分だけです。よって、uを2回押すと、元に戻ります。)

/etc/wscons.conf に encoding 行を書きます。

--- /etc.conoha/wscons.conf     2015-09-25 17:22:00.000000000 +0900
+++ /etc/wscons.conf    2015-12-07 03:04:28.000000000 +0900
@@ -39,6 +39,7 @@
 # See wsconsctl(8), pckbd(4), ukbd(4) etc. for more details.
 #encoding sv
 #encoding us.swapctrlcaps
+encoding jp

 # Redefine individual keys from a file containing "keysym" and/or "keycode"
 # entries.

enconding行がコメントアウトされているとこらへんがあるので、その下にでも書いてください。

反映しましょう。

/etc/rc.d/wscons restart

Shift + 2を押してみて、@ではなく、キーボードどおり、" が出ていれば、OKです。

これ以上はコンソールウインドウは使わないので、閉じておきます。

 NetBSDサーバの設定(Tera Termでのログインとsshdの設定変更)

TeraTermでリモートログイン

コントロールパネルの「コンソール」上でずっと作業してもいいのですが、やはりターミナルエミュレータソフトには使い勝手はかなわないので、ここからは、Tera Termを使って作業します。さきほど保存した秘密鍵をつかって、公開鍵認証でrootでログインしてください。(鍵に対するパスワードはありません。)

sshdの設定変更

ConoHa側の初期設定[2]によって、パスワード認証ができないようになっていますが、わかりにくいです。

  • PermitRootLogin yes
  • PasswordAuthentication no
  • ChallengeResponseAuthentication no
  • UsePam yes

ChallengeResponseAuthenticationがnoになっているので、UsePam yesされていてもパスワード認証できないようです。(/etc/pam.d/sshd の方がいいかも。>このはさん)

UsePam yesしないのが好みなので、以下のように書き換えてしまうことにします。

--- /etc.conoha/ssh/sshd_config 2015-12-07 02:07:07.000000000 +0900
+++ /etc/ssh/sshd_config        2015-12-13 20:35:35.000000000 +0900
@@ -40,7 +40,7 @@
 # Authentication:

 LoginGraceTime 600
-PermitRootLogin yes
+PermitRootLogin without-password
 #StrictModes yes
 #MaxAuthTries 6
 #MaxSessions 10
@@ -72,7 +72,7 @@
 #PermitEmptyPasswords no

 # Change to no to disable s/key passwords
-ChallengeResponseAuthentication no
+#ChallengeResponseAuthentication yes

 #AllowAgentForwarding yes
 #AllowTcpForwarding yes
@@ -88,7 +88,7 @@
 #TCPKeepAlive yes
 #UseLogin no
 UsePrivilegeSeparation sandbox
-UsePam yes
+UsePam no
 #PermitUserEnvironment no
 #Compression delayed
 #ClientAliveInterval 0
@@ -142,3 +142,7 @@
 #      AllowTcpForwarding no
 #      PermitTTY no
 #      ForceCommand cvs server
+
+Match User isihara
+       PasswordAuthentication yes
+

一番下のMatch Userで、ここに一致したユーザだけ、パスワード認証を許可しています。(パスワード認証を許可するグループを作っておいて、そのグループだけ、とかしてもいいですね。)

再起動しておきます。

/etc/rc.d/sshd restart

 NetBSDサーバの設定(ConoHaイメージの補足)

ConoHaイメージの中身

NetBSDをインストーラからインストールすると、"distribution sets"("sets"とだけ言われることもあります)を選ぶ画面が出てきます。(見たことがない人は、furandon_pigさんのNetBSD Advent Calendar 2015 1日目の記事を参照して下さい。)

ConoHaのNetBSDイメージは、このインストーラの選択肢でいう、"Minimal installation"の状態です。この状態でももちろん使えるのですが、コンパイラもなければ、manも入っていません。

# gcc -v
gcc: not found
# man man
man: no entry for man in the manual.
# ls /etc/mtree/
NetBSD.dist  set.base     set.etc      set.modules  special

/etc/mtree の下にある、set.なんとかというファイルの有無で、インストールされた sets がわかります。(つまり、base と etc と modules がインストールされています。)ここでは、X関係以外のsetsをすべてインストールすることにします。

不足分のsetsのインストール

NetBSD 7.0 Releaseのsetsをダウンロードします。東京リージョンなので、JAISTのミラーからダウンロードすると早いです。

以下のようなシェルスクリプトをつくって、実行すると楽です。

#!/bin/sh

#sets="base comp etc games man misc modules tests text kern-GENERIC"
sets="comp games man misc tests text"

for h in ${sets}
do
ftp ftp://ftp7.jp.netbsd.org/pub/NetBSD/NetBSD-7.0/amd64/binary/sets/${h}.tgz
done
ftp ftp://ftp7.jp.netbsd.org/pub/NetBSD/NetBSD-7.0/amd64/binary/sets/MD5
ftp ftp://ftp7.jp.netbsd.org/pub/NetBSD/NetBSD-7.0/amd64/binary/sets/SHA512

cat MD5 SHA512 | cksum -c

実行すると、実行したdirに、ダウンロードしたsetsが保存されます。(今回は、/var/tmp に保存しました。)ダウンロード後、チェックサムを走らせています。

チェックサムのエラーが出ますが、すべて、今回ダウンロードしていないファイルなので、問題ありません。

では、これらをインストールします。といっても / から展開するだけです。さっきのシェルスクリプトを改変して、展開用のスクリプトをつくって実行すると楽なので、そうすることにします。

#!/bin/sh

#sets="base comp etc games man misc modules tests text kern-GENERIC"
sets="comp games man misc tests text"

for h in ${sets}
do
echo -n "$h "; tar xzphef ${h}.tgz -C /; echo $?
done

返り値は全部0でした。成功です。

不要なパッケージの削除

ConoHaのNetBSD 7.0イメージには、以下のパッケージがデフォルトでインストールされています。

# pkg_info
libffi-3.2.1        Foreign function interface
python27-2.7.10     Interpreted, interactive, object-oriented programming language
pkg_install-20150901 Package management and administration tools for pkgsrc
libarchive-3.1.2nb1 Library to read/create different archive formats
pkgin-0.9.3         Apt / yum like tool for managing pkgsrc binary packages
sudo-1.7.10p9       Allow others to run commands as root
perl-5.22.0         Practical Extraction and Report Language
ntp-4.2.8p4         Network Time Protocol Version 4
jq-1.5              Command-line JSON processor

不可解なのは、ntpです。NetBSDのbase systemには、ntpは含まれています。何らかの理由があって、パッケージ版をインストールしていると思ったのですが、実際、起動されているのは、base systemのntpdです。なので、理由はないと判断し、削除します。

# pkg_delete ntp-4.2.8p4
===========================================================================
The following files are no longer being used by ntp-4.2.8p4,
and they can be removed if no other packages are using them:

        /etc/rc.d/ntpdate
        /etc/rc.d/ntpd

===========================================================================

/etc/rc.d/ntpdate と /etc/rc.d/ntpd はもう使わないので削除してもいいよって言ってますが、base systemにあるntpを起動等するために利用されているので、削除しないで下さい。

あと、/etc/rc.confの"ntpd_enable=YES"行があるので削除しておきます。(FreeBSDと勘違いしてます? >このはさん)

# ぼくの環境では、/etc/rc.conf.bak.sKp1pB という謎ファイルもできていたので、ついでに削除しました。

inetdを起動しないように

inetdはデフォルトで起動するので、起動していますが、通常必要ありませんので、止めましょう。

/etc/rc.d/inetd stop

して止めて、/etc/rc.confに

inetd=NO

を追加して下さい。

 NetBSDサーバの設定(必要最低限の設定)

hostnameをつける

hostnameをつけましょう。/etc/rc.conf にホスト名を書きます。NetBSDの場合は、FQDNを書きます。

hostname=

と、なぜか空になっている行があるので、=の後ろに書いてください。

一般ユーザの追加

rootでログインするのは習慣としてよくないので、一般ユーザを追加しましょう。

# groupadd -g 1000 isihara
# useradd -m -u 1000 -g 1000 -G wheel,operator,staff isihara
# id isihara
uid=1000(isihara) gid=1000(isihara) groups=1000(isihara),0(wheel),5(operator),20(staff)
# passwd isihara
Changing password for isihara.
New Password:
Retype New Password:

wheelは、rootになるユーザなので、追加しています。operatorは、root権限がなくても、shutdownコマンドが動作するユーザです。

wheelグループのみ、sudoが使えるように

visudoコマンドを起動し、

# %wheel ALL=(ALL) ALL

行のコメント(#)を外します。

pkginのミラーを日本国内に

pkginのミラーが、NetBSD本家になっているので、国内にしましょう。一覧はここにあります。今回は、JAISTさんにします。/usr/pkg/etc/pkgin/repositories.conf に

ftp://ftp7.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/$arch/7.0/All

に書き加えて下さい。

# tail -2 /usr/pkg/etc/pkgin/repositories.conf
ftp://ftp7.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/$arch/7.0/All
ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/$arch/7.0/All

こんな感じですね。こうすると、上に書いた方から順番にパッケージを探しにいきます。

あとは、pkginのデータベースをupdateして下さい。

# pkgin up

ついでに、ローカルキャッシュを消しておきます。

# pkgin clean

root宛のメールを転送(オプション)

NetBSDの標準MTAはPostfixです。デフォルトでは、外部から一切受信せず、発信のみできる状態です。root宛のメールを転送しておきましょう。

/root/.forward を書いてもいいですし、/etc/mail/aliases に書いて newaliases してもいいです。お好みで。

なお、受信できるようにするには、/etc/postfix/master.cfの

#smtp      inet  n       -       n       -       -       smtpd

のコメントアウトをはずし、Postfix(やDNSの)の必要な設定を行ってください。

OSのアップデート

 枝(branch)について

NetBSDの枝については、"NetBSD release glossary and graphs"に説明があります。(http://www.jp.netbsd.org/ja/releases/release-map.htmlにちょっと前の日本語訳があります。)

今、インストールされているのは、7.0ですので、アップデートでおいかけるのは、

  • netbsd-7-0
    • セキュリティー上の問題や、その他重大な問題の修正のみが反映される枝
  • netbsd-7
    • セキュリティー上の問題に加え、開発枝で修正されたバグの修正や機能拡張を含む枝

のどちらかになります。

ここでは、より安定的なnetbsd-7-0としましょう。

 バイナリーから?ソースから?

バイナリーによるアップデートは、NetBSDには、daily snapshotといって、各枝を毎日ビルドして公開しているサイトがあります。そちらから、netbsd-7-0のバイナリをダウンロードして、インストール(展開)する、という方法です。

ソースからのアップデートは、ソースコードをダウンロードしてきて、コンパイル、インストールする方法です。

ここでは、バイナリーによるアップデートを行うことにします。

# ソースからのアップデートをやってみたい人は http://www.netbsd.org/docs/updating.htmlちょっと前の日本語訳)を参考にしてみて下さい。

 Daily snapshotをつかったアップデート

ちょっと前につかった、シェルスクリプトを改変して、ダウンロード用のスクリプトにしましょう。日本にもミラーがあるので、そちらを使います。(JAISTさんにまたお世話になります。)

#!/bin/sh

site=$1

sets="base comp etc games man misc modules tests text kern-GENERIC"

for h in ${sets}
do
ftp ${site%/}/amd64/binary/sets/${h}.tgz
done
ftp ${site%/}/amd64/binary/sets/MD5
ftp ${site%/}/amd64/binary/sets/SHA512

cat MD5 SHA512 | cksum -c

$siteはその時々で変わります。ftp://ftp7.jp.netbsd.org/pub/NetBSD-daily/netbsd-7-0/ にアクセスして、確認するのが一番らくだと思います。これを書いている時点では、

ftp://ftp7.jp.netbsd.org/pub/NetBSD-daily/netbsd-7-0/201512110450Z/

でしたので、

# sh get.sh ftp://ftp7.jp.netbsd.org/pub/NetBSD-daily/netbsd-7-0/201512110450Z/

などと、作成したシェルスクリプトに引数として与えてやると、実行ディレクトリに"sets"を保存します。(今回は、/var/tmp に保存しました。)

さっきと同様、ダウンロード後、チェックサムの確認が走ります。エラーが出ますが、今回ダウンロードしていない、X関連のsetsと、Xen関係のカーネルですので、問題ありません。

ConoHaのコントロールパネルから、コンソール接続し、ログインして作業することにします。

ダウンロードできたら、まずは、カーネルだけ更新します。

# cp -a /netbsd /onetbsd
# cd /var/tmp
# tar xzhepf kern-GENERIC.tgz -C /

終わったら、再起動します。

# shutdown -r now

万一、再起動を繰り返すなど、無事起動してこなかったら、最初のbootloaderの画面で、「5. Drop boot prompt」 を選択すると、プロンプトが出てくるので、前のカーネルから起動できます。

> boot onetbsd

とすると、保存しておいた前のカーネル /onetbsd から起動できます。

さて、更新したカーネルで無事起動すると、

こんな感じです。「NetBSD 7.0.0_PATCH」と見えてますが、これが netbsd-7-0枝のタグになります。

さて、無事起動きたら、次は、カーネル以外を展開します。ここで、重要なことは、etc.tgz を展開しないことです。etc.tgz 以外の"sets"を展開します。ここでも、ちょっと前につかった、シェルスクリプトを改変して使うことにしましょう。

#!/bin/sh

#sets="base comp etc games man misc modules tests text kern-GENERIC"
sets="comp games man misc modules tests text base"

for h in ${sets}
do
echo -n "$h "; tar xzphef ${h}.tgz -C /; echo $?
done

実行すると、

返り値は全部0でした。成功です。

次に、/etc をアップデートします。といっても、etc.tgz をそのまま展開すると、上書きしていまいます。そこで、NetBSDには、etcupdateというコマンドがあるので、それを使います。

# cd /var/tmp
# etcupdate -a -s etc.tgz

-a をつけると、自動でアップデートできるところは、勝手にやってくれます。そうでないところは、上記のとおり、差分を表示した上で、どうするかを訊いてきてくれます。

基本は

  • d -> そのままにする
  • i -> 上書きインストールする

だけでいけます。

(今回は、原則、全部、"d" でいけました。)

最後、以下のようなものが出ることがあります。postinstall check failedのところです。

これが出た場合は、その下に書かれているとおりのコマンドの入力して、修正して下さい。

postinstall check failedに何も出なければ、終了です。

 もし、7.1が出たらどうすればいいの?

7.1の"sets"を取ってきて、上記と同じようにアップデートすれば問題ありません。(先にカーネルをアップデートして、その後、残りをやるのです。)

その後は、netbsd-7-1枝のsnapshotを使うようにして下さい。

# netbsd-7枝でアップデートしている人は、なにもしなくても問題ありません。

 セキュリティ情報を確認する方法は?

netbsd-announceメーリングリストを見ているのが一番確実ですかね...。ここを見ていると、netbsd-7-0枝のメンテナンス停止(廃止)とかも流れるはずです。

セキュリティアドバイザリのWebページ https://www.netbsd.org/support/security/patches-7.0.html をみている、という手もあります。

NetBSD Foundationのtwitterを見ていてもいいかもしれません。

パッケージの話

 NetBSDのパッケージシステム = pkgsrc(パッケージソース)

たいていのひとは、FreeBSDやLinuxディストリビューションを触ったことがあると思うので、それとの違いをあげておきます。

FreeBSDのportsとは違うとこ

  • portupgradeはない。
  • portsnapはない。
  • /etc/mk.confが設定ファイル。
  • /usr/pkg以下にインストールされる。
  • /usr/pkg/etc/rc.dにあるファイルでも自動起動しない。
  • 起動スクリプトは、/usr/pkg/etc/rc.d にインストールされない。/usr/pkg/share/example/rc.d にインストールされ、/etc/rc.d 以下には手動(=ユーザ自身)が配置する。(これはアンインストール時も同じ。)
  • FreeBSDでは、「package(s)/パッケージ」という言葉は、port(s)をコンパイルして作った、バイナリーなパッケージの意味だが、pkgsrcでは、pkgsrcに含まれる、個々のソフトのこと。バイナリーなパッケージは、そのものズバリ「binary package(s)/バイナリーパッケージ」とか、「precomiled packgae(s)」という。

Linuxの各distributionのパッケージシステムとは違うとこ

  • ソースからmakeしてインストール、が基本。その際のソースをftp/httpでget -> パッチあて -> configure -> make -> make installを自動化するもの。(Gentooのebuildやソースが入っていないSRPMみたいな感じ?)
  • DebianのdselectやaptitudeみたいコンソールなGUIはない(一応、pkgtools/pkg_selectはあるが、使われていない。)。
  • x11なGUIはない。
  • apt-get upgradeで一発OK、というようなものはない。(ただし、pkgtools/pkg_rolling-replaceというパッケージがあり、つかわれている。)
  • apt-get installで一発OK、というようなものは、最近までなかった。最近は少しづつ、pkgtools/pkginが使われるようになってきた。
  • 起動のon/offはコマンド(chkconfigやupdate-rc.dのような)ではなく、/etc/rc.confを編集する。

 枝(branch)について

pkgsrcの枝については、四半期リリース(2015Q4とかいう名前です)と、開発版があります。

バイナリパッケージは、四半期リリースです。ソースからインストール・アップデートをする場合は、四半期リリース・開発版、どちらも選べます。

 バイナリーパッケージを使う?ソースからにする?

ConoHaのイメージには、pkginコマンドがセットアップされた状態で最初からインストールされているので、バイナリーパッケージであれこれインストールできます。

# pkgin up
processing remote summary (ftp://ftp7.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/7.0/All)...
database for ftp://ftp7.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/7.0/All is up-to-date
processing remote summary (ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/7.0/All)...
database for ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/7.0/All is up-to-date
# pkgin install lv zsh
calculating dependencies... done.

nothing to upgrade.
2 packages to be installed (3010K to download, 9141K to install):

lv-4.51nb1 zsh-5.1

proceed ? [Y/n]
downloading packages...
lv-4.51nb1.tgz                      100%  374KB 374.5KB/s 374.5KB/s   00:01
zsh-5.1.tgz                         100% 2635KB   1.3MB/s 203.4KB/s   00:02
installing packages...
installing lv-4.51nb1...
installing zsh-5.1...
zsh-5.1: adding /usr/pkg/bin/zsh to /etc/shells
zsh-5.1: registering info file /usr/pkg/info/zsh.info
pkg_install warnings: 0, errors: 0
reading local summary...
processing local summary...
marking lv-4.51nb1 as non auto-removable
marking zsh-5.1 as non auto-removable

たとえば、こうやって、zshとlvをインストールできました。

アップグレードもかんたんです。

# pkgin full-upgrade

しかし、NetBSDの多くの利用者は、公式が用意するバイナリパッケージを使っていません。(自分もそうです。)理由としては、

  • 自分がよくつかうコンパイルオプションが公式パッケージには適用されていない
  • 公式のバイナリーパッケージはアップデートが遅い(?)
  • そもそも、公式のバイナリーパッケージがなかなか用意されないPortを使っている
  • pkgsrcからのインストールになれてしまった

というところでしょうか。

ここでは、ソースからのインストールを紹介し、どちらを使うかは、おまかせすることにします。

# なお、混用はおすすめしません。

 ソースからのインストール

pkgsrcの取得

まず、pkgsrcの本体をとってきます。今回は、四半期リリースをとってきます。http://www.pkgsrc.org/ に最新の四半期リリースは何かが出ています。現在は2015Q3です。(2015Q4はもうちょっとしたら出てくるはずです。)URIはいつも同じです。日本にもミラーがあるので、そちらを使います。(JAISTさんにまたお世話になります。)

# cd /usr
# ftp ftp://ftp7.jp.netbsd.org/pub/pkgsrc/stable/pkgsrc.tar.xz
# ftp ftp://ftp7.jp.netbsd.org/pub/pkgsrc/stable/pkgsrc.tar.xz.MD5
# ftp ftp://ftp7.jp.netbsd.org/pub/pkgsrc/stable/pkgsrc.tar.xz.SHA1
# cat pkgsrc.tar.xz.* | cksum -c

なにも出なければ、ダウンロード成功です。展開します。

# tar xzf pkgsrc.tar.xz

展開がすめば、あとは用がないので、削除します。

# rm pkgsrc.tar.*

distfilesディレクトリの変更

distfilesディレクトリは、個々のパッケージのソースの保存場所です。デフォルトでは、/usr/pkgsrc/distfiles 以下にありますが、四半期リリースを使う場合、/usr/pkgsrc ごと入れ替えることになり、distfilesも消えてしまいます。そこで、位置を変更します。

/etc/mk.confに以下を追加して下さい。(mk.confがなければ、新規に作成して下さい。)

DISTDIR=/usr/distfiles

ディレクトリは自動的にできませんので、作成して下さい。

# mkdir /usr/distfiles

pkgsrcのアップデート

pkgsrcのVCSは、CVSです。「gitじゃないの?」という声が聞こえてきそうですが、CVSです。よって、アップデートもCVSです。

# cd /usr/pkgsrc
# cvs update -dP

これで、しばらく以上待っていると、アップデートが完了します。(このはさんは、SSDなので、アップデートは早いです。)プロンプトはしばらく帰ってきませんが、放置しておいて下さい。

パッケージのインストール(vimをインストールしよう)

では、ためしにパッケージをインストールしてみましょう。ここでは、みんな大好きvimをインストールしてみます。

公式バイナリーパッケージのvimは、文字コードの自動判定ができません。(はい、公式のバイナリーパッケージを使う気がなくなりましたね。)

まず、/etc/mk.confに、以下を追加します。

VIM_EXTRA_OPTS= --enable-xim --enable-fontset --disable-gpm --with-features=big
.if "${PKGPATH}" == "editors/vim"
USE_GNU_ICONV=yes
.endif

あとは、インストールするだけです。

# cd /usr/pkgsrc/editors/vim
# make install
ERROR: This package has set PKG_FAIL_REASON:
ERROR: vim-7.4.768 has an unacceptable license condition:
ERROR:     vim-license
ERROR: You can mark the license ``vim-license'' as acceptable by adding
ERROR:     ACCEPTABLE_LICENSES+= vim-license
ERROR: to /etc/mk.conf or by adding
ERROR:     ACCEPTABLE_LICENSES= vim-license
ERROR: to /usr/pkg/etc/pkg_install.conf.
ERROR: The following command will show you the license text:
ERROR:     /usr/bin/make show-license

あれ、エラーがでました。見てのとおり、vim-licenseを許容していないので、許可してください、というものです。pkgsrcがデフォルトで許容しているライセンスは、/usr/pkgsrc/mk/license.mk の DEFAULT_ACCEPTABLE_LICENSES を見てみてください。

エラーメッセージのとおり、/etc/mk.conf に、

ACCEPTABLE_LICENSES+= vim-license

を追加します。

# make install

とすると、必要なパッケージを順番にソースを取ってきて、コンパイル、インストールしていくのがわかると思います。

できました。(「Install binary package of vim-7.4.768」とでているように、いったんバイナリーパッケージを作成し、そのあと、それをインストールしています。)

ごみ掃除をしましょう。

# make clean clean-depends

で、コンパイルで使われた作業領域が削除されます。ディスク容量節約のため等で、とってきた各パッケージのソースも必要なければ、

# rm -rf /usr/distfiles/*

しましょう。

パッケージのセキュリティアラートの自動化

/etc/daily.conf に fetch_pkg_vulnerabilities=YES を書きましょう。すると、セキュリティ情報を毎日更新するようになります。

NetBSDはデフォルトの設定で、日次でセキュリティチェックを行い、その結果をメールでrootに送ってきます。そのメールの中にパッケージのチェックも入っています。

なお、手動で実行するには、

# /usr/sbin/download-vulnerability-list
# /usr/sbin/audit-packages

です。

早速実行してみると、

# /usr/sbin/download-vulnerability-list
<snip>
# /usr/sbin/audit-packages
Package sudo-1.7.10p9 has a symlink-attack vulnerability, see http://www.sudo.ws/stable.html#1.8.15

見つかりました。今日現在、pkgsrcの2015Q3はアップデートはまだなので、アップデート待ちになります。

新しい四半期リリースが出たらどうすればいいの?

手っ取り早いのは、古い /usr/pkgsrc を消して、pkgsrc.tar.xzを展開し直すことです。

# そもそも、上記で紹介した方法をやめて、pkgsrcをgitミラーから取ってくる方法に変えて、その上で、branchを切り替える、という方法もあります。詳しくは割愛します。("手っ取り早くpkgsrcとかを使うためのMakefile"の『pkgsrcの4半期リリースの切り替えはどうやったらいいの?』を見て下さい。)

Firewall/パケットフィルタは?

NetBSDは、今のところ、標準で3種類のFirewall/パケットフィルタが標準でついています。

  • ipfilter(ipfと略されます)
  • pf(OpenBSDから移植された、*BSD界共通のパケットフィルタです)
  • npf(NetBSDが独自に実装する、pfによく似たパケットフィルタです)

これらのどれを使ってもかまいません。(もちろん排他利用です。)

1点注意として、pfを有効にすると、/etc/defaults/pf.boot.conf が起動時に適用されるようになりますが、この副作用として、IPv6アドレスがサーバにつかなくなります。

簡単な対処方としては、/etc/pf.boot.conf ファイルをつくり、

pass all

と書いておくことです。こうすることで、問題を回避できます。(なお、通常のpfのルールは、/etc/pf.conf に書きます。)

その他

 日本語情報は?

ぐぐれー。Google大明神のおつげを訊こう。一番確実(?)。

どしてもわかんないことがあったら、OSCのNetBSDブースに訊きにいこー。

NetBSDメーリングリスト、という歴史あるものもあるけど、最近流れない。けど、入っとくといいよ。

BUG(*BSD Users' Group)に顔を出してみる。名古屋京都には、だいたい、NetBSDユーザがいたりするよ。

NetBSD BoFに出てみよう。年1回、日本NetBSDユーザーグループの定期総会後に開かれている。(参考:今年の案内)。あなたが未成年でなければ、BoFの後の飲み会に出て、隣になった人にいろいろ話をしてみよう。

昨年のNetBSD Advent Calendarもよろしくです。

 英語情報でもいいや

辞書をひきひき、読む読む。そのうち、英語情報と日本語情報をごちゃ混ぜにしてみるようになります。(気にならなくなる、かな。)

 bcbench

echo "scale=2000; e(1)" | time -p /usr/bin/bc -l 2>&1 >/dev/null
real         4.44
user         4.44
sys          0.00
echo "scale=2000; 4*a(1)" | time -p /usr/bin/bc -l 2>&1 >/dev/null
real         2.25
user         2.24
sys          0.00

NetBSD 6_STABLE on さ○らのVPS 2G(v3)と比べると2/3くらいの時間です。

 dmesg

アップデート後のdmesgです。

Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015
    The NetBSD Foundation, Inc.  All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
    The Regents of the University of California.  All rights reserved.

NetBSD 7.0.0_PATCH (GENERIC.201512110450Z)
total memory = 1023 MB
avail memory = 976 MB
kern.module.path=/stand/amd64/7.0/modules
timecounter: Timecounters tick every 10.000 msec
timecounter: Timecounter "i8254" frequency 1193182 Hz quality 100
Fedora Project OpenStack Nova (2014.2-2.el7.centos)
mainbus0 (root)
ACPI: RSDP 0xf1e30 000014 (v00 BOCHS )
ACPI: RSDT 0x3ffffb04 000030 (v01 BOCHS  BXPCRSDT 00000001 BXPC 00000001)
ACPI: FACP 0x3ffff177 000074 (v01 BOCHS  BXPCFACP 00000001 BXPC 00000001)
ACPI: DSDT 0x3fffe040 001137 (v01   BXPC   BXDSDT 00000001 INTL 20140926)
ACPI: FACS 0x3fffe000 000040
ACPI: SSDT 0x3ffff1eb 000899 (v01 BOCHS  BXPCSSDT 00000001 BXPC 00000001)
ACPI: APIC 0x3ffffa84 000080 (v01 BOCHS  BXPCAPIC 00000001 BXPC 00000001)
ACPI: All ACPI Tables successfully acquired
ioapic0 at mainbus0 apid 0: pa 0xfec00000, version 0x11, 24 pins
cpu0 at mainbus0 apid 0: Intel(R) Xeon(R) CPU E5-2660 v3 @ 2.60GHz, id 0x306f2
cpu1 at mainbus0 apid 1: Intel(R) Xeon(R) CPU E5-2660 v3 @ 2.60GHz, id 0x306f2
acpi0 at mainbus0: Intel ACPICA 20131218
acpi0: X/RSDT: OemId <BOCHS ,BXPCRSDT,00000001>, AslId <BXPC,00000001>
LNKS: ACPI: Found matching pin for 0.1.INTA at func 3: 9
LNKD: ACPI: Found matching pin for 0.1.INTD at func 2: 11
LNKC: ACPI: Found matching pin for 0.3.INTA at func 0: 11
LNKD: ACPI: Found matching pin for 0.4.INTA at func 0: 11
LNKA: ACPI: Found matching pin for 0.5.INTA at func 0: 10
LNKB: ACPI: Found matching pin for 0.6.INTA at func 0: 10
acpi0: SCI interrupting at int 9
timecounter: Timecounter "ACPI-Safe" frequency 3579545 Hz quality 900
pckbc1 at acpi0 (KBD, PNP0303) (kbd port): io 0x60,0x64 irq 1
pckbc2 at acpi0 (MOU, PNP0F13) (aux port): irq 12
FDC0 (PNP0700) at acpi0 not configured
COM1 (PNP0501) at acpi0 not configured
COM2 (PNP0501) at acpi0 not configured
ACPI: Enabled 16 GPEs in block 00 to 0F
ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S0_] (20131218/hwxface-646)
ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S1_] (20131218/hwxface-646)
ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S2_] (20131218/hwxface-646)
ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S3_] (20131218/hwxface-646)
ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S4_] (20131218/hwxface-646)
pckbd0 at pckbc1 (kbd slot)
pckbc1: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard
pms0 at pckbc1 (aux slot)
pckbc1: using irq 12 for aux slot
wsmouse0 at pms0 mux 0
pci0 at mainbus0 bus 0: configuration mode 1
pci0: i/o space, memory space enabled, rd/line, rd/mult, wr/inv ok
pchb0 at pci0 dev 0 function 0: vendor 0x8086 product 0x1237 (rev. 0x02)
pcib0 at pci0 dev 1 function 0: vendor 0x8086 product 0x7000 (rev. 0x00)
piixide0 at pci0 dev 1 function 1: Intel 82371SB IDE Interface (PIIX3) (rev. 0x00)
piixide0: bus-master DMA support present
piixide0: primary channel wired to compatibility mode
piixide0: primary channel interrupting at ioapic0 pin 14
atabus0 at piixide0 channel 0
piixide0: secondary channel wired to compatibility mode
piixide0: secondary channel interrupting at ioapic0 pin 15
atabus1 at piixide0 channel 1
uhci0 at pci0 dev 1 function 2: vendor 0x8086 product 0x7020 (rev. 0x01)
uhci0: interrupting at ioapic0 pin 11
usb0 at uhci0: USB revision 1.0
piixpm0 at pci0 dev 1 function 3: vendor 0x8086 product 0x7113 (rev. 0x03)
timecounter: Timecounter "piixpm0" frequency 3579545 Hz quality 1000
piixpm0: 24-bit timer
piixpm0: interrupting at ioapic0 pin 9
iic0 at piixpm0: I2C bus
vga0 at pci0 dev 2 function 0: vendor 0x1234 product 0x1111 (rev. 0x00)
wsdisplay0 at vga0 kbdmux 1: console (80x25, vt100 emulation), using wskbd0
wsmux1: connecting to wsdisplay0
drm at vga0 not configured
virtio0 at pci0 dev 3 function 0
virtio0: Virtio Network Device (rev. 0x00)
vioif0 at virtio0: Ethernet address 02:01:85:82:74:f1
virtio0: allocated 20480 byte for virtqueue 0 for rx, size 256
virtio0: using 8192 byte (512 entries) indirect descriptors
virtio0: allocated 81920 byte for virtqueue 1 for tx, size 256
virtio0: using 69632 byte (4352 entries) indirect descriptors
virtio0: allocated 8192 byte for virtqueue 2 for control, size 64
virtio0: interrupting at ioapic0 pin 11
virtio1 at pci0 dev 4 function 0
virtio1: Virtio Console Device (rev. 0x00)
virtio1: no matching child driver; not configured
virtio2 at pci0 dev 5 function 0
virtio2: Virtio Block Device (rev. 0x00)
ld0 at virtio2
virtio2: allocated 45056 byte for virtqueue 0 for I/O request, size 128
virtio2: using 36864 byte (2304 entries) indirect descriptors
ld0: 51200 MB, 16383 cyl, 16 head, 63 sec, 512 bytes/sect x 104857600 sectors
virtio2: interrupting at ioapic0 pin 10
virtio3 at pci0 dev 6 function 0
virtio3: Virtio Memory Balloon Device (rev. 0x00)
viomb0 at virtio3
virtio3: allocated 8192 byte for virtqueue 0 for inflate, size 128
virtio3: allocated 8192 byte for virtqueue 1 for deflate, size 128
virtio3: interrupting at ioapic0 pin 10
isa0 at pcib0
com0 at isa0 port 0x3f8-0x3ff irq 4: ns16550a, working fifo
com1 at isa0 port 0x2f8-0x2ff irq 3: ns16550a, working fifo
attimer0 at isa0 port 0x40-0x43
pcppi0 at isa0 port 0x61
midi0 at pcppi0: PC speaker
sysbeep0 at pcppi0
fdc0 at isa0 port 0x3f0-0x3f7 irq 6 drq 2
attimer0: attached to pcppi0
acpicpu0 at cpu0: ACPI CPU
acpicpu0: C1: HLT, lat   0 us, pow     0 mW
vmt0 at cpu0: Unknown
vmware: open failed, eax=564d5868, ecx=0000001e, edx=00005658
vmt0: failed to open backdoor RPC channel (TCLO protocol)
acpicpu1 at cpu1: ACPI CPU
timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0
atapibus0 at atabus1: 2 targets
cd0 at atapibus0 drive 0: <QEMU DVD-ROM, QM00003, 1.5.3> cdrom removable
cd0: 32-bit data port
cd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100)
cd1 at atapibus0 drive 1: <QEMU DVD-ROM, QM00004, 1.5.3> cdrom removable
cd1: 32-bit data port
cd1: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100)
cd0(piixide0:1:0): using PIO mode 4, DMA mode 2 (using DMA)
cd1(piixide0:1:1): using PIO mode 4, DMA mode 2 (using DMA)
IPsec: Initialized Security Association Processing.
uhub0 at usb0: vendor 0x8086 UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 2 ports with 2 removable, self powered
uhidev0 at uhub0 port 1 configuration 1 interface 0
uhidev0: QEMU QEMU USB Tablet, rev 2.00/0.00, addr 2, iclass 3/0
ums0 at uhidev0: 3 buttons and Z dir
wsmouse1 at ums0 mux 0
Kernelized RAIDframe activated
pad0: outputs: 44100Hz, 16-bit, stereo
audio0 at pad0: half duplex, playback, capture
boot device: ld0
root on ld0a dumps on ld0b
root file system type: ffs
wsdisplay0: screen 1 added (80x25, vt100 emulation)
wsdisplay0: screen 2 added (80x25, vt100 emulation)
wsdisplay0: screen 3 added (80x25, vt100 emulation)
wsdisplay0: screen 4 added (80x25, vt100 emulation)

あとがき

NetBSD使っているひとって、みんな古くから使っていて初心者なんかいなさそうで(そんなことはない)、英語なんかもすらすら読めて(ぼくはちがう)、デバイスドライバ書いたりカーネルいじったりしていて(ぼくは超ちがう)、っていうすごいはっかー、ていう感じがします。

そんなことは全然全くさっぱりちっともないただの利用者たるぼくですが、何か書いてみることにしました。誰かのお役に立てれば幸いです。

(あとね、OSC Tokyoの春秋のConoHaブースで4年くらい毎回「NetBSDサポートしてほしーなー」っていい続けたら、サポートされたんだよ。OSCにブース出しているとこは、がんばってみるといいかも!)

ではでは。

明日のAdvent Calendarは

  • [1]公開鍵のフォーマットは、OpenSSHのフォーマットしか試しませんでした。puttyのフォーマットが使えるかは、誰か試して下さい...。
  • [2]/etc/cloud/gmo-vps-init/gmo-vps-init.sh参照

間違いの指摘や、ご意見などは、FrontPageにある連絡先にメールを下さるとうれしいです。

最終更新時間:2017年09月06日 23時50分26秒