5. Raspberry Pi ZeroにOSをインストール

 Raspberry Pi ZeroにOSとLAMPやファイルサーバーなどをインストールします。すでにインストール済みの場合は、下記の「1.インストールで発生した問題」を確認後、ざっと目を通して不足しているものがないかどうかを確認してください。不足分がわかっていれば、必要になった時点で追加インストールしてもかまいません。
 なお、インストールはPCからSSHターミナルエミュレータを介して行います。また、本プロジェクトの第2章『開発環境の準備』で述べたSSHターミナルエミュレータの「Poderosa」、「SoftPerfect Network Scanner」、「SD Memory Card Formatter」、「Image Writer for Windows」がインストールされていることを前提にしています。以下ではこれらの名称を使っているので、他の同機能ソフトを使っている場合は読み替えてください。



1.インストールで発生した問題

 OSのインストールは完了したけれど、その後のオーディオ処理になって関連ライブラリーが動作しない(音が出ない)という問題が発生しました。何度もインストールをやり直した結果、インストール時に「sudo apt-get upgrade」を実行すると、その後の再起動で、サウンドカードの認識が変わってしまうのが原因であることわかりました。
 通常は、サウンドカードの認識状態を確認すると次のように表示されます。

$ cat /proc/asound/cards
0 [ALSA ]: bcm2835_alsa - bcm2835 ALSA
bcm2835 ALSA

 それが次のように変わってしまうのです。

$ cat /proc/asound/cards
0 [Headphones ]: bcm2835_headphonbcm2835 Headphones - bcm2835 Headphones
bcm2835 Headphones


 対処方法がわからず、結局、手元で安定運用ができているRaspbian Busterの最終バージョン「February 2020」を、upgradeすることなくインストールすることで解決しました。
 すでにOSをインストール済みであれば、上記のコマンドでALSAが正しく認識できているかどうかを確認してください。

2.OSのダウンロードとSDカードへの焼き付け

(1)OSのダウンロード

 今、Raspberry PiのOSは変革期を迎えています。OSのダウンロードページのタイトルが「Raspberry Pi OS (previously called Raspbian)」と変わりました。現時点の内容はRaspbian Busterの最終バージョンの改名版と思われますが、一方で64ビットベータ版の提供が開始され、1プロセスで8GBの大容量メモリーのハンドリングが可能になるなど、期待が膨らみます。
 ここではRaspbian Busterの最終バージョンをインストールしますが、通常のダウンロードページには最新のものしかありません。そのため、下記のリンクから旧バージョンのdeskop版一覧にアクセスします。

      https://downloads.raspberrypi.org/raspbian/images/


 一番最終行の「raspbian-2020-02-14」を選択します。構成一覧が表示されるので「2020-02-13-raspbian-buster.zip」を選択してダウンロードします。


 ダウンロードファイルを解凍するとフォルダー「2020-02-13-raspbian-buster」が現れます。これをRaspberry Pi用のマイクロSDカードに焼き付けます(書き込みます)。


(2)SDカードの初期化

 プロジェクトの第2章で準備したmicroSDカードをマルチカードリーダー・ライターにセットして、Windows PCのUSBポートに接続します。メディアの初期化をするために、インストール済みの「SD Card Formatter.exe」を起動すると下の画面が開きます。必要ならボリュームラベルを入力して、[フォーマット]ボタンをクリックします。


(3)OSの書き込み

 次に、インストール済みの「Win32DiskImager.exe」を起動します。下の画面が表示されるので、まず「Device」にSDカードが選択されていることを確認します。画面のフォルダーアイコンをクリックして、先に解凍した「2020-02-13-raspbian-buster」フォルダー内の「2020-02-13-raspbian-buster.img」ファイルを指示して[Write]ボタンをクリックします。SDカードへの書き込みが始まります。


