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 サーバー構築(BIND)をしていません。
・「PHP のアップデート」ではなく初めから 8.2 をインストールしています。
・SSL 化は自己署名証明書で行っています。
・メールサーバは建てていません。
Logwatch など root 宛てのメールを転送先アドレスで受け取るために、Postfix で Gmail 経由のメール送信をできるようにしています。受信はなしです。

【VPS ではやっていないけど、ホームサーバではやっていること】
・このページに書いていること。


インストール時のネットワーク設定

IPv4 だけ、こんな感じで。メソッド(M)は「手動」。


ノートPC用設定

サーバ用途で使うノート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

PHP

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

tinytag インストール

MP3 ファイルのメタデータを読み込むために tinytag というライブラリをインストールしています。

~]# dnf install python3-pip

~]# pip3 install tinytag

自己署名証明書で SSL 化

ちょっと意外なところで 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

ルータの DNS サービスの機能

ルータは NURO 光の F660A を使っているのですが、「アプリケーション」-「DNSサービス」で「ドメイン名の設定」と「ホスト名設定」をしてホスト名とドメイン名でアクセスできるようにしました。特に必要ではないのですが、その方が感じなので。ドメイン名は本当はキチンと取得しないといけないのでしょうが、文字数を2文字にして絶対に登録されていないドメイン名を設定しています。(.com, .net などは3文字以上)


LuxCal インストール

最新版

~]# 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 でファイルサーバ

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 が必要でした 。右上の「×」で画面を閉じればエラーは出ません。

The connection was dropped by the server before the session could be established.


- guitar site WAVE -