2025年春にVirtualBox環境にてNixOSの導入を開始してから半年以上が経過した。仮想環境ではあるものの、サーバOSとしてのNixOSの導入および運用にも徐々に慣れてきたため、次のステップとしてオンプレ環境への導入と運用を試すことにした。
そこで、Raspberry Pi 4BとUSB接続のSSDを新たに購入し、家庭内ネットワーク向けファイルサーバのOSとしてNixOSを導入、ファイル共有にはSambaを採用し、既存のOpenBSDおよび先日導入したOracle Linuxと合わせて、3台構成でのファイルサーバの運用を行う事にした。
今月の第2週目にAmazonで注文していたRaspberry Pi 4BとUSB接続SSDが到着したため、NixOSを用いたファイルサーバの構築に着手した。
当方の環境
NixOSの初回ログインの直後のnixosアカウントのパスワード設定は、コンソールの画面にて行う場面がある事から、Raspberry Pi 4BにポータブルモニターとUSBキーボードを接続する。
設定環境:macOS 15.7.2 / MacBook Pro 2020 / RAM: 16GB / CPU: Intel Core i5 2.0GHz
導入先:Raspberry Pi 4B
導入OS:NixOS 25.11pre ARM 64bit版
導入したファイル共有ツール:Samba 4.22.5
家庭環境にて以前からあったRaspberry Pi 3BはNixOSを動作させるにはハードウェアのスペック面で厳しいようで、初期設定後のリビルドが成功しなかった。そこで販売開始から5年以上が経ち、販売価格がやや下がってきたRaspberry Pi 4Bを新規に購入した。
https://www.amazon.co.jp/dp/B09TTNF8BT/ Raspberry Pi 4 Model B
以下はRaspberry Pi 4 Model Bのスペックの概要。
・CPU:Broadcom BCM271 1.5GHz 4コア ARMv8 Cortex-A72
・RAM:LPDDR4-2400 SDRAM 4GB
・LANポート:RJ-45 10/100/1000 Base-T x1
・WLAN:IEEE802.11b/g/n/ac(2.4GHz/5GHz)
・Bluetooth 5.0 BLE
・USBポート:USB2.0 x2、USB3.0 x2
・電源:USB Type-C 5V 3.0A
Raspberry Pi 4Bに接続する外付けモニターとUSBキーボードは以下を使用した。
https://www.amazon.co.jp/dp/B0D1K8H4F5/ ポータブルモニター(約2年前に購入)
https://www.amazon.co.jp/dp/B09TW3KZV8/ サンワサプライ USBキーボード(約5年前に購入)
今回はRaspberry Pi 4Bと一緒に以下も購入した。
https://www.amazon.co.jp/dp/B0CDVXDDQ5/ Buffalo USB SSD 250GB
https://www.amazon.co.jp/dp/B0BQQCGL4B/ micro HDMI to mini HDMIケーブル
https://www.amazon.co.jp/dp/B07DN5V3VN/ Raspberry Pi 4B用 電源アダプタ
https://www.amazon.co.jp/dp/B09QG349ZL/ ElectroCookie アルミミニタワーケース
手順の大まかな流れ
以下はざっくりとした作業の流れである。NixOSのイメージファイルの準備とUSB SSDへの書き込み、NixOSとSambaの設定という流れで進める。
・Raspberry Pi 4B用のNixOSのイメージファイルをダウンロード
・Raspberry Pi ImagerでUSB SSDにNixOSのイメージファイルを書き込み
・Raspberry Pi 4Bに電源投入、初期設定用アカウントのログインパスワード作成、設定ファイルの生成
・NixOSのシステムの設定ファイルの生成および設定
・NixOSの再起動とユーザアカウントの作成
・NixOSにインストールするパッケージの選定
・上記実施した内容をNixOSへの反映、NixOSのユーザアカウントの作成
・設定ファイルにてSambaを導入するための設定
・Sambaのインストールおよび共有ディレクトリに接続テスト
NixOSのインストールの下準備
1. Raspberry Pi版のNixOSのイメージファイルの入手
以下のリンク先にてARM 64bitアーキテクチャ版のNixOSのイメージファイルを入手する。
https://hydra.nixos.org/job/nixos/unstable/nixos.sd_image.aarch64-linux
今回はNixOSの現行バージョンである25.11を利用したい為、上記のリンク先の#の列の中の314582823をクリックし、遷移先のページ(https://hydra.nixos.org/build/314582823)にてお目当ての.zstファイルをダウンロードした。
尚、当記事の公開の段階では、ARM 64bitアーキテクチャ版はプレビュー版のみダウンロードが可能だった。
ファイル名:nixos-image-sd-card-25.11pre901419.5ae3b07d8d65-aarch64-linux.img.zst
2. NixOSのイメージファイルをUSB SSDに書き込み
ダウンロードした.zstファイルは解凍する必要は無く、そのままの状態でRaspberry Pi ImagerというOSを書き込む為のツールでUSB SSDに書き込みする。
容量が250GBもあり書き込みからチェックの完了まで長時間を要すると思いきや、ほんの数分で完了し驚いた。
https://www.raspberrypi.com/software/ Raspberry Pi Imager
ダウンロードしたNixOSのイメージファイルをUSB SSDに書き込み終えたら、USB SSDをRaspberry PiのUSBポートに挿入。続けて外付けのモニターとキーボードと電源ケーブルをRaspberry Piに接続し、電源を投入する。
電源を投入するとモニターにNixOSの起動ログが出力される。ログインプロンプトが出力されるまで待つ。
NixOSの初期設定
1. NixOSの起動とログイン
NixOSを書き込んだUSB SSDをRaspberry Pi 4BのUSBポートに挿入し、続いてUSBキーボードとポータブルモニターとLANケーブルを接続。この状態でRaspberry Pi 4Bに電源投入。
モニターに以下の起動ログが出力される。
Net: eth0: ethernet@7d580000
PCIe BRCM: link up, 5.0 Gbps x1 (SSC)
starting USB...
Register 5000420 NbrPorts 5
Starting the controller
USB XHCI 1.00
Bus xhci_pci: 4 USB Device(s) found
scanning usb for storage devices... 1 Storage Device(s) found
Hit any key to stop autoboot: 02
Card did not respond to voltage select! : -110
Card did not respond to voltage select! : -110
Cannot persist EFI variables without system partition
** Booting bootflow '<NULL>' with efi_mgr
Loading Boot0000 'usb 0' failed
EFI boot manager: Cannot load any image
Boot failed (err=-14)
Card did not respond to voltage select! : -110
Card did not respond to voltage select! : -110
** Booting bootflow 'usb_mass_storage.lun0.bootdev.part_2" with extlinux
-------------------------------------------------------------
1: NixOS - Default
Enter choise:
このまま放置してもEnterキーを叩いても、NixOSが起動する。
NixOSの起動が完了すると、nixosアカウントで自動でログインする。
<<< Welcome to NixOS sd-card-25.11pre901419.5ae3b07d8d65 (aarch64) - tty1 >>> The "nixos" and "root" accounts have empty passwords. To log in over ssh you must set a password for either "nixos" or "root" with `passwd` (prefix with `sudo` for "root"), or add your public key to /home/nixos/.ssh/authorized_keys or /root/.ssh/authorized_keys. To set up a wireless connection, run `nmtui`. Run 'nixos-help' for the NixOS manual. nixos login: nixos (automatic login) [nixos@nixos:~]$
2. NixOSの初回ログイン時の設定
NixOSの起動完了後、nixosアカウントで自動でログインする。
自分の場合、sshでログインしコピー&ペーストで設定投入を実施したい為、nixosアカウントでログインした直後にnixosアカウントのパスワードを設定した。
[nixos@nixos:~]$ passwd New password: Retype new password: passwd: password updated successfully [nixos@nixos:~]$
ip add sコマンドを叩き、sshでログインする為に使用するIPアドレスを確認する。
192.168.3.13がDHCPでアサインされている事が分かる。IPアドレスの固定設定までの間、このアドレスを使用する。
[nixos@nixos:~]$ ip add s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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 noprefixroute
valid_lft forever preferred_lft forever
2: end0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether e4:5f:01:fd:17:df brd ff:ff:ff:ff:ff:ff
altname enxe45f01fd17df
inet 192.168.3.13/24 brd 192.168.3.255 scope global dynamic noprefixroute end0
valid_lft 86335sec preferred_lft 86335sec
inet6 2400:2410:d860:e400:d72f:e878:9634:3c1d/64 scope global temporary dynamic
valid_lft 86338sec preferred_lft 14338sec
inet6 2400:2410:d860:e400:75da:5166:e0ba:ed5e/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 86338sec preferred_lft 14338sec
inet6 fe80::7796:7eb4:2156:9965/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether b6:78:62:c4:29:36 brd ff:ff:ff:ff:ff:ff permaddr e4:5f:01:fd:17:e1
altname wlxe45f01fd17e1
[nixos@nixos:~]$
IPアドレスの確認が出来たところで、ターミナルを立ち上げてsshでNixOSにログインする。
他のパッケージとは異なり、前もってssh.nixファイルを作成しなくてもNixOSの初期設定のリビルドの完了までの間はsshログインが可能である。
これ以降、しばらくの間sshでログインした状態でNixOSの初期設定を進める。
apple@jpmtkmbp13 ~ % ssh nixos@192.168.3.13 The authenticity of host '192.168.3.13 (192.168.3.13)' can't be established. ED25519 key fingerprint is SHA256:d50j+LBUjw23qwtec1syHE517eIk/fvYMCuWw3o11g0. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.3.13' (ED25519) to the list of known hosts. (nixos@192.168.3.13) Password: [nixos@nixos:~]$
3. NixOSの設定ファイルの生成
以下のコマンドを実行し、/etc/nixos/configuration.nixと/etc/nixos/hardware-configuration.nixを生成する。
プロンプトが返ってきたら、/etc/nixosディレクトリ内にconfiguration.nixファイルとhardware-configuration.nixが生成されている事を確認する。
[nixos@nixos:~]$ sudo nixos-generate-config writing /etc/nixos/hardware-configuration.nix... writing /etc/nixos/configuration.nix... For more hardware-specific settings, see https://github.com/NixOS/nixos-hardware. [nixos@nixos:~]$ [nixos@nixos:~]$ ls /etc/nixos configuration.nix hardware-configuration.nix
4. NixOSのホスト名とIPアドレスの設定
/etc/nixos/configuration.nixファイルを生成したところで、ここから一気にNixOSの初期設定を行う。
一気に設定を行う最大の理由は、リビルドを最低限の回数だけ実行する事でストレージの消費を抑える為である。
IPアドレスもこのタイミングで静的なものに変える事から、リビルドの完了後は新規に設定したIPアドレスでsshログインをする事となる。
ARM 64bit版のNixOSは既にviエディタでファイルの編集が出来る状態になっており、x86 64bit版のようにsudo nix-shell -p vimを実行しなくてもviエディタの使用出来る。
これより/etc/nixos/configuration.nixファイルを開き、以下を設定する。
・Raspberry Pi 4用のカーネルパッケージの指定
・NixOSの起動時にリビルドの残骸を削除する設定
・ホスト名の文字列の修正と、ネットワーク周りの設定
・IPアドレスとPrefix長の設定
・デフォルトゲートウェイやネームサーバやhosts設定を追記
まずはNixOSの起動関連の設定とネットワーク周りの設定に着手する。
ネットワークインターフェースの名称は、ip add sコマンド等を叩いて出力されたものをを使用する。
自分の環境ではeth0ではなくend0だった。
[nixos@nixos:~]$ sudo vi /etc/nixos/configuration.nix
:
省略
:
boot.kernelPackages = pkgs.linuxKernel.packages.linux_rpi4; ◻️◻️カーネルパッケージの設定を追記
# Use the extlinux boot loader. (NixOS wants to enable GRUB by default)
boot.loader.grub.enable = false;
# Enables the generation of /boot/extlinux/extlinux.conf
boot.loader.generic-extlinux-compatible.enable = true;
boot.tmp.cleanOnBoot = true; ◻️◻️NixOSの起動時にリビルドの残骸を削除する
boot.loader.systemd-boot.configurationLimit = 5; ◻️◻️NixOSの設定をsystemd-bootに5世代まで残す
networking.hostName = "nixos99"; # Define your hostname. ◻️◻️コメントアウトを削除しホスト名を修正
networking.interfaces.end0.ipv4.addresses = [{ ◻️◻️以下4行を追記しIPアドレスの設定
address = "192.168.3.99";
prefixLength = 24;
}];
networking.defaultGateway = "192.168.3.1"; ◻️◻️デフォルトゲートウェイの設定
networking.nameservers = [ "8.8.8.8" ]; ◻️◻️以下4行を追記しネームサーバとhostsの設定
networking.hosts = {
"127.0.0.1" = [ "localhost" "localhost.localdomain" ];
"192.168.3.99" = [ "nixos99" "nixos99.local" ];
};
5. NixOSのロケールとキーボード、タイムゾーンの設定
続いて、/etc/nixos/configuration.nixファイルにて以下を設定する。
・タイムゾーンの設定
・ロケールの設定
・コンソール環境でのキーボードの設定
まずはネットワークマネージャの有効化とタイムゾーンの設定。
networking.networkmanager.enable = true;の行頭にあるコメントアウトを削除すると、nmtuiが使えるようになる。
time.timeZoneの行頭のコメントアウトを削除し、Europe/AmsterdamをAsia/Tokyoにタイムゾーンの修正。
: 省略 : # Configure network connections interactively with nmcli or nmtui. networking.networkmanager.enable = true; ◻️◻️コメントアウトを削除 # Set your time zone. time.timeZone = "Asia/Tokyo"; ◻️◻️コメントアウトを外し、Asia/Tokyoに修正 # Configure network proxy if necessary # networking.proxy.default = "http://user:password@proxy:port/"; # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; : 省略 :
続いてロケールとキーボードの設定。
当環境はCUIでファイルサーバとして運用する為、ロケールはen_US.UTF-8のままにした。
コンソールで文字を打つ際は日本語のキーボードを使用する為、jp106を指定する。
:
省略
:
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8"; ◻️◻️コメントアウトを外す
console = {
font = "Lat2-Terminus16";
keyMap = "jp106"; ◻️◻️KeyMapは日本語キーボードjp106に修正
# useXkbConfig = true; # use xkb.options in tty. ◻️◻️コメントアウトを外さない
};
:
省略
:
6. アカウントの設定
ここで設定しなくともadduserコマンドでアカウントの追加は可能だが、# Define a user account.以下の行のコメントアウトを削除し、ユーザ名と所属グループを設定する。
ユーザnixosuserのデフォルトシェルをzshに設定する。
パスワードもここで設定が可能だが、当環境ではNixOSのリビルドの後にpasswdコマンドで設定した。
:
省略
:
# Enable touchpad support (enabled default in most desktopManager).
# services.libinput.enable = true;
# Define a user account. Don't forget to set a password with ‘passwd’.
users.users.nixosuser = { ◻️◻️コメントアウトを外し、以下5行を修正
isNormalUser = true;
description = "nixosuser";
extraGroups = [ "networkmanager" "wheel" ];
shell = pkgs.zsh;
packages = with pkgs; [];
};
:
省略
:
7. インストールするパッケージの設定
environment.systemPackages = with pkgsの行頭のコメントアウトを外し、その配下に、NixOSに導入したいパッケージを追記する。
当環境では、NeovimとcurlとZshとneofetchとchronyとrngdを追記した。
:
省略
:
# List packages installed in system profile.
# You can use https://search.nixos.org/ to find more packages (and options).
environment.systemPackages = with pkgs; [ ◻️◻️コメントアウトを外しパッケージを追記
# vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
wget
neovim
curl
zsh
neofetch
chrony
rsyslog
];
nixpkgs.config.allowUnfree = true; ◻️◻️Unfreeなパッケージのインストールを許可(たぶん不要な設定)
:
省略
:
8. ガベージコレクションの自動実行の設定
週に1度ガベージコレクションを実行し、不要なストアオブジェクト(どのProfileのどの世代にもリンクされていないNix Store内のパッケージ)を自動的に判別し削除する設定を追加。
パッケージのインストールや削除を頻繁にやっているのであれば、有効にしたい機能。
:
省略
:
# You can use https://search.nixos.org/ to find more packages (and options).
environment.systemPackages = with pkgs; [
# vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
wget
neovim
curl
zsh
neofetch
chrony
];
nixpkgs.config.allowUnfree = true;
nix.gc = { ◻️◻️この行を含め下4行を追記
automatic = true;
dates = "weekly";
options = "--delete-order-than 7d";
};
:
省略
:
9. 導入するパッケージの設定ファイルの作成
当環境では以下のパッケージおよび機能を使用する為、/etc/nixosディレクトリ配下にそれぞれのパッケージの設定ファイルを作成した。
設定内容は、当ブログの過去の記事の内容を流用した。
・シェル:zsh
・エディタ:Neovim
・NTPクライアントおよびサーバ:chrony
・リモートホストからのログイン受け入れ:ssh
・syslog周りの設定:rsyslog
/etc/nixos/configuration.nixファイルを開き、ファイル内上部に記載されている「imports =」の配下にある既存の設定./hardware-configuration.nixの下に追記する形で、上記のパッケージの設定ファイルを記載し、NixOSに設定ファイルを読み込ませる。
{ config, lib, pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix ◻️◻️下の4行を追記
./ssh.nix
./nvim.nix
./zsh.nix
./chrony.nix
./rsyslog.nix
];
:
省略
:
続いて導入するパッケージの設定ファイルを作成する。
設定ファイルの作成順はどれからでも良いが、今回はzshの設定ファイルから着手した。
ARM 64bit版のNixOSでは既に実行可能なviエディタを使用し、/etc/nixos/zsh.nixファイルを作成。
zsh.nixファイルの内容は以下のとおり。
[nixos@nixos:~]$ cat /etc/nixos/zsh.nix
{
programs = {
zsh = {
enable = true;
enableCompletion = true;
autosuggestions.enable = true;
syntaxHighlighting.enable = true;
shellAliases = {
ls = "ls -la";
df = "df -h";
free = "free -m";
vi = "nvim";
};
histSize = 2000;
histFile = "$HOME/.zsh_history";
promptInit = ''
PROMPT="[%m:%~ %']$ "
'';
};
};
}
[nixos@nixos:~]$
続いて、新規に導入するエディタNeovimの設定ファイル/etc/nixos/nvim.nixを作成。
リビルド後はNeovimを使用する事となる。
nvim.nixファイルの内容は以下のとおり。Neovimは多機能なエディタだが当面の間は極々簡単な設定に留める。
[nixos@nixos:~]$ cat /etc/nixos/nvim.nix
{
programs = {
neovim = {
enable = true;
defaultEditor = true;
vimAlias = true;
configure.ignorecase = true;
configure.wrapscan = true;
configure.showmode = true;
configure.showmatch = true;
};
};
}
[nixos@nixos:~]$
続いて、新規に導入するNTPクライアント・サーバchronyの設定ファイル/etc/nixos/chrony.nixを作成。
NixOSの初期設定とパッケージのインストール後に、正常に時刻同期が出来ているか確認する。
chrony.nixの内容は以下のとおり。
[nixos@nixos:~]$ cat /etc/nixos/chrony.nix
{
services = {
chrony = {
enable = true;
servers = [ "ntp.jst.mfeed.ad.jp" ];
serverOption = "iburst";
enableRTCTrimming = true;
autotrimThreshold = 20;
initstepslew.enabled = true;
};
};
}
[nixos@nixos:~]$
続いて、リモートのホスト機からのSSH接続の為に/etc/nixos/ssh.nixを作成。
NixOSの初回の起動直後は/etc/nixos/ssh.nixが無くてもNixOSにsshログインが出来るが、
設定投入後のリビルド実行後はsshログインが無効になる為、ここであらためて/etc/nixos/ssh.nixを作成する。
rootアカウントでSSHログインが出来ない設定を記載している。
[nixos@nixos:~]$ cat /etc/nixos/ssh.nix
{
services = {
openssh = {
enable = true;
settings = {
PermitRootLogin = "no";
};
};
};
}
[nixos@nixos:~]$
最後に、システムのsyslog周りの設定ファイル/etc/nixos/rsyslog.nixを作成。
ログの飛ばし先のサーバは自分の環境では存在しないので、ログサーバにログを飛ばす設定は書いていない。
{
services.rsyslogd = {
enable = true;
defaultConfig = ''
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# Distributing logs
*.*;auth,authpriv.none -/var/log/syslog
kern.* /var/log/kern.log
mail.* -/var/log/mail.log
cron.* -/var/log/cron.log
user.* -/var/log/user.log
auth,authpriv.* /var/log/auth.log
*.alert /var/log/alert.log
*.emerg /var/log/emerg.log
'';
};
}
10. リビルドの実行とNixOSの再起動
それぞれのパッケージの設定ファイルの作成が完了したら、リビルドを実行しパッケージのインストールを行う。
リビルドが完了すると「Done. The new configuration is」の行が出力され、最後にプロンプトが返ってくる。
エラーが返ってきてリビルドが失敗した場合は、エラーの出力内容を参照し.nixファイルの内容を修正の後、再度リビルドを実行する。
[nixos@nixos:~]$ sudo nixos-rebuild switch warning: Git not found; cannot figure out revision of '/nix/store/75iiz86idhy5nam496h5rx9asi6mi5qf-nixos-25.11pre901419.5ae3b07d8d65/nixos' building the system configuration... these 107 derivations will be built: /nix/store/060q82rgky8d34kiqkfj4ykkp7xrldgv-unit-console-getty.service-disabled.drv /nix/store/111vzivzwsc1d39an9dvkg1y0ilk83am-unit-save-hwclock.service-disabled.drv /nix/store/11rydamdf84n327zynkdjijzmffc0yxm-users-groups.json.drv : 省略 : restarting sysinit-reactivation.target reloading the following units: dbus.service, firewall.service, reload-systemd-vconsole-setup.service restarting the following units: sshd.service, systemd-udevd.service starting the following units: network-setup.service, systemd-modules-load.service, systemd-sysctl.service the following new units were started: chronyd.service, network-addresses-end0.service, NetworkManager-dispatcher.service, sysinit-reactivation.target, systemd-tmpfiles-resetup.service, time-sync.target Done. The new configuration is /nix/store/zxj3pz2c8dsqb3ki0flfi5gq64s0las1-nixos-system-nixos99-25.11pre901419.5ae3b07d8d65 [nixos@nixos:~]$
ここで一旦SSH接続からログアウトし、コンソールの画面に戻る。
コンソールの画面でも一旦ログアウトしrootでログインする。この段階ではパスワード無しでrootアカウントでログインが出来る。
ログイン後、プロンプト表示が/etc/nixos/configuration.nixで設定したものになっている事がわかる。
パスワード無しの状態でrootでログインしている状態なので、ここでrootアカウントのパスワードを設定する。
続けて/etc/nixos/configuration.nixで作成した一般ユーザのアカウントのパスワードも設定する。
今後は/etc/nixos/configuration.nixで作成した一般ユーザ(当環境ではnixosuser)のアカウント(と、何らかの理由でrootアカウント)でログインする事となる。
NixOSの初期設定後は、nixosアカウントは使用しない。
ここでnixosアカウントでログインを試みてもパスワードが弾かれる。
<<< Welcome to NixOS 25.11pre901419.5ae3b07d8d65 (aarch64) - tty1 >>> Run 'nixos-help' for the NixOS manual. nixos login: root [nixos99:~ ]$ [nixos99:~ ]$ passwd New password: Retype new password: passwd: password updated successfully [nixos99:~ ]$ [nixos99:~ ]$ [nixos99:~ ]$ passwd nixosuser New password: Retype new password: passwd: password updated successfully [nixos99:~ ]$
rootアカウントと一般ユーザのアカウントのパスワードを設定したら、コンソールの画面にてNixOSを再起動させる。
[nixos99:~ ]$ reboot
Stopping Session 1 of User root...
[ OK ] Removed slice Slice /system/modprobe.
[ OK ] Stopped target Bluetooth Support
[ OK ] Stopped target Multi-User System.
[ OK ] Stopped target Login Prompts.
[ OK ] Stopped target Virtual Machine and Containers.
[ OK ] Stopped target Sound Card.
[ OK ] Stopped target Timer Units.
[ OK ] Stopped Discard unused filesystem blocks once a week.
[ OK ] Stopped logrotate.timer.
[ OK ] Stopped Daily Cleanup of Temporary Directories
:
省略
:
NixOSの起動画面にて、プロファイルが3つ出力されている。リビルドの回数によってプロファイルの数は異なる。
このまま放置すると1:で起動するが、これは2:と同じ内容である為、このまま放置しても上記で導入したパッケージおよび設定内容でNixOSが起動する。
Enter choice: にて3を入力しEnterキーを叩くと、何も設定されていない状態(上記の「1.NixOSの起動とログイン」の開始直前と同じ状態)でNixOSが起動する。
Net: eth0: ethernet@7d580000
PCIe BRCM: link up, 5.0 Gbps x1 (SSC)
starting USB...
Register 5000420 NbrPorts 5
Starting the controller
USB XHCI 1.00
Bus xhci_pci: 4 USB Device(s) found
scanning usb for storage devices... 1 Storage Device(s) found
Hit any key to stop autoboot: 02
Card did not respond to voltage select! : -110
Card did not respond to voltage select! : -110
Cannot persist EFI variables without system partition
** Booting bootflow '<NULL>' with efi_mgr
Loading Boot0000 'usb 0' failed
EFI boot manager: Cannot load any image
Boot failed (err=-14)
Card did not respond to voltage select! : -110
Card did not respond to voltage select! : -110
** Booting bootflow 'usb_mass_storage.lun0.bootdev.part_2" with extlinux
-------------------------------------------------------------
1: NixOS - Default
2: NixOS - Configuration 2-default (2026-01-17 09:34 - 25.11pre901419.5ae3b07d8d65)
3: NixOS - Configuration 1-default (1970-01-01 00:00 - sd-card-25.11pre901419.5ae3b07d8d65)
Enter choise:
NixOSの起動が完了しログインプロンプトが出力されたら、上記にて設定したアカウントとパスワードを入力し、NixOSにログイン出来る事を確認する。
デフォルトのシェルをzshに設定している為、リビルド後の初回ログイン時に質問が投げつけられる。
0 を入力しEnterキーを叩くと、.zshrcや.zsh_history等のファイルが生成されるが、既に/etc/nixos/zsh.nixで設定しているので改めて.zshrc等を編集する必要は無い。
次回のログイン時以降は、何も聞かれなくなる。
尚、/etc/nixos/configuration.nixで設定したIPアドレスでSSHログインも可能になる。
<<< Welcome to NixOS sd-card-25.11pre901419.5ae3b07d8d65 (aarch64) - tty1 >>>
Run 'nixos-help' for the NixOS manual.
nixos99 login:
This is Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message necause you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
"). This function can help you with a few settings that should
make your use of the shell easier.
You can:
(q) Quit and do nothing. The function will be run again next time.
(0) Exit, creating the file ~/.zshrc containing just a comment,
That will prevent this function being run again.
(1) Continue to the main menu.
--- Type one of the keys in parentheses ---
NixOSにログインする事が出来た。ここでNixOSのインストールおよび初期設定は一旦完了となる。
以下は/etc/os-releaseファイルの内容。
[nixos99:~ ]$ cat /etc/os-release ANSI_COLOR="0;38;2;126;186;228" BUG_REPORT_URL="https://github.com/NixOS/nixpkgs/issues" BUILD_ID="25.11pre901419.5ae3b07d8d65" CPE_NAME="cpe:/o:nixos:nixos:25.11" DEFAULT_HOSTNAME=nixos DOCUMENTATION_URL="https://nixos.org/learn.html" HOME_URL="https://nixos.org/" ID=nixos ID_LIKE="" IMAGE_ID="" IMAGE_VERSION="" LOGO="nix-snowflake" NAME=NixOS PRETTY_NAME="NixOS 25.11 (Xantusia)" SUPPORT_URL="https://nixos.org/community.html" VARIANT="" VARIANT_ID="" VENDOR_NAME=NixOS VENDOR_URL="https://nixos.org/" VERSION="25.11 (Xantusia)" VERSION_CODENAME=xantusia VERSION_ID="25.11" [nixos99:~ ]$
uname -aコマンドを叩き、Linuxカーネルのバージョンを確認。
[nixos99:~ ]$ uname -a Linux nixos99 6.12.47 #1-NixOS SMP Tue Jan 1 00:00:00 UTC 1980 aarch64 GNU/Linux [nixos99:~ ]$
ついでに、/etc/nixos/chrony.nixで設定した時刻同期設定が正常に動作している事を確認する。
[nixos99:~ ]$ chronyc sources MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* ntp2.jst.mfeed.ad.jp 2 6 377 35 -212us[ -238us] +/- 27ms [nixos99:~ ]$
Preview版ではなくRelease版のNixOSを使いたい場合
以下のリンク先を参照し、NixOSをRelease版にアップデートする。
アップデート実行のタイミングは、Sambaの導入前もしくは導入後のどちらでも良い。
当記事の公開の段階ではリリース版のバージョンは25.11なので、NixOSのチャンネルは25.11を指定する。
https://debslink.hatenadiary.jp/entry/20251214/1765688458 NixOSを25.05から25.11にアップデートした
Sambaの導入
初期設定およびシェルやエディタ等のパッケージの導入を終えたところで、当環境をファイルサーバとして利用すべく、ファイル共有ツールSambaのインストールと設定に進む。
Sambaのインストールと設定の手順は、当ブログの過去の記事を参照し実施した。
NixOSではSambaの設定も.nixファイル内にてNix言語で記載するが、設定内容および値そのものは、他のLinuxディストリビューションや*BSD等と同じである。
https://debslink.hatenadiary.jp/entry/20250328/1743167901 NixOSでSambaによるファイルサーバの構築
Sambaの設定ファイルのパスを、/etc/nixos/configuration.nixに記載する。
/etc/nixos/configuration.nixファイル内の上部にある imports = に追記する。
{ config, lib, pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
./ssh.nix
./nvim.nix
./zsh.nix
./chrony.nix
./rsyslog.nix
./smb.nix ◻️◻️この行を追記
];
:
省略
:
Sambaのパッケージをインストールする為、/etc/nixos/configuration.nixファイル内の下の方にある environment.systemPackages = with pkgs; にパッケージ名sambaを追記する。
併せて、サーバの管理でよく利用される以下のツールもインストールする為に追記した。
・sysstat:サーバの負荷を分析する
・strace:特定のプロセスを追跡する
・iotop:ディスクI/Oの帯域をプロセス毎に出力する
・lsof:プロセスが開いているファイルのリストを出力する
environment.systemPackages = with pkgs; [
# vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
wget
neovim
curl
zsh
neofetch
chrony
rsyslog
samba ◻️◻️この行を追記
sysstat ◻️◻️以下の4行も追記
strace
iotop
lsof
];
:
省略
:
上記で/etc/nixos/configuration.nixファイル内に追記したsmb.nixファイルを新規作成する。
/etc/nixos/smb.nixファイルの内容は以下のとおり。
[nixos99:~ ]$ cat /etc/nixos/smb.nix
{
services.samba = {
enable = true;
openFirewall = true;
settings = {
global = {
security = "user";
"dns proxy" = "no";
"dos charset" = "CP932";
"log file" = "/var/log/samba/smbd.%m";
"logging" = "file";
"workgroup" = [ "WORKGROUP" ];
"server string" = [ "nixossamba" ];
"netbios name" = [ "nixossamba" ];
"min protocol" = [ "smb3" ];
"hosts allow" = [ "192.168.0. 192.168.1. 192.168.3. localhost" ];
"hosts deny" = [ "0.0.0.0/0" ];
"map to guest" = [ "bad user" ];
};
public = {
path = "/home/samba";
"read only" = "no";
browseable = "yes";
"guest ok" = "yes";
"create mask" = "0777";
"directory mask" = "0777";
"store dos attributes" = "yes";
"map archive" = "no";
"dos filemode" = "yes";
};
};
};
}
[nixos99:~ ]$
/etc/nixos/configuration.nixにてFirewallの設定を追記。
SambaだけでなくNTPやsshの穴開け設定も追加した。
:
省略
:
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
networking.firewall.enable = true; ◻️チェックアウトを外しFirewall機能を有効化
networking.firewall.allowPing = true; ◻️以下の6行を追記、許可するネットワークアドレスは各々の環境による
networking.firewall.interfaces."end0".allowedTCPPorts = [ 22 139 445 ];
networking.firewall.interfaces."end0".allowedUDPPorts = [ 123 137 138 ];
networkihg.firewall.extraCommands = ''
iptables -A nixos-fw -s 10.1.1.0/24 -j nixos-fw-accept
iptables -A nixos-fw -s 192.168.1.0/24 -j nixos-fw-accept
iptables -A nixos-fw -s 192.168.3.024 -j nixos-fw-accept
'';
:
省略
:
Sambaの設定とFirewallの穴開け設定を終えたところで、リビルドを実行しパッケージのインストールと設定内容の反映を実施する。
リビルドが失敗したら、エラーの内容を確認し.nixファイルの内容の修正を行う。
[nixos99:~ ]$ sudo nixos-rebuild switch warning: Git not found; cannot figure out revision of '/nix/store/75iiz86idhy5nam496h5rx9asi6mi5qfーnixos-25.11pre901419.5ae3b07d8d65/nixos' building the system configuration... these 37 derivations will be built: /nix/store/1g8r481q95g84v7dzgvhq02gjcs7y0r2-smb-global.conf.dr : 省略 : the following new units were started: network-online.target, NetworkManager-dispatcher.service, NetworkManager-wait-online.service, samba-nmbd.service, samba-smbd.service, samba-winbindd.service, samba.target, sysinit-reactivation.target, system-samba.slice, systemd-tmpfiles-resetup.service Done. The new configuration is /nix/store/pbd17db14fqwq45csxp67l86ack430a6-nixos-system-jpmtkrpsv99-25.11pre901419.5ae3b07d8d65 [nixos99:~ ]$
リビルドは成功した。Sambaのリビルドが完了してから、Samba用アカウントの作成とパスワードを設定する。
リビルド前はSambaのインストール前の状態であり、Samba関連のコマンドの実行が出来ない為である。
[nixos99:~ ]$ sudo groupadd samba [nixos99:~ ]$ sudo useradd -m samba -g samba [nixos99:~ ]$ [nixos99:~ ]$ sudo smbpasswd -a samba New SMB password: Retype new SMB password: Added user samba. [nixos99:~ ]$ [nixos99:~ ]$ sudo chmod 777 /home/samba [nixos99:~ ]$ [nixos99:~ ]$ ls /home total 20 drwxr-xr-x 5 root root 4096 Jan 17 09:50 . drwxr-xr-x 19 root root 4096 Dec 20 2024 .. drwx------ 2 1000 users 4096 Jan 17 09:25 nixos drwx------ 2 nixosuser users 4096 Jan 17 09:45 nixosuser drwxrwxrwx 2 samba samba 4096 Jan 17 09:50 samba [nixos99:~ ]$
Sambaのリビルドが成功し、Samba用のアカウントの作成が終わったところで、NixOSを再起動させる。
[nixos99:~ ]$ sudo reboot Broadcast message from root@nixos99 on pts/1 (Thu 2026-01-17 9:48:55 JST): The system will reboot now! : 省略 :
NixOSの再起動が完了したら、NixOSにログインしSambaの動作確認に着手する。
smbd -Vコマンドを叩き、インストールされたSambaのバージョンを確認する。
当環境にインストールされたSambaのバージョンが 4.22.5である事がわかる。
[nixos99:~ ]$ smbd -V Version 4.22.5 [nixos99:~ ]$
続いて、systemctlコマンドを叩いてSambaのサービスが正常に立ち上がっている事を確認する。
Active:がactive (running) になっており、異常を示すようなログが出力されていない事から、Sambaが正常に立ち上がった事が分かる。
[nixos99:~ ]# sudo systemctl status samba-smbd.service
[sudo] password for nixosuser:
● samba-smbd.service - Samba SMB Daemon
Loaded: loaded (/etc/systemd/system/samba-smbd.service; enabled; preset: ignored)
Active: active (running) since Sat 2026-01-17 09:52:02 JST; 41s ago
Invocation: 1c79abed68b8467e957fbd8f09098b2b
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 935 (smbd)
Status: "smbd: ready to serve connections..."
IP: 0B in, 0B out
IO: 2.1M read, 16K written
Tasks: 3 (limit: 4442)
Memory: 9.7M (peak: 9.9M)
CPU: 151ms
CGroup: /system.slice/system-samba.slice/samba-smbd.service
├─935 /nix/store/h6m2rjnj3q00w41galqn047ax8w4sddn-samba-4.22.5/sbin/smbd --foreground --no-process-group
├─939 "smbd: notifyd" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "">
└─940 "smbd: cleanupd" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">
Jan 17 09:52:02 nixos99 systemd[1]: Starting Samba SMB Daemon...
Jan 17 09:52:02 nixos99 systemd[1]: Started Samba SMB Daemon.
[nixos99:~ ]$
続いて、systemctlコマンドをis-enabledオプションを付けてSambaのサービスの自動起動設定を確認する。
enabledが返ってきたので、Sambaの自動起動は正常に設定されている事が分かる。
[nixos99:~ ]$ sudo systemctl is-enabled samba-smbd.service enabled [nixos99:~ ]$
Sambaの動作確認
一通り設定を終えSambaが正常に起動している事を確認したところで、Sambaの動作確認に進む。
はじめに、普段使用しているMacBookからNixOS内のSambaの公開ディレクトリに対し接続テストを実施した。
以下の画像のとおり、公開ディレクトリにアクセス出来た事を確認した。MacBook側で作成したREADMEファイルを公開ディレクトリ内にコピー出来た事と、公開ディレクトリ内のファイルをMacBook側にダウンロード出来た事を確認した。