(4)インストール準備処理

 書き込みが完了するとSDカードの内容がエクスプローラーに表示されます。SDカードを取り外す前にテキストエディタ-を使って、インストール時にWi-Fi接続とSSHの有効化ができるように、SDカードに2つのファイルを作成します。
 ①ファイル「wpa_supplicant.conf」を作成して、つぎの内容を書き込みます。
 ここでSSID名と暗号化キーを設定しておくことで、Raspberry Pi起動時にWi-Fiに自動接続されます。
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
  ssid="SSID名"
  psk="暗号化キー"
}

 ②SDカードのbootに、内容が空のファイル「ssh」を作成します。このファイルが存在するとSSHが有効になります。


 以上でインストール用のSDカードが完成しました。安全にSDカードを取り外して、Raspberry Pi Zeroに装着します。


3.環境設定とIPアドレスの固定化

(1)Raspberry Piへのコンタクト

 Windows PCでSoftPerfect Network Scannerを起動してネットワークスキャンを実行しておきます。Raspberry Pi Zeroの電源を入れてしばらく待ち、再度ネットワークスキャンを実行してみます。新たな接続が現れるのでIPアドレスをメモします。
    [例] 192.168.0.31 raspberrypi.local


(2)Raspberry Piへのログイン

 Poderosaを立ち上げて、先に控えた192.168.0.31にログインします。
   ユーザー: pi
   パスワード: raspberry


(3)環境設定

 Poderosaの画面で「sudo raspi-config」と入力して環境設定処理を起動します。

 この設定はいつでもできるので後回しにしてもかまいませんが、「1」のユーザーpiのパスワード変更、「2」のネットワークオプションからできるホスト名の変更などはここでやっておきましょう。ちなみにホスト名は「RASPZ1」と設定しました。
 画面操作は、[Tab]キーでカーソル移動、[Enter]キーで項目選択ができます。それぞれの項目の入力指示に従って設定します。設定の終了は<Finish>を選択します。終了後は「sudo reboot」と入力して再起動します。


(4)IPアドレスの固定化

 IPアドレスを「192.168.0.38」に固定するケースで説明します。Poderosa画面から「sudo nano /etc/dhcpcd.conf」と入力して、etc/dhcpcd.confファイルの終端に以下の内容を追加します。なお、static routersにはDefault Gateway、domain_name_serversにはDNS ServerのIPアドレスを設定します。
interface wlan0
static ip_address=192.168.0.38/24
static routers=192.168.X.XXX
static domain_name_servers=192.168.X.XXX
static domain_search=
noipv6


(5)設定の確認

 再起動のために「sudo reboot」と入力して起動の完了を待ちます。Poderosaから、先に設定したIPアドレス「192.168.0.38」と新パスワードで接続できればOKです。さらにSoftPerfect Network Scannerで再スキャンして、変更したホスト名が表示されていることを確認します。


4.M抜きLAMPのインストール

 LAMPは「Linux + Apache + MySQL + PHP / Perl / Python」といったオープンソースソフトウェア群です。今回はデータベースソフトのMySQL(Mariadb)は対象外とします。すでにRaspbian BusterをインストールしているのでLinuxはインストール済み。またPerlとPythonも同時にインストールされているので、残すはApacheとPHPだけです。
 なお、すでにインストールされているPythonとPerlのバージョンは次の通りです。
   ・Python : Python 2.7.16
   ・Python3 : Python 3.7.3
   ・Perl : v5.28.1

(1)Apache2のインストール

 次のコマンドでインストールします。
$ sudo apt-get -y install apache2
 インストール結果のバージョンを確認します。
$ apache2 -v
Server version: Apache/2.4.38 (Raspbian)
Server built: 2019-10-15T19:53:42

(2)PHP7のインストール

 次のコマンドでインストールします。
$ sudo apt-get update
$ sudo apt-get -y install php php-dev php-fpm php-gd
 インストール結果のバージョンを確認します。
$ php -v
PHP 7.3.14-1~deb10u1 (cli) (built: Feb 16 2020 15:07:23) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.14, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.14-1~deb10u1, Copyright (c) 1999-2018, by Zend Technologies

5.FTPサーバーの構築

 FTP(File Transfer Protocol)を利用してファイル送受信を行うために、セキュリティが高く安全性に優れたvsftpd(Very Secure File Transfer Protocol Daemon)を組み込みます。
