純規の暇人趣味ブログ

首を突っ込んで足を洗う

【Buster対応】Raspbianのインストールと最強の初期設定

      2019/08/20    HimaJyun

Raspberry Piをサーバーにして使っています@HimaJyunです。(ヨカッタラツイッタフォロシテネ)

Raspberry Piで使うDebian系LinuxのRaspbian、セットアップの時にやってる「インストールしたらこれをやるリスト」が肥大化してきたので、ここでまとめてご紹介します。

スポンサーリンク

この記事の内容はRaspbian 2019-07-10(Buster)で確認しました。バージョンアップでの変更点はリリースノートに掲載されているので興味のある方は見てみると良いでしょう。

OSのインストール

まずはRaspbianの入ったSDカードを用意しましょう。

NOOBSを使っても良いですが、慣れたらRaspbianをSDカードに書き込む方が早いので慣れましょう。

私はヘッドレス(液晶などを使用しない方法)で設定しているので、この記事ではRaspbianのLite版を大前提として説明します。Desktop付きのバージョンでもほとんどはそのまま通用するはず。

(インストールのやり方を知っている人、すなわち設定の所を読みたい方は下まですっ飛ばして、どうぞ。)

ダウンロード

Raspbian自体は公式の「Download Raspbian for Raspberry Pi」からダウンロードできます。

ただ、公式サイトからのダウンロードは海外サーバーで遅いため日本のミラーサイトからダウンロードする方が良いでしょう。

ダウンロードしたzipを展開すると.imgファイルが出て来ます、これがOSのファイルです。

SDカードに書き込む

公式ドキュメントによると、imgの書き込みにはbalenaEtcherの使用が推奨されています。

Linux、macOS、Windowsに対応しており使い勝手も良いので個人的にも推奨。

ダウンロードして起動すると分かりやすいUIが出てきます。
balenaEtcher

「Select image」でダウンロードしたimgファイルを選択します。ちなみに、imgだけでなくzipやgzみたいな圧縮されたイメージからも書き込めます。

書き込み先のSDカードは自動で選択されますが、もし変更する必要がある場合は「Change」で変更しましょう。

imgやSDカードを指定した後は「Flash」をクリックすれば書き込みが始まります。説明の必要もないくらいシンプルね!
balenaEtcher

書き込みを行うと当然ながらにSDカード上にあるデータは全て消えるので、間違えてもかわいい彼女(そんなものは居ない)の写真が沢山入ったSDカードとかで試したりしてはいけませんよ、後悔しますよ。
balendEtcher flash

書き込み後はベリファイとアンマウントが自動で行われるので、SDカードぶち抜いてRaspberry Piに挿入してOK!

……と、行きたいんですが、ヘッドレスの時はいくつか設定が必要なのでもう一度PCに差し込みましょう。(デスクトップモードで使用する方はそのまま続けてOKです)

SDカードに書き込む(ddコマンド)

ddコマンドが使える人はddで書き込んでも良いです。

以下はSDカードが/dev/sdbの場合。もちろんこのsd[a-z]は環境によって変わるので要確認。間違えるとHDDのデーターが消えます。

sudo umount /dev/sdb[1-9]
sudo dd if=2019-07-10-raspbian-buster-lite.img of=/dev/sdb bs=4M
sync

上級者向けの方法なのであえて説明しません、やっている事の意味が分かる人はこの方法でも良いでしょう。分からない人はbalenaEtcherを使いましょう。

SSHを有効にする

デフォルトではSSHが無効です、ヘッドレス起動したい場合はSSHを有効にする必要があります。

やり方は簡単、bootパーティションに「ssh」という名前のファイルを作成すればOK。(中身は空で良い)

昔はssh(拡張子なし)じゃないとダメだったのですが、最近のバージョンはssh.txtでも認識するのでWindowsの新規作成->テキストドキュメントで作成してもOK!
ssh.txt

ヘッドレス運用するつもりの方はお忘れなく。

Wi-Fiの設定をする

必要であればWi-Fiの設定も事前に行うことが出来ます。

具体的には、bootパーティションに「wpa_supplicant.conf」を作成して設定を書き込みます。(改行コードは念のためLFで)

設定例はこんな感じ。

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="SSID"
    psk="パスワード"
}

パスワードは暗号化する事も可能です。パスワードを暗号化するならそういうツールを使えば良いでしょう。

起動とログイン

PiにSDカードを挿入して電源を入れるだけ。有線LANなどを使用する場合はLANケーブルも刺す。

DHCPに対応している環境、すなわち普通のネットワークであればIPも自動で割り当てられます。

Bonjour(Avahi)がインストールされたPCであれば「raspberrypi.local」で接続できるので、SSHクライアントを使って接続しましょう。

デフォルト設定はユーザ:pi、パスワード:raspberryです。

Bonjour(Avahi)がインストールされていないPCの場合はRaspberry Piに割り当てられたIPを探す必要があります。

ルーターの管理画面からDHCPの払い出し状況を確認するのが確実です。あとはIPアドレスの若い順に片っ端からpingを打ってみるとか……

