今日も微速転進

ここではないどこかへ

Raspbian Stretch Lite で突然無線LANに接続不能になったとき

引き続きラズパイ関連ネタで。無線LANのトラブルに関して(Voice Kitは無関係です)。

問題なく無線LANに接続できていたのに突然接続できなくなってしまった場合の話。

Qiitaに書こうと思ったが、唐突に買収されたらしいのでちょっと様子見。

非常に冗長な記事なので結論を先に書いておくと、rfkillコマンドがポイント。インストールして/etc/rc.localrfkill unblock wifと1行入れれば解決。

その場しのぎの解決策ではあるけど。

環境

  • ブロードバンドルーター: NEC WX01 (WiMAX2+)
  • Raspbian Stretch Lite (2017/11/29 ver. )
  • Raspberry Pi model 3B

環境要因ではなさそう。

現象

初回セットアップ直後は問題はなく、普通に無線LANに接続できていた(はず)。

接続が不安定とかそういうのではなく、特定のタイミングからさっぱりつながらなくなってしまった。

パッケージを追加後の後処理が実行されている最中(systemd 関係のフック処理?)で通信が途切れて再起動しても接続できず。

$ sudo ip link set wlan0 up
RTNETLINK answers: Operation not possible due to RF-kill

"RF-kill"に関してはArch LinuxのWikiが参考になった。無線LANデバイスをソフトウェア側で無効化するスイッチがあり、これを"RF-kill"と呼ぶらしい。

ワイヤレス設定 - ArchWiki

理由はわからないが、無線LANデバイスを無効化するための内部ロックがセットしたまま解除されてない状態。

ソフトウェア的に無線LANが無効化されているので接続処理が実行されない。

対処

無線LANデバイスの内部ロックを外すためにrfkillコマンドが必要だがRaspbian Liteではインストールされていない。 有線ネットワークにつないでrfkillパッケージをaptでインストールする。

$ sudo apt install rfkill

以下のコマンドでロックを外すことができる。

$ rfkill unblock wifi

この状態で、再度ipコマンドでデバイスを有効化する。

$ sudo ip link set wlan0 up

成功していれば、無事にIPアドレスを取得できるはず。

その他

rfkillコマンドの他のオプションとして、listで現在のデバイスのブロック状態を確認できる。

$ rfkill list
0: phy0: Wireless LAN
    Soft blocked: no
    Hard blocked: no
1: hci0: Bluetooth
    Soft blocked: yes
    Hard blocked: no

ラズパイの無線LANモジュール用のカーネルモジュール名はbrcmfmacなので、以下のようにしてカーネルのログを絞り込んだりできる。

$ dmesg | grep brcm

あとはjournalctl -lでログを見る。

再起動のたびに接続不能になる場合

上記で問題が解決するかと思いきや、手元の環境では解決せず。とりあえずudevsystemdが容疑者。

systemd-udevd[169]: Process '/usr/lib/raspberrypi-sys-mods/rfkill-persist' failed with exit code 1

頑張って調べていくと、udevは/lib/udev/rules.d/15-rfkill.rulesというルールにより、/usr/lib/raspberrypi-sys-mods/rfkill-persistというスクリプトを実行している。

このスクリプトはどういうスクリプトかというと、/dev/rfkill の状態が変化した時にudev経由で実行されるもの。 こいつは何をしているかというと、/lib/systemd/systemd-rfkillというコマンドを引数付きで実行するのだが……。

ところがこのsystemd-rfkillコマンドは引数を要求しない。よって必然的にエラーになる。

$ /lib/systemd/systemd-rfkill save wifi
This program requires no arguments.

このコマンドは何をするかというと、ソースを見る限り、udevイベントの状態をチェックして、/var/lib/systemd/rfkill/ディレクトリ配下のファイルに状態を記録あるいは読み出すコマンド。

マニュアルによるとカーネルのコマンドラインオプションをチェックするので無効化自体はできるみたいだけど、そもそも状態の保存に失敗しているので、オプションに関係なくうまく動いていないのでは……。

