Tuesday, May 03, 2016

RaspberryPi B+ Raspbian カメラの設定

ついでにRaspbianでwebcameraを使えるようにしてみよう。

こちらの有識者の記事を参考にした。
うちにあった古ーいwebcamを発掘して使用。


pi@raspberrypi:~ $ lsusb
Bus 001 Device 008: ID 2019:ab2a PLANEX GW-USNano2 802.11n Wireless Adapter [Realtek RTL8188CUS]
Bus 001 Device 005: ID 0c45:602c Microdia Clas Ohlson TWC-30XOP Webcam
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

pi@raspberrypi:~ $ sudo aptitude install motion
;
(略)
;


ファイルを2つ編集。
pi@raspberrypi:~ $ sudo cat /etc/default/motion 
# set to 'yes' to enable the motion daemon
start_motion_daemon=yes


offとなっているところをonにする。

pi@raspberrypi:~ $ sudo grep daemon /etc/motion/motion.conf
# Start in daemon (background) mode and release terminal (default: off)
daemon on
# Start in Setup-Mode, daemon disabled. (default: off)
# Note: Motion never beeps when running in daemon mode.
pi@raspberrypi:~ $ sudo grep localhost /etc/motion/motion.conf
# Restrict stream connections to localhost only (default: on)
stream_localhost off
# Restrict control connections to localhost only (default: on)
webcontrol_localhost off
# The host on which the database is located (default: localhost)

起動
pi@raspberrypi:~ $ sudo service motion start

確認は、以下にブラウザでアクセスで。
http://ipaddr:8081

画像が動いているね。

RaspberryPi B+ Raspbianでワイヤレス設定

まあもう1つのRaspbianでもワイヤレス設定をしてみようというわけです。

こちらを参考にしました。

wpa_passphraseの出力を以下に貼り付けます。

pi@raspberrypi:~ $ sudo cat /etc/wpa_supplicant/wpa_supplicant.conf
country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="your_ssid"
#psk="password"
psk=xxxxxxxxxxxxxxxxxx
key_mgmt=WPA-PSK
proto=WPA2
pairwise=CCMP
group=CCMP
priority=2

}


/etc/network/interfacesを以下のように編集しました。

pi@raspberrypi:~ $ cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

iface eth0 inet manual

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp


これでつながりました。

RaspberryPi B+, FreeBSDでワイヤレス接続

さて、先日作ったFreeBSD10.3のシステムで、ワイヤレス接続をしてみよう。

実はdmesgの出力を眺めていてwifiがまだだったなあと気づいたのでした。
念の為書いておくと、私がアマゾンでついでにポチったWifiアダプタはGW-USNANO2Aという、おそらくありふれた機種。dmesgにはライセンスを読んでオッケーだと思うならloader.confにlegal.realtek.license_ack=1と書け、とひっそりと書かれていたのでした。その辺のことはurtwnのマニュアルに書いてあります。

マニュアルだけでもわかるのかもしれないけれど、こちらの有識者の設定を参考にしました。やったのは以下。

/boot/loader.confに追加
legal.realtek.license_ack=1

create wlan0を作成
# ifconfig wlan0 create wlandev urtwn0

/etc/rc.confに追加
wlans_urtwn0="wlan0"
ifconfig_wlan0="WPA DHCP"
networkをスキャンして様子を見る
# ifconfig wlan0 up scan
/etc/wpa_supplicant.confに自分のネットワークのSSIDとパスワードを記入
network={
    ssid="your_ssid"
    psk="your_password"
}

# reboot
以上でwifiにつながりました。

Sunday, May 01, 2016

RaspberryPi B+でFreeBSD (続き)

raspberry pi B+でFreeBSDで動作確認は済んだ訳だけれど、その後、どうするか。

まず、前回ダウンロードはしたものの、使わなかったraspbianを試した。これは素晴らしい。RPB+たった512MBのメモリでありながら、頑張ってGUIとRPのロゴを表示した。Python2, Python3のIDLを表示する。えらい。Mathematicaもあるらしい。えらい。

しかし、違う。やろうと思っているのは人が作ったオモチャを使うことではないのだ。