ちなみに、Raspberry PiのベンダID(Macアドレスの上6個の英数字)は「B8:27:EB」です。

最低限やっておきたい設定

サーバ目的での利用を前提とした「これはやっておいた方が良いでしょ」リストです。

「サーバ目的での」なので他の目的で使うのであれば、その目的に合わせて設定して下さい

追記:Raspbian buster向けに更新。stretchを使う方はstretch用の差分をご覧ください。

ローカルIPを固定しておく

サーバーとして使うならほとんどの場合はローカルIPを固定する必要があるでしょう。

RaspbianでローカルIPを固定するには「/etc/dhcpcd.conf」に設定します。

具体的な設定は以下の通り

interface eth0
# IPアドレス
static ip_address=192.168.x.x
# デフォルトゲートウェイ
static routers=192.168.x.1
# DNS
static domain_name_servers=192.168.x.1 8.8.8.8

余談ですが、インデントを入れると見やすいです。

これで保存して再起動すればローカルIPアドレスが固定出来ます。

現在のIPアドレスは「ifconfig」で確認できますよ。

ソフトウェアアップデート

最初にaptでソフトウェアのアップデートを行っておきましょう。

コピペ用:sudo apt-get update && sudo apt-get -y dist-upgrade && sudo apt-get -y autoremove && sudo apt-get autoclean

rpi-updateによるファームウェア更新は(不安定になる可能性もあるので)必要がなければ行わない方が良いみたいです(PCで言うBIOS更新に近い感じかな)

自動更新

手で更新するのは面倒(+自分が更新するまで脆弱性を放置する事になる)のでセキュリティアップデートは自動で更新させる。

aptの自動更新には「unattended-upgrades」をインストールする。

sudo apt install -y unattended-upgrades

次に、「/etc/apt/apt.conf.d/50unattended-upgrades」をエディターで開き、Origins-Patternに「"o=${distro_id},n=${distro_codename}";」を追加する。

正しく動作しているか気になる方は「/var/log/unattended-upgrades」にあるログを見ましょう

raspi-config

「sudo raspi-config」コマンドでラズパイの設定が行えます、必要に応じて設定を行って下さい。

必要そうな設定は以下の通り。

  • Localisation Options->Change Locale: ここは日本なので「ja_JP.UTF-8」にしている。その次の画面で選べと言われるのはデフォルトのロケール、これも「ja_JP.UTF-8」でOK。CUIなら英語のままでもいいかも知れない
  • Localisation Options->Change Timezone: ここは日本、なので「Asia」を選んでから「Tokyo」
  • Localisation Options->Change Wi-fi Country: Wi-Fiを使う場合はJPにしないと5Ghzが有効化されない。
  • Advanced Options->Memory Split: GPUメモリの割り当て、ヘッドレスで運用しているのでアプリケーションが使える分を最大にすべく16にしている。(もちろん用途に合わせて設定してね)
  • Change User Password: パスワードを変える、サーバにするなら変えること。

必要なら設定する。

  • Advanced Options->Hostname: 適当にホスト名を付ける。
  • Localisation Options->Change Keyboard Layout: キーボードの種類、JISキーボードとか繋いでいるなら設定しないとパイプ(|)で困る(SSH接続なら不要)

ちなみに、raspi-configは非対話モードがあり、以下のような感じで利用可能。

# GPUメモリ割り当て
sudo raspi-config nonint do_memory_split 16
# ホスト名
sudo raspi-config nonint do_hostname remilia
# Wi-Fiの国選択
sudo raspi-config nonint do_wifi_country JP

その他の使い方はraspi-configのソースコードを参照。

Raspbianを自動でセットアップするスクリプトなどを作成する際には積極的に利用すると良いと思う。

SSHホスト鍵の更新

SSHのホスト鍵も更新しておく

sudo rm -v /etc/ssh/ssh_host*
sudo dpkg-reconfigure openssh-server

必要に応じて鍵交換方式に変更したりする。

パスワードの変更

パスワードの変更は「passwd」で出来ます(raspi-configからでも可、やっている事は同じ)

rootのログインはデフォルトで無効にされているのでパスワードを設定しない方が良い(つまり、「sudo passwd root」をしてはいけない)

パス無しsudoの禁止

記事の都合でここに書きますが、この操作は最後にやった方がセットアップが楽です。

パスワードなしでのsudoの利用を禁止しておきましょう。

設定は「/etc/sudoers.d/010_pi-nopasswd」にあるので、この中の「pi ALL=(ALL) NOPASSWD: ALL」をコメントアウトする。

もしくは「sudo rm /etc/sudoers.d/010_pi-nopasswd」でファイルそのものを消してしまいましょう。(どうせ要らないのですから消してしまった方が良いかも)

ユーザ名の変更

ちょっと手法が複雑になるので別記事にあります、サーバ目的だとパスワードと同じくらい必須だと思います。

こちらをご覧ください:[Raspbian]ユーザ名変更の個人的に「正しい」と思うやり方

必要であればやる設定

