少しばかり余暇ができたので、買っておいたM.2 MVNe SSDにCentOS Stream 10をインストールすることにしました。
サーバのパフォーマンスが上がることを期待しています。
サーバ構築は何度やってもハマるもので、今回もメモを残しておきます。
自分専用なのであまり当てにならないと思います。
バックアップは、以前と同様です。
自宅サーバのスペックは以下の通りです。
| CPU | Intel(R) N100 |
|---|---|
| メモリ | 16GB (DDR4 3200MHz) |
| HDD/SSD | SSD : WD BLACK M.2 SSD 2TB NVMe SSD : Samsung 870 QVO 1TB SATA HDD : TOSHIBA MG06ACA800E 8TB SATA 7200RPM |
| LAN | オンボード : Realtek RTL8111H 1000BASE-T 拡張カード : Intel 82599EN 10GbE SFP+ |
インストールメディア作成
以下のURLから CentOS-Stream-10-latest-x86_64-dvd1.iso をダウンロードして、rufusでUSBメモリに書き込みます。
https://www.centos.org/download/
CentOS Stream 10 インストール
USBブートをさせ、Install CentOS Stream 10を選択。
CENTOS Stream 10 へようこそ。で日本語を選択。
時刻と日付で、日本を選択。
ソフトウェアの選択で、最小限のインストールを選択。
インストール先で、標準パーティションを選択し、以下のように指定。
| マウントポイント | 容量 |
|---|---|
| /boot/efi | 2GiB |
| /boot | 10GiB |
| / | 519.82GiB(残り全て) |
| /home | 1.3TiB |
※SSDの書き込み量を減らすため、SWAPパーティションは作成しません。
KDUMPで、KDUMPを無効にする。
ネットワークとホスト名で、IPアドレス等を指定。
rootパスワードで、rootパスワードを入力し、パスワードによるroot SSHログインを許可にチェックを入れる。
ユーザーの作成で、一般ユーザーを作成する。
あとはインストールを開始し、終わるのを待つ。
CentOS Stream 10 構築
インストールが完了し、起動したら以降を実施していく。
ネットワーク設定
インストール時にネットワーク設定をしても、別のインターフェース名が作成されてしまうため、それを削除し、正しいインターフェースに再度設定を行う
# nmtui
シェルのコピペの挙動を変更
従来通りにTeratermでコピペができない問題の対処。追加したらSSHを繋ぎなおす。
# vi /etc/inputrc 以下を末尾に追加。 set enable-bracketed-paste off
SELinux無効化
# grubby --update-kernel ALL --args 'selinux=0' # reboot
電源ボタン無効化
子供のいたずら防止です。
以下を入れても効いていない。
# vi
#HandlePowerKey=poweroff
↓
HandlePowerKey=ignore
# systemctl restart systemd-logind
firewalld無効化
nftablesを使用するので、無効化します。
# systemctl stop firewalld # systemctl disable firewalld
SSD/HDDマウント
Samba用のHDDを/dataにマウントしますが、
対象のHDDのパーティションが5つに分かれているので、統合します。(CentOS 8が入っていたため)
# parted /dev/sdb (parted) print (parted) rm 1 (parted) rm 2 (parted) rm 3 (parted) rm 4 (parted) rm 5 (parted) mkpart パーティションの名前? []? ファイルシステムの種類? [ext2]? xfs 開始? 0% 終了? 100% (parted) q # mkfs.xfs /dev/sdb1 -f
# blkid (対象のUUIDを控える) # mkdir /date # vi /etc/fstab (Sambaの領域を指定) UUID=******-****** /data xfs defaults 0 0
あと、旧OSであるCentOS Stream 9の / もマウントしておくとバックアップ忘れがあった際に、ファイルのコピーができて便利です。
# mkdir /old # vi /etc/fstab UUID=******-****** /old xfs defaults 0 0
リポジトリ追加
CentOS Stream 8までのPowerToolsが、crbに名前が変わったいます。
# dnf install epel-release # dnf config-manager --set-enabled crb
シリアルコンソール有効化
# vi /etc/default/grub GRUB_CMDLINE_LINUX="" ↓ GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200" 以下を追加。 GRUB_TERMINAL="serial" GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1" # grub2-mkconfig -o /boot/grub2/grub.cfg # grubby --update-kernel=ALL --args="console=tty0 console=ttyS0,115200" # reboot
rsyslog
自分用のカスタマイズですが、このような設定をしています。
# vi /etc/rsyslog.conf
以下を#### RULES ####の直後に追加
:programname, isequal, "bluetoothd" stop
:programname, isequal, "2chproxy.pl" /var/log/2chproxy.log
& stop
:programname, isequal,"ipsec" stop
:programname, isequal, "charon" /var/log/ipsec.log
& stop
:msg, contains, "nft drop" /var/log/nftables.log
& stop
:fromhost-ip, isequal, "192.168.0.254" /var/log/ix.log
& stop
# systemctl restart rsyslog
Tiny Tiny RSS
dockerインストール
# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # dnf install docker-ce docker-ce-cli containerd.io git # systemctl start docker # systemctl enable docker # curl -L "https://github.com/docker/compose/releases/download/v2.40.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # chmod +x /usr/local/bin/docker-compose
Tiny Tiny RSSインストール
最新をインストールしてもbackupが起動せず、データベースがリストアができなかったため、バックアップしておいたdocker-compose.yml で旧版を起動させ、リストアした。
リストア
バックアップしていたデータベースのリストアは、以下の通り実施します。
以下にバックアップしておいたファイルを転送する。
# ls /var/lib/docker/volumes/ttrss-docker_backups/_data/ ttrss-backup-20251030.sql.gz ttrss-backup-20251030.tar.gz
コンテナ内からリストアする。
# docker-compose exec backups /bin/sh / # ls -t /backups/*.sql.gz /backups/ttrss-backup-20251030.sql.gz / # psql -h db -U $TTRSS_DB_USER $TTRSS_DB_NAME -e -c "drop schema public cascade; create schema public" Password for user postgres: password / # zcat /backups/ttrss-backup-20230908.sql.gz | psql -h db -U $TTRSS_DB_USER $TTRSS_DB_NAME Password for user postgres: password
PHP 8.3
標準のPHP8.3を使用します。
# dnf install php php-bcmath php-cli php-common php-devel php-fpm php-gd php-gmp php-intl php-ldap php-mbstring php-mysqlnd php-opcache php-pdo php-pecl-apcu php-pecl-zip php-process php-xml # systemctl start php-fpm # systemctl enable php-fpm
.conf関連は必要に応じて設定する。
Zabbix 7.0 LTS
Zabbix インストール
# rpm -Uvh https://repo.zabbix.com/zabbix/7.0/centos/10/x86_64/zabbix-release-latest-7.0.el10.noarch.rpm # dnf clean all # vi /etc/yum.repos.d/epel.repo (以下を追加) excludepkgs=zabbix* # dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent zabbix-web-japanese
MySQL インストール
# dnf install mysql8.4-server # vi /etc/my.cnf.d/mysql-server.cnf (以下を追加) character-set-server = utf8 innodb_buffer_pool_size=3G innodb_io_capacity=100 innodb_log_file_size=384M innodb_file_per_table=1 join_buffer_size=256K
rootのパスワードは入力し、他は空エンター。
# systemctl start mysqld # systemctl enable mysqld # mysql_secure_installation
リストア
# mysql -uroot -p Enter password: mysql> create database zabbix character set utf8 collate utf8_bin; mysql> create user zabbix@localhost identified by 'password'; mysql> grant all privileges on zabbix.* to zabbix@localhost; mysql> set global log_bin_trust_function_creators = 1; mysql> quit; # mysql -u root -p zabbix < zabbix.dump Enter password:
起動
# ln -s /usr/share/zabbix/ /var/www/html/zabbix # chmod 777 /etc/zabbix/web/ # systemctl start zabbix-agent zabbix-server # systemctl enable zabbix-agent zabbix-server
その他
監視に使っている物をインストール。
dnf install python3-pip lm_sensors hddtemp glib2-devel jq openssl # pip3 install -U setuptools wheel # pip3 install bluepy # sensors-detect --auto
NextCloud
# dnf install wget unzip # wget https://download.nextcloud.com/server/releases/latest.zip # unzip nextcloud-*.zip # cp -R nextcloud/ /var/www/html/ # chown -R nginx:nginx /home/nextcloud/ # chown -R nginx:nginx /var/www/html/nextcloud/ # mysql -u root -p Enter password: mysql> CREATE DATABASE nextcloud CHARACTER SET utf8mb4; mysql> quit; # mysql -u root -p nextcloud < nextcloud.dump Enter password:
バックアップしておいたデータディレクトリをリストアする。(.ncdataファイル等も必須。アプリディレクトリが無いとInternal Serverが出るため注意)
以下のファイルをリストアし、適宜修正する。
/var/www/html/nextcloud/config/config.php
nginxの設定を公式を見て修正する。
{}、""、の数、;の後にスペースが入らないよう気を付ける。(ドはまりしました)
# vi /etc/nginx/nginx.conf # systemctl restart nginx
valkey、APCu、imagick、Argon2をインストールします。
# yum install valkey php-redis php-pecl-apcu php-pear ImageMagick ImageMagick-devel php-sodium libargon2 libargon2-devel # systemctl start valkey # systemctl enable valkey # pecl install imagick # echo "extension=imagick.so" > /etc/php.d/20-imagick.ini # systemctl restart php-fpm
Samba
Sambaの4.23はインストールしてもタイムアウトで起動できなかったため、4.22の最新をインストールしました。
# dnf install docbook-style-xsl gcc gdb gnutls-devel gpgme-devel jansson-devel \
keyutils-libs-devel krb5-workstation libacl-devel libaio-devel \
libarchive-devel libattr-devel libblkid-devel libtasn1 libtasn1-tools \
libxml2-devel libxslt lmdb-devel openldap-devel pam-devel perl \
perl-ExtUtils-MakeMaker perl-Parse-Yapp popt-devel python3-cryptography \
python3-dns python3-gpg readline-devel rpcgen systemd-devel \
tar zlib-devel python3-devel flex bison dbus-devel python3-markdown
# wget https://download.samba.org/pub/samba/stable/samba-4.22.6.tar.gz
# tar xf samba-4.22.6.tar.gz
# cd samba-4.22.6
# ./configure
# make -j 2
# make install
バックアップしておいたファイルを格納する。
/usr/local/samba/etc/smb.conf
/usr/local/samba/private/passdb.tdb
/usr/local/samba/private/secrets.tdb
/etc/systemd/system/nmb.service
/etc/systemd/system/smb.service
# systemctl start smb nmb # systemctl enable smb nmb
nftables
/etc/nftables/main.nftを使用します。
# vi /etc/sysconfig/nftables.conf #include "/etc/nftables/main.nft" ↓ include "/etc/nftables/main.nft"
日本のグローバルIPのテーブルを作成するスクリプトです。
# vi nft_AcceptCountry.sh
#!/bin/sh
# IPアドレスリスト作成
IP_LIST=/tmp/cidr.txt
if [ ! -f $IP_LIST ]; then
wget -q http://nami.jp/ipv4bycc/cidr.txt.gz
gunzip -c cidr.txt.gz > $IP_LIST
rm -f cidr.txt.gz
fi
# 既存Accept_Countryをflush
nft flush set inet nftables_svc Accept_Country
# 新規Accept_Countryを作成
nft add set inet nftables_svc Accept_Country { type ipv4_addr \; flags interval \; }
# /tmp/cidr.txtのJPのアドレスをAccept_Countryに追加
for addr in `cat /tmp/cidr.txt|grep ^JP | awk '{print $2}'`
do
nft add element inet nftables_svc Accept_Country { $addr }
done
enp1s0が使用しているインターフェースです。
# systemctl start nftables
# sh nft_AcceptCountry.sh
# nft add chain inet nftables_svc INPUT { type filter hook input priority filter \; policy drop \; }
# nft add rule inet nftables_svc INPUT type filter hook input priority filter; policy drop;
# nft add rule inet nftables_svc INPUT iifname { "lo", "enp1s0" } accept
# nft add rule inet nftables_svc INPUT ip saddr 192.168.0.0/24 accept
# nft add rule inet nftables_svc INPUT ct state established,related accept
# nft add rule inet nftables_svc INPUT ip saddr @Accept_Country udp dport { 500, 4500 } accept
# nft add rule inet nftables_svc INPUT ip saddr @Accept_Country tcp dport 443 accept
# nft add rule inet nftables_svc INPUT ip saddr @Accept_Country ip protocol esp accept
# nft add rule inet nftables_svc INPUT iifname "enp2s0" counter log prefix \"[nft drop] : \"
# nft add chain inet nftables_svc prerouting { type filter hook prerouting priority 0 \; }
# nft add rule inet nftables_svc prerouting ip saddr 192.168.255.0/24 tcp flags syn tcp option maxseg size set 1334
# nft add chain inet nftables_svc postrouting { type filter hook postrouting priority 0 \; }
# nft add rule inet nftables_svc postrouting ip daddr 192.168.255.0/24 tcp flags syn tcp option maxseg size set 1334
# nft list ruleset > /etc/nftables/main.nft
# systemctl enable nftables
ルールの詳細はこちら。
2chproxy + p2-php(rep2)
以下にバックアップしたディレクトリを格納する。
/usr/local/2chproxy.pl/
/var/www/html/p2-php/
# dnf install perl-HTTP-Daemon perl-libwww-perl perl-YAML-Tiny # vi /etc/systemd/system/2chproxy.service [Unit] Description = 2ch proxy daemon Wants=network-online.target After=network-online.target [Service] ExecStart = /usr/local/2chproxy.pl/2chproxy.pl --config /usr/local/2chproxy.pl/config.yml Restart = always Type = simple [Install] WantedBy = multi-user.target
# systemctl start 2chproxy # systemctl enable 2chproxy # chown nginx:nginx -R /var/www/html/p2-php/
strongSwan
最新の6.0.3を最初にインストールしましたが、起動できなかったため、5.9.14を使用しました。
# dnf install bzip2 # wget https://download.strongswan.org/strongswan-5.9.14.tar.bz2 # cd strongswan-5.9.14 # ./configure --prefix=/usr --sysconfdir=/etc --enable-eap-mschapv2 --enable-openssl --enable-eap-identity --enable-aesni # make # make install # cp init/systemd-starter/strongswan-starter.service /etc/systemd/system/
バックアップしておいたファイルを格納する。
/etc/ipsec.conf
/etc/ipsec.secrets
/etc/ipsec.d/
/etc/strongswan.conf
/etc/strongswan.d/
# systemctl start strongswan-starter # systemctl enable strongswan-starter
その他必要になるコマンド類
個人的に使用する物をインストールします。
dig nslookup lsusb patch telnet
# dnf install bind-utils usbutils patch telnet
最後に
CentOS Stream 9 と 10では、ほとんど違いがないようですが、マイナーな機能を使おうとすると、ハマる感じでしょうか。
アプリケーションの方は、メジャー、マイナーバージョンが変わってくると、ハマります。特にデータベースを使用するアプリケーションは、OSを変える前にアプリケーションのバージョンを上げてから、データベースのバックアップをして、新しいOSでリストアした方が、ハマる時間が少なかったと思います。

