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」をダウンロードする。
ダウンロードした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版ソフトウエアを使う
Raspberry Pi ImagerのOS選択は「Raspberry Pi OS Lit(32bit)」を選択する
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設定ファイルを修正する
〜 略 〜 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の設定ファイルを新規作成する
" カーソルキー上下を可能にする 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を有効化する
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以下に格納する。
#!/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
・ I2C, SPI, Serial にアクセスするためのライブラリのインストール
・ ファイルシステムをSDカード全領域に拡張
・ 言語設定を日本語に
ntpの設定
systemd-timesyncd の設定ファイルを編集し、ntpサーバを日本のものに変更する
[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