17 May 2018

Raspberry Pi Zero Wの初期設定(Wifi/SSH有効化, /tmpと/var/logのRAM Disk化, 基本ツール類インストールほか)

Raspberry Pi Zero Wに電源ケーブル以外何も接続せず、最低限のOS機能のみを設定するためのメモ

(2021年12月29日 追記)

Raspbian Liteのインストール(SDカードへの書き込み)

ディスクイメージをddコマンドで直接micro SDカードに書き込む方法(Linux端末での作業)

Raspberry Pi 公式WebのSoftwareセクション内「Manually install an operating system image」より、「Raspberry Pi OS Lite」をダウンロードする。

20211229-rpi-osimage.jpg

ダウンロードしたzipファイルを解凍し、イメージファイルをddコマンドで行う

$ dd bs=4M if=2018-04-18-raspbian-stretch.img of=/dev/sdc

専用書き込みソフト(Windows / Linux GUI版)を使う方法

Raspberry Pi 公式WebのSoftwareセクション内「Install Raspberry Pi OS using Raspberry Pi Imager」のGUI版ソフトウエアを使う

20211227-rpi-imager01.jpg
Raspberry Pi ImagerのOS選択は「Raspberry Pi OS Lit(32bit)」を選択する

20211227-rpi-imager02.jpg
OSを選択し、micro SDのドライブを選択したら WRITEボタンで書き込み開始する

書き込みは、OSイメージのダウンロードをしつつ書き込みが同時に行われるオンザフライ方式。書き込み完了後、ベリファイが自動的に行われる。

Raspberry Piにキーボードやディスプレイを接続せず、リモート接続(SSH接続)でセットアップを行う場合は、OSイメージ書き込んだmicro SDカードに初期設定を施してから、Raspberry Piにセットして起動すること。

Wifi接続の有効化

micro SDカードに作成されたbootパーティションを開き、 wpa_supplicant.conf を作成する。

/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=<Insert 2 letter ISO 3166-1 country code here>
network={
    ssid="接続先のSSID"
    psk="パスワード"
}

country codeは日本の場合 JP なので、country=JP と記述すればよい

パスワードは「平文」でもwpa_passphraseでエンコードした「ハッシュ」の、どちらでも構わない

また、複数あるSSIDのどれかに接続できればよいのなら次のように設定する。また、同じ部屋に2種類のSSIDがあって優先度を付ける場合は「priority」という設定で順位を付けることが出来る。

network={
    ssid="アクセスポイント1のSSID"
    psk="passwordOne"
    priority=1
    id_str="AP_One"
}

network={
    ssid="アクセスポイント2のSSID"
    psk="passwordTwo"
    priority=2
    id_str="AP_Two"
}

詳しくは、Raspberry Pi公式Webの「Configuration」を参照すること。

※ 初回起動時に、システムは自動的にこのファイルを/etc/wpa_supplicant/wpa_supplicant.confに移動する。

SSHサーバの有効化

micro SDカードに作成されたbootパーティションを開き、 ssh という空ファイルを作成する。Linux端末で作業する場合は、次のコマンドで作成できる

$ touch ssh

初回起動時にシステムは自動的にsshサーバを有効にし、この空ファイルは削除される。

ここまでの作業を行ったら、micro SDカードをRaspberry Piにセットして、電源投入・起動する。ここから先の作業は、起動後のRaspberry PiにSSH接続して行う(初期設定でのユーザ名:pi , パスワード:Raspberry)

wifiの固定IPアドレス設定

dhcp設定ファイルを修正する

/etc/dhcpcd.conf
 〜 略 〜
interface wlan0
static ip_address=192.168.1.xxx
static routers=192.168.1.1
static domain_name_servers=192.168.1.1 8.8.8.8 fd51:42f8:caae:d92e::1
 〜 略 〜

viエディタのカスタマイズ

この後、設定ファイルを編集するためにviをカスタマイズする。また、syntax highlight を使うために、vim をインストール

sudo apt-get install vim

viの設定ファイルを新規作成する

~/.vimrc
" カーソルキー上下を可能にする
set nocompatible
" 挿入モードでバックスペースで削除できるようにする
set backspace=indent,eol,start
 
" 検索するときに大文字小文字を区別しない
set ignorecase
" 小文字で検索すると大文字と小文字を無視して検索
set smartcase
" 検索がファイル末尾まで進んだら、ファイル先頭から再び検索
set wrapscan
" インクリメンタル検索 (検索ワードの最初の文字を入力した時点で検索が開始)
set incsearch
" 検索結果をハイライト表示
set hlsearch
 
" スマートインデント
set smartindent
" 対応するカッコを着色
set showmatch
 
