AIを使った超初心者のUbuntu Serverの構築

私が家庭にNASを購入して一番不満だった点が転送速度とファイルフォーマット形式。

動画などのメディアファイルをNASに保存する際、少しずつファイルを入れていくならまだしも今までPCに溜めてあった動画などを一気に移動しようとすると時間がかかってしかたない・・・後で動画を編集しようとするとまたPCに転送しなければいけない。

HDDのフォーマット形式が違うから有線LANで繋ぐかWifiで転送するしか方法がなく時間がかかる。直接WindowsでHDDを読み書きできないから不便。

いくらNAS用のHDDとはいえ、ほとんど使わない日々を電源いれっぱなしで放置しておくのは大事なデータを保管する気になれない・・

今回、window10サポート間近となったCore2duoの化石PC(Windows10)をUbuntu Serverでファイルサーバーにしようと計画したのです。

それと以前買ったローカルモードでインターネットなしのネットワークを構築できるトラベルルータがかなり安定していて優秀だったのでそちらを有線LANでつないで利用しました。この記事で書かれている有線接続とはすべてこのトラベルルーターとの接続を意味します。

UbuntuServerの利点と使用目的

UbuntuServerなら”xfs”フォーマットのHDDも”NTFS”フォーマットのHDDもどちらも直接読み書き可能。Windowsの外付けHDDに保存した動画をそのままネットワークで共有できる。

使い方としては、常時起動ではなく必要なときだけ電源を入れスマホなどで保存したメディアを閲覧。終わったらスマホからシャットダウン

ファイルの中身は、楽譜、EBOOK、動画、音楽、家族写真、家族に見られたくないファイルと多岐にわたるので同じHDDで管理したくない。今まで使ってきた”xfs”フォーマットのHDDも引越しすることなくそのまま使いたい。(xfsフォーマットはPCに疎い人には認知度が低めなので中身を確認されづらい)

Ubuntu serverのインストール

最初にUbuntuserverをダウンロードしてrufasで起動USBを作ろうと考えたのですが、古いPCはUSBブート非対応だったため別PCでSSDにUbuntu Serverをインストールし、換装する方法をとりました。

Ubuntu 日本語入力

以下のコマンドをターミナルで入力

sudo apt update
sudo apt install ibus-mozc
sudo reboot

sambaインストール

Samba (SMB/CIFS): Windows、macOS、Linuxなど、幅広いOSからアクセスできる一般的なファイル共有プロトコルです。

UbuntuサーバーにSambaをインストールします。

ターミナルを開いて下記を入力(コピペ)します。

sudo apt update
sudo apt install samba samba-common-bin

NTFSサポートのインストール

これでWindwos用NTFSファイルもUbuntuから直接読み込ませることが可能になります

sudo apt install ntfs-3g

リムーバブルHDDを接続、デバイス名を確認

sudo fdisk -l
sudo blkid
別に隠す必要もないのですが念の為・・

大抵の場合、追加のHDDは「sdb1」となっていると思います

共有ディレクトリの作成

今回は、共有ディレクトリを「hddshare」とします

sudo mkdir -p /mnt/hddshare
sudo chown nobody:nogroup /mnt/hddshare  #nobody:nogroupは自分のものに変更しても可
sudo chmod 777 /mnt/hddshare

Samba 設定

smb.cofを編集します

sudo nano /etc/samba/smb.conf

/etc/samba/smb.conf の末尾に以下を追記(保存)

[hddshare]
   path = /mnt/hddshare
   read only = no
   browsable = yes
   guest ok = yes
   force user = zube #ユーザ名

#はコメント欄ですから実際は#ユーザ名は削除しないといけません(初心者の躓き)

※force user は、接続してきたクライアントのアクセスを特定のユーザー権限に固定する設定です

※保存はcontrol+x → y(Yes)で保存。 → enterで保存

samba再起動

sudo systemctl restart smbd

異なるフォーマットのHDD(NTFSとXFS)に交換しても自動で共有を維持する

入れ替えするHDDのファイルフォーマットがNTFSとXFSの2種類があるため、fstabに直接記述するのは避けた方が良い場合があります。

共有の目的を考えると、特定のUUIDやラベルではなく、同じマウントポイントに常にマウントされることが重要です。 ここでは、一時的にNTFSとXFSの両方に対応できる方法を考えます。

