ミニPC買ってみたので24H Linuxサーバー化する
こんにちは。Rcatです。
今までラズパイを24H稼働で使っていましたが、処理能力やメモリを考えてちゃんとしたパソコンを使うことにしました。
とはいえ、24H稼働だと電気代もかかるので、今回はミニPCというものに手を出してみました。
今後も設定追加したら追記していきます。
なにやるの?
この記事では次の事をやります
買ったもの
Amazonで"GREEN G5"というPCをプライム感謝祭の時に買いました。
まさかの2.8万でPCゲットです!
スペック
CPU N100
電気代を考慮し、TDPの低いものを選びました。しかし、スコアは一昔前のi7並みのようです。メモリ DDR5 16GB
イマドキは16GB欲しいですよねグラフィック
CPU内蔵。HDMI x2と Type-Cに対応!
しかもType-CがBIOS画面から使えたのには驚き。
今までType-C画面使ったことないからかもしれないけどそういうモノなんですかね?ストレージ
M.2 500GB
追加で2.5インチの場所もある
消費電力
こちらの記事を参照してください
Linux(Ubuntu)のインストール
以下のサイトを参考にデュアルブート前提のインストールをしました
https://www.pc-koubou.jp/magazine/35542
Ubuntuは以下から入手しました
インストールドライブの作成には"rufus"を使用しました。
ちなみにWindows11に対応していないPCに無理やり11書き込むときも、これを使ってWindows11インストールメディアを作ったりしました。
USBメモリはないので古のClass4 SDカードをUbuntuインストールメディアにしました。
インストールを完了したら、Linuxが起動するように起動構成を変更します。
最初は省略しちゃいましたが、BIOSのブートの画面で一番最初にSSDが来るように並び替えます。
最初のままだとWindowsブードマネージャーのままでインストールに失敗したかと思うんですが、下にある"UEFI NVME Drive BBS Priorities"のメニューを選択すると下の画面のようになるので、Bootオプションの一番をLinuxが来るように変更します。
こうすることでLinuxが立ち上がるようになります。
変更を保存して再起動をするとこの通り
インストールが完了しました。
初期設定(デスクトップ上でやること)
さて、サーバーにするからにはSSHが基本になるんですが、その前にデスクトップが繋がっているうちにやっておいた方が楽なことをやってしまいましょう。
アップデート
LANケーブルをさしておくと、アップデートの通知が来るのでボタンを押してアップデートしちゃいましょう。
SSHの有効化
SSHがないとリモート接続できないので入れておきます。
そもそもSSHとは、外部からコマンドラインにログインできる機能です。
Linuxはもともとコマンドが基本なので、画面には繋がずにこのSSHを使ってメインのWindowsPCから操作するものとします。
sudo apt install openssh-server
初期設定(ここからはリモート)
さて、sshが出来たらもうデスクトップにようはないので、いつもの環境からリモートで作業です。
リモートにはTera Term / Win SCPを使います
TeraTermで接続
リモートでShellにアクセスするためにはTera Termを使います
OSをインストールする時にユーザーの作成をしていると思うので、それでログインしてみます。
IPアドレスはデスクトップのうちに、有線の設定から確認しておきましょう。
この後はリモートが基本になるので、IPアドレスは固定しておきましょう
Win SCPの接続
さて、コマンドだけで操作は大変なので、データの転送にはWinSCPを使います。
こんな感じで左側ローカル右がリモートといった感じでデータの転送が行えます。普通にエクスプローラーからドラッック&ドロップでも大丈夫です。便利ですね。
唯一の難点といえば、権限がない場合は書き換えられないので、事前にシェルの方で権限を設定し直してからじゃないと操作できない場合があるというところでしょうか?
やることやっとく
適当にパッケージをインストール
Runlevelは下げとくと消費電力減るのかな?
$デフォルトのランレベルの変更(グラフィック無効化)
sudo systemctl set-default multi-user.target
$MP4BOX
sudo apt -y install gpac
$OpenCV用
sudo apt -y install libatlas-base-dev
aliasesを作る
いわゆるコマンドのショートカットですね。
最初に自分のホームに".bash_aliases"というファイルを作ります。
この中に任意のaliasesを書き込んでいくと、コマンドショートカットが出来上がるわけですね。
Pythonの準備
さて、私はめちゃくちゃPythonを使うので、とりあえずよく使っているライブラリを片っ端から入れていきます。
sudo apt install python3-pip
$WEB/ネットワーク系
pip install flask
pip install flask_socketio
pip install cryptography
pip install ipget
$Discord系
pip install discord
$OpenCV
pip install opencv-python
$その他当たり前?レベル
pip install numpy
定期実行コマンド
アップデートをいちいちログインでやるのは面倒なので、毎日自動でコマンドを打ってもらいます。
今回用意したスクリプトが以下
apt -y update
apt -y upgrade
ルート権限がいるので、ルートで登録します。
最下行の部分がコマンドの部分で、毎日朝四時に実行する設定です。
rcat@rcat-Green-G5:~$ sudo crontab -e
no crontab for root - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.tiny
3. /bin/ed
Choose 1-3 [1]: 1
crontab: installing new crontab
rcat@rcat-Green-G5:~$ sudo crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
0 4 * * * /Rcat_Service/update.sh
オリジナルサービスの登録
次に自作サービス(スタートアップみたいなもの)を登録して、電源投入時に自動実行するサービスを作ります。
具体的にはDiscordのBOTやWEBサーバーなんかを実行します。
実行にはSystemdを用います。
サービス作成スクリプトを使って登録する
毎回どうやって作るんだったっけ?と悩んでしまうので、スクリプトさえ用意すれば作れるようなコマンドを作成しました。
この辺の操作にはルート権限が必要なので、ルートで実行してください。
使い方は以下の通りです。
rcat@rcat-Green-G5:/Rcat_Service/Script/ESP32CAM$ CreateService ESP32CAM_Server_Ver2.py
[sudo] rcat のパスワード:
###サービス作成###
操作を選択
[1] 新規作成
[2] 既存のサービスファイルから作成
※本スクリプトはroot権限で実行してください
###画面クリアを挟む###
実行するPythonスクリプトは?
フルパスで入力してください
/Rcat_Service/Script/ESP32CAM/ESP32CAM_Server_Ver2.py
引数があれば入力
サービス名は?
ファイル名と同じ場合は空欄
R_ESP32CAM_Server_Ver2
ネットワークがオンラインであることを条件とする
(y/n)
y
標準出力をログに出力しますか?
(y/n)
y
###画面クリアを挟む###
以下の内容で作成します
--------------------------------------------
[Unit]
Description=R_ESP32CAM_Server_Ver2
After=network-online.target
[Service]
User=rcat
Type=simple
WorkingDirectory=/Rcat_Service/Script/ESP32CAM
ExecStart=/usr/bin/python3 /Rcat_Service/Script/ESP32CAM/ESP32CAM_Server_Ver2.py
StandardOutput=file:/Rcat_Service/Script/ESP32CAM/ESP32CAM_Server_Ver2.log
[Install]
WantedBy=multi-user.target network-online.target
--------------------------------------------
(y/n)
このスクリプトはユーザーの入力を受け付けて動く対話型のスクリプトです。最初にコマンドを起動して新規作成を選択します。
次に色々聞かれるので、順番通りに入力していくだけでサービスを作ることができます。
ちなみに、最終的に出力するサービスファイルの内容は"私向け"の内容なので、人によっては合わないかもしれません。
ちなみにユーザーを自分にしている理由はルートで起動するとライブラリを読み込めないからです。別にrootでインストールしてもいいんですけど…。
その他にも一部のライブラリでユーザーの環境変数に依存している場合があるので、自分のユーザーで動作確認をしたなら絶対に動く自分のユーザーで実行という形にしました。
※追記:このスクリプトだけでは自動起動までもっていけてないので別途enableとrestartが必要です
ちゃんと登録されているか確認します。
"R_ESP32CAM_Server_Ver2"がいますね
スタートをかけてなかったので、手動でサービスのスタートをかけると、サービスがアクティブになっています。
rcat@rcat-Green-G5:/Rcat_Service/Script/ESP32CAM$ systemctl list-unit-files --type=service
(中略)
pulseaudio-enable-autospawn.service masked enabled
quotaon.service static -
R_ESP32CAM_Server_Ver2.service disabled enabled
R_passwdserver.service enabled enabled
rc-local.service static -
rc.service masked enabled
rcS.service masked enabled
(中略)
rcat@rcat-Green-G5:/Rcat_Service/Script/ESP32CAM$ sudo systemctl start R_ESP32CAM_Server_Ver2.service
rcat@rcat-Green-G5:/Rcat_Service/Script/ESP32CAM$ sudo systemctl status R_ESP32CAM_Server_Ver2.service
● R_ESP32CAM_Server_Ver2.service - R_ESP32CAM_Server_Ver2
Loaded: loaded (/etc/systemd/system/R_ESP32CAM_Server_Ver2.service; disabled; vendor preset: enabled)
Active: active (running) since Sat 2023-10-21 15:23:57 JST; 22s ago
Main PID: 3663 (python3)
Tasks: 4 (limit: 18821)
Memory: 45.8M
CPU: 1.341s
CGroup: /system.slice/R_ESP32CAM_Server_Ver2.service
mq3663 /usr/bin/python3 /Rcat_Service/Script/ESP32CAM/ESP32CAM_Server_Ver2.py
10月 21 15:23:57 rcat-Green-G5 systemd[1]: Started R_ESP32CAM_Server_Ver2.
rcat@rcat-Green-G5:/Rcat_Service/Script/ESP32CAM$
ちなみに今回追加したサービスは下記で紹介している。ESP32CAMお手軽監視カメラシステムです。こういうの動かすために買ったんですよね。
ざっとこんな感じでサービスが増えました。
分かりやすいように名前を全部"R_"から始めています。
DiscordのBOTも活動していることが確認できました。
追加SSDをマウント
この製品には2.5インチのスロットがあるので、前回使っていたSSDをそのまま差し替える
認識されているか確認してとりあえずマウントしてみる
rcat@rcat-Green-G5:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 61.9M 1 loop /snap/core20/1405
loop1 7:1 0 4K 1 loop /snap/bare/5
loop2 7:2 0 155.6M 1 loop /snap/firefox/1232
loop3 7:3 0 248.8M 1 loop /snap/gnome-3-38-2004/99
loop4 7:4 0 45.9M 1 loop /snap/snap-store/575
loop5 7:5 0 81.3M 1 loop /snap/gtk-common-themes/1534
loop6 7:6 0 284K 1 loop /snap/snapd-desktop-integration/10
loop7 7:7 0 43.6M 1 loop /snap/snapd/15177
sda 8:0 0 953.9G 0 disk
mqsda1 8:1 0 953.9G 0 part
nvme0n1 259:0 0 476.9G 0 disk
tqnvme0n1p1 259:1 0 100M 0 part /boot/efi
tqnvme0n1p2 259:2 0 128M 0 part
tqnvme0n1p3 259:3 0 139.7G 0 part
tqnvme0n1p4 259:4 0 1.7G 0 part
mqnvme0n1p5 259:5 0 335.3G 0 part /
rcat@rcat-Green-G5:~$ sudo mkdir /SSD
[sudo] rcat のパスワード:
rcat@rcat-Green-G5:~$ sudo mount /dev/sda1 /SSD
rcat@rcat-Green-G5:~$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.6G 2.2M 1.6G 1% /run
/dev/nvme0n1p5 329G 18G 296G 6% /
tmpfs 7.7G 0 7.7G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/nvme0n1p1 96M 34M 63M 35% /boot/efi
tmpfs 1.6G 76K 1.6G 1% /run/user/1000
/dev/sda1 938G 385G 506G 44% /SSD
rcat@rcat-Green-G5:~$
ちゃんと認識できたようです。
今までのバックアップデータが入っていました。
自動マウント
Linuxは挿しただけでは認識はするが読み書きできないのでマウントする
自動マウントには"fstab"を書き換える必要がある。
また、確実性を上げるために"UUID"を使う。
これをWinSCPで書き換えるのは少々面倒なので、Viコマンドで書き換える
WinSCPで書き換える場合は一旦rootでchmod777に変更する。
rcat@rcat-Green-G5:~$ sudo blkid -o list
device fs_type label mount point UUID
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/dev/nvme0n1p5 ext4 / 4344a6a1-ca75-4b5a-8a53-fb0962fae053
/dev/loop1 squashfs /snap/bare/5
/dev/nvme0n1p3 ntfs (not mounted) E694891B9488EF7D
/dev/nvme0n1p1 vfat SYSTEM /boot/efi D288-7E29
/dev/nvme0n1p4 ntfs Recovery (not mounted) C6D28961D2895699
/dev/loop6 squashfs /snap/snapd-desktop-integration/10
/dev/loop4 squashfs /snap/snap-store/575
/dev/loop2 squashfs /snap/firefox/1232
/dev/loop0 squashfs /snap/core20/1405
/dev/loop7 squashfs /snap/snapd/15177
/dev/sda1 ext4 /SSD 6842d5c4-598b-445b-b172-6f6e223679fa
/dev/loop5 squashfs /snap/gtk-common-themes/1534
/dev/loop3 squashfs /snap/gnome-3-38-2004/99
/dev/nvme0n1p2 (not mounted)
rcat@rcat-Green-G5:~$ sudo vi /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/nvme0n1p5 during installation
UUID=4344a6a1-ca75-4b5a-8a53-fb0962fae053 / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=D288-7E29 /boot/efi vfat umask=0077 0 1
/swapfile none swap sw 0 0
UUID=6842d5c4-598b-445b-b172-6f6e223679fa /SSD ext4 defaults 0 0
rcat@rcat-Green-G5:~$ sudo mount -a
rcat@rcat-Green-G5:~$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.6G 2.2M 1.6G 1% /run
/dev/nvme0n1p5 329G 18G 296G 6% /
tmpfs 7.7G 0 7.7G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/nvme0n1p1 96M 34M 63M 35% /boot/efi
tmpfs 1.6G 76K 1.6G 1% /run/user/1000
/dev/sda1 938G 385G 506G 44% /SSD
VIコマンドの操作は以下
o
末尾に行を挿入して記述escキー
抜けてZZ
上書き保存
以上。VIコマンドは難しいのでキーストロークだけ書く。
画像生成AIを動かしてみた
本項は下記記事で別途紹介しています。
今流行りの生成AIを自分で試してみましょう。
ゲームサーバー化してみた
過去に紹介済みではありますが、本PCでは初です。
今回はパルワールドをきっかけに本機でもゲームの専用サーバーを構築します。
私オリジナルの管理ツールを使用し、Discordと連携することで管理者以外でもサーバーの起動や停止が可能な環境を構築しています。
詳しくは下記からサーバーの構築とツールの導入をしています。
まとめ
今回はミニPCを買ってLinuxをインストール後使用目的に合わせて初期セットアップをしていきました。
今後はこのPCを使って色々やっていきたいと思います。
情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。