Python 3 and pip install --user

Pythonのライブラリはpkgでインストールするものは /usr/local 以下にインストールされる。これまでは、pkgでインストールできないライブラリが必要である場合、 ~/.python/2.7.x/site-packages などを指定してきたが、pipは--userオプションを付けてインストールすると ~/.local/ 以下にインストールするのがデフォルトのようだ。

今後はそれに合わせることにする。それにともなって .cshrcなどには以下のように記述する。

setenv  PYTHONPATH      ~/.local/lib/python3.7/site-packages

あるpythonライブラリは、~/.local/bin にコマンドを放り込むので、pathを通すことにした。

SSH public key login problem

何が起こったか全くわからないが、自分向けのメモ。

これまで、

~/.ssh/config

Host github
  HostName github.com
  IdentityFile ~/.ssh/id_rsa_github
  User git

~/Documents/freebsdPostInstall/.git/config

...
[remote "origin"]
        url = git@github.com:username/freebsdPostInstall.git
...

のように記入していて問題なく利用できていた。はず。にも関わらず、最近これではpushできなくなった。

% cd ~/Documents/freebsdPostInstall/
% git push origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

~/.ssh/configのHost行が間違っており、この場合は、

% ssh -T git@github

としてloginできる。しかし、.git/configではgit@github.comでloginしようとしてだめと言われる。

なので、
~/.ssh/config

Host github.com
...

と変えてpushできるようになった。

~/Documents/freebsdPostInstall/.git/config

...
[remote "origin"]
        url = git@github:username/freebsdPostInstall.git
...

と変えてもloginできる。

しかし、なぜ以前はloginできてpushできていたのだろう。何も変えていないのに。単純に考えるとsshの振る舞いが変わったように思うが、この間バージョンアップはしてないはずなんだけど。もしかして忘れてるだけか。


自分向け追記 2021/01/27
このとき何が起きたのかは、依然としてわからないが、
GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita
などをみると、

Host github github.com
  HostName github.com
  IdentityFile ~/.ssh/id_github_rsa
  User git

のように、Host 欄を書くほうが良いらしい。githubというエイリアスが必要ない場合は、github.comのみで問題ないと思うのだが。

Intel I219V driver for FreeBSD

家のサーバーのリプレース作業。

購入したマザーボードASUS H170M-PLUSのオンボードネットワークがIntel I219Vで、FreeBSDのGENERICカーネルでは認識しない。Intelはこのチップのためのdriverを公開している。 (em-7.6.1.tar.gz)

基本的にはこのtar ballを展開してmakeすればよい。make loadでコンパイルして一時的にドライバーを組み込む。make installでインストールするので、/boot/loader.confに

if_em_load="YES"

と書いておけばブート時に自動的に読み込む。

ただし、GENERICカーネルにはemドライバーが存在するので、そのままmake loadするとロードに失敗する。したがって、GENERICWOEMというコンフィグファイルでemとigbを外したカーネルを作り、インストールして、その上でmake installした。igbは特に意味ないが、外しておいた。

もしかしたら、GENERICカーネルに無理やりmake installすれば置き換わるのかもしれないが(それがモジュール化ということの意味であるような気もする)、気持ち悪いのでとりあえずGENERICWOEMを作りなおした。

Wi-Fi設定

最近、あまりにも無線LANが遅くなっていたので設定を見なおした。

BUFFALOの無線LANアクセスポイントを使用しているが、11n/g/bの無線チャンネルを自動にしていると1チャンネルに設定される。このチャンネルは周辺の多数の機器が設定してるようで、干渉が発生しているようだ。とりあえず7チャンネルに固定すると、少し通信環境が改善した。

そもそも、このアクセスポイントは5GHzに対応しているのに、家の機器は2.4GHzにしか接続していない。設定を見直すと、11n/aと11n/g/bの両方が同じSSID(仮にHOMEとしよう)を設定しているのが問題だった。とりあえず、11n/aのSSIDをHOME-5Gとして設定しなおした。

多くの機器をHOME-5Gに接続すると、通信環境は劇的に改善した。ただ、11n/aの無線チャンネルを自動にしておくと56チャンネルとなり、NexusタブレットがHOME-5Gに接続できない。そこで48チャンネルに設定することで、NexusもHOME-5Gに接続できるようになった。

