トップ «前の日記(2016-08-15) 最新 次の日記(2016-08-17)» 編集

ヨタの日々

2001|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|12|
2024|01|02|03|04|

2016-08-16 :-)

_ [NetBSD][SSL][ルート証明書]SSL ルート証明書をインストールする

% cd /usr/pkgsrc/security/mozilla-rootcerts
% make install clean clean-depends
% mozilla-rootcerts install

ここに入る

/etc/ssl/certs/ca-certificates.crt

ref.

_ [NetBSD][go][golang][SSL][ルート証明書]go(golang) の NetBSD での SSL ルート証明書の位置

コードで決め打ちされているので

/usr/pkgsrc/lang/go/work/go/src/crypto/x509/root_bsd.go

package x509

// Possible certificate files; stop after finding one.
var certFiles = []string{
	"/usr/local/share/certs/ca-root-nss.crt", // FreeBSD/DragonFly
	"/etc/ssl/cert.pem",                      // OpenBSD
	"/etc/openssl/certs/ca-certificates.crt", // NetBSD
}

リンクなどしてテキトーに合わせる。

% ln -s /etc/ssl/certs/ca-certificates.crt  /etc/openssl/certs/ca-certificates.crt

2017-09-02追記

pkgsrc でインストールすると NetBSD が追加されてるので上記 ln は不要。

var certFiles = []string{
        "/usr/local/share/certs/ca-root-nss.crt", // FreeBSD/DragonFly
        "/etc/ssl/cert.pem",                      // OpenBSD
        "/etc/openssl/certs/ca-certificates.crt", // NetBSD
        "/etc/ssl/certs/ca-certificates.crt",     // NetBSD
}

_ [pkgsrc][golang][go][NetBSD]lang/go をインストールする

手順

pkgsrc/lang/go で make install するだけ。

エラー時

なんだが、途中でエラーになった。ログがこれだけしか出ないので何が原因なのか分からんかったんだがググると同じ現象のひとがいた ( Go build exits with "signal: killed" - Getting Help - Go Forum ) ようするにメモリ不足が原因ではあった。

% cd /usr/pkgsrc/lang/go
% make
=> Bootstrap dependency digest>=20010302: found digest-20160304
===> Checking for vulnerabilities in go-1.6.3
===> Building for go-1.6.3
cd /usr/pkgsrc/lang/go/work/go/src/syscall &&  env GOOS=netbsd
GOARCH=amd64  /usr/pkg/bin/perl mksyscall_solaris.pl
syscall_solaris.go syscall_solaris_amd64.go >
zsyscall_solaris_amd64.go
cd /usr/pkgsrc/lang/go/work/go/src && env
GOROOT_BOOTSTRAP=/usr/pkg/go14 GOROOT_FINAL=/usr/pkg/go
/usr/pkg/bin/bash ./make.bash
##### Building Go bootstrap tool.
cmd/dist

##### Building Go toolchain using /usr/pkg/go14.
bootstrap/internal/obj
bootstrap/internal/obj/arm
bootstrap/internal/obj/arm64
bootstrap/internal/obj/mips
bootstrap/internal/obj/ppc64
bootstrap/internal/obj/x86
bootstrap/asm/internal/arch
bootstrap/asm/internal/flags
bootstrap/asm/internal/lex
bootstrap/asm/internal/asm
bootstrap/asm
bootstrap/compile/internal/big
bootstrap/internal/gcprog
bootstrap/compile/internal/gc
go build bootstrap/compile/internal/gc:
/usr/pkg/go14/pkg/tool/netbsd_amd64/6g: signal: killed
bootstrap/link/internal/ld
bootstrap/link/internal/amd64
bootstrap/link/internal/arm
bootstrap/link/internal/arm64
bootstrap/link/internal/mips64
bootstrap/link/internal/ppc64
bootstrap/link/internal/x86
bootstrap/link
go tool dist: FAILED: /usr/pkg/go14/bin/go install -v bootstrap/...:
exit status 1
*** Error code 2

Stop.
make[1]: stopped in /usr/pkgsrc/lang/go
*** Error code 1

Stop.
make: stopped in /usr/pkgsrc/lang/go

golang を git clone してきてビルドしても同様の現象となるので pkgsrc が原因ではない。

ちなみに go をソースからビルドするときは GOROOT_BOOTSTRAP を設定しておくだけでよい。もちろんあらかじめ go1.4 が必要。( go1.5 以降は go をビルドするために go が必要なのである )

% GOROOT_BOOTSTRAP=/usr/pkg/go14 ./all.bash

対処

  • swap を増やす
  • tmp も増やす
swap を増やす ("out of memory" 対策)

dmesg を見ると分かる。

UVM: pid 9181.1 (6g), uid 0 killed: out of swap
UVM: pid 22202.1 (6g), uid 0 killed: out of swap
UVM: pid 6389.1 (6g), uid 0 killed: out of swap

よって swap を増やす(http://www.netbsd.org/docs/misc/#adding-swap)

% dd if=/dev/zero bs=1m count=2048 of=/home/swap
% chmod 600 /home/swap
% swapctl -a -p 1 /home/swap
tmp を増やす ("no space left on device" 対策のため)

golang をビルドすると以下のようなエラーとなる。

# cmd/trace
/home/rin/work/go/pkg/tool/netbsd_amd64/link: flushing $WORK/cmd/trace/_obj/exe/a.out: write $WORK/cmd/trace/_obj/exe/a.out: no space left on device

$WORK ってどこだよ。$WORK は /tmp だった。

% GOROOT_BOOTSTRAP=/usr/pkg/go14 /usr/pkg/go14/bin/go build -work
WORK=/tmp/go-build862075801

というわけで tmp を増やす。一時的には mount しなおせばよい。恒久的には fstab に書いておく。

当初は 64MB

 tmpfs           /tmp    tmpfs   rw,-m=1777,-s=67253760

500MB に増やした

 tmpfs           /tmp    tmpfs   rw,-m=1777,-s=524288000

_ [NetBSD][mackerel]NetBSD で mackerel-agent を使う

mackerel-agent は NetBSD 対応しているので手順通りやるだけ。予め golang をインストール済みであること。

https://github.com/mackerelio/mackerel-agent

ビルド時に golang の場所を GOPATH で指定するんだが、ここに書き込むらしい。システムワイドに使うなら気にせずインストール済みの golang の場所( pkgsrc なら /usr/pkg/go )を指定すればよい。それが嫌なら golang を取得しておく。たぶん GOPATH で指定した golang を使うと思うのでインストール済みの golang と mackerel が使う golang は別々だろう。たぶん

% git clone https://github.com/golang/go.git

以下手順通り。

取得

% git clone https://github.com/mackerelio/mackerel-agent.git

構築

GOPATH で golang の場所を指定する。

% GOPATH=~/work/go make build
% GOPATH=~/work/go make test

apikey を設定

apikey は管理画面にある。

https://mackerel.io/orgs/<アカウント名>?tab=apikeys

設定ファイルは任意の場所でよい。

% mkdir /usr/pkg/etc/mackerel-agent/
% vim /usr/pkg/etc/mackerel-agent/mackerel-agent.conf

ファイルの中身はこれ。

apikey = "<YOUR_API_KEY>"

起動

% ./build/mackerel-agent --conf=/usr/pkg/etc/mackerel-agent/mackerel-agent.conf