で、まずはBSDにはNanoBSDというツールがあって、組み込み的な組み合わせが作れるらしいということを知った。でRP用のイメージを作ったつもりなのだが、うまく動かなかった。どう動かなかったかというと、画面が真っ暗だったのでどうしょうもなかった。詳細はおぼろげで、よく覚えていない。

次に、crochetというものがあり、これでRP用のイメージが作れるという話らしい。しかし、これは起動時にブートイメージは読めるらしいのだが、ディスク(SDカードね)のマウントで落ちる。mounting from ufs, failed with error 19。FreeBSD本家の情報も見たがよくわからなかった。検索でいろいろ有識者らしい人の古めの情報も見たがダメだった。

と、走馬灯のようにここ2日間のことを思い出す。

現在、最新の10.3Rのリリースノートを見て、この近辺からarm配下RPの公式ブートイメージがあるらしいことを知った。ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.3/

ここから、以下のものを頂いてddでsdcardを焼いて普通にブートしたのが以下の状態。
FreeBSD-10.3-RELEASE-arm-armv6-RPI-B.img


$ df -h
Filesystem                Size    Used   Avail Capacity  Mounted on
/dev/ufs/rootfs           3.6G    393M    2.9G    12%    /
devfs                     1.0K    1.0K      0B   100%    /dev
/dev/msdosfs/MSDOSBOOT     17M    3.9M     13M    23%    /boot/msdos
tmpfs                      30M    4.0K     30M     0%    /tmp
$ sysctl hw.physmem
hw.physmem: 495087616
$ uname -a

FreeBSD rpi-b 10.3-RELEASE FreeBSD 10.3-RELEASE #0 r297264: Fri Mar 25 08:01:14 UTC 2016     root@releng1.nyi.freebsd.org:/usr/obj/arm.armv6/usr/src/sys/RPI-B  arm


私の懸案であった、既存のUSBドライブの確認まではできた。

root@rpi-b:/home/tsuchiya # dmesg | grep da0
da0 at umass-sim0 bus 0 scbus0 target 0 lun 0
da0: Fixed Direct Access SPC-4 SCSI device
da0: Serial Number 1111114000D1
da0: 40.000MB/s transfers
da0: 1907729MB (3907029158 512 byte sectors)

da0: quirks=0xa


(まだ終わってない)

Sunday, April 24, 2016

RaspberryPi B+ 動作確認 with RaspBSD

ラズパイなるものを買ってみた。動作確認してみよう。

買ったのは、Pi B+とmicroSD カード、USB WifiのPlanexなんたらというもの。Pi B+と一緒に買う人が多いという組み合わせで。

電源はガラケーのmicro usbの充電器を使い、画像出力はテレビのHDMIに出すので、ケーブルはもうある。キーボードはMac Miniのやつを一時的に使う。



OSは、http://raspbsd.org/raspberrypi.htmlからFreeBSD-armv6-11.0-RPI-B-292989.img.gzというのを選択。

Raspberry本家のRaspbian https://www.raspberrypi.org/downloads/raspbian/もダウンロード開始したのだが、BSDの方が先に終わったので、BSDを使うことにした。

Mac MiniのSDカードスロットにカードを入れて、以下でカードを焼きました。




電源を入れると、テレビにブート画面が出た。どうやらwifiは有効になっていないし、このwifiカードを有効にするにはrsuというモジュールを入れてカーネルをビルドしないといけないらしいので、wifiは後日考えることにした。

とりあえず有線のLANケーブルをMac Miniからうばって、接続し、別のMacからSSHで繋ぐとちゃんと入れた。



所要時間1H。




Saturday, April 23, 2016

FreeBSD ZFSでNFS

次にNFSの設定。いや。別に使わないのだが、復習のためです。

rc.confに以下を入れておく。

root@freebsd@10:/usr/home/tsuchiya # cat /etc/rc.conf
(略)
zfs_enable="YES"
nfs_server_enable="YES"



使うのは以下のtank/home。

root@freebsd@10:/usr/home/tsuchiya # df
Filesystem         1K-blocks    Used   Avail Capacity  Mounted on
/dev/ada0p2          1928476 1494920  279280    84%    /
devfs                      1       1       0   100%    /dev
tank                 2013612      19 2013593     0%    /tank
tank/home            2013612      19 2013593     0%    /tank/home
tank/home/tsuchiya   2015553    1959 2013593     0%    /tank/home/tsuchiya


