KUSONEKOの見る世界

CentOS Stream 9 構築メモ

CentOS Stream 9 インストール

バックアップが完了したので、SSDの方にCentOS Stream 9をインストールしていきます。

自宅サーバのスペックは以下の通りです。

CPU Intel(R) Celeron(R) CPU N3150
メモリ 8GB (DDR3 4GB x2)
HDD/SSD SSD : Samsung 870 QVO 1TB SATA
HDD : TOSHIBA MG06ACA800E 8TB SATA 7200RPM
LAN オンボード : Realtek RTL8111H 1000BASE-T
拡張カード : Realtek RTL8125B 2.5GBASE-T
Bluetooth USBドングル LBT-UAN05C2/N

インストールメディア作成

以下のURLから CentOS-Stream-9-latest-x86_64-dvd1.iso をダウンロードして、rufusでUSBメモリに書き込みます。
https://www.centos.org/download/

CentOS Stream 9 インストール

USBブートをさせ、Install CentOS Stream 9を選択。

CENTOS Stream 9 へようこそ。で日本語を選択。

時刻と日付で、日本を選択。

ソフトウェアの選択で、Minimal Installを選択。

インストール先で、標準パーティションを選択し、以下のように指定。

マウントポイント 容量
/boot/efi 2GiB
/boot 10GiB
/ 419.51GiB(残り全て)
/home 500GiB

※SSDの書き込み量を減らすため、SWAPパーティションは作成しません。

KDUMPで、KDUMPを無効にする。

ネットワークとホスト名で、IPアドレス等を指定。

rootパスワードで、rootパスワードを入力し、パスワードによるroot SSHログインを許可にチェックを入れる。

ユーザーの作成で、一般ユーザーを作成する。

あとはインストールを開始し、終わるのを待つ。

CentOS Stream 9 構築

インストールが完了し、起動したら以降を実施していく。

シェルのコピペの挙動を変更

従来通りにTeratermでコピペができない問題の対処。追加したらSSHを繋ぎなおす。

# vi /etc/inputrc
以下を末尾に追加。
set enable-bracketed-paste off

SELinux無効化

# grubby --update-kernel ALL --args 'selinux=0'
# reboot

電源ボタン無効化

これは子供のいたずら防止です。
ボタンを押すのが好きで、よく落とされるので…。

# vi /etc/systemd/logind.conf
#HandlePowerKey=poweroff
↓
HandlePowerKey=ignore
# systemctl restart systemd-logind

firewalld無効化

nftablesを使用するので、無効化します。

# systemctl stop firewalld
# systemctl disable firewalld

HDDマウント

Samba用のHDDを/dataにマウントします。
当初HDD全域をSamba用にしようかと考えていましたが、SSD故障の際にHDDで起動できるようにするために、CentOS Stream 8が入った領域を残すことにしました。

# blkid
(対象のUUIDを控える)
# vi /etc/fstab
(Sambaの領域を指定)
UUID=******-****** /data                  xfs     defaults        0 0

最初UUIDではなく、/dev/sdb5 とかで指定していましたが、再起動後にsdaとsdbが入れ替わることがあり、マウントに失敗し、emergency modeに入ってしまいました。
そうならないようにUUIDで指定します。

あと、旧OSであるCentOS Stream 8の / もマウントしておくとバックアップ忘れがあった際に、ファイルのコピーができて便利でした。

# vi /etc/fstab
UUID=******-****** /old                  xfs     defaults        0 0

リポジトリ追加

CentOS Stream 8までのPowerToolsが、crbに名前が変わったようです。

# dnf install epel-release epel-next-release
# dnf config-manager --set-enabled  crb

PHPのためにremiを追加します。

# dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

シリアルコンソール有効化

# 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
# 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 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.21.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose

Tiny Tiny RSSインストール

その後の作業はこちらの記事の通りです。

リストア

バックアップしていたデータベースのリストアは、以下の通り実施します。

以下にバックアップしておいたファイルを転送する。

# ls /var/lib/docker/volumes/ttrss-docker_backups/_data/
ttrss-backup-20230908.sql.gz  ttrss-backup-20230908.tar.gz

コンテナ内からリストアする。

# docker-compose exec backups /bin/sh
/ # ls -t /backups/*.sql.gz
/backups/ttrss-backup-20230908.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: 
/ # zcat /backups/ttrss-backup-20230908.sql.gz | psql -h db -U $TTRSS_DB_USER $TTRSS_DB_NAME
Password for user postgres: 

PHP 8.1

NextCloud関係で、パッケージを要求されるので、remiのPHP8.1を使用します。

# dnf module reset php
# dnf module enable php:remi-8.1
(略)
これでよろしいですか? [y/N]: y
# 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 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 6.0 LTS

Zabbix インストール

# rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-6.0-4.el9.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 mysql-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 bluez python3-pip lm_sensors hddtemp glib2-devel jq
# pip3 install -U setuptools wheel
# pip3 install bluepy
# sensors-detect --auto

NextCloud

# dnf install wget
# wget https://download.nextcloud.com/server/releases/nextcloud-27.0.0.zip
# unzip nextcloud-*.zip
# cp -R nextcloud/ /var/www/html/
# chown -R nginx. /home/nextcloud/
# chown -R 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: 

以下のファイルをリストアし、適宜修正する。
/var/www/html/nextcloud/config/config.php

nginxの設定を公式を見て修正する。
{}、""、の数、;の後にスペースが入らないよう気を付ける。(ドはまりしました)

# vi /etc/nginx/nginx.conf
# systemctl restart nginx

redisとimagickをインストールします。

# yum install php-redis php-pear ImageMagick ImageMagick-devel php-pear
# pecl install imagick
# echo "extension=imagick.so" > /etc/php.d/20-imagick.ini
# systecmctl restart php-fpm
# vi /var/www/html/nextcloud/config/config.php
(以下を追加)
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' =>
  array (
    'host' => 'localhost',
    'port' => 6379,
  ),

Samba

# 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-gpgyum 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.19.0.tar.gz
# tar xf samba-4.19.0.tar.gz
# cd samba-4.19.0
# ./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"

デフォルトのテーブル名もnftables_svcに変わっているため、各種それに合わせました。

# 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はLAN側、enp2s0はWAN側という使い方をしています。

# 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. -R /var/www/html/p2-php/

strongSwan

# dnf install bzip2
# wget https://download.strongswan.org/strongswan-5.9.11.tar.bz2
# cd strongswan-5.9.11
# ./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 8の構築のログを残していたので、ある程度スムーズに構築ができました。

使用感ですが、CentOS Stream 9 を使っていても、CentOS Stream 8 と特に変わった感じがありません。
私の使い方では、OSはあまり関係無いようです。