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

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

はじめにのはじめに

NetBSD 8.0について、つかえるようになったので、それにあわせて修正しました。

はじめに

この文書は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の「建て方」

 まずはサーバ追加

まずはサーバ追加からです。

「サービス」は"VPS"になっていると思うので、スペックを選びましょう。今回は、一番安い、630円/月のものを選びます。(最初から選ばれていると思います。)

次に、「イメージタイプ」について、"VPS"のなかから、"NetBSD"を選ぶと、8.0がインストールできるようになります。

rootパスワードは半角・英数字・記号を含むの9文字以上なので、注意。

「ネームタグ」はわかりやすいものをつけておきましょう。(今回は"test-vps"にしました。)

次に、オプションを開きます。

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

「SSH Key」については、公開鍵を事前につくっている・もっている人は、ここでインポートしておくと、便利です。(わたしは、SSHの公開鍵がありますので、登録しました。)ない人は作っておきましょう。登録のしかたや作り方は、ご利用ガイド SSH Keyを登録するを参照してください。(ここでインポート・登録すると、rootのauthorized_keysに登録され、rootでsshログインできるようになります。)

「スタートアップスクリプト」については、ご利用ガイド スタートアップスクリプトを作成するを参照する限りでは、"cloud-config形式"と"テキスト入力"がありますが、試した限りでは、どちらも使えませんでした。

準備ができたので、「追加」ボタンをクリックします。

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

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

ネットワーク情報の、"表示NIC"のうち、"ext-"で始まるもの(表示NICはたぶん1つしかないはずです)が、外部からリモートログインするときに使うものです。IPアドレスを控えておいてください。(後で使います。)

コンソールボタンをクリックすると、Webブラウザ上のコンソールが開きます。

rootでログインして下さい。さぁ、設定してゆきましょう。

 NetBSDサーバの設定(最初にやること)

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

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

cp -a /etc /etc.conoha

こうすると、作成時点でのファイルがあるので、何があっても安心です。(いらなくなったら、消せばよいのですし。)

一般ユーザの追加

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

# useradd -m -g =uid -G wheel,operator,users,staff -s /bin/ksh 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コマンドが動作します。usersとstaffはデフォルトで用意されるグループですが、特に使わなくてもよいグループです。わたしは、usersは(このサーバにログインする必要がある)ユーザ全員、staffはサーバの管理者を入れています。

ログインシェルが/bin/kshになっています。ksh?そうですね。bashが使いたいですよね。でも、NetBSD(に限らず、主な4つのBSD)には、/bin/bashは入っていません。後で必要であれば、インストールしましょう。とりあえず、Bourneシェル系のシェルだと、/bin/shより使い勝手のよいkshがNetBSDではデフォルトでインストールされているので、そちらにしてあります。

先ほどサーバ作成時に登録したSSH公開鍵をつかって、上記で作成したユーザでもログインしたい場合は、データをコピーしておきましょう。(もちろん、任意です。必須ではありません。)

# cd /home/isihara
# cp -a /root/.ssh .
# chown -R isihara:isihara .ssh

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

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

TeraTermでリモートログイン

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

ログインのしかたは割愛します。

sshdの設定変更

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

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

ChallengeResponseAuthenticationがnoになっているので、UsePam yesされていてもパスワード認証できないようです。

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 8.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-8.0/amd64/binary/sets/${h}.tgz
done
ftp ftp://ftp7.jp.netbsd.org/pub/NetBSD/NetBSD-8.0/amd64/binary/sets/MD5
ftp ftp://ftp7.jp.netbsd.org/pub/NetBSD/NetBSD-8.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でした。成功です。

inetdを起動しないように

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

/etc/rc.d/inetd stop

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

inetd=NO

を追加して下さい。

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

hostnameをつける

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

hostname="hoge.example.org"

などとDNSに設定するホスト名を設定するとよいでしょう。

pkginのミラーを日本国内に

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

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

に書き加えて下さい。

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

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

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

# pkgin up

sudoを使えるように

sudoをインストールします。

# pkgin install sudo
calculating dependencies...done.

1 package to install:
  sudo-1.8.26

0 to refresh, 0 to upgrade, 1 to install
391K to download, 1575K to install