ZFSのshareの設定。
root@freebsd@10:/usr/home/tsuchiya # zfs set sharenfs="localhost" tank/home
Unsupported share protocol: 1.
Unsupported share protocol: 1.

文句を言われるが気にしないで良いらしい。
確認。

root@freebsd@10:/usr/home/tsuchiya # zfs get sharenfs
NAME                PROPERTY  VALUE      SOURCE
tank                sharenfs  off        default
tank/home           sharenfs  localhost  local
tank/home/tsuchiya  sharenfs  localhost  inherited from tank/home


これが、設定ファイルに自動的に書かれるらしい。
root@freebsd@10:/usr/home/tsuchiya # cat /etc/zfs/exports 
# !!! DO NOT EDIT THIS FILE MANUALLY !!!

/tank/home localhost 
/tank/home/tsuchiya localhost 


root@freebsd@10:/usr/home/tsuchiya # showmount -e
Exports list on localhost:
/tank/home/tsuchiya                localhost 
/tank/home                         localhost 


nfsのスタート。

root@freebsd@10:/usr/home/tsuchiya # service nfsd start
NFSv4 is disabled
Starting nfs.


立ち上がってるサービスの確認。
root@freebsd@10:/usr/home/tsuchiya # rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  rpcbind
    100000    3   tcp    111  rpcbind
    100000    2   tcp    111  rpcbind
    100000    4   udp    111  rpcbind
    100000    3   udp    111  rpcbind
    100000    2   udp    111  rpcbind
    100000    4 local    111  rpcbind
    100000    3 local    111  rpcbind
    100000    2 local    111  rpcbind
    100005    1   udp    696  mountd
    100005    3   udp    696  mountd
    100005    1   tcp    696  mountd
    100005    3   tcp    696  mountd
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs



ウントしてみよう。

root@freebsd@10:/usr/home/tsuchiya # mount localhost:/tank/home /mnt
root@freebsd@10:/usr/home/tsuchiya # df
Filesystem           1K-blocks    Used   Avail Capacity  Mounted on
/dev/ada0p2            1928476 1494928  279272    84%    /
devfs                        1       1       0   100%    /dev
tank                   2013611      19 2013592     0%    /tank
tank/home              2013611      19 2013592     0%    /tank/home
tank/home/tsuchiya     2015551    1959 2013592     0%    /tank/home/tsuchiya
localhost:/tank/home   2013611      19 2013592     0%    /mnt


設定に失敗して"permission denied"というようなことを言われて、mountできないことがあり、そうすると何度も繰り返し試すことになるので、上の順番でよかったのかどうかが不明なのだが、とりあえず出来た風だ。ちゃんと使うにはsharenfsのオプションを変えないとダメだが。

lockdなどが上の例だと上がっていない様子だが、rc.confにこれも入れるべきなのかもしれない。

#rpc_lockd_enable="YES"
#rpc_statd_enable="YES"

SolarisのZFSはもっと簡単だった気がするなあ。


Friday, April 22, 2016

FreeBSD ZFSでsambaの設定

どうも概要に相当する記事がなくて、いろいろ探さなければならなかったのでメモがきをする。


sambaは適当にpkgで入れる。3と4で多少変わってくるところがあるかもしれない。私は3を入れた。

FreeBSDのZFSの構成は普通通りにやるとして、filesystemを共有する設定から。
smbのZFS側の設定。unsupported云々と文句を言われるのは気にしないで良いらしい。

root@freebsd@10:/usr/home/tsuchiya # zfs list
NAME                 USED  AVAIL  REFER  MOUNTPOINT
tank                2.05M  1.92G    19K  /tank
tank/home           1.93M  1.92G    19K  /tank/home
tank/home/tsuchiya  1.91M  1.92G  1.91M  /tank/home/tsuchiyaroot@freebsd@10:/usr/home/tsuchiya # zfs set sharesmb=on tank/home
Unsupported share protocol: 1.
Unsupported share protocol: 1.
root@freebsd@10:/usr/home/tsuchiya # zfs get sharesmb
NAME                PROPERTY  VALUE     SOURCE
tank                sharesmb  off       default
tank/home           sharesmb  on        local
tank/home/tsuchiya  sharesmb  on        inherited from tank/home

