Raspberry Pi 3BにOracle Linux 9をインストールした

2024年の秋頃にRaspberry Pi 3Bで動作するOSとしてOpenBSDを導入し、ファイル共有ツールSambaをインストールし家庭内のファイルサーバとして細々と運用し続けてきた。
先日、久々にSambaの公開ディレクトリの空き容量を確認したら想定以上にストレージの空き容量が足りなくなっていた為、今回はしばらくの間使っていなかったRaspberry Pi 3BにOracle Linux 9を新規に導入し、Sambaをインストールしファイルサーバを構築した。
1月の第2週目にアマゾンからRaspberry Pi4が届く予定だったが、年末年始休暇で時間がたくさん有る事と、想定以上に早くOpenBSDで稼働しているファイルサーバの空き容量が少なくなってきた事から、正月早々に前倒しでファイルサーバを追加する事となった。



当方の環境
初期設定の段階ではRaspberry Pi 3BにポータブルモニターとUSBキーボードを接続しコマンドを叩いていたが、SSHログインが可能になって以降はMacBookからSSHログインしコマンドを叩いている。
設定環境:macOS 15.7.2 / MacBook Pro 2020 / RAM: 16GB / CPU: Intel Core i5 2.0GHz
導入先:Raspberry Pi 3B
導入OS:Oracle Linux 9.6 ARM64bit版
導入したファイル共有ツール:Samba 4.22.4

Raspberry Pi 3Bに接続する外付けモニターとUSBキーボードは、以下を使用した。
https://www.amazon.co.jp/dp/B0D1K8H4F5/ ポータブルモニター(約2年前に購入)
https://www.amazon.co.jp/dp/B09TW3KZV8/ サンワサプライ USBキーボード(約2年前に購入)
https://www.amazon.co.jp/dp/B0B21G288Q/ SanDisk microSDカード 64GB(新規購入)
 


なぜOracle Linux?
・RHEL系のLinuxディストリビューションにカテゴライズされる。RHELとの高い互換性を持つ。
・ユーザ登録やサブスクリプション登録をしなくても無償で利用が可能。
・長いサポート期間。Oracle Linux 9のExtended Supportは2035/6/30まで。Raspberry Piが先に壊れるだろう。
・業務でOracle Linuxに触れている。
・あれこれ言われているOracleではあるが、製品としてのOracle Linuxのクオリティは高い。
・オラクルという単語を聞くと、データベースだけでなく某映画も思い出す。預言者オラクル。
 


Oracle Linuxの導入
1. Raspberry Pi版のOracle Linuxのイメージファイルの入手から起動まで
以下のリンク先にアクセスし、ARMアーキテクチャ版のOracle Linuxのイメージファイルをダウンロードする。
当記事の投稿の段階では、バージョン8.10と9.6のイメージファイルが入手可能である。
https://www.oracle.com/linux/downloads/linux-arm-downloads.html
 
ダウンロードしたファイルV1050512-01.zipを展開すると、rpi-ol9.6-image-20250531.img.xzファイルが出てくる。
このrpi-ol9.6-image-20250531.img.xzファイルをRaspberry Pi ImagerでmicroSDカードに焼く。
https://www.raspberrypi.com/software/
 
rpi-ol9.6-image-20250531.img.xzファイルをmicroSDカードに焼き終えたら、microSDカードをRaspberry PiのmicroSDカードスロットに挿入。続けて外付けのモニターとキーボードをRaspberry Piに接続し電源を投入する。
Oracle Linuxの起動ログが出力される。ログインプロンプトが出力されるまで待つ。


2. Oracle Linuxへの初回ログイン時の設定
RHELやOracle Linux x86_64版のようなGUIのインストール画面は表示されない為、必要な設定はコマンドで行う。
また、サーバや開発環境のパッケージのインストールもコマンドで行う必要がある。
ARM版のOracle linux 9はインストール直後の段階ではsudoが入っていない。rootで作業する事が嫌ならyumやdnfコマンドでsudoを別途インストールする必要が有る。
 