proceed ? [Y/n]
sudo-1.8.26.tgz                               100%  391KB 391.3KB/s   00:01
installing sudo-1.8.26...
sudo-1.8.26: copying /usr/pkg/share/examples/sudo/sudoers to /usr/pkg/etc/sudoers
sudo-1.8.26: setting permissions on /usr/pkg/bin/sudo (o=root, g=wheel, m=4511)
sudo-1.8.26: setting permissions on /usr/pkg/bin/sudoreplay (o=root, g=wheel, m=511)
===========================================================================
$NetBSD: MESSAGE,v 1.7 2016/10/21 20:50:42 kamil Exp $

Use the visudo(8) command to edit the sudoers file.

If you are upgrading, please read:

       /usr/pkg/share/doc/sudo/UPGRADE

===========================================================================
pkg_install warnings: 0, errors: 0
reading local summary...
processing local summary...
marking sudo-1.8.26 as non auto-removable

wheelグループのみ、sudoが使えるようにvisudoコマンドを起動し、

# %wheel ALL=(ALL) ALL

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

SSLのルート証明書のインストール

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

# pkg_info
mozilla-rootcerts-1.0.20180111 Root CA certificates from the Mozilla Project
libffi-3.2.1nb4     Foreign function interface
python27-2.7.15nb1  Interpreted, interactive, object-oriented programming language
pkg_install-20180425 Package management and administration tools for pkgsrc
pkgin-0.11.4        Apt / yum like tool for managing pkgsrc binary packages
oniguruma-6.8.2     Regular expressions library
jq-1.5nb4           Command-line JSON processor

このうち、mozilla-rootcertsはSSLのルート証明書を取得してインストールしたり更新したりするためのユーティリティです。しかし、/etc/openssl/certsの下をみても、生成された形跡はなく、ルート証明書は入っていませんでした。

OpenSSL用のルート証明書をパッケージでインストールする場合は、よく似た名前の"mozilla-rootcerts-openssl"というパッケージをインストールすると、"mozilla-rootcerts"パッケージを使って生成されます。

# pkgin install mozilla-rootcerts-openssl
calculating dependencies...done.

1 package to install:
  mozilla-rootcerts-openssl-2.1

0 to refresh, 0 to upgrade, 1 to install
293K to download, 1551K to install

proceed ? [Y/n]
mozilla-rootcerts-openssl-2.1.tgz             100%  293KB 293.0KB/s   00:01
installing mozilla-rootcerts-openssl-2.1...
pkg_install warnings: 0, errors: 0
reading local summary...
processing local summary...
marking mozilla-rootcerts-openssl-2.1 as non auto-removable

bashのインストール(オプション)

bashがないと耐えられない勢は、bashをインストールしましょう。sudoなどと同じです。

# pkgin install bash
calculating dependencies...done.

1 package to install:
  bash-4.4.019

0 to refresh, 0 to upgrade, 1 to install
1352K to download, 8064K to install

proceed ? [Y/n]
bash-4.4.019.tgz                              100% 1352KB 450.6KB/s   00:03
installing bash-4.4.019...
bash-4.4.019: adding /usr/pkg/bin/bash to /etc/shells
bash-4.4.019: registering info file /usr/pkg/info/bash.info
pkg_install warnings: 0, errors: 0
reading local summary...
processing local summary...
marking bash-4.4.019 as non auto-removable

bash-completionパッケージもインストールしておくとよいと思います。

# pkgin install bash-completion
calculating dependencies...done.

2 packages to install:
  readline-7.0 bash-completion-2.8nb1

0 to refresh, 0 to upgrade, 2 to install
460K to download, 2361K to install

proceed ? [Y/n]
readline-7.0.tgz                              100%  294KB 294.5KB/s   00:01
bash-completion-2.8nb1.tgz                    100%  166KB 166.0KB/s   00:01
installing readline-7.0...
readline-7.0: registering info file /usr/pkg/info/history.info
readline-7.0: registering info file /usr/pkg/info/readline.info
readline-7.0: registering info file /usr/pkg/info/rluserman.info
installing bash-completion-2.8nb1...
===========================================================================
$NetBSD: MESSAGE,v 1.1 2009/09/25 12:29:26 wiz Exp $

