はじめに
眠ってたラズパイを復活させようと、久しぶりに初期セットアップしてみました。
ラズパイ自体は安いけど、色々揃えたらお金かかるじゃんって人に参考になれば幸いです。
【重要】初心者向けの内容と言いつつ、Windows向けではありません。Ubuntu他Linuxユーザ向けです。
きっかけ
ググると、「ディスプレイ・キーボード・マウスなし」でラズパイをセットアップできるという記事はたくさん出ます。
そして、最後の段階でLANケーブルでSSH接続して設定する、なんて記事を多く見かけます(とても参考になりました)。
でも、ラズパイのセットアップのためだけにLANケーブルを買うのは面倒ですし、上から目線で「惜しいなぁ」なんて思ってました。
それに加え、自分のパソコンはBUFFALO WLI-UTX-AG300/CでLANポートが埋まってて、
つまるところ面倒くさいので無線LANだけでイケないかと思い、やってみたらできました。
「ディスプレイ・キーボード・マウス・LANケーブルなしでラズパイ3のセットアップ」です。
今さらな内容ですが、備忘録を兼ねるということで…。
それと、Windows向けではありません。Macなら同じようにできるとは思います(無責任)。
作業の流れ
自分を含めた初心者向けの内容だと思うので、これだけでわかる人にはそれで大丈夫です。
1. 環境構築用PCで、RASPBIAN STRETCHをddでSDカードに書き込む
2. ラズパイにSDカードを入れないで、環境構築用PCで無線LANのSSIDとパスワードを設定する
3. ラズパイにSDカードを入れないで、環境構築用PCで固定ipを設定する
4. ラズパイにSDカードを入れないで、環境構築用PCでSSHを有効にする
5. ラズパイにSDカードを入れて、起動後、環境構築用PCからSSH接続、ラズパイの各種設定を行う
使用したもの(環境)
言葉足らずなのでちゃんと書くと、
- 環境構築用のパソコン(Ubuntu 18.04)
- 無線LANルータ(自分の場合、ソネットから送られてきたONUでインターネット接続兼用のもの)
- SDカードリーダ
を使用しました。
もちろんRaspberry Pi3やPI用のSDカードと電源は揃っているという前提です。
公式サイトから最新版RASPBIAN STRETCHをダウンロードする
まずはここからRASPBIAN STRETCHの最新版をダウンロードします。
https://www.raspberrypi.org/downloads/raspbian/
DESKTOPでもLITEでも好きな方でいいと思います。
今回は何も考えずにDESKTOPをダウンロードしました。
直接ダウンロードだと重いし途切れるしなので、環境が許せば、Torenntの方が楽です。
ダウンロードしたZIPを展開する
ダウンロードしたZIPファイルにimgファイルが入っているので、アーカイブマネージャで展開します。
何も考えずにダブルクリックして、imgファイルを適当なところに置くだけです。
今回はダウンロードフォルダにそのまま展開しました。
SDカードのマウントポイントを調べてアンマウントする
パソコンにSDカードを接続するとそのままマウントされたので、一度アンマウントします。
Ubuntuの場合、スーパーキー(Windowsキー)で「d」と打つと「ディスク」が出てくるので起動します。
「ディスク」ではデバイスの情報が読めます。
今回、SDカードは sdc として認識されていることがわかりました。
詳細は他に譲るとして、SDカードを選択し、「ー」を押してアンマウントします。
terminalでも同じ作業ができます。lsblk と umount を使用します。
まず、SDカードを刺す前と刺した後の2回を比較します。
SDカードを刺す前
:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
(省略)
sda 8:0 0 111.8G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 95.4G 0 part /
└─sda3 8:3 0 15.9G 0 part [SWAP]
sdb 8:16 0 2.7T 0 disk
SDカードを刺す前と刺した後
:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
(省略)
sda 8:0 0 111.8G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 95.4G 0 part /
└─sda3 8:3 0 15.9G 0 part [SWAP]
sdb 8:16 0 2.7T 0 disk
sdc 8:32 1 7.6G 0 disk
└─sdc1 8:33 1 7.6G 0 part
新たに増えた sdc がSDカードだとわかります。
自分の場合、128GBのSSDをルート(= sda )に、3TBのHDD(= sdb )をファイル置き場にしてます。
umount で sdc1 をアンマウントしておきます。
:~$ umount /dev/sdc1
DDコマンドでimgファイルを書き込む
今回、imgファイルはダウンロードフォルダに置いてありますので、
このimgファイルを dd でSDカードに書き込んでいきます。
自分のユーザ名はここでは恥ずかしいので hoge に置き換えてあります。
terminal を使います。一応 ls でファイルを確認して、いざ dd です。
ddコマンドの詳細は他に譲るとして、if=が元のimgファイル、of=が書き込み先、です。
当記事作成時点の最新版は2018-06-27版ですので、それより新しいものを使う場合は適宜読み替えてください。
:~$ cd /home/hoge/ダウンロード/
:~/home/hoge/ダウンロード$ ls
2018-06-27-raspbian-stretch.img 2018-06-27-raspbian-stretch.zip
:~/home/hoge/ダウンロード$ sudo dd bs=4M if=2018-06-27-raspbian-stretch.img of=/dev/sdc status=progress conv=fsync
[sudo] hoge のパスワード:
4819255296 bytes (4.8 GB, 4.5 GiB) copied, 196 s, 24.6 MB/s
1150+0 レコード入力
1150+0 レコード出力
4823449600 bytes (4.8 GB, 4.5 GiB) copied, 442.013 s, 10.9 MB/s
(ディレクトリ名が日本語やんけコイツ!と思った方、そのツッコミは正しいと思います。)
書き込みが終わるまで数分かかります。ここは辛抱強く我慢です。
RASPBIANがちゃんと書き込まれたかをなんとなく確認する
パソコンに差し込んでいるSDカードを一度抜き差しします。
するとSDカードがまた自動的にマウントされるのですが、
今度はマウントポイントが /media/(ユーザ名) になっていますので、そこで ls してみます。
:~$ cd /media/hoge
:/media/hoge$ ls
boot rootfs
:/media/hoge$ cd rootfs/
:/media/hoge/rootfs$ ls
bin debootstrap etc lib media opt root sbin sys usr
boot dev home lost+found mnt proc run srv tmp var
boot と rootfs が確認できました。
rootfs の中もちゃんとあるので、正しく書き込みができたと信じて次の作業です。
無線LANの設定をする
wpa_supplicant.conf に、今まさに使用している無線LANルータの設定情報を書き込みます。
wpa_supplicant.conf の詳細は他に譲りますが、ラズパイの無線LAN接続設定のファイルです。
まずはファイルがあるか cd で 該当ディレクトリに入って、ls で確認してみます。
:/media/hoge/rootfs$ cd /media/hoge/rootfs/etc/wpa_supplicant/
:/media/hoge/rootfs/etc/wpa_supplicant$ ls -a -l
合計 52
drwxr-xr-x 2 root root 4096 6月 27 09:30 .
drwxr-xr-x 111 root root 4096 6月 27 10:22 ..
-rwxr-xr-x 1 root root 937 10月 14 2017 action_wpa.sh
-rwxr-xr-x 1 root root 25619 10月 14 2017 functions.sh
-rwxr-xr-x 1 root root 4696 10月 14 2017 ifupdown.sh
-rw------- 1 root root 72 6月 27 09:30 wpa_supplicant.conf
wpa_supplicant.conf がありましたので、一応、cat で中身を見てみます。
:/media/hoge/rootfs/etc/wpa_supplicant$ cat wpa_supplicant.conf
cat: wpa_supplicant.conf: 許可がありません
:/media/hoge/rootfs/etc/wpa_supplicant$ sudo cat wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
sudo してなくて怒られますので、sudo を付けましょう。
SSIDの設定情報を書き込みます。SSID と PASSPHRASE は適宜ご自身のものに置き換えてください。
普通は無線LANルータの背面か底面にシールで貼ってあります。
:/media/hoge/rootfs/etc/wpa_supplicant$ sudo sh -c 'wpa_passphrase SSID PASSPHRASE >> wpa_supplicant.conf'
もう一度、 wpa_supplicant.conf の中を cat で見てみます。
:/media/hoge/rootfs/etc/wpa_supplicant$ sudo cat wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="SSID"
#psk="PASSPHRASE"
psk=********************************************
}
(psk=以下は***でマスクさせていただきました。)
ssid="SSID" には無線LANルータのSSIDが、#psk="PASSPHRASE" にはそのSSIDのパスフレーズが入ってますが、
このままだと万が一の際に危険ですので、#psk="PASSPHRASE"の行は消してしまいます。
きっとここでviあたりで編集するのが普通なのでしょうが、僕自身初心者なので、gedit使っちゃいます。
geditはWindowsのメモ帳のように使えて便利です。
:/media/hoge/rootfs/etc/wpa_supplicant$ sudo gedit wpa_supplicant.conf
(gedit:5445): IBUS-WARNING **: 14:38:51.147: The owner of /home/hoge/.config/ibus/bus is not root!
** (gedit:5445): WARNING **: 14:39:05.413: Set document metadata failed: metadata::gedit-spell-language という属性値はセットできません
** (gedit:5445): WARNING **: 14:39:05.413: Set document metadata failed: metadata::gedit-encoding という属性値はセットできません
** (gedit:5445): WARNING **: 14:39:07.071: Set document metadata failed: metadata::gedit-position という属性値はセットできません
gedit で開くと怒られますが、普通に編集できるので大丈夫です。
geditはWindowsのメモ帳のように使えるので(二度目)、#psk="PASSPHRASE"の行を丸ごと消します。
保存するのを忘れずに。(スクショ省略)
もう一度、 wpa_supplicant.conf の中を cat で見てみます。
:/media/hoge/rootfs/etc/wpa_supplicant$ sudo cat wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="SSID"
psk=********************************************
}
#psk="PASSPHRASE"の行がなくなったことがわかります。
(psk=以下は***でマスクさせていただきました。)
これでとりあえずラズパイは無線LAN接続できるようになったはずですが、
このままではDHCPでipアドレスが動的に振られてしまい(その都度違うipアドレス)、
ラズパイのipアドレスがわかりません。
avahiとか難しい話は置いといて、ipアドレスを固定してしまいます。
ipアドレスを固定する
RASPBIANのipアドレスはそのままでは動的ですので、
ipアドレスの設定ファイルである dhcpcd.conf を編集して、ipアドレスを固定(静的)します。
なぜか気まぐれで cd でホームディレクトリに移動してしまいましたが、
面倒なので直接 dhcpcd.conf の中身を cat で確認してみます。
:~$ sudo cat /media/hoge/rootfs/etc/dhcpcd.conf
# A sample configuration for dhcpcd.
# See dhcpcd.conf(5) for details.
# Allow users of this group to interact with dhcpcd via the control socket.
#controlgroup wheel
# Inform the DHCP server of our hostname for DDNS.
hostname
# Use the hardware address of the interface for the Client ID.
clientid
# or
# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361.
# Some non-RFC compliant DHCP servers do not reply with this set.
# In this case, comment out duid and enable clientid above.
#duid
# Persist interface configuration when dhcpcd exits.
persistent
# Rapid commit support.
# Safe to enable by default because it requires the equivalent option set
# on the server to actually work.
option rapid_commit
# A list of options to request from the DHCP server.
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
# Most distributions have NTP support.
option ntp_servers
# Respect the network MTU. This is applied to DHCP routes.
option interface_mtu
# A ServerID is required by RFC2131.
require dhcp_server_identifier
# Generate Stable Private IPv6 Addresses instead of hardware based ones
slaac private
# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1
# It is possible to fall back to a static IP if DHCP fails:
# define static profile
#profile static_eth0
#static ip_address=192.168.1.23/24
#static routers=192.168.1.1
#static domain_name_servers=192.168.1.1
# fallback to static profile on eth0
#interface eth0
#fallback static_eth0
この設定ファイルに、無線LAN接続でのipアドレスは固定してね、ということを書きます。
またしてもgeditを使います。
:~$ sudo gedit /media/hoge/rootfs/etc/dhcpcd.conf
geditが立ち上がったら、メモ帳の要領で、一番最後に行を足して、下記内容を追記します。
ちなみにうちのネットワーク構成では、ルータの無線LANが192.168.1.1で、有線LANが192.168.0.1です。
ルータごとに設定が違うはずなので、ルータの説明書を見て、ルータ自身のipアドレスを確認してください。
interface wlan0
static ip_address=192.168.1.30/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
interface wlan0 は無線LAN接続の場合という意味。
static ip_address=192.168.1.30/24 はipアドレスを192.168.1.30に固定するという意味。
static routers=192.168.1.1 は無線LANルータのipアドレス。
static domain_name_servers=192.168.1.1 はDNSのipアドレスで、普通は無線LANルータが兼ねてます。
ipアドレス192.168.1.30のところ、30に固定したのにはあまり意味がなくて、忘れなければ10でも20でも構いません。
(もちろん、0、1、256は駄目です。)
もう一度、ipアドレスの設定ファイルである dhcpcd.conf を cat で確認してみます。
:~ $ sudo cat /etc/dhcpcd.conf
# A sample configuration for dhcpcd.
# See dhcpcd.conf(5) for details.
# Allow users of this group to interact with dhcpcd via the control socket.
#controlgroup wheel
# Inform the DHCP server of our hostname for DDNS.
hostname
# Use the hardware address of the interface for the Client ID.
clientid
# or
# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361.
# Some non-RFC compliant DHCP servers do not reply with this set.
# In this case, comment out duid and enable clientid above.
#duid
# Persist interface configuration when dhcpcd exits.
persistent
# Rapid commit support.
# Safe to enable by default because it requires the equivalent option set
# on the server to actually work.
option rapid_commit
# A list of options to request from the DHCP server.
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
# Most distributions have NTP support.
option ntp_servers
# Respect the network MTU. This is applied to DHCP routes.
option interface_mtu
# A ServerID is required by RFC2131.
require dhcp_server_identifier
# Generate Stable Private IPv6 Addresses instead of hardware based ones
slaac private
# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1
# It is possible to fall back to a static IP if DHCP fails:
# define static profile
#profile static_eth0
#static ip_address=192.168.1.23/24
#static routers=192.168.1.1
#static domain_name_servers=192.168.1.1
# fallback to static profile on eth0
#interface eth0
#fallback static_eth0
interface wlan0
static ip_address=192.168.1.30/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
最終行に4行、先程の内容が追記されているのが確認できました。
ここまでで、RASPBIANは固定ipでの無線LAN接続になったはずです。
しかしこのままではssh接続できません。
ただのping応答マシンでしかないので、sshを有効にします。
SSHを有効化する
環境構築用PCにはSSHDが入ってて動いてる前提です。
最新版のRASPBIAN STRETCHではSSHが入ってるものの無効化されており、有効にするためには、
boot/ にsshという名前のファイルを作ります。拡張子はなし、ディレクトリでも駄目ですので、touch で作ります。
もうこれは本当に簡単で、一行です。
:~$ sudo touch /media/hoge/boot/ssh
この状態でいよいよ完成です。
ラズパイ3にSSH接続してみる
できあがったSDカードをパソコンから取り出し、ラズパイ3に差し込み、電源を入れます。
1分ぐらい待って、いざSSH接続です。ssh ユーザ名@ipアドレスで接続します。
ラズパイの初期ユーザは、
ユーザ名: pi
パスワード: raspberry です。
:~$ ssh pi@192.168.1.30
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:2BWnH/BKSXNW5Sv5NCmLu9TIW0UQ24rX5MEjEJYCGNE.
Please contact your system administrator.
Add correct host key in /home/hoge/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/hoge/.ssh/known_hosts:1
remove with:
ssh-keygen -f "/home/hoge/.ssh/known_hosts" -R "192.168.1.30"
ECDSA host key for 192.168.1.30 has changed and you have requested strict checking.
Host key verification failed.
とここで、想定外というか、初めてSSH接続する場合には出ないメッセージが出ました。
これは、過去に192.168.1.30にSSH接続してて、そのときの相手となんだか違うよっていう意味です。
ここまでの作業が初めての人には関係ないのですが、自分としては一瞬アレ?と思ったので、一応メモとして残しておきます。
エラーメッセージの中にちゃんと対処方法が書かれているので、その通りにします。
:~$ ssh-keygen -f "/home/hoge/.ssh/known_hosts" -R "192.168.1.30"
/home/hoge/.ssh/known_hosts updated.
Original contents retained as /home/hoge/.ssh/known_hosts.old
バックアップ取って更新したよ的なメッセージのあと、もう一度SSH接続してみます。
初めての人にはここからの作業となります。
:~$ ssh pi@192.168.1.30
The authenticity of host '192.168.1.30 (192.168.1.30)' can't be established.
ECDSA key fingerprint is SHA256:2******************************************E.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.30' (ECDSA) to the list of known hosts.
pi@192.168.1.30's password:
Linux raspberrypi 4.14.50-v7+ #1122 SMP Tue Jun 19 12:26:26 BST 2018 armv7l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Aug 12 06:05:36 2018
SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.
pi@raspberrypi:~ $
無事に成功しました。
RASPBIAN(ラズパイ)の設定を変更する
ここから先は、環境構築用パソコンからSSH接続したラズパイで行います。
raspi-config で、初期パスワードの変更、ロケーションなんかの設定をします。
選択の上下は矢印キー。選択はスペースキー。移動はタブキーです。
この設定の詳細は他に譲ります。
pi@raspberrypi:~ $ sudo raspi-config
変更が終わったら、アップデートしておきます。
sudo apt-get upgrade -y
これで終了です。