Raspberry Pi 4 に、Ubuntu Server をインストールした。
はじめに。
この記事は「Rasipberry Pi 4」に OSのインストールを行った時の記録になります。インストールしたOSは「Ubuntu 18.04 LTS」となります。
作業環境
・MacBook Air / Catalina : 10.15.5
・Raspberry Pi 4 : 4GB model
必要なもの
・microUSBカードがさせるType-Cの変換アダプタ
Step1. OSイメージをmicroUSBに書き込む
公式サイトから「Ubuntu18.04 64-bit版」をダウンロードします。
下記公式サイトの手順に従ってインストールを行います。
OSイメージのダウンロード完了後、「microUSBカードがさせるType-Cの変換アダプタ」を利用し、microUSBへイメージを書き込みます。Macから下記のコマンドでDISKが追加されたかを確認します。
$ diskutil list
----
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *251.0 GB disk0
1: EFI EFI 314.6 MB disk0s1
2: Apple_APFS Container disk1 250.7 GB disk0s2
/dev/disk1 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +250.7 GB disk1
Physical Store disk0s2
1: APFS Volume Macintosh HD - Data 144.5 GB disk1s1
2: APFS Volume Preboot 83.6 MB disk1s2
3: APFS Volume Recovery 526.6 MB disk1s3
4: APFS Volume VM 1.1 GB disk1s4
5: APFS Volume Macintosh HD 11.1 GB disk1s5
/dev/disk2 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *31.9 GB disk2
1: DOS_FAT_32 SYSTEM-BOOT 268.4 MB disk2s1
2: Linux 31.6 GB disk2s2
----
今回の場合、"/dev/disk2" がmicroUSBになります。
それではアンマウントし、ダウンロードしたOSを書き込んでいきます。
$ diskutil unmountDisk /dev/disk2
----
Unmount of all volumes on disk2 was successful
----
$ sudo sh -c 'gunzip -c ./Downloads/ubuntu-18.04.4-preinstalled-server-arm64+raspi3.img.xz | sudo dd of=/dev/disk2 bs=32m'
----
0+40480 records in
0+40480 records out
2624517120 bytes transferred in 340.560949 secs (7706454 bytes/sec)
----
これでOSイメージはmicroUSBへの書き込みが完了です。
次にmicroUSBを抜いてRaspberryPi 4に搭載します。
Step2. OSセットアップ
次にSSHを利用し、OSの設定を行っていきます。
ここからは、Raspberry Pi 4にログインして作業をしていきます。
Step2-1. ネットワークの設定
まずは OSアップデートとnetwork設定を行うために、"network-manager"をインストールします。
$ sudo apt update
$ sudo apt dist-upgrade
$ sudo apt install network-manager
$ sudo apt autoremove
アップデート処理とnetwork-managerインストール完了後、
ネットワークの設定を行います。
下に設定例を記載します。
設定例ではeth0(local)とwlan0(wifi)の両方を利用するものです。
MacからのSSHはwlan0経由になるようにしています。
#本当はeth, wlanのIPレンジは変えたかった。
$ vim /etc/netplan/50-cloud-init.yaml
-------------------------------------
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. 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:
ethernets:
eth0:
dhcp4: false
dhcp6: false
addresses: [192.168.0.xx/24]
gateway4: 192.168.0.1
nameservers:
addresses: [192.168.0.1, 1.1.1.1]
wifis:
wlan0:
dhcp4: false
dhcp6: false
addresses: [192.168.0.xx/24]
gateway4: 192.168.3.10
nameservers:
addresses: [192.168.0.xx]
access-points:
"$SSID":
password: "xxxxxxxxxx"
version: 2
renderer: NetworkManager
-------------------------------------
ipv6は利用しないので、無効化します。
$ sudo vim /etc/sysctl.conf
> net.ipv6.conf.all.disable_ipv6=1
> net.ipv6.conf.default.disable_ipv6=1
> net.ipv6.conf.lo.disable_ipv6=1
$ sudo sysctl -p && ip a
Step2-2. SSH設定
次はSSHの設定をしていきます。
設定完了後、SSHサービスの再起動を行い設定反映します。
下の設定では、最低限4つの設定をしています。
・SSHアクセスは任意のポートのみ
・SSHアクセスできるネットワークを制限
・rootでログイン出来ない
・パスワードの認証はssh-keyを利用し、プロンプトのテキスト入力はNG
他の詳しい設定は別途調べて見てもらえればと思います。
$ sudo vim /etc/ssh/sshd_config
-------------------------------
port xxxx
AddressFamily inet
ListenAddress x.x.x.x
PermitRootLogin prohibit-password
-------------------------------
$ sudo systemctl restart sshd ; sudo systemctl status sshd
Step2-3. タイムゾーン / NTP設定
次にタイムゾーンを日本に修正すると同時に、時刻同期のNTP設定を追加していきます。
$ sudo timedatectl set-timezone Asia/Tokyo
$ sudo vim /etc/systemd/timesyncd.conf
----
> NTP=ntp.nict.jp
----
$ sudo systemctl restart systemd-timesyncd
$ sudo systemctl status systemd-timesyncd
--> "Active" になっていること!
Step2-4. ホスト名変更
次にホスト名を変更します。自分の好きな名前をつけてください。
$ sudo hostnamectl set-hostname kube-mstr-01
$ sudo vim /etc/hosts
Step2-5. ログインユーザー設定
初期ユーザーを削除して、新しいユーザーを作成していきます。
$ sudo adduser ${USER}
$ id
------------------------------------------------------------------------------------------------------------------------------------------------------------------
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(lxd),111(netdev)
------------------------------------------------------------------------------------------------------------------------------------------------------------------
$ sudo usermod -G ubuntu,adm,dialout,cdrom,floppy,sudo,audio,dip,video,plugdev,lxd,netdev ${USER}
$ ssh ${USER}@${HOSTNAME}
--> 別ターミナルでSSHアクセスをし、アクセス確認をする
$ sudo userdel -r ubuntu
rootユーザーのパスワードも変更します。
$ sudo passwd root
プラスアルファ
ラズパイHWに関する情報を取得するために、"vcgencmd"を導入します。
これで、CPUの温度や消費電力もコマンドから取得できるので便利です。
$ sudo add-apt-repository ppa:ubuntu-raspi2/ppa
$ sudo apt list libraspberrypi-bin
----------------------------------------------------
Listing... Done
libraspberrypi-bin/bionic 1.20161003.2350bf2-1 arm64
----------------------------------------------------
$ sudo apt install libraspberrypi-bin
$ vcgencmd measure_temp
-----------------------
temp=30.6'C
-----------------------
$ sudo groupadd -f --system gpio
$ sudo groupadd -f --system i2c
$ sudo groupadd -f --system input
$ sudo groupadd -f --system spi
無線LANのパワーセーブモードをOFFにして、wifi通信が途中で途切れないように追加設定をします。
$ sudo iw dev wlan0 get power_save
----------------------------------
Power save: on
----------------------------------
$ cat /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
---------------------------------------------------------------
[connection]
wifi.powersave = 3
---------------------------------------------------------------
$ sudo vim /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
---------------------------------------------------------------
> [connection]
> wifi.powersave = 2
---------------------------------------------------------------
Possible values for the wifi.powersave field are:
NM_SETTING_WIRELESS_POWERSAVE_DEFAULT (0): use the default value
NM_SETTING_WIRELESS_POWERSAVE_IGNORE (1): don't touch existing setting
NM_SETTING_WIRELESS_POWERSAVE_DISABLE (2): disable powersave
NM_SETTING_WIRELESS_POWERSAVE_ENABLE (3): enable powersave
ufw という設定が簡単にできるfirewallを導入して、関係ないトラフィックを遮断することをお勧めします。
が、よくわかってないとfirewallで必要な通信もブロックされてしまうので注意が必要です。
#当初はufwにて制御してましたが、何度もkubernetesクラスターを構築してるうちに、Disableにしました。
$ sudo ufw status verbose
-------------------------
Status: inactive
-------------------------
$ sudo ufw disable
$ sudo ufw default deny
----------------------------------------------------------------------
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
----------------------------------------------------------------------
$ sudo ufw allow proto tcp from 192.168.3.0/24 to any port ${SSH_PORT}
----------------------------------------------------------------------
Rules updated
----------------------------------------------------------------------
$ sudo ufw enable
$ sudo ufw status verbose
----------------------------------------------------------------------
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
${SSH_PORT}/tcp ALLOW IN 192.168.3.0/24
----------------------------------------------------------------------
おわりに。
これでOSの設定は完了です。
充分な設定ではありませんが、とりあえず動作させるにはこの程度いいと思います。細かな設定は後々実施していきまずはKubernetesを動作させることを優先させます。
この記事が気に入ったらサポートをしてみませんか?