To use this, source the included bash fragment in your startup
files, i.e. include something like:

  if [ -r /usr/pkg/share/bash-completion/bash_completion ]; then
    . /usr/pkg/share/bash-completion/bash_completion
  fi

in ~/.bashrc or ~/.bash_profile.

===========================================================================
pkg_install warnings: 0, errors: 0
reading local summary...
processing local summary...
marking bash-completion-2.8nb1 as non auto-removable

Linuxの主要ディストリビューションのように、インストールしたら、補完が全ユーザで有効になったりはしません。上記のとおり、それぞれのユーザで有効にする必要があります。

あとは、ログインシェルを変えればいいのですが、rootのログインシェルは変えることはおススメしません。あくまでも、root以外のユーザにのみをおすすめします。

rootで使いたい? そういう時は、ログイン後にbashを手動実行すれば、ログインシェルをbashのように使うことができますよ。

キーマップ設定(オプション)

ConoHaのNetBSD 7.0のイメージ(今はない)では、キーマップが"us"になっており、日本の大半のユーザにはちょっとイケてない設定でした。

NetBSD 8.0のイメージになって、それは修正されたのですが、修正がちょっと手抜きで、2度設定しているので、それを直します。

--- /etc.conoha/wscons.conf     2019-03-10 13:11:28.466843132 +0900
+++ /etc/wscons.conf    2019-03-11 01:29:04.293682868 +0900
@@ -38,7 +38,7 @@
 # (choose from user, us, uk, be, cz, dk, nl, fi, fr, de, gr, hu, it, jp, no,
 # pl, pt, ru, es, sv, sf, sg, ua)
 # See wsconsctl(8), pckbd(4), ukbd(4) etc. for more details.
-encoding us
+encoding jp
 #encoding us.swapctrlcaps

 # Redefine individual keys from a file containing "keysym" and/or "keycode"
@@ -60,4 +60,3 @@
 # Change keyboard repeat speed to faster settings.
 #setvar        wskbd   repeat.del1     250
 #setvar        wskbd   repeat.deln     30
-encoding jp

末尾のencoding jpを削除し、もともとのencoding usの設定をjpに書き換えています。

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

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

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

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

#smtp      inet  n       -       n       -       -       smtpd

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

OSのアップデート

 安定版(stable)NetBSDへの更新

なぜ必要なの?

NetBSDはリリース版が出るのが他のBSDやLinuxディストリビューションと比較して、遅い(間隔が空く)ので、セキュリティ勧告への対応や、バグ修正への対応として、安定版NetBSDへの更新を定期的に行ったほうがよいかもしれません。

安定版の対義語は開発版(-current)です。開発版への追従は全くおすすめしません。

枝(branch)について

NetBSD 7系までは、アップデートでおいかける枝は、NetBSD 7.0リリース時点では、

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

のどちらかでした。

しかし、NetBSD 8系からこれが変わり、netbsd-8枝のひとつになり、わかりやすくなりました。

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

NetBSD 8.0以降のNetBSD 9.0までの変更一覧は、https://www.netbsd.org/changes/changes-9.0.html にあります。

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

ソースから

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

NetBSD公式のドキュメント"Updating a stable NetBSD release"(ちょっと前の日本語訳)にあるとおりです。

この文書では、ソースからのアップデートは行いません。

バイナリーから

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

ちょっと前につかった、シェルスクリプトを改変して、ダウンロード用のスクリプトにしましょう。日本にもミラーがあったのですが、いつしかアクセスできなくなっているので、本家を使います。

#!/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://nyftp.netbsd.org/pub/NetBSD-daily/netbsd-8/ にアクセスして、確認するのが一番らくだと思います。これを書いている時点では、

ftp://nyftp.netbsd.org/pub/NetBSD-daily/netbsd-8/201903100010Z/

でしたので、

# sh get.sh ftp://nyftp.netbsd.org/pub/NetBSD-daily/netbsd-8/201903100010Z/

などと、作成したシェルスクリプトに引数として与えてやると、実行ディレクトリに"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 から起動できます。

さて、(最初のbootloaderの画面でスペースキーを押さず、)更新したカーネルで無事起動し、ログインすると、

