Ubuntu Server 20.04をROCK 4C Plusへインストール後の初期設定
目次
概要
2022年は半導体不足の影響でRaspberry Piが常時品薄状態で、なかなか手に入りませんでした。 代替になるようなシングルボードコンピュータがないか探していたところ、中国のRadxaがリリースしている「ROCK 4C Plus」という製品を見つけました。 採用されているSoCはラズパイとは異なるRockchip RK3399-Tですが、ボードのサイズやインタフェース(USB、HDMI等)のレイアウトがラズパイに似ています。 スペックはほぼ同等のように見えますが、ストレージとしてmicroSDカードだけでなくM.2 SSDやeMMCを搭載できる点が面白そうだったので試しに1枚購入してみました。
ROCK 4C Plusをラズパイ4Bと並べて家庭内サーバの1機能(何を入れるかは未定)を担わせるために公式のOSイメージの中から Ubuntu Server 20.04 LTSを選択してインストールしました。 インストール後に最低限の初期設定を行ったので、その時の作業履歴を元に手順書として残しておきます。
構成
サーバ構成
ハードウェア
ハードウェアはROCK 4C Plusのメモリ4GBモデルを利用しました。 ハードウェアスペックは以下のとおりです。 PoE Hatはラズパイ4B用のものを流用しています。
項目 | 内容 |
---|---|
SoC | Rockchip RK3399-T |
CPU | Dual Cortex-A72, frequency 1.5GHz Qual Cortex-A53, frequency 1.0GHz |
GPU | Mali T860MP4 |
メモリ | 64bit dual channel LPDDR4@3200Mb/s 4GB |
有線ネットワーク | GbE LAN with Power over Ethernet (PoE) |
ストレージ | microSDカード , NVMe SSD 128GB , eMMC 64GB |
ディスプレイ | LG 24ML600S-W |
キーボード | FILCO FKBC91MRL/JB2 |
マウス | Logicool M325 |
OS
Ubuntu Server 20.04 LTS arm64
ソフトウェア・パッケージ
使用したOSイメージファイルは以下のファイル名です。
- rockpi4c_ubuntu_focal_server_arm64_20210126_0004-gpt.img.gz
環境構築
インストール
ROCK 4C Plusのシステムディスク作成
RadxaのWikiで公開されている公式のOSイメージをWindows PCにダウンロードして、RufusでmicroSDカードに書き込みました。 公式WikiではEtcherというツールでOSイメージを書き込む手順が掲載されていますが、Rufusで書き込んだ場合でも問題なくUbuntuが起動したので やっている処理としては同じなのだと思われます。なお、使用したUbuntu Server 20.04のOSイメージは下記URLからダウンロードしました。
Official Images Ubuntu 20 Server(Linux 4.4)
Rufusを使用してOSイメージをmicroSDカードへ書き込む手順は以下のページに掲載しています。
CentOS 7.8.2003をRaspberry Pi 4のmicroSDカードへインストール
設定
パッケージ情報の更新
パッケージを最新化する前段階としてリポジトリのパッケージ一覧を最新化します。
rock@rock-4c-plus:~$ sudo apt update
[sudo] password for rock: ←これが表示された場合はrockユーザのパスワードを入力
Get:1 http://apt.radxa.com/focal-stable focal InRelease [2359 B]
Err:1 http://apt.radxa.com/focal-stable focal InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 9B98116C9AA302C7
Get:2 http://ports.ubuntu.com/ubuntu-ports focal InRelease [265 kB]
Get:3 http://ports.ubuntu.com/ubuntu-ports focal-security InRelease [114 kB]
Get:4 http://ports.ubuntu.com/ubuntu-ports focal-updates InRelease [114 kB]
Get:5 http://ports.ubuntu.com/ubuntu-ports focal-backports InRelease [108 kB]
Get:6 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 Packages [940 kB]
Get:7 http://ports.ubuntu.com/ubuntu-ports focal/main Translation-en [506 kB]
Get:8 http://ports.ubuntu.com/ubuntu-ports focal/restricted arm64 Packages [1300 B]
Get:9 http://ports.ubuntu.com/ubuntu-ports focal/restricted Translation-en [6212 B]
Get:10 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 Packages [8458 kB]
Get:11 http://ports.ubuntu.com/ubuntu-ports focal/universe Translation-en [5124 kB]
Get:12 http://ports.ubuntu.com/ubuntu-ports focal/multiverse arm64 Packages [114 kB]
Get:13 http://ports.ubuntu.com/ubuntu-ports focal/multiverse Translation-en [104 kB]
Get:14 http://ports.ubuntu.com/ubuntu-ports focal-security/main arm64 Packages [1351 kB]
Get:15 http://ports.ubuntu.com/ubuntu-ports focal-security/main Translation-en [316 kB]
Get:16 http://ports.ubuntu.com/ubuntu-ports focal-security/restricted arm64 Packages [4416 B]
Get:17 http://ports.ubuntu.com/ubuntu-ports focal-security/restricted Translation-en [200 kB]
Get:18 http://ports.ubuntu.com/ubuntu-ports focal-security/universe arm64 Packages [710 kB]
Get:19 http://ports.ubuntu.com/ubuntu-ports focal-security/universe Translation-en [151 kB]
Get:20 http://ports.ubuntu.com/ubuntu-ports focal-security/multiverse arm64 Packages [3068 B]
Get:21 http://ports.ubuntu.com/ubuntu-ports focal-security/multiverse Translation-en [5464 B]
Get:22 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 Packages [1655 kB]
Get:23 http://ports.ubuntu.com/ubuntu-ports focal-updates/main Translation-en [399 kB]
Get:24 http://ports.ubuntu.com/ubuntu-ports focal-updates/restricted arm64 Packages [4608 B]
Get:25 http://ports.ubuntu.com/ubuntu-ports focal-updates/restricted Translation-en [213 kB]
Get:26 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 Packages [940 kB]
Get:27 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe Translation-en [235 kB]
Get:28 http://ports.ubuntu.com/ubuntu-ports focal-updates/multiverse arm64 Packages [8200 B]
Get:29 http://ports.ubuntu.com/ubuntu-ports focal-updates/multiverse Translation-en [7408 B]
Get:30 http://ports.ubuntu.com/ubuntu-ports focal-backports/main arm64 Packages [45.3 kB]
Get:31 http://ports.ubuntu.com/ubuntu-ports focal-backports/main Translation-en [16.3 kB]
Get:32 http://ports.ubuntu.com/ubuntu-ports focal-backports/universe arm64 Packages [24.3 kB]
Get:33 http://ports.ubuntu.com/ubuntu-ports focal-backports/universe Translation-en [16.3 kB]
Reading package lists... Done
W: GPG error: http://apt.radxa.com/focal-stable focal InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 9B98116C9AA302C7
E: The repository 'http://apt.radxa.com/focal-stable focal InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
アップデート可能なパッケージの更新
最新化したパッケージ一覧を元にアップデート可能なパッケージを更新します。
rock@rock-4c-plus:~$ sudo apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
libubootenv-tool libubootenv0.1 uuid-runtime
The following packages will be upgraded:
adwaita-icon-theme alsa-utils apt apt-transport-https avahi-daemon avahi-utils base-files bash bind9-host bind9-libs binutils binutils-aarch64-linux-gnu
binutils-common blueman bluez bluez-obexd bsdutils busybox-initramfs ca-certificates cpio dbus dbus-user-session dirmngr distro-info-data dpkg e2fsprogs
fdisk gcc-10-base gir1.2-freedesktop gir1.2-gdkpixbuf-2.0 gir1.2-glib-2.0 gir1.2-gtk-3.0 gir1.2-nm-1.0 gir1.2-packagekitglib-1.0 glib-networking
glib-networking-common glib-networking-services gnupg gnupg-l10n gnupg-utils gnupg2 gpg gpg-agent gpg-wks-client gpg-wks-server gpgconf gpgsm gpgv
gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-x gtk-update-icon-cache gzip initramfs-tools initramfs-tools-bin
initramfs-tools-core isc-dhcp-client jq klibc-utils kmod libapparmor1 libapt-pkg6.0 libasn1-8-heimdal libasound2 libasound2-data libatk-bridge2.0-0
libatopology2 libavahi-client3 libavahi-common-data libavahi-common3 libavahi-core7 libavcodec58 libavutil56 libbinutils libblkid1 libbluetooth3 libbrotli1
libc-bin libc6 libcaca0 libcom-err2 libcryptsetup12 libctf-nobfd0 libctf0 libcups2 libcurl3-gnutls libdbus-1-3 libdns-export1109 libdpkg-perl libdrm-common
libdrm2 libexpat1 libext2fs2 libfdisk1 libflac8 libfreetype6 libfribidi0 libgcc-s1 libgcc1 libgcrypt20 libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-common
libgirepository-1.0-1 libglib2.0-0 libglib2.0-bin libglib2.0-data libgmp10 libgnutls30 libgomp1 libgssapi-krb5-2 libgssapi3-heimdal libgssdp-1.2-0
libgstreamer-plugins-bad1.0-0 libgstreamer-plugins-base1.0-0 libgstreamer-plugins-good1.0-0 libgstreamer1.0-0 libgtk-3-0 libgtk-3-common libgupnp-1.2-0
libharfbuzz0b libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal libhogweed5 libhx509-5-heimdal libicu66 libisc-export1105 libjbig0
libjpeg-turbo8 libjq1 libjson-c-dev libjson-c4 libk5crypto3 libkeyutils1 libklibc libkmod2 libkrb5-26-heimdal libkrb5-3 libkrb5support0 libksba8
(========== 中略 ==========)
Setting up dbus-user-session (1.12.16-2ubuntu2.3) ...
Setting up gstreamer1.0-plugins-bad:arm64 (1.16.3-0ubuntu1) ...
Setting up packagekit (1.1.13-2ubuntu1.1) ...
Setting up gpg-wks-client (2.2.19-3ubuntu2.2) ...
Setting up blueman (2.1.2-1ubuntu0.3) ...
Setting up software-properties-common (0.99.9.8) ...
Setting up gnupg (2.2.19-3ubuntu2.2) ...
Setting up gnupg2 (2.2.19-3ubuntu2.2) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
Processing triggers for libc-bin (2.31-0ubuntu9.9) ...
Processing triggers for mime-support (3.64ubuntu1) ...
Processing triggers for ca-certificates (20211016ubuntu0.20.04.1) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Processing triggers for initramfs-tools (0.136ubuntu6.7) ...
ln: failed to create hard link '/boot/initrd.img-4.4.194-11-rk3399-rockchip-g1bb08d49cc40.dpkg-bak' => '/boot/initrd.img-4.4.194-11-rk3399-rockchip-g1bb08d49cc40': Operation not permitted
update-initramfs: Generating /boot/initrd.img-4.4.194-11-rk3399-rockchip-g1bb08d49cc40
Processing triggers for libgdk-pixbuf2.0-0:arm64 (2.40.0+dfsg-3ubuntu0.4) ...
OSのリブート
パッケージの更新が終わったらOSをリブートします。
rock@rock-4c-plus:~$ sudo reboot
タイムゾーンの設定
タイムゾーンは初期設定では「UTC(協定世界時)」が設定されていますので、「東京」に変更します。
rock@rock-4c-plus:~$ timedatectl Local time: Wed 2023-01-11 02:08:50 UTC Universal time: Wed 2023-01-11 02:08:50 UTC RTC time: Wed 2023-01-11 02:08:50 Time zone: Etc/UTC (UTC, +0000) ←初期設定は「UTC」 System clock synchronized: no NTP service: n/a RTC in local TZ: no rock@rock-4c-plus:~$ sudo timedatectl set-timezone Asia/Tokyo [sudo] password for rock: ←これが表示された場合はrockユーザのパスワードを入力 rock@rock-4c-plus:~$ timedatectl Local time: Wed 2023-01-11 11:09:29 JST Universal time: Wed 2023-01-11 02:09:29 UTC RTC time: Wed 2023-01-11 02:09:29 Time zone: Asia/Tokyo (JST, +0900) ←「東京」に変更した System clock synchronized: no NTP service: n/a RTC in local TZ: no
キーマップの設定
キーマップは初期設定では設定されていません。TeraTermで接続して操作する際には初期設定のままでも困ることはありませんでしたが、 コンソールで操作する際に日本語キーボードのキーマップどおりに入力されなくて少し面倒なので、設定を変更します。 設定変更後、ログアウト/ログインでは変更が反映されなかったので、リブートして設定を変更しました。
rock@rock-4c-plus:~$ localectl System Locale: LANG=C.UTF-8 VC Keymap: n/a ←初期設定は「該当なし」 X11 Layout: us X11 Model: pc105 rock@rock-4c-plus:~$ sudo localectl set-keymap jp106 rock@rock-4c-plus:~$ localectl System Locale: LANG=C.UTF-8 VC Keymap: jp106 ←「jp106」に変更した X11 Layout: jp X11 Model: jp106 X11 Options: terminate:ctrl_alt_bksp rock@rock-4c-plus:~$ sudo reboot ←変更を反映するためにリブート
固定IPアドレスの設定
ROCK 4C Plusの公式OSイメージを利用すると、Red Hat系でも標準でも採用されているNetworkManagerがインストール済みになっています。 初期状態はDHCPでIPが自動設定されていますが、これを固定IPに変更します。 nmcliコマンドでIPアドレス、デフォルトゲートウェイ、DNSサーバを設定します。 設定後にコネクションを再起動して変更を反映させます。(このタイミングでTeraTermは切断されました)
rock@rock-4c-plus:~$ dpkg --list | grep network-manager ii network-manager 1.22.10-1ubuntu2.3 arm64 network management framework (daemon and userspace tools) rock@rock-4c-plus:~$ nmcli c NAME UUID TYPE DEVICE Wired connection 1 3ea7c401-0a6a-3178-9428-989b42209e6a ethernet eth0 rock@rock-4c-plus:~$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000 link/ether b6:0e:2e:67:ea:d6 brd ff:ff:ff:ff:ff:ff inet 192.168.0.206/24 brd 192.168.0.255 scope global dynamic noprefixroute eth0 valid_lft 82491sec preferred_lft 82491sec inet6 fe80::2b81:4aa4:a02a:7243/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state DORMANT group default qlen 1000 link/ether e8:fb:1c:34:a7:a1 brd ff:ff:ff:ff:ff:ff rock@rock-4c-plus:~$ sudo nmcli c mod "Wired connection 1" ipv4.address 192.168.0.111/24 [sudo] password for rock: ←これが表示された場合はrockユーザのパスワードを入力 rock@rock-4c-plus:~$ sudo nmcli c mod "Wired connection 1" ipv4.gateway 192.168.0.1 rock@rock-4c-plus:~$ sudo nmcli c mod "Wired connection 1" ipv4.dns 192.168.0.1 rock@rock-4c-plus:~$ sudo nmcli c mod "Wired connection 1" ipv4.method manual rock@rock-4c-plus:~$ sudo nmcli c down "Wired connection 1" && sudo nmcli c up "Wired connection 1" (========== TeraTermは切断されるので新たに設定したIPアドレスに再接続する ==========) rock@rock-4c-plus:~$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000 link/ether b6:0e:2e:67:ea:d6 brd ff:ff:ff:ff:ff:ff inet 192.168.0.111/24 brd 192.168.0.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fe80::2b81:4aa4:a02a:7243/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state DORMANT group default qlen 1000 link/ether e8:fb:1c:34:a7:a1 brd ff:ff:ff:ff:ff:ff
ディスク構成の確認
ROCK 4C Plusには、microSDカード(システム用)、NVMeのSSD(空っぽ)、eMMC(空っぽ)を接続しています。 この状態でfdiskコマンドで一覧表示すると以下のように見えます。今後ディスク構成を考える上でのメモとして。。
rock@rock-4c-plus:~$ sudo fdisk -l [sudo] password for rock: Disk /dev/ram0: 4 MiB, 4194304 bytes, 8192 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk /dev/nvme0n1: 119.25 GiB, 128035676160 bytes, 250069680 sectors ←NMVe SSD 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: gpt Disk identifier: E8BF9528-45B0-4433-8B38-D34BF170A52D Disk /dev/mmcblk0: 59.49 GiB, 63864569856 bytes, 124735488 sectors ←microSDカード 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: gpt Disk identifier: D2A181A0-0987-4E6A-9B90-EDF27AC62F20 Device Start End Sectors Size Type /dev/mmcblk0p1 64 8063 8000 3.9M Microsoft basic data /dev/mmcblk0p2 16384 24575 8192 4M Microsoft basic data /dev/mmcblk0p3 24576 32767 8192 4M Microsoft basic data /dev/mmcblk0p4 32768 1081343 1048576 512M EFI System /dev/mmcblk0p5 1081344 124733535 123652192 59G Linux filesystem Disk /dev/mmcblk1: 57.63 GiB, 61865984000 bytes, 120832000 sectors ←eMMC 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: 0xefb3d526 Disk /dev/mmcblk1boot1: 4 MiB, 4194304 bytes, 8192 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 Disk /dev/mmcblk1boot0: 4 MiB, 4194304 bytes, 8192 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