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を動作させることを優先させます。

この記事が気に入ったらサポートをしてみませんか?