(1)vsftpdの導入

 次のコマンドでvsftpdをインストールします。
$ sudo apt-get install vsftpd


(2)設定ファイルの編集
 ①/etc/vsftpd.confの編集

1)nanoエディターで編集します。
$ sudo nano /etc/vsftpd.conf
2)以下の部分を変更します。大半は行頭のコメントアウト記号#を外すだけです。
a)anonymousユーザーを禁止
    anonymous_enable=NO#anonymousユーザーを禁止に
b)ユーザー権限設定
    local_enable =YES#ローカルユーザーは有効に
    write_enable=YES#書き込み可能に
    local_umask=022#書き込みパーミッションのマスク
c)ASCIIモードの設定
    ascii_upload_enable=YES#ASCIIでのアップロードを有効に
    ascii_download_enable=YES#ASCIIでのダウンロードを有効に
d)ユーザー権限
    chroot_local_user=YES#ローカルユーザーを制限する
    chroot_list_enable=YES#リストによる制限を行う
    chroot_list_file=/etc/vsftpd.chroot_list  #リストのパス


 ②ローカルユーザー制限リストの作成

1)ホームディレクトリより上の階層に移動できるローカルユーザーを設定します。
$ sudo nano /etc/vsftpd.chroot_list
2)利用者は改行して列挙します。ここではpiだけを登録します。
pi
 (参考)
    ホスト名やIPアドレス単位でのアクセス制限は、/etc/hosts.allowと/etc/hosts.denyで行います。
3)設定を有効にするためにvsftpdをリスタートします。
$ sudo service vsftpd restart
4)リブートします。
 (参考) vsftpdはマシン起動時に自動起動するようになっているので特に指定は不要です。
$ sudo reboot
5)次のコマンドで vsftpdの起動状況を確認します。
$ ps agx | grep vsftpd
-----------------------------------------
13348 ? Ss 0:00 /usr/sbin/vsftpd /etc/vsftpd.conf
13353 pts/0 S+ 0:00 grep --color=auto vsftpd


6.Sambaファイルサーバーの構築

 Sambaは、マイクロソフトのWindowsネットワークを実装したフリーソフトウェアです。 LinuxなどUNIX系のOSで、Windowsのファイル共有機能を提供します。
(1)SAMBAの導入

次のコマンドで sambaをインストールします。
$ sudo apt-get install samba


(2)SAMBAの設定
 ①共用フォルダーの確保

共用フォルダー(ディレクトリー)shareを確保してパーミッションを読み書き・実行ができるように設定します。
$ sudo mkdir /home/share
$ sudo chmod 777 /home/share

 ②設定ファイルの編集

1)Sambaの設定ファイルsmb.confの最終行に以下を追加します。
$ sudo nano /etc/samba/smb.conf
[share] path = /home/share writable = yes force create mode = 0777 force directory mode = 0777 guest ok = yes guest only = yes share modes = yes
2)設定を反映させるためにSambaをリスタートします。
 次のようにsmbdとnmbdを個別にリスタートさせます。
$ sudo service smbd restart
$ sudo service nmbd restart
3)Sambaの状態を確認します。
$ sudo service smbd status
   


(3)動作確認

 Windows PCのSoftPerfect Network Scannerを起動します。
 スキャンすると192.168.0.38 コンピュータRASPZ1が見え、これを展開するとshareフォルダーが表示されます。


7.その他のインストール

(1)管理者権限の設定

 リモートデスクトップを管理者権限で起動するには、管理者権限でログインする必要があります。rootを管理者にする場合は、次のようにしてrootパスワードを設定します。
$ sudo passwd root
新しいパスワード:
新しいパスワードを再入力してください:
passwd: パスワードは正しく更新されました
 それでは、リモートデスクトップを管理者権限で起動してみましょう。スタートメニューから[Windowsアクセサリ]を展開して「リモートデスクトップ接続」を選びます。コンピューター欄にIPアドレスまたはコンピュータ名を入力して[接続]をクリックします。
   

 ログイン画面が表示されるので、usernameにroot、passwordに先に設定したパスワードを入力して[OK]をクリックします。
   

 しばらくするとRaspberry Piのデスクトップ画面が表示されます。この状態では、テキストエディターを立ち上げてシステム情報ファイルの内容を書き換えたり、ファイルやフォルダーの複写や削除ができます。便利ですが、誤操作によってシステムを破壊する危険な状態です。必要な場合だけ限定的に使用して、その他でGUIを必要とする場合は、piなどの一般ユーザーでログインしましょう。
   
 余談ですが、poderosaなどで常にrootで実行する場合は