試行錯誤のメモ

とりあえず問題のあるスクリプトを修正してみた。

$ sudo vi  /usr/lib/raspberrypi-sys-mods/rfkill-persist

要するに引数なしで実行すればいいので、3行目のコマンドの引数2つを削除。

#!/bin/sh
#RFKID=`basename $DEVPATH`
#/lib/systemd/systemd-rfkill save $RFKID
/lib/systemd/systemd-rfkill

2行目をコメントアウト。3行目をコピーして元の行をコメントアウト。コピーした行は引数を除去。

もう一度、sudo rfkill unblock wifiを実行して再起動。やはり解決せず。

結論

仕方がないので、/etc/rc.localでお茶を濁す。まあその場しのぎなんだけど。

以下の1行を/etc/rc.localの、# By default this script does nothing.という行の下に追加。

/usr/sbin/rfkill unblock wifi

systemd、バグってんじゃないのかと思いつつ、ググってもそれらしいバグは上がってない。それとRaspbianのGUIなしを使うユーザはあまり無線LANは使わないのかな……。

適切かどうか断言できないけど、udevルールのうち、/lib/udev/rules.d/15-rfkill.rulesというのは無駄ではないかと思う。理由としては"systemd-rfkill"というサービスが存在しており起動時と終了時に実行されるはずなので*1

参考情報

古いバージョンのRaspbian向けの情報だと、/etc/network/interfacesを編集しろと書いてあるけどこれは不要。 同時に、/etc/network/interfaces.dも空で問題なく無線LANは接続できる(前述のRF Kill問題さえなければ)。

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

上記の設定ファイルでインクルードしているディレクトリは空。

pi@raspberrypi:~ $ ls /etc/network/interfaces.d
pi@raspberrypi:~ $

なお、天下無双の嫌われ者?、systemd様がよろしくやってくれるので、wpa_supplicant.serviceも無効のままで問題ない。

$  systemctl is-enabled  wpa_supplicant.service
disabled

IPアドレスを固定したいとかそう言うのはdhcpcdでやるか、systemd-networkdにやらせろということらしい。

なお、ifupおよびifdownコマンドの応答を見ると、デバイスがみつからないように見えるが、この状態でも正常につながるので気にしなくていい。

$ ifup wlan0
ifup: unknown interface wlan0

まとめ

ちゃんとRaspbianのネットワークまわりの初期化処理の流れを把握していないので勉強しないとまずそう。

良くも悪くもハードウェアの知識が知らずと身につくのがLinux系のいいところ。Windows にrfkill相当のコマンドがあるのか知りませんが。 トラブルの度に今まで知らなかった知識が増えるんでこういうのも(たまには)悪くない*2

関連リンク

*1:サービスの"status"が"static"になっている

*2:もちろんお金とか締め切りが絡んでいない時に限る

Google AIY Voice Kit (Google Homeもどき)のセットアップ

月曜日に到着したGoogle AIY Voice Kitを日曜日にセットアップしているってのはどうなんでしょう。

f:id:atuyosi:20171225033004j:plain:w320

Google AIY Voice Kit 販売開始のご案内 - Raspberry Pi Shop by KSY

国内正規品の初回ロット。最近の出荷分には日本語ガイドがついているそうです*1

何はともあれ、セットアップ。

Google AIY Voice Kitとは

ざっくり言うとGoogleがリリースしたスマートスピーカー(ホームスピーカー)の組み立てキットです。
発表されたのは少し前ですが、日本国内でも正式に販売が開始されたということで購入。

Google のAI Yourself プロジェクトの第一弾としてリリースされたもの。現在は第二弾のVision Kitというのもリリースされています。

このVoice KitはRaspberry Pi model 3Bと組み合わせることで、音声認識を活用した「何か」を作れますよ、というキット。