ログインプロンプトが出力されたら、ログイン名root、パスワードoracleを入力しOracle Linuxにログイン。
rootアカウントのパスワードの設定が求められるので、インストール直後のパスワードoracleを入力し、
新しいパスワードの文字列を入力する。

Oracle Linux Server 9.6
Kernel 6.12.0-1.23.3.2.el9uek.aarch64 on an aarch64

rpi login: root
Password: 
You are required to change your password immediately (administrator enforced).
Current password:
New password:
Retype password:

[root@rpi ~]#

rootアカウントのパスワードの設定が完了したら、これより初期設定を進める。
 

3. カーネルの確認
Oracle Linuxでは以下の2つのカーネルが用意されている。
・UEK(Unbreakable Enterprise Kernel)
・RHCK(Red Hat Compatible Kernel)
UEKとRHCK共にRHELのカーネルと互換性があるが、UEKはOracle Linux独自色が濃いカーネル、RHCKはRHELのカーネルのソースコードを再構築したものでRHEL色が非常に強いカーネルとなっている。
デフォルトではUEKで立ち上がってくる。当環境ではそのままUEKで運用するが、RHCKに変更する手順について言及されているQiitaの記事のリンク先を当記事の下部に載せた。

以下のようにuname -aコマンドを叩くと「el9uek.aarch64」の文字列が見える。
この中の「uek」はUEK(Unbreakable Enterprise Kernel)である事を示す為、当環境で動作しているOracle LinuxのカーネルはUEKである事が分かる。

[root@rpi ~]# uname -a
Linux matrix03 6.12.0-1.23.3.2.el9uek.aarch64 #1 SMP Tue May 13 16:58:35 PDT 2025 aarch64 aarch64 aarch64 GNU/Linux
[root@rpi ~]#

 

4. インストール済みパッケージの更新
各種設定やインストールを実施する前に、管理者権限でyum updateコマンドを実行しカーネルやインストール済みのパッケージ等のアップデートを実行。
この段階で外部ネットワークに接続出来ない場合は、接続可能な状態になってからでも良い。

[root@rpi ~]# yum update
Oracle Linux 9 BaseOS Latest (aarch64)                                       11 kB/s | 4.3 kB     00:00    
Oracle Linux 9 BaseOS Latest (aarch64)                                      4.3 MB/s | 115 MB     00:26    
Oracle Linux 9 Application Stream Packages (aarch64)                         30 kB/s | 4.5 kB     00:00    
Oracle Linux 9 Application Stream Packages (aarch64)                        3.8 MB/s |  44 MB     00:11    
Oracle Linux 9 UEK Release 7 (aarch64)                                       28 kB/s | 3.5 kB     00:00    
Dependencies resolved.
==========================================================================================================
 Package                  Architecture   Version                     Repository                Size
==========================================================================================================
Upgrading:
:
省略
:
Complete!
[root@rpi ~]# 

 

5. キーボードの設定
Windows機で使用しているようなキーボードをRaspberry Piに接続している場合、以下のコマンドを叩いてキーボードの設定。
自分の環境では、Raspberry Piに接続しているキーボードは日本語106キーボード(日本国内では一般的なキーボード)である為、jp106を指定。

[root@rpi ~]# localectl set-keymap jp106

 

6. ロケールの設定
echo $LANGコマンドを叩いて現状のロケール設定を確認。en_US.UTF-8である事がわかる。
サーバー用途で運用する為、ロケール設定は変更せずこのまま進める。
ja_JP.UTF-8に変えたい場合は以下のようにlocalectlコマンドで変更する。

[root@rpi ~]# echo $LANG
en_US.UTF-8
[root@rpi ~]# localectl set-locale ja_JP.UTF-8

 

7. ホスト名の設定
hostnamectlコマンドを叩いてホスト名を設定する。
設定直後はシステムに反映されない。

[root@rpi ~]# hostnamectl set-hostname matrix03

 