root@freebsd@10:/usr/home/tsuchiya # 


rc.confに以下をいれる。


root@freebsd@10:/usr/home/tsuchiya # cat /etc/rc.conf

(略)
samba_enable="YES"


以下をお好みで編集。


/usr/local/etc/smb.conf


起動。


root@freebsd@10:/usr/home/tsuchiya # service samba start

Removing stale Samba tdb files: ....... done
Starting nmbd.
Starting smb.


ユーザの登録。

root@freebsd@10:/usr/home/tsuchiya # smbpasswd -a somebody

MacOSXからの確認方法は、Finder>移動>サーバへ接続、でできる。


sambaのexportに関して、ZFS側の仕事は何だったのだろうなと思うのだが、よくわからない。


Saturday, April 16, 2016

「原子力政策研究会 100時間の極秘音源」

知らなかったですね。こういう経緯で日本で原子力が始まったとは。無知とは愚かなり。「原子力ムラ」の方々の証言をまとめた本。

日本の原子力導入で、立役者は当時議員だった読売新聞の正力松太郎、それと中曽根康弘。1950年代です。この偉い人たちのリーダーシップが強烈すぎたようだ。しかもあまり専門家の言うことは聞かなかったらしい。まあ、周りの人としては、偉い人のせいにしておけば良いというバイアスがあるのかもしれない。とにかく60年前に始まることなので、当時の責任者はもうこの世にいない。

1950年代の「科学技術」というのはまさに死活問題で、それで中曽根さんは科学技術の推進の為に原子力を推したということだ。現在の人工知能などの科学技術とはちょっとレベルが違うかなと思う。また、こんなにできるかどうか判然としない技術を確立するのは大変だったろうと思う。逆に昔だったからできたことなのかもしれない。

原子力発電所の建設の説明の時にはもちろん安全を謳う必要があった。ある程度商業ベースに乗ってきてからはコスト重視で稼働率を上げることが命題となり、やはり安全性は二の次だった。いやな感じなのは、安全に対する「懸念」が公表しにくいという点。「まだそんなことができてないのか」という批判を恐れて言えないことがあるという話。「原子力ムラ」って、原子力推進に批判的なことを言うと、村八分になる場所らしい。村八分、つまり次の仕事は来なくなる。

活断層と地震に関係があるということが定説となったのは、比較的最近のことなので、多くの原発は断層とは関係なく建っている。(本当だろうかと思って調べたら、どうやら本当で、活断層が注目されるようになったのは阪神淡路震災からで、「活断層学会」ができたのは21世紀のことらしい)

資源の無い国、日本。資源を東南アジアに求めて太平洋戦争を起こした。その反省。核武装を続けるためには、核の平和利用が同時に必要だったアメリカ。

廃棄物であるプルトニウムを燃料として使う核燃料サイクルが究極の夢だったが、これは破綻していて、ゴミはたまる一方となっている。総合的に見ると今まではなんとかやってきたけれど、今後のエネルギー問題は、別の方向で考えた方が良いのではないかと思う。




Sunday, April 10, 2016

delicious.com

以前はdelicious.comがつぶれるのではないかという懸念で、google bookmarkにexportしたことがあったのだけど、今回は、delicious.comが作り替えで不安定になっていて、saveしようとするとダメだった、でも実はsaveできている、みたいなことが続いているのでgoogleに移しておこうと思った。
deliciousからhtmlでexportすることはできた。
https://secure.delicious.com/settings/bookmarks/export

それをgoogle bookmarks https://www.google.co.jp/bookmarks/ にimport する方法はとうとうわからなかったので、chromeのbookmark extensionでimportした。この2つはどうやら別のもので、google bookmarksからは見えないようだ。

なんか変だなあ。bookmarkなんて儲からないからみんな熱心に取り組まないのだろうか。

Saturday, April 02, 2016

python3メモ:unicode