やらなくても問題はありませんが、場合によっては使い易さ向上が見込めると思います。

aptのミラーを変える

デフォルトだと「raspbian.raspberrypi.org」からaptのパッケージを取得するようになっています。

適切なミラーサーバにリダイレクトしてくれるみたいなのですが、最初から日本ミラーでダウンロードするように設定したい人は設定する。

まずは「/etc/apt/sources.list」を適当なエディタで開きます。

きっとデフォルト設定があるでしょうから、それをお好みのRaspbianのミラーサーバへと書き換えます。

deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
# 例:
#deb http://ftp.jaist.ac.jp/raspbian/ buster main contrib non-free rpi

ミラーサーバを設定し終わったら以下のコマンドで設定の反映

sudo apt update

NTPの設定

NTPは「systemd-timesyncd」を利用します、従来までの「/etc/ntp.conf」は使いません。

有効になっているかどうかは「timedatectl status」で確認します。

               Local time: Tue 2019-08-20 17:21:59 JST
           Universal time: Tue 2019-08-20 08:21:59 UTC
                 RTC time: n/a
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

「NTP service」が「active」になっていれば有効です。そうでない場合は「sudo timedatectl set-ntp true」で有効にします。

同期元サーバの設定は「/etc/systemd/timesyncd.conf」です。以下のように設定します。

[Time]
NTP=ntp.jst.mfeed.ad.jp ntp.nict.jp
FallbackNTP=time.google.com

同期元のNTPサーバは恐らくPing最短であろうと思われるプロバイダのサーバを利用するのが良いと思います。

プロバイダがNTPサーバを提供していない場合はMFEEDやNICTを利用しましょう。

後は「sudo systemctl restart systemd-timesyncd」で再起動すればOK

ハードウェア乱数を使用する

Raspberry Piにはハードウェア乱数生成器が載っている。これを利用すると乱数を使用する処理の高速化が期待できる。

以前まではrng-toolsのインストールが必要だったが、Busterではデフォルトでrng-toolsがインストールされている。

要するに何もしなくてもOK。乱数生成器が信用できないならaptでrng-toolsを削除すれば良い。

swapを調整する

SDカードだと寿命や容量が気になってswapを無効にしたい事もあるでしょう。

逆に、HDD稼働になっている場合にはswapを利用して足りないメモリを誤魔化したい事もあるでしょう。

RasPiのswapはdphys-swapfileが司っているみたいなのでこれを弄れば調整が可能です。

swapを無効にするにはdphys-swapfileを停止する。

sudo systemctl disable dphys-swapfile

逆に停止したdphys-swapfileを元に戻したい時は以下の通り

sudo systemctl enable dphys-swapfile

swapのサイズを変更したい時は、まず最初にdphys-swapfileを停止させる。

sudo systemctl stop dphys-swapfile

次に「/etc/dphys-swapfile」を開き、CONF_SWAPSIZEを変更する。(単位はMB、デフォルトは100)

変更出来たらdphys-swapfileを再起動させる

sudo systemctl start dphys-swapfile

なお、指定したサイズのswapファイルを予め生産するため、swapがデカいと少々時間が掛かる。

Wi-Fiを無効にする

Pi3のWi-Fiを無効化するには、「/boot/config.txt」に「dtoverlay=pi3-disable-wifi」を追記する。

別にやらなくても問題はない、Zabbixで監視する時に邪魔になるので私は無効化している。

avahiを無効にする

Unboundなどの内向きDNSが設定出来ている環境ではavahi-daemonは不要なので止めちゃう。

sudo systemctl stop avahi-daemon.socket
sudo systemctl disable avahi-daemon

これでOK。なんなら削除しても良い。

dhcpcdを無効にする

/etc/dhcpcd.confを編集するのではなく、dhcpcdを無効にして普通に/etc/network/interfacesを使うという手もある。(基本的には不要な手順、普通はdhcpcdを利用したのでよし)

dhcpcdはsystemctlで無効にする

sudo systemctl disable dhcpcd

その後、「[Ubuntu]ローカルIPアドレスを固定にする」で紹介しているのと同じように、「/etc/network/interfaces」に以下のような設定を追加。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        gateway 192.168.1.1
        dns-nameservers 192.168.1.1 8.8.8.8

# 必要なら
#iface eth0 inet6 auto
#iface eth0 inet6 static
#        address 2001:db8:1::abcd
#        netmask 64
#iface eth0 inet6 static
#        address fd00:192:168:1::1
#        netmask 64

特にIPv6アドレスを複数割り当てようと思うとdhcpcdでは出来ない(?)みたいなのでこの方法を使う事になるかと思われ。

USB HDDで起動したい

こちらは別記事でお取り扱い中

こちらをご覧ください:Raspberry PiをUSB(HDD)で起動させる

終わりに

以上が私のやっているPi設定、「最強の初期設定」なので色々と多いが別に全てを行わなければならないという訳ではない。

元々サーバーとして使う事を目的とした設定なので、それに合わせて調整しまくったらこうなった、と言うだけ。

用途に合わせて参考にして欲しい。

 - コンピューター