やりたいこと
ディスプレイ・キーボード・マウスなし、ネット環境はWi-Fiしかない環境で、LANケーブルだけでRaspberryPi2へUbuntuのインストールと初期設定を行う
お願い
試行錯誤してやっているので間違っている部分や勘違いしている部分があるかもしれません
もし見つけられたらご指摘いただけると嬉しいです
環境
- Mac OS X High Sierra
- Raspberry Pi 2
- Ubuntu 18.04.2 LTS(ラズパイにインストールしたUbuntuのバージョン)
- ディスプレイ・キーボード・マウスなし
- ネット環境はWi-Fiのみ(有線LANなし)
- PLANEX 無線LAN子機 GW-USNANO2A
- SD Card 32GB
- LANケーブル(ストレートケーブル)
全体の流れ
- Ubuntuインストール
- 公式サイトからラズパイ用のUbuntuをダウンロード
- SDカードにUbuntuを書き込み
- ラズパイにSDカードを挿入して電源をオン
- Macからラズパイに接続
- MacとラズパイをLANケーブル(ストレートケーブル)で繋ぐ
- ラズパイにIPアドレスを割り当てるため、Mac側で設定
- MacからARPのキャッシュテーブルを参照してラズパイのIPアドレスを確認
- MacからSSHでラズパイに接続
- 初期設定
- Wi-Fi設定
手順
Ubuntuインストール
- 公式サイトからラズパイ用のUbuntuをダウンロード
- SDカードにUbuntuを書き込み
- ラズパイにSDカードを挿入して電源をオン
Install Ubuntu Server on a Raspberry Pi 2 or 3 | Ubuntu
こちらの公式サイトの通りに進めればOK
# バージョン確認
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
Macからラズパイに接続
まずはLANケーブル(ストレートケーブル)でMacとラズパイを接続します。
そのままではIPアドレスが割り当てられないので(?ここ理解が曖昧です)、Mac側の機能を使ってIPアドレスが割り当てられるようにします。
ラズパイにIPアドレスを割り当てるため、Mac側で設定
-
システム環境設定 -> 共有
で「インターネット共有」にチェックを入れる - 「相手のコンピュータが使用するポート」は「Ethernet」にチェックを入れる
Macのインターネット共有の機能は、MacをWi-Fiのアクセスポイントにする機能です。
そのため、インターネット共有しているMac自身がNAT変換をしDHCPサーバとして動作するようになるため、それに繋がっているラズパイにも自動的にIPアドレスを割り当ててくれます。
MacからARPのキャッシュテーブルを参照してラズパイのIPアドレスを確認
# 接続されている全てのホストの情報を表示
$ arp -a
192.168.2.x
のIPアドレスが割り当てられるようです。
MacからSSHでラズパイに接続
# SSHで接続
# ssh ubuntu@[ラズパイのIPアドレス]
$ ssh ubuntu@192.168.2.1
ユーザ名とパスワードは公式サイトにも記載がありますが以下の通りです。
初回はログインしてすぐにパスワードを変更するように求められますので、変更しましょう。
ユーザ名: ubuntu
パスワード: ubuntu
初期設定
Wi-Fi設定
有線のままでは煩わしいので、コマンドラインからWi-Fiの設定をします。
まずは周辺のアクセスポイントをスキャンしてみる
# Wireless tools for Linux をインストール
sudo apt install wireless-tools
# Wi-Fiのインターフェース名を確認
# 「wlan0」がインターフェース名
$ iwconfig
wlan0 IEEE 802.11 ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:off
eth0 no wireless extensions.
lo no wireless extensions.
# アクセスポイントをスキャン
# いくつかSSIDが出てこればOK、接続したいSSIDを控えておく
# sudo iwlist [インターフェース名] scan
sudo iwlist wlan0 scan | grep ESSID
SSIDとパスワードを登録、ブート時に自動的に接続するようにする
調べると、よく/etc/network/interfaces
に設定を書き込むという方法が出てくるのですが、このUbuntuのバージョン(18.04.2)ではnetplan
コマンドを使って設定するように変更になっているようです。
# 「/etc/network/interfaces」を開くと、「ifupdown は netplan に置き換えられました」と書いてある
$ cat /etc/network/interfaces
# ifupdown has been replaced by netplan(5) on this system. See
# /etc/netplan for current configuration.
# To re-enable ifupdown on this system, you can run:
# sudo apt install ifupdown
netplan
コマンドを使って設定していきます。
$ ll /etc/netplan/
total 16
drwxr-xr-x 2 root root 4096 May 10 05:35 ./
drwxr-xr-x 99 root root 4096 May 9 23:30 ../
-rw-r--r-- 1 root root 478 May 10 05:35 50-cloud-init.yaml
設定ファイルは50-cloud-init.yaml
しか無いようなので、このファイルを編集していきます。
今回は以下のように編集。
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
version: 2
wifis:
wlan0:
access-points:
"[接続するSSID]":
password: "[パスワード]"
dhcp4: true
dhcp6: true
書き方の詳細は公式サイトが参考になります。
- パスワードは平文でそのまま記載
- インデントがずれると反映したときにエラーになるので間違えないように
# 設定を反映(反映自体は再起動は不要)
$ sudo netplan apply
# 起動時にきちんと自動的にWi-Fiに繋がるかを確認するため、一旦再起動
$ sudo reboot
しばらく時間を置いてからSSHで接続しようとするも、入れない…
仕方なく仮設的にラズパイにディスプレイを接続して確認したところ、なぜか直にログインするとWi-Fiネットワークに接続されるらしい。
ログイン前に接続してほしいなー。
現状を確認してみると、NetworkManagerとnetworkdが両方ブート時に自動起動している状態。
$ systemctl is-enabled systemd-networkd
enabled
$ systemctl is-enabled network-manager
enabled
$ systemctl status systemd-networkd
● systemd-networkd.service - Network Service
Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2019-05-10 12:57:05 UTC; 51min ago
Docs: man:systemd-networkd.service(8)
Main PID: 1135 (systemd-network)
Status: "Processing requests..."
Tasks: 1 (limit: 2151)
CGroup: /system.slice/systemd-networkd.service
└─1135 /lib/systemd/systemd-networkd
May 10 13:33:15 ubuntu systemd-networkd[1135]: wlan0: Gained carrier
May 10 13:33:15 ubuntu systemd-networkd[1135]: wlan0: Lost carrier
May 10 13:33:15 ubuntu systemd-networkd[1135]: wlan0: Gained carrier
May 10 13:33:16 ubuntu systemd-networkd[1135]: wlan0: DHCPv4 address 192.168.128.113/24 via 192.168.128
May 10 13:33:25 ubuntu systemd-networkd[1135]: wlan0: Lost carrier
May 10 13:33:25 ubuntu systemd-networkd[1135]: wlan0: DHCP lease lost
May 10 13:33:25 ubuntu systemd-networkd[1135]: wlan0: Gained carrier
May 10 13:33:25 ubuntu systemd-networkd[1135]: wlan0: Lost carrier
May 10 13:33:25 ubuntu systemd-networkd[1135]: wlan0: Gained carrier
May 10 13:33:26 ubuntu systemd-networkd[1135]: wlan0: DHCPv4 address 192.168.128.113/24 via 192.168.128
$ systemctl status network-manager
● NetworkManager.service - Network Manager
Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2019-05-10 12:59:13 UTC; 49min ago
Docs: man:NetworkManager(8)
Main PID: 1193 (NetworkManager)
Tasks: 3 (limit: 2151)
CGroup: /system.slice/NetworkManager.service
└─1193 /usr/sbin/NetworkManager --no-daemon
May 10 13:33:05 ubuntu NetworkManager[1193]: <warn> [1557495185.4893] device (wlan0): re-acquiring supplicant interface (#3).
May 10 13:33:05 ubuntu NetworkManager[1193]: <error> [1557495185.6193] sup-iface[0xe4a148,wlan0]: error adding interface: wpa_supplicant couldn't grab this interface.
May 10 13:33:05 ubuntu NetworkManager[1193]: <info> [1557495185.6198] device (wlan0): supplicant interface state: starting -> down
May 10 13:33:15 ubuntu NetworkManager[1193]: <warn> [1557495195.4973] device (wlan0): re-acquiring supplicant interface (#4).
May 10 13:33:15 ubuntu NetworkManager[1193]: <error> [1557495195.6348] sup-iface[0xe4a1b0,wlan0]: error adding interface: wpa_supplicant couldn't grab this interface.
May 10 13:33:15 ubuntu NetworkManager[1193]: <info> [1557495195.6351] device (wlan0): supplicant interface state: starting -> down
May 10 13:33:25 ubuntu NetworkManager[1193]: <warn> [1557495205.4977] device (wlan0): re-acquiring supplicant interface (#5).
May 10 13:33:25 ubuntu NetworkManager[1193]: <error> [1557495205.6387] sup-iface[0xe4a218,wlan0]: error adding interface: wpa_supplicant couldn't grab this interface.
May 10 13:33:25 ubuntu NetworkManager[1193]: <info> [1557495205.6390] device (wlan0): supplicant interface state: starting -> down
May 10 13:33:25 ubuntu NetworkManager[1193]: <info> [1557495205.6393] device (wlan0): supplicant interface keeps failing, giving up
NetworkManagerが思いっきりコケてる!
/etc/netplan/50-cloud-init.yaml
でrenderer: networkd
だけ指定すればnetworkdの方を使ってくれるかなと思ったら上手くいかなかった。
NetworkManagerを使わないよう、自動起動をオフにする。
# NetworkManagerの自動起動をオフにする
$ sudo systemctl disable network-manager
Synchronizing state of network-manager.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable network-manager
Removed /etc/systemd/system/multi-user.target.wants/NetworkManager.service.
Removed /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service.
# 自動起動設定がオフになっていることを確認
$ systemctl is-enabled network-manager
disabled
# 再び再起動
$ sudo reboot
しばらくしてSSHで接続できることを確認!やった!
Wi-Fiのルータから取得したIPアドレスが割り当てられているのが確認できる。
$ iwconfig
wlan0 IEEE 802.11 ESSID:"[接続しているSSID]" # <- きちんと指定のSSIDに接続されている
Mode:Managed Frequency:2.462 GHz Access Point: F4:CB:52:F3:43:C2
Bit Rate=150 Mb/s Tx-Power=20 dBm
Retry short limit:7 RTS thr=2347 B Fragment thr:off
Power Management:off
Link Quality=70/70 Signal level=-36 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:92 Missed beacon:0
eth0 no wireless extensions.
lo no wireless extensions.
$ ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 416 bytes 30148 (30.1 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 416 bytes 30148 (30.1 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.128.113 netmask 255.255.255.0 broadcast 192.168.128.255 # <- きちんとIPが割り当てられている
ether 00:22:cf:f5:c8:95 txqueuelen 1000 (Ethernet)
RX packets 109 bytes 14707 (14.7 KB)
RX errors 0 dropped 2 overruns 0 frame 0
TX packets 83 bytes 15529 (15.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ちなみにMacからnmap
でスキャンすると、
$ nmap 192.168.128.113 -p 22
Starting Nmap 7.70 ( https://nmap.org ) at 2019-05-11 00:10 JST
Nmap scan report for ubuntu (192.168.128.113)
Host is up (0.0072s latency).
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
割り当てられた192.168.128.113
でSSH接続が可能なことが確認できる。
[余談] ネットワークマネージャーの種類とまとめ
-
Netplan
- ネットワークの設定を抽象化
- 設定はYAML形式で記述する
- 設定ファイルは
/etc/netplan/*.yaml
- バックエンドとして「NetworkManager」や「networkd」を使う
- WiFiとWWANに関しては、NetworkManagerが制御する
- その他の制御デバイスに関しては、特定のデバイスを指定しない限り、デフォルトでnetworkdが制御する
-
/etc/network/interfaces
- NetworkManagerが登場する以前の設定方法
-
wpa_passphrase
コマンドで出力した情報を/etc/wpa_supplicant/wpa_supplicant.conf
の設定ファイルに保存、/etc/network/interfaces
に設定ファイルのパスを指定して読み込ませる
Linuxで無線LANをコマンドで接続する(raspi 用) - それマグで!
-
NetworkManager
$ systemctl status network-manager
$ systemctl start network-manager
$ systemctl stop network-manager
# 自動起動設定の確認
$ systemctl is-enabled network-manager
enabled
$ nmcli
- networkd
$ systemctl status systemd-networkd
$ systemctl start systemd-networkd
$ systemctl stop systemd-networkd
# 自動起動設定の確認
$ systemctl is-enabled systemd-networkd
enabled