" メッセージ表示欄を2行確保
set cmdheight=2
" ステータス行を常に表示
set laststatus=2
" ウィンドウの右下にまだ実行していない入力中のコマンドを表示
set showcmd
" 省略されずに表示
set display=lastline
" タイトルを表示
set title
 
" Escの2回押しでハイライト消去
nnoremap <Esc><Esc> :nohlsearch<CR><ESC>
" シンタックスハイライト
syntax on

ログ記録・一時ファイル保存場所をramdiskとする

2013年に『Raspberry Pi のtmpディレクトリをRAMディスクに移動』で書いた通りに行う。(インストールされるソフトウエアに合わせて微修正する)

fstabを編集してramdiskを有効化する

/etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=2fa8e065-01  /boot           vfat    defaults          0       2
PARTUUID=2fa8e065-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
 
#### ramdisk
tmpfs           /tmp            tmpfs   defaults,size=32m 0       0
tmpfs           /var/tmp        tmpfs   defaults,size=16m 0       0
tmpfs           /var/log        tmpfs   defaults,size=32m 0       0

さらに、ログファイルの初期設定を毎回起動時に行う。起動時に実行するinitスクリプトを、/etc/init.d以下に格納する。

/etc/init.d/make-varlog-files
#!/bin/bash
#
### BEGIN INIT INFO
# Provides:          make-varlog-files
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Required-Start:
# Required-Stop:
# Short-Description: Create /var/log/... files on tmpfs at startup
# Description:       Create /var/log/... files needed by system daemon
### END INIT INFO
  
#
# main()
#
case "${1:-''}" in
  'start')
 
    ############################
    # prepare /var/log subdir for ramdisk init on every boot
 
    mkdir -p /var/log/apache2
    mkdir -p /var/log/apt
    mkdir -p /var/log/fsck
    mkdir -p /var/log/ntpstats
    mkdir -p /var/log/samba
 
    chown root.adm /var/log/apache2
    chmod 750 /var/log/apache2
    chown ntp.ntp /var/log/ntpstats
    chown root.adm /var/log/samba
 
    ############################
    # prepare /var/log file for ramdisk init on every boot
 
    touch /var/log/lastlog
    touch /var/log/wtmp
    touch /var/log/btmp
    touch /var/log/apache2/access.log
    touch /var/log/apache2/error.log
    touch /var/log/apache2/other_vhosts_access.log
    touch /var/log/apache2/ssl_access.log
 
    chown root.adm  /var/log/apache2
    chown root.adm /var/log/apache2/access.log
    chmod 640 /var/log/apache2/access.log
    chown root.adm /var/log/apache2/error.log
    chmod 640 /var/log/apache2/error.log
    chown root.utmp /var/log/lastlog
    chown root.utmp /var/log/wtmp
    chown root.utmp /var/log/btmp
   ;;
  'stop')
   ;;
  'restart')
   ;;
  'reload'|'force-reload')
   ;;
  'status')
   ;;
  *)
   echo "Usage: $SELF start"
   exit 1
   ;;
esac

このスクリプトを、標準のランレベル(2,3,4,5)で自動起動するように設定する

sudo update-rc.d make-varlog-files defaults

swapの停止

とりあえず、停止するには。

sudo dphys-swapfile swap off

最終的には、サービスが起動しないように設定する

sudo update-rc.d dphys-swapfile remove

不要なサービスを停止する

systemctl を使うか、initスクリプトを管理する chkconfig または sysv-rc-conf のどちらかをインストールすると、便利。

サービスと自動起動設定の一覧は

sudo systemctl | grep running

または

sudo chkconfig --list

または

sudo sysv-rc-conf --list

サービス一覧を見て必要なさそうなのは...

・ dphys-swapfile : swapファイル
・ rsync : リモートファイル同期サーバ
・ triggerhappy : キーボード ショートカット設定
・ plymouth : グラフィカル 起動スクリーン

raspi-config

raspi-config を実行し、一通りの設定を行う。

sudo raspi-config

20180517-raspi-config.jpg

・ I2C, SPI, Serial にアクセスするためのライブラリのインストール
・ ファイルシステムをSDカード全領域に拡張
・ 言語設定を日本語に

ntpの設定

systemd-timesyncd の設定ファイルを編集し、ntpサーバを日本のものに変更する

/etc/systemd/timesyncd.conf
[Time]
NTP=ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp
FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org

各種ライブラリのインストール

i2c

sudo apt-get install libi2c-dev i2c-tools

gpio (wiringPi)

sudo apt-get install wiringpi

    または

git clone git://git.drogon.net/wiringPi
cd wiringPi
./build

gpio (pigpio)

sudo apt-get install pigpio