python3になって、エンコード関係でエラーを受けるようになった。いろいろ読むと、python2からpython3で「正しく」なっているようだが、わかりづらい点があるようだ。私もようやく話が見えてきたので、理解を確かめるためにメモしておきたい。

ややこしくなるので、今回はpython2の話は書かないことにする。

まず、文字コードは内部の表現と、入出力が別であって、内部表現はstr型である。これはunicodeでもある。str型はunicodeと同じでpython3では区別がない。入出力できる文字コードはsjisやutf-8などである。これらの型がbytes型である。

つまり、ファイルの内容や、ファイル名などはbytes型としてプログラムに入ってくるので、必要に応じてstr型に変換する必要がある。

変換は、
str -> bytesとするのをencode、
bytes -> strとするのがdecode
となっている。内部表現のstr型が中心だと思えば覚えられるだろう。

要素として、
関数が受け付ける型
ファイルの中身
ファイル名
ロケールとprint()がやってくれる処理
ということが同時に登場するので、混乱するのだと(少なくとも私は)思う。



情報としては、まず、何と言っても公式のページが丁寧だった。

あと、こちらの偉い人が書かれた記事も有用だった。

先ほどこちらの記事を見つけたが、まだちゃんと読んではいない。
http://python-notes.curiousefficiency.org/en/latest/python3/text_file_processing.html

ここで例題をやってみよう。

# 基本編
string = 'アイウエオ'
type(string) # str
print(string) # アイウエオ
ustring = u'アイウエオ' #python3では'u'をつける必要はない。つけても怒られない
type(ustring) # str
print(string==ustring) # True

#変換
bytestr = bytes(string) # TypeErrorで失敗
# エンコードを指定してエンコードする必要
bytestr = bytes(string, 'utf-8')
bytestr2 = string.encode('utf-8')

print(bytestr==bytestr2) # True この2つは同じことのようだ。

print(bytestr) #b'\xe3\x82\xa2\xe3\x82\xa4\xe3\x82\xa6\xe3\x82\xa8\xe3\x82\xaa'

# ファイルへの出力
# デフォルトのコーディングで出力
f=open('Desktop/test_text.txt','w')
# writeに渡すのはstr
f.write(string)
# f.write(bytestr) # TypeError: write() argument must be str, not bytes
f.close()

# 確認してみる。
# $ file Desktop/test_text.txt
# Desktop/test_text.txt: UTF-8 Unicode text, with no line terminators

# 以下のように出力のコーディングを指定できる。
f=open('Desktop/test_text_sjis.txt','w',encoding='sjis')
f.write(string)
f.close()


# str型をprint()に渡して、処理してくれる場合と、できない場合がある。
print(string) #この場合はOK. アイウエオ

# utf-8を手で入力してみる。
T = b'\xe3\x80\x92' #e3 80 92
print(T.decode()) # 郵便マーク 〒

#サマリア文字というのがあるらしいので、ついでにそれも入力してみる。
samaria = b'\xe0\xa0\x80'
print(samaria.decode()) # Samaritan サマリア文字  ࠀ

# デフォルトのコーディングが上記のようにutf-8ならば変換してくれるが、以下のようにロケールがASCIIになっていると、UnicodeEncodeErrorで失敗する。
$ LANG=C
$ python3
Python 3.5.1 (default, Dec 31 2015, 09:25:09)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.1.76)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

>>> t = b'\xe3\x80\x92' #e3 80 92 郵便マーク
>>> print(t.decode())
Traceback (most recent call last):
  File "", line 1, in
UnicodeEncodeError: 'ascii' codec can't encode character '\u3012' in position 0: ordinal not in range(128)

>>> samaria = b'\xe0\xa0\x80'
>>> print(samaria.decode())
Traceback (most recent call last):
  File "", line 1, in
UnicodeEncodeError: 'ascii' codec can't encode character '\u0800' in position 0: ordinal not in range(128)

# decodeでのコード指定。間違ったコードを指定すると、エラーが返る。
print(T.decode('sjis'))

UnicodeDecodeError: 'shift_jis' codec can't decode byte 0x92 in position 2: incomplete multibyte sequence


まだ他にもあるような気がするけれど、とりあえず今日はここまで。