2024年7月
使っていない古いノートPCでホームサーバーとやらを建てています。
内輪だけ向けの Web サーバーと、ファイル移動とかチョッとしたファイルの共有のためのファイルサーバーです。
OS は、CentOS Stream 9 です。
x86-64-v2 がサポートされていないといけないようなので、「How do I check if my CPU supports x86-64-v2?」にあるスクリプトを使わせてもらって予め確認してみました。
基本的な設定やインストールしているものは、「WAVE Log : VPS Construction Ⅱ」と同じです。
違っているトコを書いておきます。
【VPS ではやっているけど、ホームサーバーではやっていないこと】
・IPv6 のアドレスとゲートウェイはルーターによる自動設定で手動固定にしていません。( DNS だけは手動固定)
・DNS サーバー構築(BIND)をしていません。
・「PHP のアップデート」ではなく初めから 8.2 をインストールしています。
・SSL 化は自己署名証明書で行っています。
・メールサーバーは建てていません。
Logwatch など root 宛てのメールを転送先アドレスで受け取るために、Postfix で Gmail 経由のメール送信をできるようにしています。受信はなしです。
【VPS ではやっていないけど、ホームサーバーではやっていること】
・このページに書いていること。
IPv4 だけ、こんな感じで。メソッド(M)は「手動」。
インストール時のネットワーク設定は最小限の設定だったので、IPv4 と IPv6 の DNS 設定を追加変更しています。
接続名を確認
~]# nmcli connection show
NAME UUID TYPE DEVICE
enp3s0 c8168cd0-8c76-4702-8069-cfd757218542 ethernet enp3s0
lo 768182fa-da2f-4ab9-a45d-91f9646b8340 loopback lo
設定
~]# nmcli connection modify "enp3s0" ipv4.dns "1.1.1.1 8.8.8.8 9.9.9.9"
~]# nmcli connection modify "enp3s0" ipv4.ignore-auto-dns yes
~]# nmcli connection modify "enp3s0" ipv6.dns "2606:4700:4700::1111 2001:4860:4860::8888 2620:fe::fe"
~]# nmcli connection modify "enp3s0" ipv6.ignore-auto-dns yes
※ Public DNS
1. Cloudflare(1.1.1.1 / 2606:4700:4700::1111)
2. Google(8.8.8.8 / 2001:4860:4860::8888)
3. Quad9(9.9.9.9 / 2620:fe::fe)
設定反映
~]# nmcli connection up "enp3s0"
確認
~]# nmcli connection show "enp3s0" | grep dns
サーバー用途で使うノートPCなので、閉じてもスリープさせないために下記設定をしています。
~]# vi /etc/systemd/logind.conf
HandleSuspendKey=ignore
HandleHibernateKey=ignore
HandleLidSwitch=ignore
反映。
~]# systemctl restart systemd-logind.service
OP25B(Outbound Port 25 Blocking)規制のため、メール送信ができなかったので、Postfix から Gmail 経由でメールを送信するようにしています。※ From アドレスが Gmail になります。
Gmail を経由させるには「アプリパスワード」を使った認証が必要で、Gmail の「アプリパスワード」は、2段階認証を設定していないと作成できません。
アプリを選択で「メール」を選択。デバイスを選択で「その他(名前を入力)」を選択。
生成したアプリパスワードを元に、Gmail の SMTP 認証情報ファイルを作成。
~]# vi /etc/postfix/gmail
[smtp.gmail.com]:587 <Gmailのアドレス>:<Gmailのアプリパスワード>
パーミッションを設定。
~]# chmod 600 /etc/postfix/gmail
Postfix 用の DB ファイルを生成。
~]# postmap /etc/postfix/gmail
Postfix の設定ファイルの最終行に以下の設定を追加。
~]# vi /etc/postfix/main.cf
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/gmail
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes
設定反映。
~]# systemctl reload postfix
8.2 を入れました。
リスト表示。
~]# dnf module list php
8.2 をデフォルトとして設定してインストール。
~]# dnf module enable php:8.2
~]# dnf install php php-gd php-json
バージョン確認。
~]# php -v
確認。(現在ロードしているすべてのモジュールの名前を表示)
~]# php -m
MP3 ファイルのメタデータを読み込むために tinytag というライブラリをインストールしています。
~]# dnf install python3-pip
~]# pip3 install tinytag
ちょっと意外なところで SSL 化を要求された(※)ので、自己署名証明書で https アクセスできるようにしました。
※ JavaScript でクリップボードへテキストをコピーするのに、「Clipboard API」とやらを使っているのですが、コイツが SSL に対応したページでないと動作しないのですわ。
Uncaught TypeError: Cannot read properties of undefined (reading 'writeText')
mod_ssl インストール。
~]# dnf -y install mod_ssl
秘密鍵と自己署名証明書を作成。(入力したのは3ヶ所、あとはエンター。)
~]# openssl req -x509 -sha512 -nodes -days 3650 -newkey rsa:2048 -keyout private.key -out server.crt
Generating a 2048 bit RSA private key
‥‥‥‥‥
‥‥‥‥‥
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:homeserver
Email Address []:
鍵と証明書を SSL 設定ファイル(/etc/httpd/conf.d/ssl.conf)にデフォルトで書かれているパス,ファイル名で(上書き)保存しちゃう。
~]# mv server.crt /etc/pki/tls/certs/localhost.crt
~]# mv private.key /etc/pki/tls/private/localhost.key
設定反映。
~]# systemctl reload httpd
ポート開放。
~]# firewall-cmd --add-service=https --zone=public --permanent
~]# firewall-cmd --reload
ルータは NURO 光の F660A を使っているのですが、「アプリケーション」-「DNSサービス」で「ドメイン名の設定」と「ホスト名設定」をしてホスト名とドメイン名でアクセスできるようにしました。特に必要ではないのですが、その方が感じなので。ドメイン名は本当はキチンと取得しないといけないのでしょうが、文字数を2文字にして絶対に登録されていないドメイン名を設定しています。(.com, .net などは3文字以上)
最新版
~]# wget https://www.luxsoft.eu/dloader.php?file=luxcal532M.zip -O luxcal.zip
~]# unzip luxcal.zip -d luxcal
~]# rm -f luxcal.zip
~]# cd luxcal
luxcal]# unzip luxcal532M-calendar.zip -d /var/www/luxcal
luxcal]# chmod o+w /var/www/luxcal/
luxcal]# chmod o+w /var/www/luxcal/files/
luxcal]# chmod o+w /var/www/luxcal/logs/
luxcal]# chmod o+w /var/www/luxcal/attachments/
DB 設定
~]# mysql
・・・・・
・・・・・
・・・・・
MariaDB [(none)]> CREATE DATABASE luxcal;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON luxcal.* TO luxcal@localhost IDENTIFIED BY '任意のパスワード';
MariaDB [(none)]> exit
Alias 設定
~]# echo Alias /luxcal /var/www/luxcal > /etc/httpd/conf.d/luxcal.conf
~]# systemctl reload httpd
Webブラウザで https://サーバー名/luxcal/ へアクセスする。
フォームに入力。
MySQL Database
Server、Username、Password、Database name
「Server」はデータベースサーバーの名前であり、たとえば「localhost」のようになります。
「Username」「Password」「Database name」は、サーバー上にデータベースを作成したときに使用された値です。
Administrator
Name、Email、Password
これらの値は、後でカレンダーにログインするために必要になるため、覚えておく必要があります。
「test」でフォームフィールドを検証し、「install/save」をクリック。
1) カレンダーのルートフォルダにある構成ファイル lcconfig.php をバックアップします。
2) カレンダーのルートフォルダからファイル installxxx.php と upgradexxx.php を削除します。
アクセスは、https://サーバー名/luxcal/ 。
カレンダーにログインし、管理メニュー(右上)に移動し、
- [Settings]ページで Timezone を「Asia/Tokyo」に設定するなど、好みの設定に変更する。
- [Users]ページで Public Access を「Read access」→「No access」に変更すれば、ログインしないと閲覧も出来なくなる。
使用言語などを変更した場合は、再ログインしないと反映されない。
復元や他サーバーへの移動のためのデータは、「Menu」-「Database」から「Backup」,「Restore」でできる。
Samba インストール。
~]# dnf install samba samba-client
共有フォルダ作成。
~]# mkdir /home/share
~]# chmod 777 /home/share
設定ファイル編集。
~]# vi /etc/samba/smb.conf
変更と追加。
「workgroup」には、Windows のワークグループ名を指定する。
・・・
・・・
[global]
workgroup = SAMBA
↓↓↓
workgroup = WORKGROUP
map to guest = bad user
unix charset = UTF-8
dos charset = CP932
hosts allow = 192.168.1. 127.
・・・
・・・
[Share]
path = /home/share
writable = yes
guest ok = yes
guest only = yes
create mode = 0777
directory mode = 0777
起動およびファイアウォールで Samba を許可。
~]# systemctl enable --now smb nmb
~]# firewall-cmd --add-service=samba --zone=public --permanent
~]# firewall-cmd --reload
クライアント側の設定。
Windows :
「PC」フォルダで右クリック→「ネットワークの場所を追加する」
Fedora :
「他の場所」-「サーバーアドレスを入力…」に「smb://~」を入力して「接続」をクリック。
・VNC接続をするユーザ:sshuser
SSHポートフォワーディングを利用して接続するので、SSH接続しているユーザと同じにしています。
・ディスプレイ番号:1
・ポート:5901(5900+ディスプレイ番号)/TCP
SSHポートフォワーディングを利用して接続するので、5901のポートを開放する必要はありません。
TigerVNC Server インストール。
~]# dnf install tigervnc-server
ディスプレイ番号とユーザの定義を追記。
~]# vi /etc/tigervnc/vncserver.users
# TigerVNC User assignment
#
# This file assigns users to specific VNC display numbers.
# The syntax is =. E.g.:
#
# :2=andrew
# :3=lisa
:1=sshuser
自動起動設定+起動。
~]# systemctl enable --now vncserver@:1.service
デスクトップ環境のインストール。(Xfce)
~]# dnf --enablerepo=epel,epel-next group install "Xfce" "base-x"
日本語対応。
~]# dnf --enablerepo=epel,epel-next install vlgothic-*
~]# dnf groupinstall "Input Methods"
Chrome をインストール。
google-chrome.repo を作成。
~]# vi /etc/yum.repos.d/google-chrome.repo
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
インストール。
~]# dnf install google-chrome-stable
あと、テキストエディタはあった方が良いかな。
~]# dnf install gedit
sshuser での設定。
VNC用パスワードを設定。入力。
~]$ vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
オプションを設定。(~/.vnc/config ファイルを新規作成)
「localhost」(VNCクライアントが安全なトンネル経由で接続するとき以外は接続できなくなる)と「nolisten=tcp」(VNCサーバーがTCP経由でのX接続を受け付けないようにする)を設定しています。
~]$ vi ~/.vnc/config
session=xfce4
securitytypes=vncauth,tlsvnc
geometry=800x600
localhost
nolisten=tcp
設定反映。
# systemctl daemon-reload
# systemctl restart vncserver@:1.service
ローカルに TigerVNC(vncviewer)をインストール。
$ sudo dnf install tigervnc
SSHポートフォワーディングを利用して接続。
$ ssh -v -C -L 50000:localhost:5901 xxx.xxx.xxx.xxx -l sshuser
50000:任意のローカルホストポート
5901:リモートホストポート
xxx.xxx.xxx.xxx:リモートホスト IP アドレス
上記 SSH 接続を維持したまま、VNC Viewer で接続するので、新たな端末(ターミナル)の画面で VNC Viewer を起動。
$ vncviewer

