17 May 2018

Raspberry Pi Zero WのSSHアクセス専用初期設定

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

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

Raspberry Pi 公式WebのDownloadセクションより、Raspbian Stretch Liteをダウンロードして、Micro SDカードに書き込む。

Linux端末での書き込みは、ddコマンドで行う

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

このまま起動すると、wifiは自動的には接続されないし、sshサーバも起動していない。 RPiにキーボードを接続せずに、いきなりwifi経由でsshコンソールにアクセスするために…

初回起動前に、sshサーバの有効化

SDカードに作成されたbootパーティションを開き、 ssh という空ファイルを作成する。

touch ssh

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

初回起動前に、wifi接続の設定

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

wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
country=JP
network={
    ssid="wifiアクセスポイントのSSID"
    psk="wifiパスワード"
    key_mgmt=WPA-PSK
    proto=WPA WPA2
    pairwise=CCMP TKIP
    group=CCMP TKIP WEP104 WEP40
}

パスワードは、「平文」で書く。または wpa_passphrase コマンドで「ハッシュ化」したものを書いても良い。

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

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