日記 20170907


10:30~17:00


10:45から学内アルバイトの講習会があった.


NetBSD package の実験.意味がだんだんと分かってきた.

$ mkdir -p usr/pkg/etc
$ echo "Overwritten?" > usr/pkg/etc/sshd_config
$ echo "Overwritten?" > usr/pkg/bin/scp
$ sudo pkg_add -P /home/uki -p usr/pkg -K usr/pkg/db -n /usr/pkgsrc/packages/All/openssh-7.5.1.tgz
Running install with PRE-INSTALL for openssh-7.5.1.
Running install with PRE-INSTALL for openssh-7.5.1.
Package openssh-7.5.1 registered in /home/uki/usr/pkg/db/openssh-7.5.1
$ sudo pkg_add -P /home/uki -p usr/pkg -K usr/pkg/db /usr/pkgsrc/packages/All/openssh-7.5.1.tgz
===========================================================================
The following files should be created for openssh-7.5.1:

usr/pkg/etc/ssh/sshd_config (m=0644)

usr/pkg/etc/ssh/ssh_config (m=0644)

usr/pkg/etc/ssh/moduli (m=0644)

===========================================================================
===========================================================================
The following files are used by openssh-7.5.1 and have
the wrong ownership and/or permissions:

/etc/rc.d/sshd (m=0755)

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

*===* NOTICE *===*

WARNING: previous configuration file /etc/ssh/sshd_config found.

The config files for openssh-7.5.1 must be located in:

/usr/pkg/etc/ssh

You will need to ensure your configuration files and/or keys are
placed in the correct directory before using openssh-7.5.1.

===========================================================================
$ cat usr/pkg/etc/ssh_config
overwritten?
$ file usr/pkg/bin/scp
usr/pkg/bin/scp: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for NetBSD 7.1, stripped

そうか.


# GROUP: sshd
# USER: sshd:sshd::sshd privsep pseudo-user:/var/chroot/sshd
# FILE: /etc/rc.d/sshd cr share/examples/rc.d/sshd 0755
# FILE: etc/ssh/ssh_config c share/examples/openssh/ssh_config 0644
# FILE: etc/ssh/sshd_config c share/examples/openssh/sshd_config 0644
# FILE: etc/ssh/moduli c share/examples/openssh/moduli 0644
# DIR: etc/ssh m 755 root wheel
# DIR: /etc/rc.d m
# DIR: /var/chroot/sshd mo

これはOpenSSHパッケージのインストールスクリプトの末尾を引用したもの.


そもそもが間違っていたらしい.パッケージに格納されているファイルは問答無用でdestdir/prefix以下に展開される.当然,もともとそのパスにあったファイルは上書きされる.usr/pkg/bin/scpがテキストファイルだったのにpkg_add後はバイナリになっていたことからも明らかだ.

インストールスクリプトは,コピー先のファイルがあればコピーしない.なければコピーする.なんだよそういうことか.既存のファイルがあるかないかは展開するときじゃなくてコピーするときに確認するんだ.ずっと勘違いして停滞していた.


だからこれはdestdir/prefix次第では悲劇しか起こさない

# FILE: /etc/rc.conf c etc/rc.conf 644 0 100

destdir/prefixが"/"だと,/etc/rc.confにetc/rc.confを展開(すなわち上書き!)したあとに/etc/rc.confへコピーするのだ.上書きされて当たり前の記述だった.全然分からなかった.こんな簡単なことに気づくのに何ヶ月かけてるんだ…….


destdir/prefixを変えて再度pkg_addすればいいんじゃないかと思ったがカーネルを7.1.0_PATCHにしたのを忘れていた.ビルドしないといけないから今日は終わり.うーん.効率とは…….


30分くらい昼寝したら午後眠くならないのでこの方針でいこう.寝る前にコーヒーなどでカフェインを摂るといい具合にすっきりするらしいので明日はそれで.