VNC server 欄に「localhost::50000」と入力。
上記 SSH 接続をした際に決めた任意のローカルホストポートを指定します。(localhost と 50000 の間のコロンは二つです)
そして、「Connect」。

Password 欄に vncpasswd で設定したVNC用パスワードを入力。
そして、「OK」。

「新規セッション(N)」で「続行(C)」としました。
カーソルが見えなかったですが、選択されているかどうかは判別できました。カーソルで探るか、「Tabキー」で移動。
少し待つと以下の画面が現れます。

Chrome を起動すると「新しいキーリングのパスワード指定」が出ますが、空白で続行しました。
次回からは表示されません。


「日本語(Anthy)」追加後、反映に systemctl restart vncserver@:1.service が必要でした 。
また、リモート画面でログアウトすると、次回 vncviewer で接続時に以下エラーが出ます。
これも、systemctl restart vncserver@:1.service が必要でした 。右上の「×」で画面を閉じればエラーは出ません。

利用可能なパッケージのみを表示。
~]# dnf list --available 'python3.[0-9][0-9].x86_64'
必要なバージョンを指定してインストール。
~]# dnf -y install python3.xx
/usr/bin/ にインストールされた Python を確認。
~]# ls -l /usr/bin/ | grep python
alternatives に python を登録。
書式:alternatives --install <link> <name> <path> <priority>
<link>:ユーザーが呼ぶコマンド(固定)
<name>:alternatives のグループ名
<path>:実体(切り替わる部分)
<priority>:優先度
以下例:
~]# alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 1
~]# alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 2
~]# alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 3
~]# alternatives --install /usr/bin/python3 python3 /usr/bin/python3.14 4
使用する Python のバージョンを番号で選んで切り替え。
~]# alternatives --config python3
There are 4 programs which provide 'python'.
Selection Command
-----------------------------------------------
1 /usr/bin/python3.9
2 /usr/bin/python3.11
3 /usr/bin/python3.12
*+ 4 /usr/bin/python3.14
Enter to keep the current selection[+], or type selection number: 2
確認。
~]# python -V
Python 3.11.13
~]# ls -l /usr/bin/ | grep python
lrwxrwxrwx 1 root root 9 3月 11 00:51 python -> ./python3
lrwxrwxrwx 1 root root 25 4月 6 15:27 python3 -> /etc/alternatives/python3
-rwxr-xr-x 1 root root 15448 3月 11 00:19 python3.11
-rwxr-xr-x 1 root root 15448 3月 11 00:59 python3.12
-rwxr-xr-x 1 root root 15448 2月 17 11:14 python3.14
-rwxr-xr-x 1 root root 15440 3月 11 00:50 python3.9
FFmpeg(静的ビルド)ダウンロード、/usr/local/bin/ に設置。
~]# cd /tmp/
tmp]# curl -LO https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tmp]# tar xf ffmpeg-release-amd64-static.tar.xz
tmp]# mv ffmpeg-x.x.x-amd64-static/ffmpeg /usr/local/bin/
tmp]# mv ffmpeg-x.x.x-amd64-static/ffprobe /usr/local/bin/
tmp]# ls -al /usr/local/bin/
tmp]# chmod 755 /usr/local/bin/ffmpeg
tmp]# chmod 755 /usr/local/bin/ffprobe
tmp]# chown root: /usr/local/bin/ffmpeg
tmp]# chown root: /usr/local/bin/ffprobe
tmp]# ffmpeg -version
yt-dlp(静的ビルド)ダウンロード、/usr/local/bin/ に設置。
~]# cd /tmp/
tmp]# curl -LO https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp
tmp]# mv yt-dlp /usr/local/bin/
tmp]# chmod 755 /usr/local/bin/yt-dlp
tmp]# chown root: /usr/local/bin/yt-dlp
tmp]# yt-dlp --version
パスの通っているディレクトリに Deno をインストールする。
~]# curl -fsSL https://deno.land/x/install/install.sh | sudo DENO_INSTALL=/usr/local sh
~]# deno -version
pip で pycryptodomex をインストールする。
~]# dnf install python3-pip
~]# /usr/bin/python3 -m pip install pycryptodomex
但し、alternatives で Python を切り替えていると、pycryptodomex のインストールで「No module named pip」と出る。
dnf install python3-pip は OS 標準 Python に pip を入れるだけなので、alternatives で /usr/bin/python3 を別の Python に切り替えると pip が無くなる。
ensurepip は pip を後付けするための Python 標準ツール。
~]# /usr/bin/python3 -m ensurepip --upgrade
pip が入ったか確認。
~]# /usr/bin/python3 -m pip --version
pycryptodomex をインストール。
~]# /usr/bin/python3 -m pip install pycryptodomex
確認。
~]# /usr/bin/python3 -m pip show pycryptodomex
- guitar site WAVE -