zfs setup memo

zfsのルートファイルシステムでインストールし、/homeを5台のHDDにraidz2のファイルシステムを作成する手順のメモ。

参考: bsdinstall でも自由なパーティションレイアウトで Root on ZFS

bsdinstallのpartitioningにてShellを選択して。

# gpart create -s gpt ada0
# gpart add -a 4k -s 512k -t freebsd-boot -l boot0 ada0
# gpart add -a 4k -s 60g -t freebsd-zfs -l sys0 ada0
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
# gpart set -a active ada0

# gnop create -S 4096 ada0p2
# zpool create -o altroot=/mnt -m none -f rpool ada0p2.nop
# zfs set atime=off rpool
# zfs set checksum=fletcher4 rpool
# zfs create -V 8g -o checksum=off rpool/swap0

# zfs create -o mountpoint=none rpool/ROOT
# zfs create -o mountpoint=/ rpool/ROOT/default
# zfs create -o mountpoint=/tmp -o setuid=off rpool/tmp
# zfs create -o mountpoint=/usr rpool/usr
# zfs create -o compression=lz4 -o setuid=off rpool/usr/ports
# zfs create -o compression=lz4 -o exec=off -o setuid=off rpool/usr/src
# zfs create -o mountpoint=/var rpool/var
# zfs create -o compression=lz4 -o exec=off -o setuid=off rpool/var/crash
# zfs create -o compression=lz4 -o exec=off -o setuid=off rpool/var/log
# zfs create -o compression=lz4 -o atime=on rpool/var/mail
# zfs create -o compression=lz4 -o setuid=off rpool/var/tmp

# zpool export rpool
# gnop destroy ada0p2.nop
# zpool import -o altroot=/mnt rpool
# mkdir -p /mnt/boot/zfs
# zpool set cachefile=/mnt/boot/zfs/rpool.cache rpool
# zpool set bootfs=rpool/ROOT/default rpool

# exit

bsdinstallの終了時にManual ConfigurationをYesで選択して。

# echo 'zfs_load="YES"' >> /boot/loader.conf
# echo 'zfs_enable="YES"' >> /etc/rc.conf
# echo '/dev/zvol/rpool/swap0 none swap sw 0 0' >> /etc/fstab

# exit

rebootした後に、rootでログインして。

# zpool create hpool raidz2 ada1 ada2 ada3 ada4 ada5
# zfs create hpool/home
# zfs set mountpoint=/home hpool/home
# zfs set mountpoint=none hpool

# gpart add -a 4k -s 32G -t freebsd-zfs -l zil0 ada0
# gpart add -a 4k -s 60G -t freebsd-zfs -l l2arc0 ada0
# zpool add hpool log gpt/zil0 cache gpt/l2arc0

/etc/login.conf and ~/.cshrc

現在のFreeBSDデフォルトの.cshrcには次のような部分がある。

# These are normally set through /etc/login.conf.  You may override them here
# if wanted.
# set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin $HOME/bin)
# setenv        BLOCKSIZE       K
# A righteous umask
# umask 22

すなわち、この部分で書かれていることはコメントアウトされているが、通常は/etc/login.confによって設定されるから書く必要はないよ、もしサイトポリシーである/etc/login.confと異なる設定をする場合には、コメントをとって設定してね、という意味だと理解できる。

/etc/login.confを確認すると、

default:\
		...
        :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\
		...
        :path=/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin ~/bin:\
		...
        :umask=022:

という感じに書かれている。だから、~/.cshrcにはset pathを書かなくても~/binにパスが通ると思う。しかし、それほど単純ではないようだ。

外部からログインした場合は、/etc/login.confの中身が正しく設定されて、~/binにパスが通っているが、MateのTerminalを開いた場合、

% echo $path
/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin $HOME/bin

と設定されており、~/binにパスが通っていない状態になる。

これは、MateのTerminalの設定で「ログインシェルとしてコマンドを実行する」にチェックを入れても解決しない。

したがって、現時点では~/.cshrcの3行についてコメントをとって、

# These are normally set through /etc/login.conf.  You may override them here
# if wanted.
set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin $HOME/bin)
setenv        BLOCKSIZE       K
# A righteous umask
umask 22

のようにして使用するのが便利だと思う。