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に移動する。

※ この方法は、最新のRPi OSでは無効化されている(2024/04/21 追記)

Connect to a wireless network
Previous versions of Raspberry Pi OS made use of a wpa_supplicant.conf file which could be placed into the boot folder to configure wireless network settings. This functionality is not available from Raspberry Pi OS Bookworm onwards.

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