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に移動する。
※ この方法は、最新の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設定ファイルを修正する
〜 略 〜 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