Raspberry Pi 環境を使用して Raspberry Pi OS を SDカードにインストール (2020/08)

Raspberry Pi OS (2020/05/27の公開版より Raspbian より改名)を、Raspberry Pi(既にセットアップ済の環境)を使用して、イメージファイルのダウンロードから、SDカードへの書き込み、SSH有効化、IPアドレス固定化、ホスト名・piユーザ名の変更等の、初期設定完了まで行う手順を記載します。

記載する手順は、Raspberry Pi をサーバ用途で使用することを目的としています。また、本ページからコマンドをコピー&ペーストにて、作業が進められるように考慮しました。
過去に Raspbian Buster のインストール手順で記載した内容と基本的に同じですが、見直し・修正を行っています。

1. イメージファイルのダウンロード

wgetコマンドを使用して、最新の Raspberry Pi OS イメージファイルをダウンロードします。
本手順ではLite版を使用していますが、その他を使用する場合はダウンロード先を変更して下さい。
・Raspberry Pi OS (32-bit) with desktop 版
→ https://downloads.raspberrypi.org/raspios_armhf_latest
・Raspberry Pi OS (32-bit) with desktop and recommended software 版
→ https://downloads.raspberrypi.org/raspios_full_armhf_latest

■Raspberry Pi OS (32-bit) Lite(2020-05-27リリース版のダウンロードサイズ=約432MB)
# wget --trust-server-name https://downloads.raspberrypi.org/raspios_lite_armhf_latest
#

2. ダウンロードしたイメージファイルの確認

ダウンロードした Raspberry Pi OS イメージファイルのSHA-256ハッシュ値と、Raspberry Pi OS ダウンロードサイトに表示のハッシュ値を比較確認し、ファイルの破損・改ざん等の有無を確認します。

# sha256sum 2020-05-27-raspios-buster-lite-armhf.zip
f5786604be4b41e292c5b3c711e2efa64b25a5b51869ea8313d58da0b46afc64  2020-05-27-raspios-buster-lite-armhf.zip
#

3. インストール先SDカードの確認

Raspberry Pi OS のイメージファイルを書き込むSDカードを、USB SDカードリーダ/ライタにセットして、Raspberry Pi に接続します。その後 ” lsblk ” コマンドを使用して、SDカードの認識状態を確認します。
SDカードの内容は、イメージファイルの内容で上書きされるため、下記手順で認識したデバイス配下の状態(パーティションの有無等)は、これ以降の手順に影響しません。

# lsblk -p
NAME             MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
/dev/sda           8:0    1 14.9G  0 disk  ← sda として、SDカードを認識 
├/dev/sda1        8:1    1 43.9M  0 part 
└/dev/sda2        8:2    1 14.8G  0 part 
/dev/mmcblk0     179:0    0 14.9G  0 disk 
├/dev/mmcblk0p1 179:1    0 43.9M  0 part /boot
└/dev/mmcblk0p2 179:2    0 14.8G  0 part /
#

4. イメージファイルをSDカードへ書込み

Raspberry Pi OS のイメージファイルをSDカードに書き込みます。
下記の手順では、” zcat ” コマンドでイメージファイルのzip圧縮を展開しながら、” dd ” コマンドで、SDカードに書き込みを行っています。

# zcat 2020-05-27-raspios-buster-lite-armhf.zip | dd of=/dev/sda bs=4M status=progress conv=fsync
#

5. SDカードへ初期設定実施(Raspberry Pi OS 起動前)

Raspberry Pi OS イメージファイルを、SDカードへ書き込みが完了したら、SDカードを Raspberry Pi にセットしたままの状態で、初期設定処理を実施していきます。

(1) SSH有効化設定

同設定は、SDカードの1つ目のパーティション(sda1)内に ” ssh ” 名のダミーファイルを作成しておくことで、初回 boot 時に、SSH が自動的に有効な状態に設定されます。

# mount /dev/sda1 /mnt
#
# touch /mnt/ssh
#
# sync
# umount /dev/sda1
#

上記で行ったSSH有効化方法については、A SECURITY UPDATE FOR RASPBIAN PIXELの中で、以下の様に説明されています。

If you want to enable SSH, all you need to do is to put a file called ssh in the /boot/ directory. The contents of the file don’t matter: it can contain any text you like, or even nothing at all. When the Pi boots, it looks for this file; if it finds it, it enables SSH and then deletes the file.

(2) IPアドレス固定化設定

下記の手順では、” /etc/dhcpcd.conf ” 設定ファイルの編集に、エディタを使用せず ” echo ” コマンドを用いて、設定情報を追記しています。
※IPアドレス情報は、環境に応じて修正して下さい。

# mount /dev/sda2 /mnt
#
# echo "" >> /mnt/etc/dhcpcd.conf
# echo "interface eth0" >> /mnt/etc/dhcpcd.conf
# echo "static ip_address=192.168.1.10/24" >> /mnt/etc/dhcpcd.conf
# echo "static routers=192.168.1.1" >> /mnt/etc/dhcpcd.conf
# echo "static domain_name_servers=192.168.1.1" >> /mnt/etc/dhcpcd.conf
# cat /mnt/etc/dhcpcd.conf  ←設定内容を確認します。
#
# sync
# umount /dev/sda2
#