こんな感じです。「NetBSD 8.0_STABLE」と見えてますが、これが netbsd-8枝になったことを意味します。

さて、無事起動きたら、次は、カーネル以外を展開します。ここで、重要なことは、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のところです。(以下は、以前出た例で、2019/3/10時点では出ませんでした。)

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

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

取ってきたsetsはもう不要なので、削除してください。

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

(上記のように)安定版に追従している人は、netbsd-8枝がサポートされている限り、なにもしなくても問題ありません。(NetBSDは最新2つのメジャーバージョンをサポートしています。)

安定版に追従していない人は、上記、バイナリーアップデートの要領で、NetBSD 8.1に更新してください。(ただし、よくリリース案内を読んでくださいね。何か別途作業が必要かもしれません。)

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

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

先ほど紹介した、セキュリティ勧告のWebページ http://www.netbsd.org/support/security/advisory.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/8.0/All)...
database for ftp://ftp7.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/8.0/All is up-to-date
processing remote summary (ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/8.0/All)...
pkg_summary.bz2                               100% 3106KB 238.9KB/s   00:13
# pkgin install lv zsh
calculating dependencies...done.

2 packages to install:
  lv-4.51nb1 zsh-5.6.2

0 to refresh, 0 to upgrade, 2 to install
2448K to download, 9.9M to install

proceed ? [Y/n]
lv-4.51nb1.tgz                                100%  273KB 273.1KB/s   00:01
zsh-5.6.2.tgz                                 100% 2175KB   2.1MB/s   00:00
installing lv-4.51nb1...
installing zsh-5.6.2...
zsh-5.6.2: adding /usr/pkg/bin/zsh to /etc/shells
zsh-5.6.2: 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.6.2 as non auto-removable

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

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

# pkgin full-upgrade

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

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

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

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

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

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

pkgsrcの取得

まず、pkgsrcの本体をとってきます。今回は、四半期リリースをとってきます。http://www.pkgsrc.org/ に最新の四半期リリースは何かが出ています。現在は2018Q4です。(2019Q1はもうちょっとしたら出てくるはずです。)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-8.1.0551 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
*** Error code 1

Stop.
make: stopped in /usr/pkgsrc/editors/vim

あれ、エラーがでました。見てのとおり、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-8.1.0551」とでているように、いったんバイナリーパッケージを作成し、そのあと、それをインストールしています。)

ごみ掃除をしましょう。

# 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 python27-2.7.15nb1 has a denial-of-service vulnerability, see https://nvd.nist.gov/vuln/detail/CVE-2013-1752
Package python27-2.7.15nb1 has a denial-of-service vulnerability, see https://nvd.nist.gov/vuln/detail/CVE-2019-5010
Package python27-2.7.15nb1 has a information-disclosure vulnerability, see https://nvd.nist.gov/vuln/detail/CVE-2019-9636
Package gtar-base-1.30 has a denial-of-service vulnerability, see https://nvd.nist.gov/vuln/detail/CVE-2018-20482
Package vim-8.1.0551 has a denial-of-service vulnerability, see https://nvd.nist.gov/vuln/detail/CVE-2018-20786

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

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

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

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

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

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

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

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

私見としては、どうやら、pfのサポートは将来的にはなくなりそうな感じです。ipfilterかnpfにしておくのがよいと思います。(もっとも、わたし自身はpf利用者です。)

その他

 日本語情報は?

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

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

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

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

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

以前のNetBSD Advent Calendar

もよろしくです。

 英語情報でもいいや

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

 bcbench

GNU bcをパッケージからインストールしてから、実行してください。(cd /usr/pkgsrc/math/bc; make install。)

$ echo "scale=2000; e(1)" | time -p /usr/pkg/bin/bc -l 2>&1 >/dev/null
real     5.00
user     4.99
sys      0.00
$ echo "scale=2000; 4*a(1)" | time -p /usr/pkg/bin/bc -l 2>&1 >/dev/null
real     2.50
user     2.50
sys      0.00

 dmesg

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

Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017,
    2018, 2019 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 8.0_STABLE (GENERIC) #0: Sat Mar  9 17:13:18 UTC 2019
	mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/amd64/compile/GENERIC