HDDごとにUUIDは変わるので、共通のラベルを使うのがオススメ

ラベルの付け方

今回は、ラベル名をMYSHREとします

NTFS の場合

sudo ntfslabel /dev/sdb1 MYSHARE

XFS の場合

sudo xfs_admin -L MYSHARE /dev/sdb1

・今回はNTFSとXFSの両方なのでどちらも実行してください

・nanoで/etc/fstabを開く

sudo nano /etc/fstab

・下記を追加

LABEL=MYSHARE  /mnt/hddshare  auto  defaults  0  0

※/etc/fstabは、LinuxやUNIX系OSで使用されるファイルシステムのマウント設定ファイルです。システムの起動時、このファイルに記述された情報をもとに、指定されたストレージやパーティション、ネットワークドライブなどが自動的にマウントされます

HDDを入れていない場合はスキップしてシステムを起動させたい

このままだとNTFSとXFSのどちらのHDDも入れずに起動した場合にエラーがでるので追加HDDを入れていない場合はスキップしてシステムを起動できるようにします

nofail オプションを使えば、HDDが存在しないときでも 起動時にエラーにならずスキップされます。

・nanoで/etc/fstabを編集します

sudo nano /etc/fstab

・auto defaults,のあとにnofailを追加します

LABEL=MYSHARE  /mnt/hddshare  auto  defaults,nofail  0  0

・起動高速化したい場合(任意)

LABEL=MYSHARE  /mnt/hddshare  auto  defaults,nofail,x-systemed. device-timeout=5s 0  0

・システム(Ubuntu)を再起動して確認

ネットワーク制限の設定

現在このUbuntu Serverには、有線(インターネットなし)と無線(インターネットあり)の2つのネットワークがあり、普段家族と共有する無線(Wifi)のIPアドレス側からは共有フォルダを見えなくしたい。

家族と共有するWIfiはUSBから抜けばいいだけなのですが、Ubuntuを操作したり新しい設定をインストールするのに残しておきたい。

ネットワークインターフェースの状態確認

ip a

私の場合無線LAN(wifi)がwlx0022cf3f4e13、有線LANがenp5s0となっているのがわかります

Sambaの設定ファイルを開く

sudo nano /etc/samba/smb.conf

[global] セクションの編集

[global] セクションに以下の設定を追加または編集します。

[global]
# ... その他の設定 ...

interfaces = 127.0.0.1 enp5s0
bind interfaces only = yes

# ... その他の設定 ...

Sambaサービスを再起動する

sudo systemctl restart smbd nmbd

IPアドレスの固定(任意)

  1. インターフェース名を確認
ip a

 2. Netplan設定ファイルを編集
Netplanの設定ファイルは通常以下の場所にあります

sudo nano /etc/netplan/01-netcfg.yaml
  1. 静的IPアドレスを設定
    以下のように編集します(例: IPアドレス 192.168.13.123 に設定する場合)
network:
  version: 2
  renderer: networkd
  ethernets:
    enp5s0:
      dhcp4: no
      addresses:
        - 192.168.13.123/24
      routes:
        - to: 0.0.0.0/0
          via: 192.168.13.1

      nameservers:
        addresses:
          - 8.8.8.8
          - 1.1.1.1

※gateway4 は古い書き方で非推奨です。代わりに routes: を使いました

このままではパーミッションが緩すぎる(他のユーザーも読めてしまう)ので