(3) ホスト名変更設定

下記の手順ではエディタを使用せず ” sed ” コマンドを用いて、設定ファイル内デフォルトホスト名 ” raspberrypi ” の文字列を ” server01 ” 名に置換しています。
※ ホスト名情報は、環境に応じて修正して下さい。

# mount /dev/sda2 /mnt
#
# sed -i 's/raspberrypi/server01/g' /mnt/etc/hostname
# cat /mnt/etc/hostname  ←設定内容を確認します。
# 
# sed -i 's/raspberrypi/server01/g' /mnt/etc/hosts
# cat /mnt/etc/hosts  ←設定内容を確認します。
#
# sync
# umount /dev/sda2
#

(4) デフォルトユーザ ” pi ” 名称の変更設定

下記の手順ではエディタを使用せず ” sed ” コマンドを用いて、各設定ファイル内のデフォルトユーザ名 ” pi ” 名称を、正規表現にて単語で検索し ” sysadmin ” 名に置換しています。
※ ユーザ名情報は、環境に応じて修正して下さい。
※ 変更後のファイル内容は、適時 ” cat ” コマンド等で確認して下さい。

# mount /dev/sda2 /mnt
#
# sed -i 's/\<pi\>/sysadmin/g' /mnt/etc/passwd
# sed -i 's/\<pi\>/sysadmin/g' /mnt/etc/group
# sed -i 's/\<pi\>/sysadmin/g' /mnt/etc/shadow
# sed -i 's/\<pi\>/sysadmin/g' /mnt/etc/gshadow
# sed -i 's/\<pi\>/sysadmin/g' /mnt/etc/subuid
# sed -i 's/\<pi\>/sysadmin/g' /mnt/etc/subgid
# sed -i 's/\<pi\>/sysadmin/g' /mnt/etc/systemd/system/[email protected]
# sed -i 's/\<pi\>/sysadmin/g' /mnt/etc/sudoers.d/010_pi-nopasswd
# mv /mnt/etc/sudoers.d/010_pi-nopasswd /mnt/etc/sudoers.d/010_sysadmin-nopasswd
# mv /mnt/home/pi /mnt/home/sysadmin
#
# sync
# umount /dev/sda2
#

以上で、SDカードへのインストール+初期設定(Raspberry Pi OS 起動前)の作業は完了です。
SDカードを、USB SDカードリーダ/ライタから取り外します。

6. Raspberry Pi OS を起動し初期設定(起動後)

インストール+初期設定まで完了したSDカードを、Raspberry Pi にセットして、Raspberry Pi OS を起動します。
Tera Term 等のターミナルから設定した ” IPアドレス ” に対してSSH接続し、変更した ” ユーザ ” 名、初期パスワード ” raspberry ” にてログインします。

(1) 初期パスワード変更

ログインした ” ユーザ ” の初期パスワード ” raspberry ” を任意のパスワードに変更して下さい。

$ passwd
Changing password for sysadmin.
Current password:
New password:
Retype new password:
passwd: password updated successfully
$

(2) root にパスワード設定

” root ” ユーザにパスワードを設定します。

$ sudo passwd root
New password:
Retype new password:
passwd: password updated successfully
$

(3) root に su します。

初期設定の作業簡略化のため ” root ” に ” su ” して作業します。

$ su -
Password:
#

(4) ロケール設定変更

言語と地域に関わる設定「ロケール」を、日本に合わせて設定します。
下記の手順では、通常の ” dpkg-reconfigure locales ” のインタラクティブモードを使用しないで、CLIのみで実施しています。
※ 初期状態の ” en_GB.UTF-8” を ” ja_JP.UTF-8” に変更を行っています。
※ 設定の反映は、再ログインしたタイミングになります。

# sed -i 's/en_GB.UTF-8 UTF-8/# en_GB.UTF-8 UTF-8/g' /etc/locale.gen
# sed -i 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/g' /etc/locale.gen
# locale-gen
# localectl set-locale LANG=ja_JP.UTF-8
#

設定の反映のため、一度 ” root ” から抜けて ” su ” し直し、確認します。

# exit
$ su -
Password:
# date  ←dateコマンドで時刻の表示を確認します。
# 2020年 8月 16日 日曜日 16:32:10 BST  ←日本語表記になっていればOK。
#

(5) タイムゾーン設定変更

タイムゾーンを初期状態の ” Europe/London ” から ” Asia/Tokyo ” に変更します。

# timedatectl set-timezone Asia/Tokyo
#
# date  ←dateコマンドで確認します。
# 2020年 5月 2日 土曜日 22:33:19 JST  ←末尾が「JST」になっていればOK。
#

(6) パッケージの更新

raspbian のイメージファイルをSDカードに展開した時点の状態から、パッケージの更新を実施します。
” apt update ” → リポジトリ一覧を更新
” apt upgrade ” → パッケージを更新

# apt update
# apt upgrade
#

(7) reboot して起動確認

” reboot ” を実施して、初期設定後の再起動確認を行います。

# reboot
#

以上で、Raspberry Pi OS のSDカードへのインストール作業は完了です。