total memory = 511 MB
avail memory = 473 MB
cpu_rng: RDSEED
timecounter: Timecounters tick every 10.000 msec
Kernelized RAIDframe activated
running cgd selftest aes-xts-256 aes-xts-512 done
timecounter: Timecounter "i8254" frequency 1193182 Hz quality 100
Fedora Project OpenStack Nova (2014.2-2.el7.centos)
mainbus0 (root)
ACPI: RSDP 0x00000000000F1E30 000014 (v00 BOCHS )
ACPI: RSDT 0x000000001FFFFA9B 000030 (v01 BOCHS  BXPCRSDT 00000001 BXPC 00000001)
ACPI: FACP 0x000000001FFFF177 000074 (v01 BOCHS  BXPCFACP 00000001 BXPC 00000001)
ACPI: DSDT 0x000000001FFFE040 001137 (v01 BXPC   BXDSDT   00000001 INTL 20150619)
ACPI: FACS 0x000000001FFFE000 000040
ACPI: SSDT 0x000000001FFFF1EB 000838 (v01 BOCHS  BXPCSSDT 00000001 BXPC 00000001)
ACPI: APIC 0x000000001FFFFA23 000078 (v01 BOCHS  BXPCAPIC 00000001 BXPC 00000001)
ACPI: 2 ACPI AML tables successfully acquired and loaded
ioapic0 at mainbus0 apid 0: pa 0xfec00000, version 0x11, 24 pins
cpu0 at mainbus0 apid 0
cpu0: Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz, id 0x406f1
cpu0: package 0, core 0, smt 0
acpi0 at mainbus0: Intel ACPICA 20170303
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
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 8086 product 1237 (rev. 0x02)
pcib0 at pci0 dev 1 function 0: vendor 8086 product 7000 (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 8086 product 7020 (rev. 0x01)
uhci0: interrupting at ioapic0 pin 11
usb0 at uhci0: USB revision 1.0
piixpm0 at pci0 dev 1 function 3: vendor 8086 product 7113 (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 1234 product 1111 (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: Features: 0x11070020<INDIRECT_DESC,NOTIFY_ON_EMPTY,CTRL_RX,CTRL_VQ,STATUS,MAC>
vioif0: Ethernet address 02:02:76:1b:06:ed
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: config interrupting at msix0 vec 0
virtio0: queues interrupting at msix0 vec 1
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: Features: 0x10000a54<INDIRECT_DESC,CONFIG_WCE,FLUSH,BLK_SIZE,GEOMETRY,SEG_MAX>
virtio2: allocated 270336 byte for virtqueue 0 for I/O request, size 128
virtio2: using 262144 byte (16384 entries) indirect descriptors
virtio2: interrupting at ioapic0 pin 10
ld0: 20480 MB, 16383 cyl, 16 head, 63 sec, 512 bytes/sect x 41943040 sectors
virtio3 at pci0 dev 6 function 0
virtio3: Virtio Memory Balloon Device (rev. 0x00)
viomb0 at virtio3virtio3: allocated 8192 byte for virtqueue 0 for inflate, size 128
virtio3: allocated 8192 byte for virtqueue 1 for deflate, size 128
: Features: 0x10000000<INDIRECT_DESC>
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
spkr0 at pcppi0: PC Speaker
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
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 8086 (0x8086) UHCI root hub (0000), 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 (0x627) QEMU USB Tablet (0x01), rev 2.00/0.00, addr 2, iclass 3/0
ums0 at uhidev0: 3 buttons and Z dir
wsmouse1 at ums0 mux 0
pad0: outputs: 44100Hz, 16-bit, stereo
audio0 at pad0: half duplex, playback, capture, mmap
pad0: Virtual format configured - Format SLINEAR, precision 16, channels 2, frequency 44100
pad0: Latency: 139 milliseconds
spkr1 at audio0: PC Speaker (synthesized)
WARNING: 1 error while detecting hardware; check system log.
boot device: ld0
root on ld0a dumps on ld0b
root file system type: ffs
kern.module.path=/stand/amd64/8.0/modules
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]/etc/cloud/gmo-vps-init/gmo-vps-init.sh参照

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

最終更新時間:2019年03月11日 03時20分32秒