続けて妻のWindows端末からNixOS内のSamba公開ディレクトリに対し接続テストを実施した。
以下の画像のとおり、公開ディレクトリにアクセス出来た事を確認した。
Windows端末側で作成したREADMEファイルを公開ディレクトリ内にコピー出来た事と、公開ディレクトリ内のファイルをWindows端末にダウンロード出来た事も確認した。

振り返り
VirtualBoxやVMWare環境でNixOSを運用していた際と同様に、nixos-rebuildを何度も実行するとストレージの消費が激しくなる為、リビルドの実行は必要最低限に留める方針とした。
そのため、事前に検証環境を構築し各設定ファイル(.nix ファイル)をの内容を整理した上で、いわば決定版となる設定ファイルを作成し、本番環境ではその内容のみでリビルドを実行した。
また、microSDカードにOSをインストールして常時稼働させると、書き込み回数が多い事によりmicroSDカードの寿命が短くなることから、ストレージの延命を目的として今回はUSB接続のSSDを導入した。
USB接続のSSDはRaspberry Pi 4BのUSBポートに挿して使用するため、USBタイプの無線LANアダプタを装着しているような外観になる点はやや気になるものの、microSDカードを何枚も消耗するよりはマシだと割り切って運用することにした。
本環境は、すでに稼働しているOracle LinuxおよびOpenBSDのファイルサーバと並行して運用する予定である。
参照サイト
https://nixos.org/ Nix & NixOS Declarative builds and deployments
https://nixos.wiki/wiki/NixOS_on_ARM/Raspberry_Pi_4 NixOS on ARM/Raspberry Pi 4
https://nix.dev/tutorials/nixos/installing-nixos-on-a-raspberry-pi Installing NixOS on a raspberry Pi
https://nixos.wiki/wiki/Samba NixOS Wiki - Samba - Server setup
https://debslink.hatenadiary.jp/entry/20250320/1742459549 NixOSの環境構築
https://debslink.hatenadiary.jp/entry/20250328/1743167901 NixOSでSambaによるファイルサーバの構築
https://blog.ymgyt.io/entry/homeserver-with-nixos-and-raspberrypi-install-nixos/ NixOSとRaspberry Piで自宅server
NixOS関連の記事
https://debslink.hatenadiary.jp/entry/20250311/1741649715 NixOSの沼に片足を突っ込んだ
https://debslink.hatenadiary.jp/entry/20250316/1742128054 NixOSにFlakeを導入した
https://debslink.hatenadiary.jp/entry/20250320/1742459549 NixOSの環境構築
https://debslink.hatenadiary.jp/entry/20250323/1742731080 NixOSでSFTPサーバの設定
https://debslink.hatenadiary.jp/entry/20250328/1743167901 NixOSでSambaによるファイルサーバの構築
https://debslink.hatenadiary.jp/entry/20250405/1743844940 NixOSでrsyslogの設定
https://debslink.hatenadiary.jp/entry/20250411/1744300480 NixOSでDNSサーバの構築
https://debslink.hatenadiary.jp/entry/20250413/1744551596 NixOSのシステムの再現性の検証
https://debslink.hatenadiary.jp/entry/20250418/1744924524 NixOSでPostfixとDovecotによるメールサーバの構築
https://debslink.hatenadiary.jp/entry/20250419/1745062553 NixOSでPostfixとDovecotによるメールサーバの構築 - SASL認証編
https://debslink.hatenadiary.jp/entry/20250421/1745236668 NixOSのパッケージやOSのアップデートに関するメモ
https://debslink.hatenadiary.jp/entry/20250428/1745795434 NixOSをCLIでインストールした
https://debslink.hatenadiary.jp/entry/20250503/1746235454 NixOSでnginxによるWebサーバの構築
https://debslink.hatenadiary.jp/entry/20250508/1746706416 NixOSでPrometheusとGrafanaによる監視基盤の構築
https://debslink.hatenadiary.jp/entry/20250510/1746884897 NixOSの導入にあたり参考になったサイト
https://debslink.hatenadiary.jp/entry/20250524/1748072722 NixOSを24.11から25.05にアップデートした
https://debslink.hatenadiary.jp/entry/20251214/1765688458 NixOSを25.05から25.11にアップデートした
https://debslink.hatenadiary.jp/entry/20260117/1768615582 Raspberry Pi 4BにNixOSを導入しファイルサーバを構築した
https://debslink.hatenadiary.jp/entry/20260503/1777775392 NixOSで構築したサーバの運用について