Raspberry Pi 3 にモニターを接続しない状態 (ヘッドレス) で Raspbian Stretch
をインストールします。
モニターが無いため最初から SSH でログインする必要があり、デフォルト状態では最初に
DHCP で割りあてられた IP アドレスを探り出す必要があり大変です。
そこで、母艦 Ubuntu で microSD メモリカードに Raspbian
をインストールする時に Raspbian の IP アドレスも固定で設定します。
環境
- Raspberry Pi 3 Model B
- Raspbian Stretch Lite
- 母艦: Ubuntu 14.04
microSD カードに Raspbian イメージを書き込み (母艦の Ubuntu で作業)
Raspbian をインストールする microSD カードは手元にあった 32G のものを使います。
大事なファイルが残っていないことを確認し、念のため全てのパーティションを
fdisk コマンドで削除しておきました。
https://www.raspberrypi.org/ から Raspbian Stretch Lite (デスクトップ環境無し)
のイメージファイルをダウンロード。ダウンロード時の最新イメージファイルは
2017-11-29-raspbian-stretch-lite.zip でした。
念のため、チェックサムがサイトに掲載されているものと一致することを確認
$ sha256sum 2017-11-29-raspbian-stretch-lite.zip
e942b70072f2e83c446b9de6f202eb8f9692c06e7d92c343361340cc016e0c9f 2017-11-29-raspbian-stretch-lite.zip
ダウンロードした zip ファイルを解凍
$ unzip 2017-11-29-raspbian-stretch-lite.zip
$ ls -l
合計 2170716
-rw-r--r-- 1 worker worker 1858076672 11月 29 11:37 2017-11-29-raspbian-stretch-lite.img
-rw-rw-r-- 1 worker worker 364724005 1月 27 21:51 2017-11-29-raspbian-stretch-lite.zip
microSD カードがマウントされていないことを確認
$ mount | grep /dev/XXXXXXX
- /dev/XXXXXXX は実際は microSD カードのデバイスファイルです。 (環境によって異なります)
イメージを microSD カードに書き込み
Warning
/dev/XXXXXXX を間違えると、意図せず HDD など他のデバイスの情報を消去してしまうので注意が必要です。
$ sudo dd bs=4M if=2017-11-29-raspbian-stretch-lite.img of=/dev/XXXXXXX conv=fsync
書き込んだ後の microSD の中身
$ sudo fdisk -l /dev/XXXXXXX
... snip ...
/dev/XXXXXXXp1 8192 93236 42522+ c W95 FAT32 (LBA)
/dev/XXXXXXXp2 94208 3629055 1767424 83 Linux
正しく書き込めたこと確認 (母艦の Ubuntu で作業)
microSD カードからイメージを吸い出し
Warning
microSD カードのサイズが 32G の場合、以下を実行すると Ubuntu の HDD も 32G
消費されるので、HDD が容量不足にならないように注意が必要です。
$ sudo dd bs=4M if=/dev/XXXXXXX of=from-sd-card.img
$ ls -l
合計 33053532
-rw-r--r-- 1 worker worker 1858076672 11月 29 11:37 2017-11-29-raspbian-stretch-lite.img
-rw-rw-r-- 1 worker worker 364724005 1月 27 21:51 2017-11-29-raspbian-stretch-lite.zip
-rw-r--r-- 1 root root 31624003584 1月 28 00:59 from-sd-card.img
from-sd-card.img のサイズは microSD カードと同じ 32G なので、比較のため切り詰め
$ sudo truncate --reference 2017-11-29-raspbian-stretch-lite.img from-sd-card.img
$ ls -l
合計 3985244
-rw-r--r-- 1 worker worker 1858076672 11月 29 11:37 2017-11-29-raspbian-stretch-lite.img
-rw-rw-r-- 1 worker worker 364724005 1月 27 21:51 2017-11-29-raspbian-stretch-lite.zip
-rw-r--r-- 1 root root 1858076672 1月 28 01:04 from-sd-card.img
- from-sd-card.img のサイズが 2017-11-29-raspbian-stretch-lite.img と同じになりました。
比較
$ diff -s from-sd-card.img 2017-11-29-raspbian-stretch-lite.img
ファイル from-sd-card.img と 2017-11-29-raspbian-stretch-lite.img は同一です
$ md5sum from-sd-card.img 2017-11-29-raspbian-stretch-lite.img
85c7c13b75e45e5394120e52415234a6 from-sd-card.img
85c7c13b75e45e5394120e52415234a6 2017-11-29-raspbian-stretch-lite.img
sync 実施
固定 IP アドレスの設定 (母艦の Ubuntu で作業)
microSD カードのパーティションを認識させる
$ sudo partx -v -a /dev/XXXXXXX
partition: none, disk: /dev/XXXXXXX, lower: 0, upper: 0
/dev/XXXXXXX: partition table type 'dos' detected
/dev/XXXXXXX: partition #1 added
/dev/XXXXXXX: partition #2 added
デバイスファイルができたことを確認
$ ls /dev/XXXXXXX*
/dev/XXXXXXX /dev/XXXXXXXp1 /dev/XXXXXXXp2
Raspbian では以下のようにマウントされるようです。
デバイスファイル |
マウントポイント |
/dev/XXXXXXXp1 |
/boot/ |
/dev/XXXXXXXp2 |
/ |
microSD カードがマウントされていないことを確認
$ mount | grep /dev/XXXXXXX
マウントポイント作成
$ mkdir mount_point_p1
$ mkdir mount_point_p2
マウント
$ sudo mount /dev/XXXXXXXp1 mount_point_p1/
$ sudo mount /dev/XXXXXXXp2 mount_point_p2/
Rasbian Stretch のカーネルは eth0 ではなく enxXXXXXXX (環境によって異なる)
となります。このままだと実際のインターフェース名は Raspbian を起動して ssh
しないとわからないので eth0 を使うようにします。
cmdline.txt をバックアップ
$ sudo cp -p mount_point_p1/cmdline.txt mount_point_p1/cmdline.txt.org
eth0 を使うように cmdline.txt の最後に以下のように追加
$ echo "
net.ifnames=0" | sudo tee -a mount_point_p1/cmdline.txt
$ diff -u mount_point_p1/cmdline.txt.org mount_point_p1/cmdline.txt
--- mount_point_p1/cmdline.txt.org 2017-11-29 02:37:02.000000000 +0900
+++ mount_point_p1/cmdline.txt 2018-01-28 16:35:22.000000000 +0900
@@ -1 +1,3 @@
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=37665771-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh
+
+net.ifnames=0
dhcpcd.conf をバックアップ
$ sudo cp -p mount_point_p2/etc/dhcpcd.conf mount_point_p2/etc/dhcpcd.conf.org
実際の環境にあわせて dhcpcd.conf の最後に IP アドレス情報を追加
$ echo "
interface eth0
static ip_address=192.168.0.10/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 8.8.8.8" | sudo tee -a mount_point_p2/etc/dhcpcd.conf
$ diff -u mount_point_p2/etc/dhcpcd.conf.org mount_point_p2/etc/dhcpcd.conf
--- mount_point_p2/etc/dhcpcd.conf.org 2017-11-22 23:46:27.000000000 +0900
+++ mount_point_p2/etc/dhcpcd.conf 2018-01-28 16:41:48.855806158 +0900
@@ -55,3 +55,8 @@
#interface eth0
#fallback static_eth0
+
+interface eth0
+static ip_address=192.168.0.10/24
+static routers=192.168.0.1
+static domain_name_servers=192.168.0.1 8.8.8.8
Raspbian 起動時に ssh サーバーも起動するようにするため、ssh ファイル作成
$ sudo touch mount_point_p1/ssh
microSD カードをアンマウント
$ sudo umount mount_point_p1
$ sudo umount mount_point_p2
Ubuntu 機から microSD カードを抜く
インストール後の設定 (Raspberry Pi で作業)
microSD カードを Raspberry Pi に挿して起動
Raspberry Pi に ssh でログイン
- user: pi
- password: raspberry
ログインパスワード変更
raspi-config 起動
raspi-config で以下を設定しました。
- 無線 LAN
- Locale
- Timezone
- Wifi Country
SSH 鍵の更新
$ sudo rm -v /etc/ssh/ssh_host*
$ sudo dpkg-reconfigure openssh-server
パスワード無しでの sudo 禁止
現状はこのような感じになっていました。
$ sudo cat /etc/sudoers.d/010_pi-nopasswd
pi ALL=(ALL) NOPASSWD: ALL
このファイルを削除
$ sudo rm /etc/sudoers.d/010_pi-nopasswd
その他
/boot/ssh は自動で削除されましたが、Raspberry Pi 再起動後も ssh
でログインできています。
microSD は 32G を使いましたが、/ は最大容量まで拡張されたようです。
$ sudo fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 29.5 GiB, 31624003584 bytes, 61765632 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd711aa51
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 8192 93236 85045 41.5M c W95 FAT32 (LBA)
/dev/mmcblk0p2 94208 61765631 61671424 29.4G 83 Linux
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 29G 1.1G 27G 4% /
devtmpfs 460M 0 460M 0% /dev
tmpfs 464M 76K 464M 1% /dev/shm
tmpfs 464M 12M 452M 3% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 464M 0 464M 0% /sys/fs/cgroup
/dev/mmcblk0p1 41M 21M 21M 51% /boot
tmpfs 93M 0 93M 0% /run/user/1000