$ su
パスワード:
#
とすることで、行ごとに入力するsudoを省略できます。ただ、これも不用意な操作がシステム権限で実行されるので、特別な場合以外は慎みましょう。exitで元の一般ユーザーに復帰することができます。


(2)日本語環境の設定

 Raspbian Busterでは日本語がインストール済みですぐに使用できるとのレポートもありますが、うまく動作しなかったので、「VLゴシック」フォントと、インプットメソッドに「iBus-Anthy」を設定しました。
sudo apt-get install fonts-vlgothic
sudo apt-get install ibus-anthy
sudo reboot


8.設定の確認とバックアップ

 これでOSと基幹ソフトの設定が完了です。インストール後のソフトウェアのバージョンなどを確認しておきましょう。
  ・ハードウェア
    $ cat /proc/device-tree/model
      Raspberry Pi Zero W Rev 1.1
  ・ホスト名
    $ hostname
      RASPZ1
  ・OS
    $ cat /proc/version
      Linux version 4.19.97+ (dom@buildbot) (gcc version 4.9.3
        (crosstool-NG crosstool-ng-1.22.0-88-g8460611)) #1294 Thu Jan 30 13:10:54 GMT 2020
    $ lsb_release -a
      No LSB modules are available.
      Distributor ID: Raspbian
      Description: Raspbian GNU/Linux 10 (buster)
      Release: 10
      Codename: buster
  ・Cコンパイラー
    $ gcc --version
      gcc (Raspbian 8.3.0-6+rpi1) 8.3.0
    $ g++ --version
      gcc (Raspbian 8.3.0-6+rpi1) 8.3.0
  ・その他
    $ apache2 -v
      Server version: Apache/2.4.38 (Raspbian)
      Server built: 2019-10-15T19:53:42
    $ php -v
      PHP 7.3.14-1~deb10u1 (cli) (built: Feb 16 2020 15:07:23) ( NTS )
      Copyright (c) 1997-2018 The PHP Group
      Zend Engine v3.3.14, Copyright (c) 1998-2018 Zend Technologies
        with Zend OPcache v7.3.14-1~deb10u1, Copyright (c) 1999-2018, by Zend Technologies
    $ python --version
      Python 2.7.16
    $ python3 --version
      Python 3.7.3

 続いて、それぞれのソフトの機能や動作などを確認してみましょう。問題がなく納得できるようであれば、この時点のSDカードの内容をバックアップすることをお勧めします。これから先のインストールや開発過程で問題が発生したときに、システムを最初からインストールし直すのは大変手間がかかります。バックアップしておけば、SDカードを初期化して書き戻すだけでこの時点の状態に容易に復帰できます。
 バックアップは、SDカードにシステムを書き込むときに使ったWin32DiskImager.exeで行います。


   

 microSDカードをマルチカードリーダー・ライターにセットして、Windows PCのUSBポートに差し込みます。Win32DiskImagerを起動して、バックアップ用のWindows PCのフォルダーを指定し、バックアップファイル名を入力します。[Read]ボタンをクリックすると、SDカードの内容がファイルに書き込まれます。
 バックアップはイメージデータとして処理されるので、SDカードに書き込まれている容量でなく、カードの物理容量(16GB/32GBなど)に相当するファイル容量が必要になるので注意してください。
 バックアップからの復元は、初期化したSDカードをセットして復元対象のファイルを指定した後、[Write]ボタンをクリックするだけです。

 次回では、音声信号処理の中核であるALSAと、フリーの音声処理ライブラリーPortAudioについてとりまとめ、必要なインストールを行います。お楽しみに!