8. ネットワークの設定
設定前にNICの名称を確認する為、ip add sコマンドを叩く。
自分の環境では有線LANはeth0、無線LANはwlan0である事を確認。
その後nmtuiコマンドを叩き、Wi-Fiが有ったらEdit...からWi-Fiを編集、無かったらAddからWi-Fiの設定を追加。

[root@rpi ~]# nmtui

自分の環境では無線LANを使用する為、Wi-Fiを以下の内容で設定した。
WI-FI
・Profile name:wlan0
・Device:wlan0
・SSID:無線LANルータや契約書類に記載されているSSIDを入力
・Mode:Client
・Security:WPA & WPA2 Personal
・Password:無線LANルータや契約書類に記載されているパスワードを入力
IPv4 CONFIGURATION
・Addresses:192.168.3.203/24
・Gateway:192.168.3.1
・DNS servers:8.8.8.8
IPv6 CONFIGURATION
・AutomaticからDisabledに変更
Automatically connectにチェック[X]を入れる
Abailable to all usersにチェック[X]を入れる
OKを選択しEnterキーを叩く
その後、Ethernet eth0の設定に移り、IPv4 CONFIGURATIONとIPv6 CONFIGURATIONをDisabledにする
 

9. ネットワーク絡みの設定
家庭内環境でファイルサーバとして使用するのであれば当設定は不要になる場合があるが、念の為設定。

[root@rpi ~]# vi /etc/hosts
127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
::1      localhost localhost.localdomain localhost6 localhost6.localdomain4
192.168.3.203 matrix03 matrix03.local (この行を追記)

[root@rpi ~]# 

 
 
10. ユーザの追加
任意で実施。adduserコマンドでanderson、morpheus、trinityの3人のアカウントを作成した。smithは作成していない。当環境では3人追加したが1人で良い。sambaのアカウントとは別。
Oracle Linux 9ではadduserコマンド、useraddコマンドのどちらを叩いてもpasswdコマンドによるパスワード設定が必要である。

[root@rpi ~]# adduser anderson
[root@rpi ~]# passwd anderson
Changing password for user anderson.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@rpi ~]# 
[root@rpi ~]# 
[root@rpi ~]# adduser morpheus
[root@rpi ~]# passwd morpheus
Changing password for user morpheus.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@rpi ~]# 
[root@rpi ~]# 
[root@rpi ~]# adduser trinity
[root@rpi ~]# passwd trinity
Changing password for user trinity.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@rpi ~]# 

 

11. シェルとエディタの設定
普段使いのアカウントとrootアカウント用に、.vimrcと.bashrcと.bash_profileを設定。
当記事では、.vimrcと.bashrcと.bash_profile設定内容は割愛する。
 

12. NTPとTimezoneの設定
pool 2.pool.ntp.org iburstの行をコメントアウトし、お好みのNTPサーバのURLを追記する。
設定後、systemctl restart chronyd.serviceを実行し設定を読み込ませる。