Voice Kit 自体は税抜き3,000円ですが、別途、Raspberry Pi model 3Bと電源アダプタ、microSDなどを用意する必要があります(Vision Kit の方はRaspberry Pi Zero WとPi Cameraが必要)。

Google Home もどきの自作キットという認識でよろしいかと。


Raspberry Pi mdel 3Bを組み込むので、ラズパイ関連のノウハウなり周辺機器の一部を利用できて色々と遊べる、はず……。

開封の儀

公式のページの写真と何も変わりはないですが、一応。

f:id:atuyosi:20171225033211j:plain:w480
英語のガイド本つき。

f:id:atuyosi:20171225033215j:plain:w480
外装のダンボールがお目見え。

f:id:atuyosi:20171225033222j:plain:w480

部品一式。

用意するもの

  • Raspberry Pi moedel 3B
  • 両面テープ
  • 精密ドライバー
  • microSD & SDカードアダプタ
  • HDMI接続のディスプレイ(VNCを使わない場合)
  • キーボードおよびマウス(VNCを使わない場合)

ドライバーは"#00"のサイズのものが必要と書いてあります。ダイソーの精密ドライバーセットで全く問題ないです。

ディスプレイとキーボード、マウスは無くてもSSH+VNCで作業するので無くても問題ない、です。

準備

事前にOSのイメージファイルをダウンロード。

2017年12月23日時点でaiyprojects-2017-09-11.img.xzというファイル名でした。

Etcherで書き込み。圧縮ファイルに対応しているので、xz形式のファイルを直接指定してOK。

一度microSDを取り外し、ssh接続用に小細工しておきます。

$ touch /Volumes/boot/ssh

Finderからbootというボリュームをマウント解除して取り出し。

2017年12月現在、旧式のRaspbian Jessie、つまりDebian 8ベースのRaspbianにサンプルコード一式を追加した代物のようです。

セットアップ作業

注意点

ラズパイ側に放熱用のヒートシンクを取り付けている場合、高さによっては接触するので取り外す必要あり。

基盤の取り付けと配線

それほど難しい英語ではないので、写真を見ながらゆっくり作業して行けば問題ないです。ドライバーはちゃんと寸法のあったものを使う、ぐらいでしょうか。

ちょっと拍子抜けするレベル。スペーサーの取り付けがちょっと力がいるので手こずるかも。

一通り取り付けて、配線を確認したら外装に組み込み。

f:id:atuyosi:20171225033707j:plain:w480

f:id:atuyosi:20171225034245j:plain:w480

片方の側面にだけ穴があるのはやはり内部からケーブルを取り出せということ?


分解はできなくはないですが、ラジオペンチでスペーサーの頭をつまむ必要があります。

電源投入

microSDをセットして電源ケーブルを接続。 無線は面倒なのでネットは有線に逃げました。

説明書にLEDの状態をチェックしろと書いてありますが、、本体上部の赤いボタンのLEDはプログラムを動かさない限り光らないようです。説明書の記述が間違っているとか。

ソフトウェア側の設定

前述のとおり、公式ページで提供されているOSはRaspbianそのものなので基本的にRaspbian Jessieのセットアップと同じ。まずはsshでログインしてVNCを有効化。

VNC

$ sudo raspi-config

VNCを有効化する。

過去記事を同じなので省略。

Raspbian Stretch Lite とVNC - ながいものには、まかれたくない

$ sudo vi /boot/config.txt

以下の2行の行頭のコメント記号を外す。

framebuffer_width=1280
framebuffer_height=720

スピーカーとマイクの動作チェック

とりあえずVNCで接続する。

警告が出るのでパスワードは変更しておく。

ログインするとデスクトップに"Check audio"というアイコンがあるのでおもむろにダブルクリックすると、端末エミュレータのウィンドウが開いていきなりスピーカーから音声が聞こえる。

テキストメッセージの指示に従ってEnterを押してから"Testing 1,2,3"と読み上げるとスピーカーから自分が読み上げた音声が再生される。