sudo chmod 600 /etc/netplan/*.yaml

※600 = 所有者だけが読み書き可能。他ユーザーにはアクセス不可

 4. 設定を適用

sudo netplan apply

GUIの場合は右上のWifiマークから設定することもできますが上の設定と両方やってしまうと編集した01-netcfg.yamlの中身が消えます

Wake on Lanでスマホからサーバー起動

サーバーのある部屋に行かなくてもスマホから起動させたいのです・・

Wake-on-LAN が機能するための条件

  1. BIOS/UEFIでWake-on-LANが有効になっている
  2. NIC(ネットワークカード)がWake-on-LAN対応
  3. OS側でWake-on-LANが有効になっている
  4. 電源OFF後もNICが通電されている(LEDが点滅している)
  5. netplanで固定IP設定しても、WOLを邪魔しない構成になっている

PC側 BIOSの確認

1.BIOS/UEFIでWake-on-LANが有効になっていることを確認

2.WOL対応状況の確認(NIC確認)

sudo ethtool enp5s0

出力例の中に

g がある → マジックパケットによるWake-on-LAN対応
Wake-on: d なら無効になっているので、有効化が必要

d:無効になっていたら・・WOL有効化(OS起動中)

sudo ethtool -s enp5s0 wol g

起動時にWOLを有効にする(恒久化)

MACアドレス確認:

ip link show enp5s0
出力結果(一部):モザイク部がMACアドレス

systemd 経由で自動設定できます:

sudo nano /etc/systemd/network/10-wol.link

内容(NIC名は適宜変更)

[Match]
MACAddress=<MACアドレス>  # もしくは Name=ens33

[Link]
WakeOnLan=magic

#以降の行は削除してください

設定を反映させる(再起動)

sudo reboot

Wake on LAN:スマホ側

スマホにWake on lanアプリをインストール。(お好きなものをどうぞ)私はwakeonlanを使用

設定で注意すべきところは

デバイス名:なんでもよい(好きな名前)
MACアドレス: 00:3d:58:gf:32:g1 (確認したMACアドレス:重要)
IPアドレス(またはホスト名)192.168.13.255
ポート番号:9または7(たいてい9)
SecureOn Password:空欄でOK

Wake-on-LAN では、普通のIPアドレスではなく「ブロードキャストアドレス」を使います。あなたのLANが 192.168.1.x なら:192.168.1.255つまり、ネットワークの最後の「255」を指定します。これが正しくないと、マジックパケットが届きません。

私はここで躓いてました・・いくらサーバー側の設定をしてもつながらないわけです

SSH接続でスマホからサーバーPCシャットダウン

スマホだけでサーバーPCをシャットダウンします。この設定によりディスプレイ接続の必要をなくしサーバーPCの設置場所を確保する事ができます。古いPC(Core2duo)案外消費電力が高く常駐しない事で電気代の節約、HDDの寿命保護を目的としました。

準備(Ubuntu側)

Ubuntu ServerでSSHが有効になっていることを確認

sudo systemctl enable ssh
sudo systemctl start ssh

もし下のようなエラーがでてインストールされていなかったら・・

SSHサーバーをインストール

sudo apt update
sudo apt install openssh-server

インストール後にサービスを起動・有効化

sudo systemctl start ssh
sudo systemctl enable ssh # システム起動時に自動で起動するように設定

ファイアウォールの設定(UFW)(任意)

UbuntuにはUFW (Uncomplicated Firewall) というファイアウォールがデフォルトで含まれていることがあります。外部からのSSH接続を許可するために、ポート22(SSHのデフォルトポート)を開放します。

sudo ufw allow ssh
sudo ufw enable # ファイアウォールを有効にする(まだ有効にしていない場合)

動作確認

sudo systemctl status ssh

もしファイアーウォールの設定をミスって共有フォルダが見えなくなってしまったら下記を入力してみてください・・私はミスりましたww

sudo ufw allow 'Samba'

スマホ側:SSHアプリをインストール

今回Termiusを使いました。

スマホでいちいち電源オフするだけのためにコマンドを打つのは面倒なのでコマンドを記憶させられるスニペットという機能をもったアプリを選びました。

それでもコマンドをスニペットで入力した後にパスワードを求められるので/etc/sudoersを編集してpoweroffコマンドだけパスワードなしでできるように編集します。

普通に編集すると文法ミスでsudoが使えなくリスクがありますので

sudo visudo

というコマンドを使って編集します。visudoは編集後に構文チェックしてから保存するので安心です

sudo visudoで設定ファイルを開いたら

zube(ユーザ名) ALL=(ALL) NOPASSWD: /sbin/poweroff

でpoweroffのコマンドだけパスワード入力を必要なく設定します。もとに戻すときは、またsudo visudoで編集に入り先程の入力を削除するかコメントアウト(行の先頭に#をつけるだけ)でOKです

SSH鍵認証(任意)

このままパスワード認証でも可能ですが、セキュリティリスクが高いため、公開鍵認証での接続を試みます

スマホからアクセスできるよう、IPアドレスを固定しておくのが望ましい(すでに固定済みならOK)

SSH鍵ペアの生成

ssh-keygen -t ed25519 -f ~/.ssh/smartphone_key

パスワードを入力します

公開鍵を authorized_keys に登録: 生成された公開鍵 (~/.ssh/smartphone_key.pub) の内容を、SSH接続を許可するユーザーの ~/.ssh/authorized_keys ファイルに追加します。

/home/zube/.ssh に “smartphone_key”を作成したとメッセージがでます

「Smartphone_key」が作成されています。

これをスマホのSSHアプリからインポートする(GoogleDriveなど)

鍵はインポートしたら消しておく

1.6. SSHサーバーの設定変更(セキュリティ強化のため)(任意)

sudo nano /etc/ssh/sshd_config

ポート番号の変更 (Port):
デフォルトの22番ポートは攻撃のターゲットになりやすいため、別のポート番号(例: 30022など、1024より大きく、65535までの未使用のポート)に変更

#Port 22
Port 30022  # ポート番号を変更 例(30022)

rootユーザーでのログイン禁止 (PermitRootLogin): rootユーザーでの直接ログインはセキュリティ上非常に危険なので禁止します。

#PermitRootLogin prohibit-password
PermitRootLogin no  # no に変更

パスワード認証の無効化

#PasswordAuthentication yes
PasswordAuthentication no  # no に変更

注意: これを no にする前に、鍵認証で確実にログインできることを確認してください。 そうしないと、SSHでログインできなくなります

変更を保存したら、SSHサービスを再起動して設定を反映させます。

sudo systemctl restart ssh

AIってすばらしい(今回の感想)

これで完全個人回線でプライベート、HDDを入れ替えて使えるファイルサーバーが完成しました。Wake on Lanもはじめて使ってみましたがとてもワクワクする体験でした。

廃棄寸前のPCで理想的なNASを完成させることができました。

今まで速度が遅かったり不安定だったNASともお別れ・・”xfs”フォーマットの使いづらさやWindowsとのファイルフォーマットの違いも全く意識せず安心してデータを保管していけます。

今回のUbuntu server設定、案外簡単にできたという印象ですがそれでも初心者ならではのミスやAIのに言われるまま入力して自分が何を設定したのかわからなくなり何度か最初からやり直しする羽目になったので自分の備忘録としてまとめ記事を作成しました。

今まで何度かLINUXをインストールしたことはあったのですが普通のデスクトップとして使っていた程度。ファイルサーバー設定はかなり面白かったし初めて少し学べた気がしました。

AIを活用することで今まで何度か挫折してきたプログラミングやエクセルマクロの作成もほとんどの人が興味さえあればできる時代になったのだと思います。

同じ質問を何度しても怒られない・・さらに丁寧に教えてくれるAI・・

会社などでは、今はまだAIを使って自分の成果(能力)のように結果を出している人をちらほら見かけますが・・もう少ししたら個人の能力でない事に皆が気づくでしょう・・ww・・・バレる前にこちらから種明かしです。

正直もう私のようなブログ記事もまったく必要なくなる危機感が半端ないですね・・

今回使用したファイルと作成したファイル

最後に設定追加や修正をしていって整合性がとれなくなったらこちらを思い出して設定を確認してください

使用(作成)したファイル

/mnt/hddshare 
・(HDDをマウントするポイントを作成)

/etc/samba/smb.conf 
・(起動時にHDDをマウントする設定)
・([global] セクションに共有ファイルを有線だけ見せる設定)

/etc/fstab #ファイルシステムマウント設定
・(作成したラベルをマウントするよう設定)
・(HDDが存在しないときもスキップしてシステム起動設定)

/etc/netplan/01-netcfg.yaml
・(iPアドレス固定設定を追加)

/etc/systemd/network/10-wol.link
・(Wake on LAN設定を追加)

/home/zube/.ssh
・(SSH鍵を中に作成)(やった人のみ)

/etc/ssh/sshd_config
・(SSHサーバーのセキュリティ設定変更)(やった人のみ)

/etc/sudoers
・SSHからのpoweroffコマンドでパスワードを入力を省いた(sudo visudoで編集)


コメント

タイトルとURLをコピーしました