[root@rpi ~]#  vi /etc/chrony.conf

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (https://www.pool.ntp.org/join.html).
#pool 2.pool.ntp.org iburst
server 210.173.160.27 iburst
:
省略
:
[root@rpi ~]# 
[root@rpi ~]# systemctl restart chronyd.service
[root@rpi ~]# 

 
続いてtimedatectlコマンドでタイムゾーンを日本に修正する。

[root@rpi ~]# timedatectl set-timezone Asia/Tokyo
[root@rpi ~]# 

 

13. SELinuxの設定
当環境では、SELINUX=enforcingをSELINUX=permissiveに修正した。
・enforcing:SELinux有効、且つルールに沿ったアクセス制限を行い、ログ出力有り
・permissive:SELinux有効、ただしアクセス制限は行わないがログ出力有り
・disabled:SELinux無効、ログ出力無し
その下のSELINUXTYPEは変更無し。

[root@rpi ~]# vi /etc/selinux/config
:
省略
:
#
SELINUX=permissive
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted precesses are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted


ここでOracle Linuxを再起動させる。これまでに設定した内容が反映される。
再起動の完了後、Oracle Linuxにログインし初期設定の続きを着手する。

[root@rpi ~]# reboot
:
省略
:
Oracle Linux Server 9.6
Kernel 6.12.0-1.23.3.2.el9uek.aarch64 on an aarch64

matrix03 login: root
Password: 

 

14. firewalldの導入と設定
ARM版のOracle Linuxはデフォルトでfirewalldはインストールされない。
firewalldを使用したファイアウォール機能を利用するには、yumコマンドで別途インストールする必要がある。
続いて、firewalldの自動起動設定のためsystemctl enable firewalldを実行する。

[root@matrix03 ~]# yum install firewalld
[root@matrix03 ~]# 
[root@matrix03 ~]# systemctl enable firewalld
[root@matrix03 ~]# 

 
firewalldの現状の設定内容を確認。
インストール直後はcockpit、dhcpv6-client、sshを通す設定がある事が分かる。

[root@matrix03 ~]# firewall-cmd --list-all        
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: wlan0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
[root@matrix03 ~]#

 
ファイル共有(samba)とNTPクライアント(ntp)を通す為、以下の設定を投入。
最後に、設定内容を反映させる為firewall-cmd --reloadを実行。

[root@matrix03 ~]# firewall-cmd --add-service=samba --zone=public --permanent
success
[root@matrix03 ~]# firewall-cmd --add-service=ntp --zone=public --permanent
success
[root@matrix03 ~]# firewall-cmd --reload
success
[root@matrix03 ~]#

 
firewalldの設定後、再度設定内容を確認。
services:の行に、ファイル共有(samba)とNTPクライアント(ntp)が追加された事がわかる。

[root@matrix03 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: wlan0
  sources: 
  services: cockpit dhcpv6-client ntp samba ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
[root@matrix03 ~]# 

 

15. ストレージの拡張
RHEL系LinuxをRaspberry Piにて稼働させている場合、dfコマンドを叩くと出力内容に違和感を覚える事があるかもしれない。当環境ではOracle LinuxのイメージファイルをmicroSDカードに焼く前に、microSDカードの全領域64GBをフォーマットしたにも関わらず、半分も使っていなかった。
よって、growpartコマンドとbtrfs filesystem resizeコマンドで全領域をOracle Linuxで使用する設定を実施した。

使用領域の拡張前の状態をdfコマンドで出力。

[root@matrix03 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs           437M     0  437M   0% /dev/shm
tmpfs           175M  5.5M  170M   4% /run
efivarfs        128K   632  128K   1% /sys/firmware/efi/efivars
/dev/mmcblk0p3  3.3G  1.8G  1.1G  65% /
/dev/mmcblk0p3  3.3G  1.8G  1.1G  65% /boot
tmpfs           437M     0  437M   0% /tmp
/dev/mmcblk0p1  128M   31M   98M  24% /boot/efi
tmpfs            88M     0   88M   0% /run/user/0
tmpfs            88M     0   88M   0% /run/user/1000
[root@matrix03 ~]#

 
公開ディレクトリである/home/sambaにて多くの領域を使用する為、/home/sambaに紐付けされている/dev/mmcblk0をgrowpartコマンドで拡張対象の領域として指定。

[root@matrix03 ~]# growpart /dev/mmcblk0 3
CHANGED: partition=3 start=788480 old: size=6815744 end=7604223 new: size=120092639 end=120881118
[root@matrix03 ~]# 

 
拡張可能な分すべてを使用したい為、resize maxでファイルシステムを書き込み。

[root@matrix03 ~]# btrfs filesystem resize max /
Resize device id 1 (/dev/mmcblk0p3) from 3.25GiB to max
[ 1268.911658] BTRFS info (device mmcblk0p3): reseize device /dev/mmcblkop3 (devid 1) from 3489660928 to 61487427584
[root@matrix03 ~]#

 
エラーを吐く事無く完了。/dev/mmcblk0p3の領域が3.3GBから58GBに拡張した。

[root@matrix03 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs           437M     0  437M   0% /dev/shm
tmpfs           175M  5.5M  170M   4% /run
efivarfs        128K   632  128K   1% /sys/firmware/efi/efivars
/dev/mmcblk0p3   58G  1.8G   56G   4% /
/dev/mmcblk0p3   58G  1.8G   56G   4% /boot
tmpfs           437M     0  437M   0% /tmp
/dev/mmcblk0p1  128M   31M   98M  24% /boot/efi
tmpfs            88M     0   88M   0% /run/user/0
tmpfs            88M     0   88M   0% /run/user/1000
[root@matrix03 ~]# 

 
 

Sambaのインストールと設定
1. Sambaのインストール
Oracle Linuxのインストールと初期設定を終えたところで、ファイル共有ツールSambaのインストールと設定に進む。
yumコマンドを実行しsambaのパッケージをインストールする。その際、sambaパッケージだけでなく、依存関係がある各パッケージも一緒にインストールされる。

[root@matrix03 ~]# yum install samba

 
上記のyumコマンドが完了したら、公開ディレクトリの作成とアクセス権を設定する。

[root@matrix03 ~]# mkdir /home/samba
[root@matrix03 ~]# 
[root@matrix03 ~]# groupadd samba
[root@matrix03 ~]# 
[root@matrix03 ~]# chgrp samba /home/samba
[root@matrix03 ~]# 
[root@matrix03 ~]# chmod 777 /home/samba
[root@matrix03 ~]# 

 

2. 設定ファイルsmb.confの編集
Sambaのインストールおよび公開ディレクトリの作成とアクセス権の設定を完了したら、smb.confの設定に進む。
注意:smb.confの最終行まで表示されない場合、smb.confの表示を下にスクロールする事で最終行まで表示されます。

[root@matrix03 ~]# vi /etc/samba/smb.conf

[global]
	dns proxy = No
	dos charset = CP932
	interfaces = 192.168.3.0/24
	workgroup = SAMBA
	netbios name = oracle
	log file = /var/log/samba/smbd.%m
	logging = file
	max log size = 50
	security = user
	passdb backend = tdbsam

	security = USER
	server string = Samba Server
	wins support = Yes
	idmap config * : backend = tdb
	hosts allow = 192.168.1. 192.168.3. 127.
	include = /etc/samba/usershares.conf

[homes]
	comment = Home Directories
	valid users = %S, %D%w%S
	browseable = No
	read only = No
	inherit acls = Yes

#[printers]
#	comment = All Printers
#	path = /var/tmp
#	printable = Yes
#	create mask = 0600
#	browseable = No

#[print$]
#	comment = Printer Drivers
#	path = /var/lib/samba/drivers
#	write list = @printadmin root
#	force group = @printadmin
#	create mask = 0664
#	directory mask = 0775

[samba]
        browsable = Yes
        writable = Yes
	path = /home/samba
	read only = No
	directory mask = 0777
	create mask = 0777
	force user = samba
	force group = samba

#EOF
[root@matrix03 ~]#

 
smb.confの編集を終えたら、Samba用アカウントを作成する。
上記にて一部設定済みにつき、ホームディレクトリを新規作成しない、グループを新規作成しないオプションを付けて実行。
Samba用アカウントを作成後、Sambaのサービス(smb.service)を有効化し立ち上げる。
続けて、Sambaのサービスが正常に立ち上がっている事を確認する。

[root@matrix03 ~]# useradd -M -N samba
[root@matrix03 ~]#
[root@matrix03 ~]# systemctl enable smb
Created symlink /etc/systemd/system/multi-user.target.wants/smb.service -> /usr/lib/systemd/system/smb.service.
[root@matrix03 ~]#
[root@matrix03 ~]# systemctl start smb
[root@matrix03 ~]#
[root@matrix03 ~]# systemctl status smb
* smb.service - Samba SMB Daemon
     Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; preset: disabled)
     Active: active (running) since Thu 2026-01-01 02:06:10 UTC; 7s ago
       Docs: man:smbd(8)
             man:samba(7)
             man:smb.conf(5)
   Main PID: 1067 (smbd)
     Status: "smbd: ready to serve connections..."
      Tasks: 3 (limit: 3676)
     Memory: 10.0M
        CPU: 400ms
     CGroup: /system.slice/smb.service
             |-1067 /usr/sbin/smbd --foreground --no-process-group
             |-1069 /usr/sbin/smbd --foreground --no-process-group
             `-1070 /usr/sbin/smbd --foreground --no-process-group

Jan 01 02:06:10 matrix03 systemd[1]: Starting Samba SMB Daemon...
Jan 01 02:06:10 matrix03 systemd[1]: Started Samba SMB Daemon.
[root@matrix03 ~]#

 

3. Samba用のパスワードの設定
最後に、上記で作成したSamba用のアカウントsambaのパスワードを設定。

[root@matrix03 ~]# smbpasswd -a samba
New SMB password:
Retype new SMB password:
Added user samba.
[root@matrix03 ~]#

 
 

公開ディレクトリへの接続確認
Sambaの設定を終えたところで、Sambaの公開ディレクトリに接続を試みる。
macOS環境からアクセスする際は、Finderの「移動」を選択し「サーバへ接続...」をクリック。
以下の画像のように「サーバへ接続」のウインドウが表示されたら「サーバアドレス:」欄内に「smb://SambaサーバのIPアドレス」を入力し「接続」をクリック。
ユーザ名とパスワード入力のウインドウが表示されたら「ユーザの種類」は「登録ユーザ」にチェックを入れる。
続いて「名前」と「パスワード」は上記で設定したSamba用アカウントとパスワードを入力し「接続」をクリック。
 
接続が成功すると以下の画像内のように公開ディレクトリが表示される。


 

 
振り返り
Oracle LinuxおよびSambaのインストールと設定は、他のLinuxディストリビューションやOpenBSD等と同じで問題無く進んだように見えた。
Oracle Linuxの初期設定を終えてひと段落した際、何となくdfコマンドを叩いたところ、出力される空き容量に違和感を覚えた。microSDカードの容量64GBの全領域が使用されてなかった。Oracle Linuxのインストールを何度もやりなおししても、Oracle Linuxのバージョンを8.10に変えても、microSDカードを変えてもdfコマンドの出力内容に変化は見られなかった。
そこで当事象は仕様によるものではないかと判断。GoogleやAIで使用領域を拡張するコマンドを確認した結果、複数の対処方法が挙げられたが、当記事にて実行した内容が一番簡単且つ正常に使用領域の拡張ができた。

microSDカードにOSをインストールし稼働させるとmicroSDカードの寿命が短くなる事から、microSDカードの延命を図るため今回は産業用のmicroSDカードを使用した。とは言えSSDの方が耐久性が高いので、この先はUSBタイプのSSDを導入したい。
 


参照サイトなど
https://www.oracle.com/jp/linux/ Oracle Linux
https://docs.oracle.com/cd/F61088_01/index.html Oracle Linux 9のドキュメント
https://yum.oracle.com/oracle-linux-isos.html Oracle Linux Installation Media
https://www.oracle.com/linux/downloads/linux-arm-downloads.html ARM版Oracle Linuxのダウンロード
https://www.raspberrypi.com/products/raspberry-pi-3-model-b/ Raspberry Pi 3B
https://www.samba.org/ Samba - opening windows to a wider world
https://debslink.hatenadiary.jp/entry/20241130/1732965507 Raspberry Pi3 Model Bでファイルサーバを構築
https://debslink.hatenadiary.jp/entry/20250328/1743167901 NixOSでSambaによるファイルサーバの構築
https://oracle.human-design.jp/column/20231114/ Oracle Linuxの2種類のカーネル”UEK”と”RHCK”を理解する
https://qiita.com/yamada-hakase/items/bf3a8cfb054b3a8cbd0a Oracle LinuxのデフォルトカーネルをスマートにUEKからRHCKに変更する
https://note.com/carp_1994/n/n004b4045705c できるだけやさしい、マトリックス世界設定解説 note