なぜか音量でかいので注意。

f:id:atuyosi:20171225031857p:plain:w480

Assistant APIの動作確認

APIの有効化

https://console.cloud.google.comにアクセスする。ラズパイ上でアクセスしてもいいし、普段使いのマシンで作業してJSONを転送してもいい。

  1. プロジェクトを作成
  2. Assistant APIを有効化
  3. OAutuの認証キーを作成してJSONファイルをダウンロード

別のマシンからVoice Kit内部のラズパイに送る場合は、以下のようにする。

$ scp Downloads/client_secret_*.json pi@raspberrypi.local://home/pi/

ラズパイ側で、ファイル名をassistant.jsonにリネームする。

$ mv client_secret_*.json assistant.json

`https://myaccount.google.com/activitycontrols'にアクセス。

  • ウェブとアプリのアクティビティ
  • 端末情報
  • 音声アクティビティ

の3つを有効化する。

[2017/12/27 追記]

「ウェブとアプリのアクティビティ」という項目に関しては、以下のチェックボックスをオンにしないと定形応答しか帰ってきません。チェックしなくても音声認識は動作するようです。

Chrome の閲覧履歴と Google サービスを使用するウェブサイトやアプリでのアクティビティを含める

f:id:atuyosi:20171227184742j:plain

何を話しかけても同じ応答メッセージが帰ってくる場合はアクティビティの設定を確認。

権限不足の場合は何かが足りないのでGoogleのページを参照しろ、という応答が返ってきます。

"Actually? There are silence? XXX your development? Going to Google web site your phone? for more detail."(イマイチ聞き取れず)。

参考:Configure a Developer Project and Account Settings  |  Google Assistant SDK  |  Google Developers

[追記ここまで]

デモプログラムの実行

デスクトップ上にある、"Start dev terminal"をダブルクリック。端末エミュレータのウィンドウが起動するので、``と入力してEnterキーを押す。

デモプログラもの動作が始まると、赤いボタンの内蔵LEDが点滅する。

"OK, Google"と話しかけると反応がある。ただし、発音を英語っぽく”オーケイ、ゴオゥゴォ”みたいに呼びかけないと反応しない……。

なんか早口で会話が成立していない。

付属のデモプログラムについて

全部で4つデモプログラムが付属。Assistant API のAPIキーで動くのは以下の3つ。

  • AIY-voice-kit-python/src/assistant_library_demo.py : "OK, google"という呼びかけに反応するサンプル
  • AIY-voice-kit-python/src/assistant_library_with_button_demo.py : "OK, google"という呼びかけか、ボタンを押すと反応するサンプル
  • AIY-voice-kit-python/src/assistant_grpc_demo.py : ボタンを押すと認識した音声がコンソールに表示されるサンプル

デモプログラムの返答は固定っぽい。"OK, google"ではなく"Hey, Google"でも反応する。

最後の1つはCloud Speech APIを有効化する必要があるサンプル。月1時間までは無料ですが、それ以上は課金されるので注意。

  • AIY-voice-kit-python/src/cloudspeech_demo.py : ボタンを押すと音声がテキストに変換される(要カスタマイズ?)

Assistant APIと同じ要領で、Google Cloud Speech APIのAPIを有効化し、サービスアカウントのAPIキーを作成する必要あり。認証情報のJSONファイル(プロジェクト名で始まるファイル)を入手してcloud_speech.jsonにリネームしてホームディレクトリに配置すると動く。

公式ドキュメント参照:Create a service account and credentials  

普通のRapsbianとの違い

再配布に制限のあるパッケージを除去して拡張基板(VoiceHat)用のドライバ類がインストールされただけ?

dmesgコマンドの出力を見ると、voicehat-codeというのが認識されています。

$ dmesg | grep voicehat
[    2.687675] voicehat-codec voicehat-codec: property 'voicehat_sdmode_delay' not found default 5 mS
[    3.880121] snd-googlevoicehat-soundcard soc:sound: voicehat-hifi <-> 3f203000.i2s mapping ok
[   18.092070] voicehat-codec voicehat-codec: Enabling audio amp...
[   19.201221] voicehat-codec voicehat-codec: Disabling audio amp...
[   34.730969] voicehat-codec voicehat-codec: Enabling audio amp...
[   34.737530] voicehat-codec voicehat-codec: Enabling audio amp...
[   37.056762] voicehat-codec voicehat-codec: Disabling audio amp...

カーネルまわりは普通っぽいし。

 uname -a
Linux raspberrypi 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux

いまいちよくわかりませんでした。

所感など

どこからどこまでラズパイ側で処理しているのかちょっと不明です。"OK, Google"だけラズパイ側でTensorflowでやってるとか?

構造上、Pi Camera は使えないです。それとヒートシンクが干渉するというのはちょっと盲点でした。いわゆるHATシリーズは今まで試したことがなかったので気づきませんでしたよ。

ダンボール筐体にボタンというのも趣があります。

問題は自宅に赤外線リモコン対応機器がロクにないとか、遠隔操作可能な家電がないってことですかね。

はんだ付けしてやればスピーカーをモノラルからステレオに拡張できるみたいですし、付属の冊子を読む限りサーボモータをつないだり色々できるようです。

入手方法について

KSYから買うのが確実ですが、、入門セットがamazonでも購入できる状態になっているようです。

はてなのAmazon商品紹介、検索にヒットしてもうまくリンクされないのはちょっと困るんですが。

まとめ

なんだかんだで遊べそうです。基本的にスピーカーとマイクとプラスアルファなのに。

次の目標は日本語の呼びかけに反応させることと、USBのカメラの制御ぐらいはやらせたい。

*1:別にいらないけど

ラズパイ版のVivaldiを試す

VivalidiというWebブラウザの、Raspberry Pi向けのバージョンがリリースされているので試してみた。

公式プレリリース:Vivaldi releases browser for Raspberry Pi and ARM devices | Vivaldi Browser

公式のアナウンスから間が空いているけどせっかくだし。

パッケージの入手

vivaldi.com

ラズパイのGUI環境からVivaldiのページにアクセスし、「その他のプラットフォーム」のリンクをクリック。

Linux向けパッケージの中から”Vivaldi 1.13 32bit ARM DEB (Unsupported)”のような"ARM"という文字列入りのリンクを探してdeb形式のパッケージをダウンロードする。

インストール

何も考えずにインストールするとパッケージの依存関係でエラーが出るので先にフォントをインストールする。

$ sudo apt install fonts-liberation

続いてVivaldiのバッケージ。

$ sudo dpkg -i vivaldi-stable_1.13.1008.40-1_armhf.deb

サポート対象外らしいので自己責任で。

起動方法は、メニューからたどるか、端末エミュレータで

$ vivaldi &

f:id:atuyosi:20171224015429j:plain:w480
……こいつ、動くぞ?

感想

Youtubeの動画で試してみたが、流石に動画の再生はいまいちの様子。

動画は最初の数秒だけ再生されるけど、途中でローディングのマーカーがくるくる回り続けて再生できない。

f:id:atuyosi:20171224015442j:plain:w480

逆にいうと動画再生系以外は普通に表示されている。

ラズパイ公式のChromium+adobe-flashpluginパッケージの構成で動画再生はできるので、VivaldiからFlashのプラグインを読み込めるなら行けそうな気もする。

実験的にリリースしたんだろうし、まあ当然と言えば当然の結果。何より選択肢が増えるのは喜ばしい話。


今後に期待ということで。

Raspbian Stretch Lite とVNC

引き続きラズパイ関連。

VNCの設定について。

前提

  • Raspbian Stretch Lite
  • ディスプレイは接続しない
  • クライアントにReal VNCを使わない前提

基本的な作業は以下の公式ガイドと同じ。

www.raspberrypi.org

パッケージの追加

$ sudo apt install realvnc-vnc-server

これだとミニマム構成というかXサーバーもウィンドウマネージャもインストールされていないので、VNCで接続しても真っ黒な画面が表示されるだけ。

適当なデスクトップ環境をインストールする。

以下はLXQtの例。

$ sudo apt install lxqt xinit

要はX サーバー本体と最小限のツール類を入れればいいんだけど不便だし。

GUIの設定ツールも入れておく。

$ sudo apt-get install rc-gui

本気で最低限で行きたいなら、下記のようにopenboxとXサーバー本体をインストールすればいいはず(試していません)。

$ sudo apt-get install xserver-xorg-core xserver-xorg-input-all \
xserver-xorg-video-fbdev libx11-6 x11-common \
x11-utils x11-xkb-utils x11-xserver-utils xterm lightdm openbox

参考:Should running VNC on Jessie Lite "just work"? - Raspberry Pi Stack Exchange

設定

基本設定。

$ sudo raspi-config

"5. Interfacing Option"から"P3 VNC"とたどっていくだけ。楽すぎて退屈ではあるけど。

f:id:atuyosi:20171223235635p:plain

f:id:atuyosi:20171223235654p:plain

f:id:atuyosi:20171223235700p:plain
素直に"はい(Yes)"。

f:id:atuyosi:20171223235711p:plain

f:id:atuyosi:20171223235715p:plain ”Finish"で完了。

認証に関する設定の変更

クライアントとして素直にRealVNC Viewerか、限りなく互換性のあるモノを使うならこの作業は不要。

$ sudo vi /root/.vnc/config.d/vncserver-x11

Authentication=という行があるので、右辺をVncAuthに変更。該当する行がなければ追加する。

$ sudo vncpasswd -service

適当なパスワードをセットする。接続時に必要なので忘れないこと。

関連:Raspbian (2016/09/23以降)とVNC接続 - ながいものには、まかれたくない

解像度の変更

次に、解像度の設定を変更する。

$ sudo vi /boot/config.txt

以下の行の行頭のコメント記号を外す。

framebuffer_width=1280
framebuffer_height=720

再起動。

$ sudo reboot

日本語入力

$ sudo apt install fcitx-mozc

VNCでログイン後に、インプットメソッドのON/OFFをShift+Spaceに変更する。

接続

macOSのFinder で、Cmd+kを押すと接続先の選択画面が表示されるので、vnc://raspberrypi.localと入力。

f:id:atuyosi:20171224010315p:plain

f:id:atuyosi:20171224010348p:plain
先ほどvncpasswdコマンドで設定したパスワードを入力する。

f:id:atuyosi:20171224010454j:plain:w480
ユーザーを選択し、パスワードを入力する。

f:id:atuyosi:20171224010534j:plain:w480
ログインした状態。LXQtの勇姿。

ちょっと重いので解像度を下げたほうがいいかも。

PIXEL環境にしたい場合

Raspbianの標準デスクトップ環境であるPIXELを使いたい場合は以下のように、raspberrypi-ui-modsをインストール。

$ sudo apt install raspberrypi-ui-mods

ただ、その場合は最初からRaspbian Stretch with PIXELという名前のリンクからイメージをダウンロードした方が早いと思います。

参考: [GUIDE] Raspbian Lite with PIXEL/LXDE/XFCE/MATE/i3/X11 GUI - Raspberry Pi Forums

まとめ

素直にRealVNC Viewerをインストールすると手間が省けます。まあその辺りは個人の好みの問題ってことで。

インターネット越しで使うつもりはないので、セキュリティに関してはちょっと危ないかも。

Raspbian のセットアップ(Raspbian Stretch 2017/11/29版)

久しぶりにRaspbian のセットアップ(Raspbian Stretch 2017/11/29版)。

夏のうちにやろうと思いつつ放置状態だったので。

RaspbianというのはRaspberry Piという教育用の小型PC用のOS、です。あとはGoogle先生にお尋ねください。

OpenCV 3.4がもうじきリリースされるみたいなんで、環境を構築し直してもいいかな、と。

今年の夏ぐらいからDebian StretchベースになっているのでGUI環境はともかくかなり便利になっているはず。

旧バージョンでは諸事情でffmpegのパッケージの代わりにlibavが採用されていましたが、今後はその点を気にする必要がないというのは大きいです。

方針

旧バージョンからアップグレードも可能みたいですが、諸事情でモニタを処分したり色々しているので、マウスとかキーボードを接続せずにセットアップする方向で。

基本的にNOOBSは使わないです。

GUI関係はインストールしなくても後からVNC入れるとかやりようは色々あるので。

ダウンロードとmicroSDへの書き込み

手元のにWindowsマシンはないので以下のの手順はmacOS側で作業。

ダウンロード

とりあえず今回はGUIなしで。

"RASPBIAN STRETCH LITE"の方のリンクからダウンロード。

microSDへの書き込み

まずはダウンロードしたzipファイルを展開。

$ unzip 2017-11-29-raspbian-stretch-lite.zip
Archive:  2017-11-29-raspbian-stretch-lite.zip
  inflating: 2017-11-29-raspbian-stretch-lite.img

EtcherというソフトでmicroSDに書き込み。

f:id:atuyosi:20171222233001p:plain

展開したimgファイルと書き込み先のSDカードリーダーを選択する。

f:id:atuyosi:20171222175713p:plain

書き込み完了したら一度microSDを取り出し、再度カードリーダーにセットする。

もしddコマンドを使用する場合はオプションに注意されたし。

参考:Raspbian2017-05以降のイメージはddコマンドで書き込む時に追加のオプションが必要 - あっきぃ日誌

ちょっとした準備

ネットワーク経由で設定するためにちょっとした小細工をしておく。

作業としては

  • SSHを自動起動させる
  • 無線LANのパスフレーズのセット

の2点。

Raspbian のイメージを書き込んだmicroSDをセットすると、Windows/macOSではbootというバーティションしか表示されない。

というか、bootだけアクセスできるようにWindows向けのファイルシステムになっている。

このbootというパーティションにアクセスして簡単な作業をするだけ。

SSHのための設定

Finder でもターミナルでもなんでもいいので、bootsshという名前のからのファイルを作る。

例えば、

$ touch /Volumes/boot/ssh

Raspbian の起動時の仕掛け - Qiita

無線LAN(Wifi) の設定

同じ要領で無線LANに接続するための設定ファイルをbootというパーティションに配置すると自動的に適用される。

$ vim /Volumes/boot/wpa_supplicant.conf

上記ファイルに以下のように書き込んでおく。5行目のSSIDと6行目のパスフレーズを環境に合わせる必要あり。

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="your ssid"
    psk="your passphrase"
}

引用元:Raspberry Piの無線LANをmicroSDで設定する - Qiita

平文でパスフレーズを保存するのは好ましくないというのは確かにそのとおりだけど、それはラズパイの起動に成功してから修正すれば済む話では?

bootパーティションに作成したファイルは初回起動時に削除されるので、/etcの設定ファイルを編集する。

wpa_passphraseというコマンドでハッシュ化されたパスフレーズを生成できるので、これを設定ファイル(/etc/wpa_supplicant/wpa_supplicant.conf)に書き込めば良い。

あとは修正済みの設定ファイルを別のマシンにコピーしておくとセットアップし直す時に役に立つはず。

あとはmicroSDをカードリーダーから取り外して、ラズパイの本体にセットして電源を入れるだけ。

初期設定

最初の電源投入時はmicroSDのパーティションを拡張したりなんだかんだで時間がかかる。数分間のんびり待つ。

sshで接続する

環境にもよるけど、Avahi というデーモンのおかげで、ホスト名で接続できるのでpingを連打する必要はない。要するにBonjour のマルチキャスト DNS 機能と同じ。

$ ssh pi@raspberrypi.local

環境によってはこの方法は使えないので、ブロードバンドルーターなどのWifの親機か、pingコマンドで頑張るか、大人しくディスプレイを接続して確認するかのいずれかになる。

piというユーザーの初期パスワードはraspberryになっているので、速やかに変更する。

同一のサブネットにラズパイが複数存在する場合、ホスト名が自動的に修正されるのかどうかは試したことがないのでなんとも言えないでs*1

パスワード変更

前述のとおり、初期設定のままインターネットにつなぐのはよろしくないのでパスワードを変更する。

$ passwd
Changing password for pi.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

パスワード入力中のエコーバック(*が表示されたりするもの)はないので注意。

アップデート

aptコマンドで各種パッケージのアップデート。

まずはパッケージデータベースの更新。

$ sudo apt update

パッケージの更新。

$ sudo apt upgrade

なお、aptというコマンドはapt-getコマンドのフロントエンド。直接apt-getコマンドを実行してもいいですが、入力文字数が少ない方がラクなので。

raspi-configによる設定

GUIの設定メニューは使えないが、代わりにCLIの設定ツールがあるのでこれを使う。由緒正しきCLIの設定ツールという感じでカーソルキーの左右とTabキー、スペース、Enterで操作する。前の項目に戻るときはEscキーも使える。

$ sudo raspi-config

まず"4. "の"Localisation Options"から言語周りを設定。

f:id:atuyosi:20171222233031p:plain

  • "I1 Change Locale" :ロケールの生成と日本語をデフォルトに。
  • "I2 Change Timezone" :タイムゾーンの設定

f:id:atuyosi:20171222233051p:plain

f:id:atuyosi:20171222233136p:plain

f:id:atuyosi:20171222233142p:plain

次に"5. "の"Interfaceing Options"からI/O周りの設定。

f:id:atuyosi:20171222233204p:plain

f:id:atuyosi:20171222233217p:plain

"P1 Camera"という項目を選択した状態でEnter。

f:id:atuyosi:20171222233329p:plain

"Yes" か "No"を訊いてくるので"Yes"

f:id:atuyosi:20171222233347p:plain

他の項目は適宜設定。

最初のメニューに戻って、Tabキーで"Finish"にカーソルを移動してEnterを押すと再起動するかどうかの確認メッセージが表示されるので、"Yes"にカーソルを移動してEnter。

f:id:atuyosi:20171222233428p:plain

パッケージの追加

この辺は個人の好みと使い方による。

  • git
  • tmux
  • ag
  • rfkill
$ sudo apt install git tmux

後から色々追加するはず。

$ sudo apt install silversearcher-ag
$ sudo apt install rfkill

バージョン情報など

冒頭に書いたとおり、ベースのDebianのバージョンがStretchになった関係で基本的なパッケージがバージョンアップされています。 旧バージョンよりもaptでインストールできるパッケージが増えているのでデスクトップとしても結構使えるのではと思います。 例えばフォント周りとか。

Kernel

$ uname -a
Linux raspberrypi 4.9.59-v7+ #1047 SMP Sun Oct 29 12:19:23 GMT 2017 armv7l GNU/Linux

Python

pi@raspberrypi:~ $ python --version
Python 2.7.13
pi@raspberrypi:~ $ python3 --version
Python 3.5.3

gcc

$ gcc --version
gcc (Raspbian 6.3.0-18+rpi1) 6.3.0 20170516
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

その他

apt経由でインストールできるPHPは7.0、Ruby は2.3.3。

難点としてはNetatalkのバージョンが2.xのまま……。

まとめ

GUIなしのセットアップとしてはこんな感じかと。VNCサーバーについては後でセットアップする予定。


そもそもVoice Kitが届いているのでそっちで遊ぶのが先か。

*1:一台ずつセットアップしてホスト名を変えればいいのか

広告