このエントリーをはてなブックマークに追加

CentOS8.2のインストール

CentOS8の入手

まずはCentOSの公式サイトに行きます。
https://www.centos.org/

Get CentOS Nowをクリックします。


CentOS Linux DVD ISOをクリックします。


どれでもいいのでなるべく重くなさそうなミラーサイトをクリックします。真ん中へんのミラーサイトが狙い目です。(根拠なし)

2時間ほど待ちます。

ダウンロードが終了したら、isoファイルを DVD Decrypterや AnyDVDや NeroやImgBurn等を使って焼きます。このCentOS8からはなんと7Gもあるので、2層のメディア(DVD-R DL)に焼きます。

CentOS8のインストール

焼いたDVDをサーバー機にセットして電源を入れます。当然ですが、あらかじめBIOSでDVDドライブのブートの優先順位をハードディスクより上げておきます。そこからして既にわからない人は読者として想定していません。(って、漢文かよ)

デルのサーバーの場合、大抵は起動時にF11を押すと、BIOSの設定を変更することなく、一時的にブートするデバイスを選択できるので便利です。

DVDから起動すると、次のような画面が出ます。Install CentOS Linux8を選択してEnterを押します。

ここで、もし間違ってTest this media ・・・ を選択してしまった場合は、リセットしてやり直します。でないと、死ぬほど待たされます。そもそもエラーが出たら焼き直せば済む話なんだから、テストなんか必要あるのかと。

どうでもいいけど、この最初の画面、その時その時で640x480で出たり高解像度で出たりする。変なのー。

言語は日本語にします。

ただし、データーセンターに設置する場合は、全角表示のできないようなろくなディスプレイしか借りられない場合もあるので、その場合は英語にしておきます。

タイムゾーンはTOKYOにすると内蔵時計を9時間戻されてしまうので、デフォルトのままにします。


パーティションは、
/boot ・・・ext4 1G
SWAP・・・ 1G
/ ・・・ XFS 残り全部
にします。

お使いのサーバーがUEFI BIOS搭載であれば、起動パーティションは/bootではなく/boot/efiとして、ファイルシステムはefi system partitionにすると良いでしょう。これでBIOSの起動ディスクの設定が不要になります。この場合、/boot/efiは第一パーティションにする(sd?1にする)必要があります。

SWAPは従来は慣習的に「実メモリの2倍」にしていたのですが、それは実メモリが256MBとか512MBの頃であって、今のサーバーでは4G~8Gぐらい平気で搭載されているので、ぶっちゃけスワップなんか必要ありません。しかし、全く作らないと誤動作するかもしれないので、いちお1Gだけ取っておきます。

CentOS7では、GUIでインストールするとなぜか途中でブートしなくなってしまったので泣く泣く最小インストールにしたのですが、今回もサーバーなので最小インストールにしておき、必要なものは都度手動でrpmで入れる事にします。

ベース環境をサーバー(GUI使用)にすると、なぜかUEFI BIOSにefiパーティションとして認識してもらえず、UEFI BIOSのブート優先順位も自動的に変更してもらえないので(なぜ??)、インストール終了後の起動時にDELキーを押して手動で/boot/efiパーティションのあるディスクを優先順位1位にします。

また、ベース環境をサーバー(GUI使用)にすると、なぜかwgetした時に「~の証明書は信用されません」と言って--no-check-certificateをつけないとダウンロードできなくなります。(なぜ?)

どうも「ベース環境 サーバー(GUI使用)」にすると色々バグるようです。なので、ここでは「最小限のインストール」にしておきましょう。

インストール中にルートパスワードとログイン用ユーザーを作っておきます。

作業中から乱数の長いパスワードを入れる人がいますが、作業中は何回かリブートしないといけないので、作業中は123456みたいな簡単なパスワードにしておき、グローバルIPに接続する直前に複雑なものに変更するようにします。

CentOS8では、インストールが終わっても画面にほとんど動きがないので、ボケっとしているといつの間にか終わってて、気づかずに延々と待ってしまう場合があるので、注意が必要です。


たまに「インストールソースからのトランザクションを準備中」で止まってしまう場合があります。もし10分以上「インストールソースからのトランザクションを準備中」から先に進まない時は、インストーラーが途中でバグってるので、途中でリセットボタンを押して最初からやり直します。

お使いのサーバー機のBIOSがUEFI BIOSで、/boot/efiパーティションをefi system partitionにしていれば、インストーラーが最優先でブートするパーティションをefi system partitionに変更してくれますが、UEFI BIOS搭載でないマザーボードだったり、ベース環境を「サーバー(GUI使用)」にした場合は自動で変更されないので、再起動する時に[DEL]や[F2]を押して手動でブートの優先順位を/boot/efiパーティションのあるハードディスクに変更します。

なんか、インストールが終わったらブートの優先順位を/boot/efiパーティションの入ったハードディスクにする事を記載してないサイトをみつけては、鬼の首を取ったように「手順通りにやってみましたが、インストール画面が再び表示されるんですけど、どうしたら良いんでしょう?」って聞いて回ってる人がいるみたいですが、大抵のサイトはブートデバイスの優先順位を変更する事ぐらいは言うまでもない事なので省略してるだけだと思います。

リブートしたらrootでログインします。

もしインストール時にLANカードを有効にしなかった場合は
/etc/sysconfig/network-script/ifcfg-xxxxx
にある
ONBOOT=no

ONBOOT=yes
にします。

インストールの途中でLANケーブルとさして、LANカードをオンにすると、なぜか「「予期しないエラーが発生しました」とか言って強制リブートさせられてしまうので、LANケーブルは最初から入れておく方が良いでしょう。っていうか、どうもこのインストーラー、イマイチデバッグ不足な気がします。

サーバー機で操作

・ソフトRAIDの定期チェックをやめる
デフォルトの状態では、日曜の01:00にソフトRAIDのチェックがかかります。しかし、このチェックがかかっている間はサーバーが激重になるので、定期チェックを止めます。
vi /etc/sysconfig/raid-check

ENABLED=no

・SELinuxをオフにする
どうやって設定するのかわからないし、いくら検索しても私のスキルでも理解できる説明をしてくれているサイトがないので、オフにします。セキュリティはもっぱらfirewalldに頼る事にします。
vi /etc/sysconfig/selinux

SELINUX=disabled

このままだと再起動するまでSELinuxが動いてるので、今すぐ停止させたい時は
setenforce 0
とします。

sshで接続する

sshdを起動します。
systemctl start sshd

これでsshで接続できるはずなのですが、Poderosa4.1では

というエラーが出て接続できません。

一部設定を書き換えます。
vi /etc/ssh/sshd_config

KexAlgorithms +diffie-hellman-group1-sha1
を最後に追記

systemctrl restart sshd
ところがやっぱり同じエラーが出ます。しかし、よく見ると/etc/ssh/sshd_configにこんな事が書いてあります。

#システム全体の暗号化ポリシー
#このシステムはシステム全体の暗号化ポリシーに従っている
#Ciphers, MACs, KexAlgorithms GSSAPIKexArgorithms をここに記載しても
#何ら効果もない。サーバー起動時にコマンドラインオプションで上書きされて
#しまうだろう。
#そこから脱退するためには、/etc/sysconfig/sshdにあるCRYPTO_POLICY=
#のコメントを外して、ポリシーを上書きしなければならない
#この情報は詳しくはマニュアルの update-crypto-policies(8)を見よ

書いてあるとおりにやってみます。
vi /etc/sysconfig/sshd

#システム全体の暗号化ポリシー
#から脱退するために以下のコメントを外すべし
CRYPTO_POLICY=
↑コメントアウトを外す

systemctl restart sshd
すると今度は、「the negotiation of encryption algorithm is failed」というエラーになります。

しょうがないので、Poderosaのバージョンを変えてみます。
Poderosa 4.1.0 -> the negotiation of encryption algorithm is failed
Poderosa 4.4.5 -> 接続可
Poderosa 5.4.2 -> インデックスが配列の境界外です

なので、まっとうに接続できるPoderosaは4.4.5だけでした。

RLoginというターミナルソフトを使えば問題なく接続できるようなので、以下はWindows端末からRLoginを使って操作する事にします。

不要な常駐ソフトを止める

ここからはWindows端末からRLoginで操作します。

常駐ソフト、とりわけルート権限で動作している常駐ソフトは、そのいずれかに脆弱性が発見されると、途端にルート権限を乗っ取られてしまいます。なので、できる限り常駐ソフトは少なくしなければなりません。

ls -1 /etc/systemd/system/multi-user.target.wants/
で不要な常駐ソフトをチェックした後、
systemctl disable auditd.service
systemctl disable dnf-makecache.timer
systemctl disable irqbalance.service
systemctl disable kdump.service
systemctl disable mdmonitor.service
systemctl disable remote-fs.target
systemctl disable sssd.service
systemctl disable tuned.service
で不要な常駐ソフトを起動しないようにしておき、
reboot
でリブートします。

今回は最小インストールにしたので、そんなに不要な常駐ソフトはありませんでした。

firewalldの設定

▽ここを参考にしました。ありがとうございました。
https://www.server-memo.net/centos-settings/firewalld/firewalld.html
https://eng-entrance.com/linux-centos-firewall
http://www.atmarkit.co.jp/ait/articles/1602/18/news019_4.html
http://hylom.net/firewalld-change-interface-permanent-can-not-affect-on-centos-7

・NICの名前の確認
ls /etc/sysconfig/network-scripts/
ifcfg-enp4s0
ここからifcfg-を除いた部分がNICの名前です。ここではNICの名前は「enp4s0」です。NICの名前はお使いの環境によって異なりますので、以後NICの名前は読み替えてください。丸コピペして「動かないぞゴルァ」って文句を言ってくるのはナシでお願いします。

・NICをpublicゾーンにする
nmcli connection modify enp4s0 connection.zone public

・うまくいったかどうか確認
firewall-cmd --get-active-zones

firewall-cmd --get-active-zones
public
  interfaces: enp4s0

・http、https、telnet、FTP、sendmail、pop3を許可
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=https --permanent
firewall-cmd --zone=public --add-service=telnet --permanent
firewall-cmd --zone=public --add-service=ftp --permanent
firewall-cmd --zone=public --add-service=smtp --permanent
firewall-cmd --zone=public --add-service=smtps --permanent
firewall-cmd --zone=public --add-service=pop3 --permanent
firewall-cmd --zone=public --add-service=dns --permanent
firewall-cmd --zone=public --add-service=ntp --permanent

dhcpv6を削除
firewall-cmd --zone=public --remove-service=dhcpv6-client --permanent

・cokpitポート封鎖
このサーバーはコバルキューブではないし、私のようなCUI派はcockpitは使わないので封鎖します。
firewall-cmd --zone=public --remove-service=cockpit --permanent

・サブミッションポートを有効にする
vi /usr/lib/firewalld/services/submission.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
 <short>submission</short>
 <description>mail transfer service</description>
 <port protocol="tcp" port="587"/>
</service>

firewall-cmd --zone=public --add-service=submission --permanent
ここで、
Error: INVALID_SERVICE: 'submission' not among existing services
と出てしまう場合は、10秒待ってから再度
firewall-cmd --zone=public --add-service=submission --permanent

・設定を有効にする
firewall-cmd --reload

・有効になったかどうか確認
firewall-cmd --list-all

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp4s0
  sources: 
  services: ssh http https telnet ftp smtp smtps pop3 dns ntp submission
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

・telnet,ftp,ssh,submissionを内部LAN(192.168.0.xx)からのみにする場合
・telnet,ftp,ssh,submission全許可のルールを廃止
firewall-cmd --zone=public --remove-service=ssh --permanent
firewall-cmd --zone=public --remove-service=telnet --permanent
firewall-cmd --zone=public --remove-service=ftp --permanent
firewall-cmd --zone=public --remove-service=submission --permanent

・リッチルールを追加
▽ここを参考にしました。ありがとうございました。
https://rin-ka.net/rich-rules/
https://dan-project.blog.so-net.ne.jp/2015-09-13-1

firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=192.168.0.0/24 service name=telnet accept"
firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=192.168.0.0/24 service name=ssh accept"
firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=192.168.0.0/24 service name=ftp accept"
firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=192.168.0.0/24 service name=submission accept"

ここではローカルIPのみ接続を許可していますが、データーセンターに設置する場合は、これに加えて会社のIPからの接続も許可しておきましょう。え?自社が固定IPじゃない??そ、それは・・・。

・うまくいったか確認
firewall-cmd --list-all --zone=public --permanent

public
  target: default
  icmp-block-inversion: no
  interfaces: enp4s0
  sources: 
  services: http https smtp pop3 dns ntp smtps
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
    rule family="ipv4" source address="192.168.0.0/24" service name="telnet" accept
    rule family="ipv4" source address="192.168.0.0/24" service name="ssh" accept
    rule family="ipv4" source address="192.168.0.0/24" service name="ftp" accept
    rule family="ipv4" source address="192.168.0.0/24" service name="submission" accept

全部終わったらリロード。
firewall-cmd --reload

設定のリロードは、設定が全て終わった後にやりましょう。じゃないと、telnetやsshのルールを削除した後に設定のリロードをすると現在の接続が切れてしまいます。最悪の場合、データーセンターに行かないといけなくなります。

ファイアウォールの設定は、できればデーターセンターに設置する前に行いたいのですが、どうしても遠隔で操作しなければならない場合は、まず5分おきにcrontabで
systemctl stop firewalld
が実行されるように設定しておきます。うまくいったらcrontabの該当箇所をコメントアウトします。

NetworkManagerの設定

・NetworkManagerを起動する
systemctl start NetworkManager.service
systemctl enable NetworkManager.service

・現在のホスト名の確認
nmcli general hostname

・ホスト名の変更
nmcli general hostname aufheben14.aufheben.info
注意:これはあくまで例です。これを丸コピペして本当に「aufheben14.aufheben.info」にしないように。

・IPv4関係の設定の変更
ここからは、IPアドレスやネットマスク、デフォルトゲートウェイ等のIPv4に関する設定を変更します。これらの設定はコマンドを入力した時点で即有効になるわけではなく、最後にupコマンド(後述)を発動させた時点で有効になります。

▽ここを参考にしました。ありがとうございました。
https://qiita.com/taro0219/items/8d3be39c5cb882d1ba5d
https://milestone-of-se.nesuke.com/sv-basic/linux-basic/nmcli/
http://www.atmarkit.co.jp/ait/articles/1502/11/news001.html
http://te2u.hatenablog.jp/entry/2015/07/10/014214
https://go-journey.club/archives/4124
https://milestone-of-se.nesuke.com/sv-basic/linux-basic/nmcli/

・ipv4関係の設定の確認
nmcli --fields ipv4 connection show enp4s0

ipv4.method:                            manual
ipv4.dns:                               192.168.0.4
ipv4.dns-search:                        aufheben.info
ipv4.dns-options:                       ""
ipv4.dns-priority:                      0
ipv4.addresses:                         192.168.0.40/24
ipv4.gateway:                           192.168.0.2
ipv4.routes:                            --
ipv4.route-metric:                      -1
ipv4.route-table:                       0 (unspec)
ipv4.ignore-auto-routes:                いいえ
ipv4.ignore-auto-dns:                   いいえ
ipv4.dhcp-client-id:                    --
ipv4.dhcp-timeout:                      0 (default)
ipv4.dhcp-send-hostname:                はい
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.never-default:                     いいえ
ipv4.may-fail:                          はい
ipv4.dad-timeout:                       -1 (default)

これらの設定を変更する場合、
nmcli connection modify enp3s0 ipv4.項目名 値
として変更します。

・IPを固定にする
nmcli connection modify enp4s0 ipv4.method manual
ここで、第5引数はstatic、dynamicではなく、manual、autoなので注意。

・IPアドレス、サブネットマスクを変更
たとえば、192.168.0.13/255.255.255.0に変更する場合、
nmcli connection modify enp4s0 ipv4.addresses 192.168.0.13/24
とします。ここで、サブネットマスクは255.255.255.0ではなく24と指定します。

・デフォルトゲートウェイを変更
例えば、192.168.0.1に変更する場合、
nmcli connection modify enp4s0 ipv4.gateway 192.168.0.1

・DNSを変更する
例えば、192.168.0.254に変更する場合、
nmcli connection modify enp4s0 ipv4.dns 192.168.0.254
DNSが複数ある場合は、
nmcli connection modify enp4s0 ipv4.dns "192.168.0.253 192.168.0.254"
というふうに""でくくった上でスペースで区切って指定します。

また、現在の設定を上書きせずに追加する時は、
+ipv4.dns
削除する時は、
-ipv4.dns
というコマンドも使えるみたいです。

▽ここを参考にしました。ありがとうございました。
https://milestone-of-se.nesuke.com/sv-basic/linux-basic/nmcli/

・DNSのsearchの変更
nmcli connection modify enp4s0 ipv4.dns-search aufheben.net

・設定の反映
nmcli connection up enp4s0

telnetとsshをxinetd経由で接続できるようにする

・DVD-ROMのマウント
mount /dev/cdrom /mnt
cd /mnt

・xinetdのインストール
rpm -ivh AppStream/Packages/xinetd-2.3.15-24.el8.x86_64.rpm
systemctl start xinetd.service
systemctl enable xinetd.service

・telnetのインストール
rpm -ivh \
AppStream/Packages/telnet-0.17-73.el8_1.1.x86_64.rpm \
AppStream/Packages/telnet-server-0.17-73.el8_1.1.x86_64.rpm

CentOS8.1に比べて、マイナーバージョン番号に不自然に「_1.1」なる番号が増えています。やっぱり、Poderosaからだとtelnetで繋がらないのを密かに修正した感じですね。

さっそくPoderosaから接続してみたら、やはり繋がりません。えー、まだバグってる??と思ったのですが、考えてみれば/etc/sysconfig/selinuxの設定を変えただけではまだSELinuxがオフになってませんで、リブートしてSELinuxをオフにしたらあっさり繋がりました。え?もしかして、CentOS8.1の時死ぬほど悩んだのは、単にSELinuxをオフにするの忘れてただけ??

しかし、Poderosaからだと繋がらず、RLoginからだと繋がるので、絶対にファイアウォールとかセキュリティ関係は関係ないと思ったんだけどなぁ・・・。セキュリティ関係の設定が原因で、ターミナルソフトによって繋がったり繋がらなかったりするのだろうか?

・xinetdの起動
systemctl start xinetd.service
systemctl enable xinetd.service

・telnetをxinetd経由で起動させる
vi /etc/xinetd.d/telnet

# default: on
# description: The telnet server serves telnet sessions; it uses \
#       unencrypted username/password pairs for authentication.
service telnet
{
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
        disable         = no
        only_from       = 192.168.0.0/24
        only_from      += 127.0.0.1
        only_from      += ::1
}

この例ではローカルIPからの接続のみを許可していますが、データーセンターに設置する場合は、only_from+=に続いて自社の固定IPも足してください。え?自社が固定IPじゃない?そ、それは・・・。

・・・という事になっちゃうんで、データーセンターにサーバーを設置する場合は、自社や自宅は固定IPにしましょうね。

xinetdを再起動します。
systemctl restart xinetd.service

・sshをxinetd経由に変更する
sshをxinetd経由にすると、どこからも接続のない時にsshdが常駐しなくなる分だけルート権限を乗っ取られにくくなります。(全く安全になる・・・というわけではないので注意)

vi /etc/ssh/sshd_config

PermitRootLogin no
PermitEmptyPasswords no

vi /etc/xinetd.d/ssh

# default: on
# description: The ssh server serves ssh sessions; it uses \
# unencrypted username/password pairs for authentication.
service ssh
{
        disable         = no
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/sshd
        server_args     = -i
        log_on_failure += USERID
        only_from       = 192.168.0.0/24
        only_from      += 127.0.0.1
        only_from      += ::1
}

sshを止めて、次から自動起動しないようにします。現在の接続は維持されます。
systemctl stop sshd.service
systemctl disable sshd.service

xinetdを再起動します。
systemctl restart xinetd.service

いったんログアウトして、telnetで接続して、
ps ax | grep sshd
と入力してみてください。sshdというプロセスが起動してなければ、sshdは止まっています。止まってない場合は、サーバー機で
systemctl stop sshd.service
としてみてください。また、sshでも接続できるかどうか確認してください。

前述したようにPoderosa + SSH接続では、バージョン4.4.5以外うまく接続できません。ずっとPoderosaを使っていただけに残念なのですが、これからはサーバーへのアクセスはRLogin一本に絞った方が良いのかもしれません。

vsftpdの設定

・vsftpdのインストール
cd /mnt
rpm -ivh \
AppStream/Packages/ftp-0.17-78.el8.x86_64.rpm \
AppStream/Packages/vsftpd-3.0.3-31.el8.x86_64.rpm

・設定ファイルの変更
vi /etc/vsftpd/vsftpd.conf

anonymous_enable=NO ←NOにする
chroot_local_user=YES ←コメントアウトを解除
listen=NO ←NOにする
listen_ipv6=NO ←NOにする
allow_writeable_chroot=YES ←ひな形にないので自分で書く
use_localtime=YES ←ひな形にないので自分で書く

・chroot_local_user=NO
ローカルユーザーがFTPで接続した場合、そのユーザーのホームディレクトリがルートとみなされ、それより上に行けなくなります。これにより、管理者以外のユーザーがシステムディレクトリや他人のディレクトリを覗けなくなります。

・listen=NO
IPv4のソケットをListenするかどうか。ここではソケットの接続はxinetdに任せるのでNOに設定します。xinetdを経由しない時はYESにします。

・listen_ipv6=NO
IPv6のソケットをListenするかどうか。ここではソケットの接続はxinetdに任せるのでNOに設定します。xinetdを経由しない時はYESにします。

・allow_writeable_chroot=YES
デフォルトの設定では、chrootされたディレクトリに第三者からの書き込み権限があるとエラーで接続できないようになっています。これをYESに設定すると、chrootされたディレクトリが第三者からの書き込み権限があっても接続できるようになります。雛形にはないので自分で書き足します。

・use_localtime=YES
デフォルトでは、ファイルの更新時刻として世界標準時を返すようなっています。その場合、FTPクライアントの設定で「ホストの時刻」を「グリニッジ標準時」「世界標準時」「協定世界時」とかにしないといけません。use_localtime=YESに設定する事で、ファイルの更新時刻をローカル時間で返すようになるので、FTPクライアントの設定を「時差なし」に設定する事ができます。雛形にはないので自分で書き足します。

vsftpdには雛形になくて自分で書き足さないといけない記述がけっこうあります。

・xinetd経由で起動するようにする
vi /etc/xinetd.d/ftp

# default: on
# description: The ftp server serves ftp sessions; it uses \
# unencrypted username/password pairs for authentication.
service ftp
{
	instances       = 200
	flags           = REUSE
	socket_type     = stream
	wait            = no
	user            = root
	server          = /usr/sbin/vsftpd
	server_args     = /etc/vsftpd/vsftpd.conf
	log_on_failure += USERID
	disable         = no
        only_from       = 192.168.0.0/24
        only_from      += 127.0.0.1
        only_from      += ::1
}

systemctl restart xinetd.service

ここではローカルIPからの接続のみを許可していますが、レンタルサーバー等でftpを一般に公開するサーバーの時は、only_from行は記述しません。また、データーセンターに設置する場合は、only_from+=に続いて自社の固定IPも足してください。え?自社が固定IPじゃない?(以下略)

シスログローテーションの設定

vi /etc/logrotate.conf

rotate 30 ←4を30に変更
compress ←コメントアウト解除

ここでは30としましたが、今はハードディスクにも余裕がかなりあるので、もっと長くても良いかもしれません。

エラーにならない事を確認
logrotate -d /etc/logrotate.conf

[注意] logrotate.confや、logrotate.conf.d以下を変更した時は、必ずエラーがない事を確認します。でないと、最悪apacheのログが2Gを越えてapacheが止まってしまいます。

ローカルタイムにするか世界標準時にするか

デフォルトの設定では、サーバー内蔵時計は世界標準時になっているものとみなされています。大抵はこれで良いのですが、同じサーバー機でWindowsも併用する場合などは、サーバー内蔵時計はローカル時間になっているとみなされるので不都合が生じます。

また、これまでCentOS4を使ってた人にとって、サーバー時計はローカル時間だったので、急に世界標準時にされるとなんか気持ち悪い気もします。特にBIOSの設定画面で9時間ずらして設定しないといけないのは何か嫌な気がします。

そこで、
timedatectl set-local-rtc 1
とする事で、サーバー時計をローカル時間とみなす事ができます。

元に戻す場合は、
timedatectl set-local-rtc 0
とします。

切り替える度に現在時刻が狂ってしまわないように、OS(Linux)の方でサーバー内蔵時計を自動的に変更しています。

timedatectl status
コマンドを使う事によって、現在の設定を確認する事ができます。

timedatectl status
      Local time: 水 2021-03-24 18:02:27 JST
  Universal time: 水 2021-03-24 09:02:27 UTC
        RTC time: 水 2021-03-24 09:02:27
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: yes
      DST active: n/a

Warning: The system is configured to read the RTC time in the local time zone.
         This mode can not be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
         'timedatectl set-local-rtc 0'.

RTC in local TZ:
この項目がyesならサーバー時計はローカル時間、noなら世界標準時刻とみなしています。

ただし、ローカル時間モードになっている場合、警告として、
「現在、システム時計はローカルタイムゾーンに設定されています。このモードは完全にサポートされていません。そのため、夏時間やタイムゾーンを変更した時などにさまざまな問題を引き起こす可能性があります。タイムゾーンを変更してもシステム時計は更新されず、手動で変更する必要が生じます。もし可能であれば、imedatectl set-local-rtc 0コマンドを使って標準時に変更してください」
と出ます。

sendmailの設定

・ホスト名を設定
nmcli general hostname aufheben14.aufheben.info

・ホスト名が逆引きできるようにする
vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.40 aufheben14.aufheben.info
↑追加

これをやっておかないと、sendmailの起動が死ぬほど遅くなるので注意が必要です。なぜかは不明です。グリーティングメッセージで使うためにホスト名をどうにかして引こうとするためかもしれません。

・postfixを止める
別にpostfixが嫌いなわけではありません。仕事の都合でsendmailの設定の方がpostfixやqmailよりも詳しくなってしまったので、sendmailを使っているだけです。
systemctl stop postfix.service
systemctl disable postfix.service

・sendmailをインストール
cd /mnt
rpm -ivh \
AppStream/Packages/sendmail-8.15.2-32.el8.x86_64.rpm \
AppStream/Packages/sendmail-cf-8.15.2-32.el8.noarch.rpm \
AppStream/Packages/hesiod-3.2.1-11.el8.x86_64.rpm \
AppStream/Packages/procmail-3.22-47.el8.x86_64.rpm \
AppStream/Packages/libidn-1.34-5.el8.x86_64.rpm \
BaseOS/Packages/cyrus-sasl-2.1.27-1.el8.x86_64.rpm \
BaseOS/Packages/m4-1.4.18-7.el8.x86_64.rpm \
BaseOS/Packages/emacs-filesystem-26.1-5.el8.noarch.rpm

・mailxをインストール
cd /mnt
rpm -ivh BaseOS/Packages/mailx-12.5-29.el8.x86_64.rpm

・開始
systemctl start sendmail.service
systemctl enable sendmail.service

・デリバリーモードをiからqにする
vi /etc/sysconfig/sendmail

SENDMAIL_OPTS="-q16s -ODeliveryMode=q"

sendmailの引数は大文字小文字にうるさいので注意。全部小文字だと無視されます。大文字小文字を間違えずにDeliveryModeと記述しましょう。

▽ここを参考にしました。ありがとうございました。
https://qiita.com/nntsugu/items/8f721a71c35241e3f2f6

・sendmailの起動、自動起動の設定
systemctl start sendmail.service
systemctl enable sendmail.service

・動作テスト
cd /var/spool/mqueue
mail root
Subject: test
test
.
ls
ここで、16秒後に再びlsとしてキューがなくなる事を確認します。

・受信するドメインの設定
sendmailでは、宛先アドレスの@以降がlocal-host-namesに記載されたドメインなら自分宛だと判断し、それ以外の宛先なら宛先アドレスの@以降のアドレスにリレーします。

なので、お客さんに「バーチャルドメインを追加してください」と言われたら、apacheの設定ファイルだけでなくlocal-host-namesも追加するようにしてください。

vi /etc/mail/local-host-names

ここに受信するドメイン名を記述します。
複数記述する時は改行で区切ります。

・中継許可の設定
sendmailは当初は性善説に基づいて設計されたため、どこから来たメールでも無条件にリレーしていましたが、そのうち迷惑メールを任意のサーバーに大量に送りつける行為が横行したため、今ではリレーする送信元を限定しなければなりません。

cd /etc/mail
vi access

Connect:localhost.localdomain           RELAY
Connect:localhost                       RELAY
Connect:127.0.0.1                       RELAY
Connect:192.168.0                       RELAY

初期設定では 自分自身からのメールからしか外部送信をしない設定になっています。ここに、192.168.0を追加する事で、内部LANからのメールを受けるけるようにします。 ただし、この設定ではLANの内側にウイルスに感染したPCがあるとウイルス拡散サーバーになってしまうので、以下のSMTP-AUTHを設定した方が安全です。

/etc/accessは実際にはハッシュの方(access.db)が使われるため、ハッシュを作成しておきます。
makemap hash access < access

SMTP-AUTHを有効にする

・sasl-md5、sasl-plain、sasl-scramのインストール
cd /mnt
rpm -ivh \
BaseOS/Packages/cyrus-sasl-md5-2.1.27-1.el8.x86_64.rpm \
BaseOS/Packages/cyrus-sasl-plain-2.1.27-1.el8.x86_64.rpm \
BaseOS/Packages/cyrus-sasl-scram-2.1.27-1.el8.x86_64.rpm

・saslを開始する
systemctl start saslauthd
systemctl enable saslauthd

・Linuxのユーザーをそのまま使えるようにする
cd /etc/sasl2
cp Sendmail.conf Sendmail.conf_org
vi Sendmail.conf

pwcheck_method:auxprop

ここで、
saslauthd・・・sasl独自のユーザー管理(デフォルト)
auxprop・・・Linuxのユーザーをそのまま利用する
という意味です。

・DIGEST-MD5、CRAM-MD5を有効にする
cd /etc/mail
vi sendmail.mc

以下の行の頭のdnlを消してコメントアウトを解除する
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl

・自分以外からのメールも受け取る

DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
↓
DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl

・逆引きが一致しないアドレスからのメールも受け取る
vi /usr/share/sendmail-cf/m4/proto.m4

dnl R<FORGED> $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $&{client_name}
↑dnl を足す

・sendmailのバージョンを隠す
cd /etc/mail
vi sendmail.mc

dnl define(`confSMTP_LOGIN_MSG', `$j Sendmail; $b')dnl
の下に以下を追加
define(`confSMTP_LOGIN_MSG',`unknown')dnl
define(`confRECEIVED_HEADER',`$?sfrom $s $.$?_($?s$|from $.$_) $.$?{auth_type}(authenticated)$.by $j(unknown)$?r with $r$. id $i$?ufor $u; $|;$.$b')dnl

▽ここを参考にしました。ありがとうございました。
http://www.atmarkit.co.jp/ait/articles/0710/19/news137_2.html

・設定を反映させてsaslとsendmailをリスタートする
m4 sendmail.mc > sendmail.cf
systemctl restart saslauthd
systemctl restart sendmail

・うまくいったかどうか確認する
telnet localhost 587
EHLO localhost
250-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN
があれば成功

■STARTTLSを有効にする

・最初から入ってる証明局、証明書を有効にする
CentOS8にはCAコマンドが入ってないのでopensslコマンドを使って証明局を作らなければならないのですが、色々やってみたけど全然うまくいかなかったので、今回は自己証明局を作るのはあきらめて、最初から入っている証明局と証明書を使います。
cd /etc/mail
vi sendmail.mc

以下の頭のdnlを消してコメントアウトを解除
DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl
define(`confCACERT_PATH', `/etc/pki/tls/certs')dnl
define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.crt')dnl
define(`confSERVER_CERT', `/etc/pki/tls/certs/sendmail.pem')dnl
define(`confSERVER_KEY', `/etc/pki/tls/private/sendmail.key')dnl
define(`confTLS_SRV_OPTIONS', `V')dnl

m4 sendmail.mc > sendmail.cf
systemctl restart saslauthd.service
systemctl restart sendmail.service

・うまくいったか確認する
telnet localhost 587
EHLO localhost
とやってみて、表示されるリストに
250-STARTTLS
があれば成功です。

qpopperインストールできず

・作業ディレクトリの作成
cd /home/mente
mkdir work
cd work
mdkir targz
cd targz

・qpopperの入手とコンパイル
wget https://fossies.org/linux/misc/old/qpopper4.1.0.tar.gz
tar xvzf qpopper4.1.0.tar.gz
cd qpopper4.1.0
./configure --enable-special-auth --enable-log-login --enable-shy
make

popper.h:316:30: エラー: ‘sys_errlist’ と型が競合しています
extern char         *   sys_errlist[];

仕方がないのでGoogleで検索したところ、なんと、誰もこの件について言及していない。え?もしかして、いまだにqpopperなんて使ってるの自分だけ??

というわけで、qpopperはあきらめ。

dovecotのインストール

・dovecotのインストール
cd /mnt
rpm -ivh \
AppStream/Packages/dovecot-2.3.8-2.el8.x86_64.rpm \
AppStream/Packages/clucene-core-2.3.3.4-31.20130812.e8e3d20git.el8.x86_64.rpm

・POP3対応にする
cd /etc/dovecot/
vi dovecot.conf

# Protocols we want to be serving.
protocols = imap pop3 lmtp
↑コメントアウトを外してsubmissionを消す。
(submissionはsendmailが使っているので、消さないとエラーになる)

・プレーンテキストパスワードに対応する
cd /etc/dovecot/conf.d
vi 10-auth.conf

disable_plaintext_auth = no
↑コメントアウトを外して、yesをnoにする

・pop3sを使わないで通信できるようにする
vi 10-ssl.conf

ssl = no
↑コメントアウトを外して、requiredをnoにする

・sendmailのメールボックスを取り出せるようにする
vi 10-mail.conf

mail_location = mbox:~/mbox:INBOX=/var/spool/mail/%u
↑コメントアウトを外して = の後ろを追記
mail_access_groups = mail
↑コメントアウトを外して = の後ろを追記

・開始
systemctl start dovecot
systemctl enable dovecot

・うまくいったか確認
telnet localhost 110
user (ユーザー名)
pass (パスワード)
quit

注意:これを丸コピペして本当に(ユーザー名)(パスワード)と入れて「認証が通らないぞゴルァ」などとご意見フォームに送信してくるのはナシでお願いします。

▽ここを参考にしました。ありがとうございました。
http://sakanade.asablo.jp/blog/2012/11/01/6620467
https://www.vincentina.net/?p=624
http://www.inoshita.jp/freo/entry?date=201708

viをカラーにする

・vim-enhancedのインストール
cd /mnt
rpm -ivh \
AppStream/Packages/vim-enhanced-8.0.1763-13.el8.x86_64.rpm \
AppStream/Packages/vim-common-8.0.1763-13.el8.x86_64.rpm \
AppStream/Packages/vim-filesystem-8.0.1763-13.el8.noarch.rpm \
AppStream/Packages/gpm-libs-1.20.7-15.el8.x86_64.rpm

・オートインデントオフ
vi /etc/vimrc

set nocompatible " Use Vim defaults (much better!)
set bs=indent,eol,start " allow backspacing over everything in insert mode
の下に以下を足す
set paste
set ruler

set rulerはすぐ上に set ruler " show the cursor position all the time という行があるのですが、右側にコメントあるせいでエラーになっています。どうも、/etc/vimrcを書いた人はset文の後ろにコメントを書くとエラーになる事を知らないみたいです。

・vi2というコマンドを新設する
/usr/bin/vim -u /etc/vimrc /usr/local/bin/vi2

#!/bin/sh
/usr/bin/vim -u /etc/vimrc $1

chmod 755 /usr/local/bin/vi2

・ログイン時にvi=vi2になるようにする
vi /etc/profile.d/vi2.sh

alias vi=vi2

いったんPoderosaから抜けて、ログインし直します。

・うまくいったか確認
vi /etc/aliases
カラーになれば成功。

vi終了時の画面を残す

▽ここを参考にしました。ありがとうございました。
http://kurokawh.blogspot.com/2015/01/linuxcygwin-less-man.html

cd ~
infocmp > screen.terminfo
vi screen.terminfo

rmcup=\E[?1049l\E[23;0;0t,
smcup=\E[?1049h\E[22;0;0t,
を消す

tic -o .terminfo screen.terminfo

・うまくいったか確認
いったんログアウトして入り直す
vi /etc/aliases
:q!
で抜けて画面がクリアされていなければ成功

chronyの設定

・chronyのインストール
cd /mnt
rpm -ivh BaseOS/Packages/chrony-3.5-1.el8.x86_64.rpm

・起動
systemctl start chronyd
systemctl enable chronyd

・確認
chronyc sources
として

210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^- y.ns.gin.ntt.net              2   9   377    60  +1333us[+1333us] +/-  106ms
^* 30-213-226-103-static.ch>     1   9   377   385  +4615us[+4775us] +/-   28ms
^- sh11.paina.net                2  10   377   195    +10ms[  +10ms] +/-   47ms
^+ ec2-3-114-30-212.ap-nort>     2  10   377   180  +1414us[+1414us] +/-   50ms

と表示されていればOKです。

chronyc sourcestats -v
とすると、さらに詳細な情報を確認できます。

210 Number of sources = 4
                             .- Number of sample points in measurement set.
                            /    .- Number of residual runs with same sign.
                           |    /    .- Length of measurement set (time).
                           |   |    /      .- Est. clock freq error (ppm).
                           |   |   |      /           .- Est. error in freq.
                           |   |   |     |           /         .- Est. offset.
                           |   |   |     |          |          |   On the -.
                           |   |   |     |          |          |   samples. \
                           |   |   |     |          |          |             |
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
2403:71c0:2000::d:8b97      7   5   201     -4.454    110.385    +52ms  3114us
time.cloudflare.com         7   4   200     -3.915     60.887  +2808us  1660us

103.202.217.183             7   4   201     +7.317     25.868   +569us   782us
ipv4.ntp2.rbauman.com       6   4   136     -0.047      7.920  -3809ns   107us

ファイアウオールが効いてて動作しない場合は
firewall-cmd --zone=public --add-service=ntp
firewall-cmd --zone=public --add-service=ntp --permanent
としてNTPポートを開けてから、再度chronyc sourcesで確認してください。

開発環境のインストール

ここからはソースコードのコンパイルが必要になるので、開発環境をインストールします。DVD-ROMは/mntにマウントされているものとします。

cd /mnt

・wget
rpm -ivh AppStream/Packages/wget-1.19.5-8.el8_1.1.x86_64.rpm

・tar
rpm -ivh BaseOS/Packages/tar-1.30-4.el8.x86_64.rpm

・cpp、gcc
rpm -ivh \
AppStream/Packages/cpp-8.3.1-5.el8.0.2.x86_64.rpm \
AppStream/Packages/gcc-8.3.1-5.el8.0.2.x86_64.rpm \
AppStream/Packages/isl-0.16.1-6.el8.x86_64.rpm \
AppStream/Packages/libmpc-1.0.2-9.el8.x86_64.rpm \
BaseOS/Packages/make-4.2.1-10.el8.x86_64.rpm \
BaseOS/Packages/binutils-2.30-73.el8.x86_64.rpm \
BaseOS/Packages/glibc-devel-2.28-101.el8.x86_64.rpm \
BaseOS/Packages/glibc-headers-2.28-101.el8.x86_64.rpm \
BaseOS/Packages/libxcrypt-devel-4.1.1-4.el8.x86_64.rpm \
BaseOS/Packages/kernel-headers-4.18.0-193.el8.x86_64.rpm \
BaseOS/Packages/pkgconf-pkg-config-1.4.2-1.el8.x86_64.rpm \
BaseOS/Packages/pkgconf-1.4.2-1.el8.x86_64.rpm \
BaseOS/Packages/pkgconf-m4-1.4.2-1.el8.noarch.rpm \
BaseOS/Packages/libpkgconf-1.4.2-1.el8.x86_64.rpm

・gcc-c++
rpm -ivh \
AppStream/Packages/gcc-c++-8.3.1-5.el8.0.2.x86_64.rpm \
AppStream/Packages/libstdc++-devel-8.3.1-5.el8.0.2.x86_64.rpm

・locate、updatedb
rpm -ivh BaseOS/Packages/mlocate-0.26-20.el8.x86_64.rpm
updatedb

・rpm-build(PHPのコンパイルで必要)
rpm -ivh \
AppStream/Packages/annobin-8.90-1.el8.0.1.x86_64.rpm \
AppStream/Packages/dwz-0.12-9.el8.x86_64.rpm \
AppStream/Packages/efi-srpm-macros-3-2.el8.noarch.rpm \
AppStream/Packages/gc-7.6.4-3.el8.x86_64.rpm \
AppStream/Packages/gdb-headless-8.2-11.el8.x86_64.rpm \
AppStream/Packages/ghc-srpm-macros-1.4.2-7.el8.noarch.rpm \
AppStream/Packages/go-srpm-macros-2-16.el8.noarch.rpm \
AppStream/Packages/guile-2.0.14-7.el8.x86_64.rpm \
AppStream/Packages/libatomic_ops-7.6.2-3.el8.x86_64.rpm \
AppStream/Packages/libbabeltrace-1.5.4-2.el8.x86_64.rpm \
AppStream/Packages/libipt-1.6.1-8.el8.x86_64.rpm \
AppStream/Packages/ocaml-srpm-macros-5-4.el8.noarch.rpm \
AppStream/Packages/openblas-srpm-macros-2-2.el8.noarch.rpm \
AppStream/Packages/perl-srpm-macros-1-25.el8.noarch.rpm \
AppStream/Packages/python3-rpm-macros-3-38.el8.noarch.rpm \
AppStream/Packages/python-srpm-macros-3-38.el8.noarch.rpm \
AppStream/Packages/qt5-srpm-macros-5.12.5-3.el8.noarch.rpm \
AppStream/Packages/redhat-rpm-config-122-1.el8.noarch.rpm \
AppStream/Packages/rpm-build-4.14.2-37.el8.x86_64.rpm \
AppStream/Packages/rust-srpm-macros-5-2.el8.noarch.rpm \
AppStream/Packages/zstd-1.4.2-2.el8.x86_64.rpm \
BaseOS/Packages/bzip2-1.0.6-26.el8.x86_64.rpm \
BaseOS/Packages/elfutils-0.178-7.el8.x86_64.rpm \
BaseOS/Packages/libtool-ltdl-2.4.6-25.el8.x86_64.rpm \
BaseOS/Packages/patch-2.7.6-11.el8.x86_64.rpm \
BaseOS/Packages/unzip-6.0-43.el8.x86_64.rpm \
BaseOS/Packages/zip-3.0-23.el8.x86_64.rpm

・Perl
rpm -ivh \
AppStream/Packages/perl-5.26.3-416.el8.x86_64.rpm \
AppStream/Packages/perl-Algorithm-Diff-1.1903-9.el8.noarch.rpm \
AppStream/Packages/perl-Archive-Tar-2.30-1.el8.noarch.rpm \
AppStream/Packages/perl-Archive-Zip-1.60-3.el8.noarch.rpm \
AppStream/Packages/perl-Attribute-Handlers-0.99-416.el8.noarch.rpm \
AppStream/Packages/perl-autodie-2.29-396.el8.noarch.rpm \
AppStream/Packages/perl-B-Debug-1.26-2.el8.noarch.rpm \
AppStream/Packages/perl-bignum-0.49-2.el8.noarch.rpm \
AppStream/Packages/perl-Compress-Bzip2-2.26-6.el8.x86_64.rpm \
AppStream/Packages/perl-Compress-Raw-Bzip2-2.081-1.el8.x86_64.rpm \
AppStream/Packages/perl-Compress-Raw-Zlib-2.081-1.el8.x86_64.rpm \
AppStream/Packages/perl-Config-Perl-V-0.30-1.el8.noarch.rpm \
AppStream/Packages/perl-CPAN-2.18-397.el8.noarch.rpm \
AppStream/Packages/perl-CPAN-Meta-2.150010-396.el8.noarch.rpm \
AppStream/Packages/perl-CPAN-Meta-Requirements-2.140-396.el8.noarch.rpm \
AppStream/Packages/perl-CPAN-Meta-YAML-0.018-397.el8.noarch.rpm \
AppStream/Packages/perl-Data-Dump-1.23-7.el8.noarch.rpm \
AppStream/Packages/perl-Data-OptList-0.110-6.el8.noarch.rpm \
AppStream/Packages/perl-Data-Section-0.200007-3.el8.noarch.rpm \
AppStream/Packages/perl-DB_File-1.842-1.el8.x86_64.rpm \
AppStream/Packages/perl-devel-5.26.3-416.el8.x86_64.rpm \
AppStream/Packages/perl-Devel-Peek-1.26-416.el8.x86_64.rpm \
AppStream/Packages/perl-Devel-PPPort-3.36-5.el8.x86_64.rpm \
AppStream/Packages/perl-Devel-SelfStubber-1.06-416.el8.noarch.rpm \
AppStream/Packages/perl-Devel-Size-0.81-2.el8.x86_64.rpm \
AppStream/Packages/perl-Digest-1.17-395.el8.noarch.rpm \
AppStream/Packages/perl-Digest-MD5-2.55-396.el8.x86_64.rpm \
AppStream/Packages/perl-Digest-SHA-6.02-1.el8.x86_64.rpm \
AppStream/Packages/perl-Encode-devel-2.97-3.el8.x86_64.rpm \
AppStream/Packages/perl-encoding-2.22-3.el8.x86_64.rpm \
AppStream/Packages/perl-Env-1.04-395.el8.noarch.rpm \
AppStream/Packages/perl-experimental-0.019-2.el8.noarch.rpm \
AppStream/Packages/perl-ExtUtils-CBuilder-0.280230-2.el8.noarch.rpm \
AppStream/Packages/perl-ExtUtils-Command-7.34-1.el8.noarch.rpm \
AppStream/Packages/perl-ExtUtils-Embed-1.34-416.el8.noarch.rpm \
AppStream/Packages/perl-ExtUtils-Install-2.14-4.el8.noarch.rpm \
AppStream/Packages/perl-ExtUtils-MakeMaker-7.34-1.el8.noarch.rpm \
AppStream/Packages/perl-ExtUtils-Manifest-1.70-395.el8.noarch.rpm \
AppStream/Packages/perl-ExtUtils-Miniperl-1.06-416.el8.noarch.rpm \
AppStream/Packages/perl-ExtUtils-MM-Utils-7.34-1.el8.noarch.rpm \
AppStream/Packages/perl-ExtUtils-ParseXS-3.35-2.el8.noarch.rpm \
AppStream/Packages/perl-File-Fetch-0.56-2.el8.noarch.rpm \
AppStream/Packages/perl-File-HomeDir-1.002-4.el8.noarch.rpm \
AppStream/Packages/perl-File-Which-1.22-2.el8.noarch.rpm \
AppStream/Packages/perl-Filter-1.58-2.el8.x86_64.rpm \
AppStream/Packages/perl-Filter-Simple-0.94-2.el8.noarch.rpm \
AppStream/Packages/perl-inc-latest-0.500-9.el8.noarch.rpm \
AppStream/Packages/perl-IO-Compress-2.081-1.el8.noarch.rpm \
AppStream/Packages/perl-IO-Socket-IP-0.39-5.el8.noarch.rpm \
AppStream/Packages/perl-IO-Zlib-1.10-416.el8.noarch.rpm \
AppStream/Packages/perl-IPC-Cmd-1.02-1.el8.noarch.rpm \
AppStream/Packages/perl-IPC-System-Simple-1.25-17.el8.noarch.rpm \
AppStream/Packages/perl-IPC-SysV-2.07-397.el8.x86_64.rpm \
AppStream/Packages/perl-JSON-PP-2.97.001-3.el8.noarch.rpm \
AppStream/Packages/perl-libnet-3.11-3.el8.noarch.rpm \
AppStream/Packages/perl-libnetcfg-5.26.3-416.el8.noarch.rpm \
AppStream/Packages/perl-Locale-Codes-3.57-1.el8.noarch.rpm \
AppStream/Packages/perl-Locale-Maketext-1.28-396.el8.noarch.rpm \
AppStream/Packages/perl-Locale-Maketext-Simple-0.21-416.el8.noarch.rpm \
AppStream/Packages/perl-local-lib-2.000024-2.el8.noarch.rpm \
AppStream/Packages/perl-Math-BigInt-FastCalc-0.500.600-6.el8.x86_64.rpm \
AppStream/Packages/perl-Math-BigRat-0.2614-1.el8.noarch.rpm \
AppStream/Packages/perl-Memoize-1.03-416.el8.noarch.rpm \
AppStream/Packages/perl-Module-Build-0.42.24-5.el8.noarch.rpm \
AppStream/Packages/perl-Module-CoreList-5.20181130-1.el8.noarch.rpm \
AppStream/Packages/perl-Module-CoreList-tools-5.20181130-1.el8.noarch.rpm \
AppStream/Packages/perl-Module-Load-0.32-395.el8.noarch.rpm \
AppStream/Packages/perl-Module-Load-Conditional-0.68-395.el8.noarch.rpm \
AppStream/Packages/perl-Module-Loaded-0.08-416.el8.noarch.rpm \
AppStream/Packages/perl-Module-Metadata-1.000033-395.el8.noarch.rpm \
AppStream/Packages/perl-MRO-Compat-0.13-4.el8.noarch.rpm \
AppStream/Packages/perl-Net-Ping-2.55-416.el8.noarch.rpm \
AppStream/Packages/perl-open-1.11-416.el8.noarch.rpm \
AppStream/Packages/perl-Package-Generator-1.106-11.el8.noarch.rpm \
AppStream/Packages/perl-Params-Check-0.38-395.el8.noarch.rpm \
AppStream/Packages/perl-Params-Util-1.07-22.el8.x86_64.rpm \
AppStream/Packages/perl-perlfaq-5.20180605-1.el8.noarch.rpm \
AppStream/Packages/perl-PerlIO-via-QuotedPrint-0.08-395.el8.noarch.rpm \
AppStream/Packages/perl-Perl-OSType-1.010-396.el8.noarch.rpm \
AppStream/Packages/perl-Pod-Checker-1.73-395.el8.noarch.rpm \
AppStream/Packages/perl-Pod-Html-1.22.02-416.el8.noarch.rpm \
AppStream/Packages/perl-Pod-Parser-1.63-396.el8.noarch.rpm \
AppStream/Packages/perl-SelfLoader-1.23-416.el8.noarch.rpm \
AppStream/Packages/perl-Socket6-0.28-6.el8.x86_64.rpm \
AppStream/Packages/perl-Software-License-0.103013-2.el8.noarch.rpm \
AppStream/Packages/perl-Sub-Exporter-0.987-15.el8.noarch.rpm \
AppStream/Packages/perl-Sub-Install-0.928-14.el8.noarch.rpm \
AppStream/Packages/perl-Sys-Syslog-0.35-397.el8.x86_64.rpm \
AppStream/Packages/perl-Test-1.30-416.el8.noarch.rpm \
AppStream/Packages/perl-Test-Harness-3.42-1.el8.noarch.rpm \
AppStream/Packages/perl-Test-Simple-1.302135-1.el8.noarch.rpm \
AppStream/Packages/perl-Text-Balanced-2.03-395.el8.noarch.rpm \
AppStream/Packages/perl-Text-Diff-1.45-2.el8.noarch.rpm \
AppStream/Packages/perl-Text-Glob-0.11-4.el8.noarch.rpm \
AppStream/Packages/perl-Text-Template-1.51-1.el8.noarch.rpm \
AppStream/Packages/perl-Thread-Queue-3.13-1.el8.noarch.rpm \
AppStream/Packages/perl-Time-HiRes-1.9758-1.el8.x86_64.rpm \
AppStream/Packages/perl-Time-Piece-1.31-416.el8.x86_64.rpm \
AppStream/Packages/perl-Unicode-Collate-1.25-2.el8.x86_64.rpm \
AppStream/Packages/perl-URI-1.73-3.el8.noarch.rpm \
AppStream/Packages/perl-utils-5.26.3-416.el8.noarch.rpm \
AppStream/Packages/perl-version-0.99.24-1.el8.x86_64.rpm \
AppStream/Packages/systemtap-sdt-devel-4.2-6.el8.x86_64.rpm \
BaseOS/Packages/perl-Carp-1.42-396.el8.noarch.rpm \
BaseOS/Packages/perl-constant-1.33-396.el8.noarch.rpm \
BaseOS/Packages/perl-Data-Dumper-2.167-399.el8.x86_64.rpm \
BaseOS/Packages/perl-Encode-2.97-3.el8.x86_64.rpm \
BaseOS/Packages/perl-Errno-1.28-416.el8.x86_64.rpm \
BaseOS/Packages/perl-Exporter-5.72-396.el8.noarch.rpm \
BaseOS/Packages/perl-File-Path-2.15-2.el8.noarch.rpm \
BaseOS/Packages/perl-File-Temp-0.230.600-1.el8.noarch.rpm \
BaseOS/Packages/perl-Getopt-Long-2.50-4.el8.noarch.rpm \
BaseOS/Packages/perl-HTTP-Tiny-0.074-1.el8.noarch.rpm \
BaseOS/Packages/perl-interpreter-5.26.3-416.el8.x86_64.rpm \
BaseOS/Packages/perl-IO-1.38-416.el8.x86_64.rpm \
BaseOS/Packages/perl-libs-5.26.3-416.el8.x86_64.rpm \
BaseOS/Packages/perl-macros-5.26.3-416.el8.x86_64.rpm \
BaseOS/Packages/perl-Math-BigInt-1.9998.11-7.el8.noarch.rpm \
BaseOS/Packages/perl-Math-Complex-1.59-416.el8.noarch.rpm \
BaseOS/Packages/perl-MIME-Base64-3.15-396.el8.x86_64.rpm \
BaseOS/Packages/perl-parent-0.237-1.el8.noarch.rpm \
BaseOS/Packages/perl-PathTools-3.74-1.el8.x86_64.rpm \
BaseOS/Packages/perl-Pod-Escapes-1.07-395.el8.noarch.rpm \
BaseOS/Packages/perl-podlators-4.11-1.el8.noarch.rpm \
BaseOS/Packages/perl-Pod-Perldoc-3.28-396.el8.noarch.rpm \
BaseOS/Packages/perl-Pod-Simple-3.35-395.el8.noarch.rpm \
BaseOS/Packages/perl-Pod-Usage-1.69-395.el8.noarch.rpm \
BaseOS/Packages/perl-Scalar-List-Utils-1.49-2.el8.x86_64.rpm \
BaseOS/Packages/perl-Socket-2.027-3.el8.x86_64.rpm \
BaseOS/Packages/perl-Storable-3.11-3.el8.x86_64.rpm \
BaseOS/Packages/perl-Term-ANSIColor-4.06-396.el8.noarch.rpm \
BaseOS/Packages/perl-Term-Cap-1.17-395.el8.noarch.rpm \
BaseOS/Packages/perl-Text-ParseWords-3.30-395.el8.noarch.rpm \
BaseOS/Packages/perl-Text-Tabs+Wrap-2013.0523-395.el8.noarch.rpm \
BaseOS/Packages/perl-threads-2.21-2.el8.x86_64.rpm \
BaseOS/Packages/perl-threads-shared-1.58-2.el8.x86_64.rpm \
BaseOS/Packages/perl-Time-Local-1.280-1.el8.noarch.rpm \
BaseOS/Packages/perl-Unicode-Normalize-1.25-396.el8.x86_64.rpm \
BaseOS/Packages/python3-pyparsing-2.1.10-7.el8.noarch.rpm

・TimeDate
rpm -ivh /mnt/AppStream/Packages/perl-TimeDate-2.30-13.el8.noarch.rpm

・DBI
rpm -ivh /mnt/BaseOS/Packages/perl-DBI-1.641-1.el8.x86_64.rpm
DBD::Pgは、PostgreSQLのライブラリとリンクしないといけないので、PostgreSQLを入れた後に改めて入れる事にします。

・File-Tail
cd /home/mente
mkdir work
cd work
mkdir targz
cd targz
wget http://backpan.perl.org/authors/id/M/MG/MGRABNAR/File-Tail-0.98.tar.gz
tar xvzf File-Tail-0.98.tar.gz
cd File-Tail-0.98
perl Makefile.PL
make
make test
#妙に時間がかかりますが異常ではありません。
make install
cd ..

・MIME-BASE-64
wget http://backpan.perl.org/authors/id/G/GA/GAAS/MIME-Base64-3.05.tar.gz
tar xvzf MIME-Base64-3.05.tar.gz
cd MIME-Base64-3.05
perl Makefile.PL
make
make test
make install
cd ..

・File-ReadBackwards
wget http://gitpan.integra.net/backpan/authors/id/U/UR/URI/File-ReadBackwards-1.02.tar.gz
tar xvzf File-ReadBackwards-1.02.tar.gz
cd File-ReadBackwards-1.02
perl Makefile.PL
make
make test
make install
cd ..

・Jcode
wget https://mirror.netcologne.de/gentoo/distfiles/64/Jcode-2.03.tar.gz
tar xvzf Jcode-2.03.tar.gz
cd Jcode-2.03
perl Makefile.PL
make test
make install
cd ..

・GD-Barcode
wget https://cpan.metacpan.org/authors/id/K/KW/KWITKNR/GD-Barcode-1.15.tar.gz
tar xvzf GD-Barcode-1.15.tar.gz
cd GD-Barcode-1.15
perl Makefile.PL
make
make test
make install
cd ..

このままでは「QRコードのバージョンを指定しなかった場合には自動判別になる」という機能が働かず、QRコードのバージョンを指定しなかった場合に1になってしまうというバグがあるので、以下のように修正します。
chmod 755 /usr/local/share/perl5/GD/Barcode/QRcode.pm
vi /usr/local/share/perl5/GD/Barcode/QRcode.pm

40行目
$oSelf->{Version} = $rhPrm->{Version} || 1;
       ↓
$oSelf->{Version} = $rhPrm->{Version};

・Digest::HMAC
cd /mnt
rpm -ivh AppStream/Packages/perl-Digest-HMAC-1.03-17.el8.noarch.rpm

・Digest::SHA1
cd /home/mente/work
mkdir RPMS
cd RPMS
wget http://mirror.centos.org/centos/8/PowerTools/x86_64/os/Packages/perl-Digest-SHA1-2.13-23.el8.x86_64.rpm
rpm -ivh perl-Digest-SHA1-2.13-23.el8.x86_64.rpm

・libwww-perl
cd /mnt
rpm -ivh \
AppStream/Packages/perl-Encode-Locale-1.05-9.el8.noarch.rpm \
AppStream/Packages/perl-File-Listing-6.04-17.el8.noarch.rpm \
AppStream/Packages/perl-HTML-Parser-3.72-14.el8.x86_64.rpm \
AppStream/Packages/perl-HTML-Tagset-3.20-33.el8.noarch.rpm \
AppStream/Packages/perl-HTTP-Cookies-6.04-2.el8.noarch.rpm \
AppStream/Packages/perl-HTTP-Date-6.02-18.el8.noarch.rpm \
AppStream/Packages/perl-HTTP-Message-6.18-1.el8.noarch.rpm \
AppStream/Packages/perl-HTTP-Negotiate-6.01-19.el8.noarch.rpm \
AppStream/Packages/perl-IO-HTML-1.001-10.el8.noarch.rpm \
AppStream/Packages/perl-IO-Socket-SSL-2.066-4.el8.noarch.rpm \
AppStream/Packages/perl-libwww-perl-6.34-1.el8.noarch.rpm \
AppStream/Packages/perl-LWP-MediaTypes-6.02-14.el8.noarch.rpm \
AppStream/Packages/perl-LWP-Protocol-https-6.07-4.el8.noarch.rpm \
AppStream/Packages/perl-Mozilla-CA-20160104-7.el8.noarch.rpm \
AppStream/Packages/perl-Net-HTTP-6.17-2.el8.noarch.rpm \
AppStream/Packages/perl-Net-SSLeay-1.88-1.el8.x86_64.rpm \
AppStream/Packages/perl-NTLM-1.09-17.el8.noarch.rpm \
AppStream/Packages/perl-Try-Tiny-0.30-2.el8.noarch.rpm \
AppStream/Packages/perl-WWW-RobotRules-6.02-18.el8.noarch.rpm \
BaseOS/Packages/mailcap-2.1.48-3.el8.noarch.rpm

・Net::OAuth
cd /home/mente/work/targz
wget https://cpan.metacpan.org/authors/id/K/KG/KGRENNAN/Net-OAuth-0.28.tar.gz
tar xvzf Net-OAuth-0.28.tar.gz
cd Net-OAuth-0.28
perl Makefile.PL
make
make test
#make: *** [test] エラー 255が出るけど無視無視
make install
cd ..

・Net::Twitter::Lite
wget https://cpan.metacpan.org/authors/id/M/MM/MMIMS/Net-Twitter-Lite-0.12008.tar.gz
tar xvzf Net-Twitter-Lite-0.12008.tar.gz
cd Net-Twitter-Lite-0.12008
#このモジュールにはMakefile.PLというものがないので、直接コピーコマンドでインストールします。
mkdir /usr/lib64/perl5/Net
cp -pr lib/Net/Twitter /usr/lib64/perl5/Net/
#※注意
#ここではコピー先は/usr/lib64/perl5にしましたが、
#Perl本体のインストールのし方、Perlのバージョンによっても異なりますので、
#それぞれの環境に合わせて読み替えてください。
cd ..

・bzip2-devel
cd /mnt
rpm -ivh \
BaseOS/Packages/bzip2-devel-1.0.6-26.el8.x86_64.rpm

・libjpeg-turbo
rpm -ivh \
AppStream/Packages/libjpeg-turbo-1.5.3-10.el8.x86_64.rpm \
AppStream/Packages/libjpeg-turbo-devel-1.5.3-10.el8.x86_64.rpm

・xpm
rpm -ivh \
AppStream/Packages/libICE-1.0.9-15.el8.x86_64.rpm \
AppStream/Packages/libSM-1.2.3-1.el8.x86_64.rpm \
AppStream/Packages/libX11-1.6.8-3.el8.x86_64.rpm \
AppStream/Packages/libX11-common-1.6.8-3.el8.noarch.rpm \
AppStream/Packages/libX11-devel-1.6.8-3.el8.x86_64.rpm \
AppStream/Packages/libX11-xcb-1.6.8-3.el8.x86_64.rpm \
AppStream/Packages/libXau-1.0.8-13.el8.x86_64.rpm \
AppStream/Packages/libXau-devel-1.0.8-13.el8.x86_64.rpm \
AppStream/Packages/libxcb-1.13.1-1.el8.x86_64.rpm \
AppStream/Packages/libxcb-devel-1.13.1-1.el8.x86_64.rpm \
AppStream/Packages/libXext-1.3.3-9.el8.x86_64.rpm \
AppStream/Packages/libXpm-3.5.12-8.el8.x86_64.rpm \
AppStream/Packages/libXpm-devel-3.5.12-8.el8.x86_64.rpm \
AppStream/Packages/libXt-1.1.5-12.el8.x86_64.rpm \
AppStream/Packages/xorg-x11-proto-devel-2018.4-1.el8.noarch.rpm

・vpx
rpm -ivh \
AppStream/Packages/libvpx-1.7.0-6.el8.x86_64.rpm

・tiff
rpm -ivh \
AppStream/Packages/libtiff-4.0.9-17.el8.x86_64.rpm \
AppStream/Packages/libtiff-devel-4.0.9-17.el8.x86_64.rpm \
AppStream/Packages/jbigkit-libs-2.1-14.el8.x86_64.rpm

・apr-devel、apr-util-devel
rpm -ivh \
AppStream/Packages/apr-1.6.3-9.el8.x86_64.rpm \
AppStream/Packages/apr-devel-1.6.3-9.el8.x86_64.rpm \
AppStream/Packages/apr-util-1.6.1-6.el8.x86_64.rpm \
AppStream/Packages/apr-util-devel-1.6.1-6.el8.x86_64.rpm \
AppStream/Packages/libdb-devel-5.3.28-37.el8.x86_64.rpm \
BaseOS/Packages/cyrus-sasl-devel-2.1.27-1.el8.x86_64.rpm \
BaseOS/Packages/expat-devel-2.2.5-3.el8.x86_64.rpm \
BaseOS/Packages/openldap-devel-2.4.46-11.el8_1.x86_64.rpm

・pcre-devel
rpm -ivh \
BaseOS/Packages/pcre-devel-8.42-4.el8.x86_64.rpm \
BaseOS/Packages/pcre-utf16-8.42-4.el8.x86_64.rpm \
BaseOS/Packages/pcre-utf32-8.42-4.el8.x86_64.rpm \
BaseOS/Packages/pcre-cpp-8.42-4.el8.x86_64.rpm

・openssl-devel
rpm -ivh \
BaseOS/Packages/keyutils-libs-devel-1.5.10-6.el8.x86_64.rpm \
BaseOS/Packages/krb5-devel-1.17-18.el8.x86_64.rpm \
BaseOS/Packages/libcom_err-devel-1.45.4-3.el8.x86_64.rpm \
BaseOS/Packages/libkadm5-1.17-18.el8.x86_64.rpm \
BaseOS/Packages/libselinux-devel-2.9-3.el8.x86_64.rpm \
BaseOS/Packages/libsepol-devel-2.9-1.el8.x86_64.rpm \
BaseOS/Packages/libverto-devel-0.3.0-5.el8.x86_64.rpm \
BaseOS/Packages/openssl-devel-1.1.1c-15.el8.x86_64.rpm \
BaseOS/Packages/pcre2-devel-10.32-1.el8.x86_64.rpm \
BaseOS/Packages/pcre2-utf16-10.32-1.el8.x86_64.rpm \
BaseOS/Packages/pcre2-utf32-10.32-1.el8.x86_64.rpm \
BaseOS/Packages/zlib-devel-1.2.11-13.el8.x86_64.rpm

・png-devel
rpm -ivh \
BaseOS/Packages/libpng-devel-1.6.34-5.el8.x86_64.rpm

・freetype-devel
rpm -ivh \
BaseOS/Packages/freetype-devel-2.9.1-4.el8.x86_64.rpm

・Fontconfig
rpm -ivh \
AppStream/Packages/bitmap-fixed-fonts-0.3-28.el8.noarch.rpm \
BaseOS/Packages/fontconfig-2.13.1-3.el8.x86_64.rpm \
BaseOS/Packages/fontconfig-devel-2.13.1-3.el8.x86_64.rpm \
BaseOS/Packages/fontpackages-filesystem-1.44-22.el8.noarch.rpm \
BaseOS/Packages/libuuid-devel-2.32.1-22.el8.x86_64.rpm

・GD2
PHP7.2のconfigureスクリプトは、/usr/lib64からGDを探してくれなくてエラーになってしまったので、泣く泣くGD2をソースからコンパイルしたんですけど、PHP7.4ではもう直ったっぽいので、今回はRPMからインストールします。
rpm -ivh \
AppStream/Packages/gd-2.2.5-6.el8.x86_64.rpm \
AppStream/Packages/gd-devel-2.2.5-6.el8.x86_64.rpm \
AppStream/Packages/libwebp-1.0.0-1.el8.x86_64.rpm \
AppStream/Packages/libwebp-devel-1.0.0-1.el8.x86_64.rpm

・Perl-GD
なぜかDVDに標準でインストールされないので、ネットからパッケージをダウンロードします。
cd /home/mente/work/RPMS/
wget https://download-ib01.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/p/perl-GD-2.71-1.el8.x86_64.rpm
rpm -ivh perl-GD-2.71-1.el8.x86_64.rpm

・readline-devel
cd /mnt
rpm -ivh \
BaseOS/Packages/readline-devel-7.0-10.el8.x86_64.rpm \
BaseOS/Packages/ncurses-devel-6.1-7.20180224.el8.x86_64.rpm \
BaseOS/Packages/ncurses-c++-libs-6.1-7.20180224.el8.x86_64.rpm

・libxslt
rpm -ivh \
AppStream/Packages/cmake-filesystem-3.11.4-7.el8.x86_64.rpm \
AppStream/Packages/libxml2-devel-2.9.7-7.el8.x86_64.rpm \
AppStream/Packages/libxslt-devel-1.1.32-4.el8.x86_64.rpm \
BaseOS/Packages/libgcrypt-devel-1.8.3-4.el8.x86_64.rpm \
BaseOS/Packages/libgpg-error-devel-1.31-1.el8.x86_64.rpm \
BaseOS/Packages/libxslt-1.1.32-4.el8.x86_64.rpm \
BaseOS/Packages/xz-devel-5.2.4-3.el8.x86_64.rpm

・libcurl
rpm -ivh \
BaseOS/Packages/libcurl-devel-7.61.1-12.el8.x86_64.rpm

・DB4のソースのコンパイル&インストール
rpmからインストールすると、PHP7.4のconfigureスクリプトに「DB4のバージョンが違う」といってエラーにされてしまうので、仕方なくバージョン4.8.30をソースからコンパイルして/usr/localにインストールします。
cd /home/mente/work/targz
wget https://src.fedoraproject.org/lookaside/extras/db4/db-4.8.30.tar.gz/f80022099c5742cd179343556179aa8c/db-4.8.30.tar.gz
tar xvzf db-4.8.30.tar.gz
cd db-4.8.30
cd build_unix
../dist/configure --prefix=/usr/local
make
make install

・sqlite3のインストール
cd /mnt
rpm -ivh \
BaseOS/Packages/sqlite-3.26.0-6.el8.x86_64.rpm \
BaseOS/Packages/sqlite-devel-3.26.0-6.el8.x86_64.rpm \
BaseOS/Packages/sqlite-doc-3.26.0-6.el8.noarch.rpm

・libiconv
CentOS8ではglibcに最初から入ってるので不要です。もし以前の調子でlibiconv-1.15.tar.gzをコンパイル&インストールしてしまうと、PHP7.4と互換性のないlibiconvが入ってしまいphpがコンパイルエラーになってしまいます。

この場合、/usr/local/include/iconv.hをリネームする事でphpが古いバージョンのiconv.hを見ないようにできます。
mv /usr/local/include/iconv.h /usr/local/include/iconv.h.back

▽ここを参考にしました。ありがとうございました。
https://freefielder.jp/blog/2010/09/php5libiconv.html

・openldapのインストール
rpmをインストールすると/usr/lib64にインストールされますが、なぜかPHP7.4のconfigureスクリプトが/usr/lib64から探してくれないので、ソースをコンパイルして/usr/local/libにインストールします。

さらにconfigure時に環境変数LD_LIBRARY_PATHを指定しておかないと、/usr/lib64に入っているDB4を先に見に行って
configure: error: Berkeley DB version mismatch
というエラーが出てしまいます。

▽ここを参考にしました。ありがとうございました。
http://lightmaterial.blogspot.com/2008/04/openldapconfigureberkeley-db-version.html

まずLD_LIBRARY_PATHのパスを指定するようにします。
vi /etc/profile.d/uselocallib.sh

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"/usr/local/lib"

一度抜けて入り直します。
echo $LD_LIBRARY_PATH
で/usr/local/libが含まれていれば成功です。

うまくいったらソースをコンパイル、インストールします。
cd /home/mente/work/targz
wget https://www.openldap.org/software/download/OpenLDAP/openldap-release/openldap-2.4.50.tgz
tar xvzf openldap-2.4.50.tgz
cd openldap-2.4.50
./configure --prefix=/usr/local
make depend
make
make install

・onigurumaのインストール
今度は逆にソースonig-6.9.5-rev1.tar.gzからコンパイル・インストールしても、PHP7.4のconfigureスクリプトが/usr/localから探してくれずonigurumaがないというエラーになります。なのでRPMから入れたいところなんですが、DVDにはdevelパッケージが入ってないので、ネットからダウンロードします。
cd /home/mente/work/RPMS
wget http://mirror.centos.org/centos/8/AppStream/x86_64/os/Packages/oniguruma-6.8.2-1.el8.x86_64.rpm
wget https://rpmfind.net/linux/centos/8-stream/PowerTools/x86_64/os/Packages/oniguruma-devel-6.8.2-1.el8.x86_64.rpm
rpm -ivh \
oniguruma-6.8.2-1.el8.x86_64.rpm \
oniguruma-devel-6.8.2-1.el8.x86_64.rpm

・ImageMagick
CentOS8.1ではImageMagickがDVDから除外されてしまいましたが、CentOS8.2ではそれに加えて脆弱性が発見されたlibraqm、glibc32もDVDから外されてしまったので、ネットからダウンロードします。
wget http://ftp.pasteur.fr/mirrors/CentOS/8-stream/BaseOS/x86_64/os/Packages/glibc32-2.28-42.1.el8.x86_64.rpm
rpm -ivh \
ImageMagick-6.9.10.86-1.el8.x86_64.rpm \
ImageMagick-perl-6.9.10.86-1.el8.x86_64.rpm \
ImageMagick-libs-6.9.10.86-1.el8.x86_64.rpm \
libraqm-0.7.0-4.el8.x86_64.rpm \
glibc32-2.28-42.1.el8.x86_64.rpm \
/mnt/AppStream/Packages/adobe-mappings-cmap-20171205-3.el8.noarch.rpm \
/mnt/AppStream/Packages/adobe-mappings-cmap-deprecated-20171205-3.el8.noarch.rpm \
/mnt/AppStream/Packages/adobe-mappings-pdf-20180407-1.el8.noarch.rpm \
/mnt/AppStream/Packages/atk-2.28.1-1.el8.x86_64.rpm \
/mnt/AppStream/Packages/cairo-1.15.12-3.el8.x86_64.rpm \
/mnt/AppStream/Packages/fftw-libs-double-3.3.5-11.el8.x86_64.rpm \
/mnt/AppStream/Packages/fribidi-1.0.4-8.el8.x86_64.rpm \
/mnt/AppStream/Packages/gdk-pixbuf2-modules-2.36.12-5.el8.x86_64.rpm \
/mnt/AppStream/Packages/google-droid-sans-fonts-20120715-13.el8.noarch.rpm \
/mnt/AppStream/Packages/graphite2-1.3.10-10.el8.x86_64.rpm \
/mnt/AppStream/Packages/graphviz-2.40.1-40.el8.x86_64.rpm \
/mnt/AppStream/Packages/gtk2-2.24.32-4.el8.x86_64.rpm \
/mnt/AppStream/Packages/gtk-update-icon-cache-3.22.30-5.el8.x86_64.rpm \
/mnt/AppStream/Packages/harfbuzz-1.7.5-3.el8.x86_64.rpm \
/mnt/AppStream/Packages/hicolor-icon-theme-0.17-2.el8.noarch.rpm \
/mnt/AppStream/Packages/ilmbase-2.2.0-11.el8.x86_64.rpm \
/mnt/AppStream/Packages/jasper-libs-2.0.14-4.el8.x86_64.rpm \
/mnt/AppStream/Packages/jbig2dec-libs-0.14-2.el8.x86_64.rpm \
/mnt/AppStream/Packages/lcms2-2.9-2.el8.x86_64.rpm \
/mnt/AppStream/Packages/libdatrie-0.2.9-7.el8.x86_64.rpm \
/mnt/AppStream/Packages/libdmx-1.1.4-3.el8.x86_64.rpm \
/mnt/AppStream/Packages/libfontenc-1.1.3-8.el8.x86_64.rpm \
/mnt/AppStream/Packages/libgs-9.25-5.el8_1.1.x86_64.rpm \
/mnt/AppStream/Packages/libijs-0.35-5.el8.x86_64.rpm \
/mnt/AppStream/Packages/libmcpp-2.7.2-20.el8.x86_64.rpm \
/mnt/AppStream/Packages/libpaper-1.1.24-22.el8.x86_64.rpm \
/mnt/AppStream/Packages/LibRaw-0.19.5-1.el8.x86_64.rpm \
/mnt/AppStream/Packages/librsvg2-2.42.7-3.el8.x86_64.rpm \
/mnt/AppStream/Packages/libthai-0.1.27-2.el8.x86_64.rpm \
/mnt/AppStream/Packages/libwmf-lite-0.2.9-8.el8_0.x86_64.rpm \
/mnt/AppStream/Packages/libXaw-1.0.13-10.el8.x86_64.rpm \
/mnt/AppStream/Packages/libXcomposite-0.4.4-14.el8.x86_64.rpm \
/mnt/AppStream/Packages/libXcursor-1.1.15-3.el8.x86_64.rpm \
/mnt/AppStream/Packages/libXdamage-1.1.4-14.el8.x86_64.rpm \
/mnt/AppStream/Packages/libXfixes-5.0.3-7.el8.x86_64.rpm \
/mnt/AppStream/Packages/libXft-2.3.2-10.el8.x86_64.rpm \
/mnt/AppStream/Packages/libXi-1.7.9-7.el8.x86_64.rpm \
/mnt/AppStream/Packages/libXinerama-1.1.4-1.el8.x86_64.rpm \
/mnt/AppStream/Packages/libxkbfile-1.0.9-9.el8.x86_64.rpm \
/mnt/AppStream/Packages/libXmu-1.1.2-12.el8.x86_64.rpm \
/mnt/AppStream/Packages/libXrandr-1.5.1-7.el8.x86_64.rpm \
/mnt/AppStream/Packages/libXrender-0.9.10-7.el8.x86_64.rpm \
/mnt/AppStream/Packages/libXtst-1.2.3-7.el8.x86_64.rpm \
/mnt/AppStream/Packages/libXv-1.0.11-7.el8.x86_64.rpm \
/mnt/AppStream/Packages/libXxf86dga-1.1.4-12.el8.x86_64.rpm \
/mnt/AppStream/Packages/libXxf86misc-1.0.4-1.el8.x86_64.rpm \
/mnt/AppStream/Packages/libXxf86vm-1.1.4-9.el8.x86_64.rpm \
/mnt/AppStream/Packages/mcpp-2.7.2-20.el8.x86_64.rpm \
/mnt/AppStream/Packages/OpenEXR-libs-2.2.0-11.el8.x86_64.rpm \
/mnt/AppStream/Packages/openjpeg2-2.3.1-6.el8.x86_64.rpm \
/mnt/AppStream/Packages/pango-1.42.4-6.el8.x86_64.rpm \
/mnt/AppStream/Packages/pixman-0.38.4-1.el8.x86_64.rpm \
/mnt/AppStream/Packages/urw-base35-bookman-fonts-20170801-10.el8.noarch.rpm \
/mnt/AppStream/Packages/urw-base35-c059-fonts-20170801-10.el8.noarch.rpm \
/mnt/AppStream/Packages/urw-base35-d050000l-fonts-20170801-10.el8.noarch.rpm \
/mnt/AppStream/Packages/urw-base35-fonts-20170801-10.el8.noarch.rpm \
/mnt/AppStream/Packages/urw-base35-fonts-common-20170801-10.el8.noarch.rpm \
/mnt/AppStream/Packages/urw-base35-gothic-fonts-20170801-10.el8.noarch.rpm \
/mnt/AppStream/Packages/urw-base35-nimbus-mono-ps-fonts-20170801-10.el8.noarch.rpm \
/mnt/AppStream/Packages/urw-base35-nimbus-roman-fonts-20170801-10.el8.noarch.rpm \
/mnt/AppStream/Packages/urw-base35-nimbus-sans-fonts-20170801-10.el8.noarch.rpm \
/mnt/AppStream/Packages/urw-base35-p052-fonts-20170801-10.el8.noarch.rpm \
/mnt/AppStream/Packages/urw-base35-standard-symbols-ps-fonts-20170801-10.el8.noarch.rpm \
/mnt/AppStream/Packages/urw-base35-z003-fonts-20170801-10.el8.noarch.rpm \
/mnt/AppStream/Packages/xorg-x11-fonts-100dpi-7.5-19.el8.noarch.rpm \
/mnt/AppStream/Packages/xorg-x11-fonts-ISO8859-1-100dpi-7.5-19.el8.noarch.rpm \
/mnt/AppStream/Packages/xorg-x11-font-utils-7.5-40.el8.x86_64.rpm \
/mnt/AppStream/Packages/xorg-x11-server-utils-7.7-27.el8.x86_64.rpm \
/mnt/AppStream/Packages/xorg-x11-utils-7.5-28.el8.x86_64.rpm \
/mnt/AppStream/Packages/xorg-x11-xkb-utils-7.7-27.el8.x86_64.rpm \
/mnt/BaseOS/Packages/avahi-libs-0.7-19.el8.x86_64.rpm \
/mnt/BaseOS/Packages/cups-libs-2.2.6-33.el8.x86_64.rpm \
/mnt/BaseOS/Packages/gdk-pixbuf2-2.36.12-5.el8.x86_64.rpm

つか、これまでずっとImageMagickを使ったサービスを入れてるんだから消さないでほしいんだよね。

tcp-wrapperの設定

使えません。なので、telnetやsshやftpのアクセス制限は、xinetd.dを経由させて、only_fromパラメーターで制限してください。

▽ここを参考にしました。ありがとうございました。
https://toaruhetare.net/9262

BINDのインストール

cd /mnt
rpm -ivh \
AppStream/Packages/bind-9.11.13-3.el8.x86_64.rpm \
AppStream/Packages/bind-libs-9.11.13-3.el8.x86_64.rpm \
AppStream/Packages/bind-utils-9.11.13-3.el8.x86_64.rpm \
AppStream/Packages/bind-libs-lite-9.11.13-3.el8.x86_64.rpm \
AppStream/Packages/bind-license-9.11.13-3.el8.noarch.rpm \
AppStream/Packages/python3-bind-9.11.13-3.el8.noarch.rpm

・起動します
systemctl start named
systemctl enable named

・named.confのオリジナルを保存
大幅に設定をミスって最初の状態に戻したい場合がよくあるので、最初から入っているファイルは残しておく方が無難です。
cd /etc
cp named.conf named.conf_org

・ローカルネットからのlookupを有効にする
vi named.conf

頭にこれを追加
acl localnet {
192.168.0.0/24;
127.0.0.1;
};

allow-query     { localhost; };
を
allow-query     { localnet; };
に変更。

listen-on port 53 { 127.0.0.1; };
を
listen-on port 53 { 127.0.0.1; 192.168.0.40; };
に変更。

ただし192.168.0.40は例です。実際にはお使いのサーバーのIPアドレスにしてください。

・IPv6非対応にする
これをやっておかないと、/var/log/messageがBIND関係のエラーの山になります。ただし、この設定は一時的なもので、将来IPv6を使う事が当たり前になった場合は、この設定はしません。
vi /etc/sysconfig/named

OPTIONS="-4" ←追記する

・再起動
systemctl restart named

・ちゃんとできたか確認
自分自身からと、ネットワーク内の他のサーバーからの両方でテストします。
nslookup google.com 192.168.0.40
ただし192.168.0.40は例です。実際にはお使いのサーバーのIPアドレスにしてください。

apacheのインストール

RPMで入れてしまえば一発なのですが、apache、PostgreSQL、PHPに関してはコンパイルオプションに独自のものを使いたいのと、脆弱性が発見される毎に頻繁にバージョンアップさせたいので、ソースからコンパイルしてインストールします。特にapacheに関してはDVDに標準で入っているバージョンは攻撃を受けやすいため、できる限り避けます。

cd /home/mente/work/targz
wget https://downloads.apache.org//httpd/httpd-2.4.43.tar.gz
tar xvzf httpd-2.4.43.tar.gz
cd httpd-2.4.43
./configure \
--enable-modules=all \
--enable-so \
--enable-ssl \
--enable-rewrite \
--with-expat=builtin \
--with-apr=/usr \
-with-pcre=/usr
make
make install

・SSLキー作成
cd /usr/local/apache2/conf
mkdir sslkey
cd sslkey
openssl md5 /var/log/messages > rand.dat
openssl genrsa -rand rand.dat -des3 1024 > key.pem
(パスフレーズは123456)
cp key.pem key_in_pass.pem
openssl rsa -in key.pem -out key.pem
(パスフレーズは123456)

・CSRの作成
openssl req -new -days 365 -key key.pem -out csr.pem
自己証明の時は、質問事項は全部Enterキーで飛ばしてください。商用サーバーの時は、真面目にちゃんと質問された項目を正確に入力してください。バックスペースキーが効かないので慎重に。

・自己証明書の作成
openssl x509 -in csr.pem -out jiko_cert.pem -req -signkey key.pem -days 365
ただ、今どき(2020年6月現在)のブラウザで自己証明書なんか使ってたら、まず警告が出てアクセスできません。

商用サーバーの場合、CSRの質問事項に対して真面目に入力して、ベリサイン等の公的な証明機関に送って正しい証明書を発行してもらう必要があります。当然ですが、その際にはCSRで入力した会社名が実在するかどうかの審査があります。ベリサインの場合、登記簿謄本の提出を求められます。

・ログディレクトリ作成と、ローテーションの設定
useradd apache
mkdir /var/log/apache
chown apache.apache /var/log/apache
vi /etc/logrotate.d/apache

/var/log/apache/*log {
        create 0644 apache apache
        missingok
        sharedscripts
        postrotate
                /bin/kill -HUP `cat /usr/local/apache2/logs/httpd.pid 2>/dev/null` 2> /dev/null || true
        endscript
}

終わったらエラーにならない事を確認します。ここでエラーがあるようだと、ログのローテーションが行われずにログが2Gを越えてapacheが止まったりしますので、注意が必要です。
logrotate -d /etc/logrotate.conf

・自動起動スクリプトの作成
▽ここを参考にしました。ありがとうございました。
http://d.hatena.ne.jp/rougeref/20170815

vi /usr/lib/systemd/system/apache.service

[Unit]
Description=The Apache HTTP Server (/usr/local/apache2)
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)

[Service]
Type=forking
ExecStart=/usr/local/apache2/bin/apachectl start
ExecReload=/usr/local/apache2/bin/apachectl restart
ExecStop=/usr/local/apache2/bin/apachectl stop
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

・起動
systemctl start apache.service
systemctl enable apache.service

・チューニング
vi /usr/local/apache2/conf/httpd.conf

User apache
Group apache
ServerAdmin 管理者のメールアドレス
ServerName ホスト名

<IfModule dir_module>
     DirectoryIndex index.html index.php index.cgi
</IfModule>

AddType application/x-httpd-php .php .html

ErrorLog "/var/log/apache/error.log"
CustomLog "/var/log/apache/access.log" combined
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

▽以下はコメントアウトを解除
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule socache_dbm_module modules/mod_socache_dbm.so
LoadModule socache_memcache_module modules/mod_socache_memcache.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule rewrite_module modules/mod_rewrite.so
Include conf/extra/httpd-ssl.conf
Include conf/extra/httpd-vhosts.conf

・CGIが動かない場合
従来のapacheではmod_cgid.soなしでも標準でCGIが稼働したのですが、現バージョンではmod_cgid.soがないとCGIが動作せずにソースが表示されてしまうようです。

▽ここを参考にしました。ありがとうございました。
http://blog.netandfield.com/shar/2012/08/mod-cgid.html

vi /usr/local/apache2/conf/httpd.conf

▽以下コメントアウトを外します。
LoadModule cgid_module modules/mod_cgid.so

▽以下Scriptsock cgisockのコメントアウトを外します。
<IfModule cgid_module>
    #
    # ScriptSock: On threaded servers, designate the path to the UNIX
    # socket used to communicate with the CGI daemon of mod_cgid.
    #
    Scriptsock cgisock
</IfModule>

    ▽以下はコメントアウトします。
    ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"

▽ここを参考にしました。ありがとうございました。
http://www1.txt-nifty.com/blog/2012/12/apache-242cgi-d.html
http://d.hatena.ne.jp/rougeref/20120521
http://kotsukotsublog.blogspot.com/2013/03/apachecgidunable-to-connect-to-cgi.html

・SSLを動かす
vi /usr/local/apache2/conf/extra/httpd-ssl.conf

SSLCertificateFile /usr/local/apache2/conf/sslkey/jiko_cert.pem
SSLCertificateKeyFile /usr/local/apache2/conf/sslkey/key.pem
ServerAdmin 管理者のメールアドレス
ServerName ホスト名
ErrorLog "/var/log/apache/ssl-error.log"
TransferLog "/var/log/apache/ssl-access.log"
CustomLog "/var/log/apache/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

もっとも、自己証明書なのでSSLが動いたところでブラウザが拒否するでしょうけど・・・。

・バーチャルホストを有効にする
vi /usr/local/apache2/conf/extra/httpd-vhosts.conf

最初から書いてあるバーチャルホストの設定は全てコメントアウト。
最後の行に
Include virtconf.d/*.conf

cd /usr/local/apache2
mkdir virtconf.d
cd virtconf.d
vi バーチャルホスト名.conf

<VirtualHost *:80>
  ServerName バーチャルホスト名
  DocumentRoot /usr/local/apache2/htdocs
  CustomLog /var/log/apache/access.log combined
  ErrorLog /var/log/apache/error.log
</VirtualHost>

たまに、ここから丸コピペして本当に「バーチャルホスト名.conf」というファイルを作って、「動かねえぞゴルァ」って言ってくる人がいますが、バーチャルホスト名.confの部分は「software.aufheben.info.conf」みたいに、お使いのバーチャルホスト名を入れてくださいね。

・パスを通す
vi /etc/profile.d/apache.sh

PATH="$PATH":/usr/local/apache2/bin

ただし、/etc/profile.dに記述したスクリプトはログイン時に有効になるので、いったんtelnetを抜けて入り直します

入り直した後、apachectlというコマンドがパスなしで直接使えれば成功です。

・短いkey.pemが使えるようにする
CentOS7まではここまでで十分だったのですが、CenOS8ではapacheを動かそうとすると「key.pemが短すぎる」というエラーになるので、短いキーを使えるようにします。
vi /etc/crypto-policies/config

# This file should contain a single keyword, the crypto policy to
# be applied by default to applications. The available policies are 
# restricted to the following profiles.
#
# * LEGACY: Ensures maximum compatibility with legacy systems (64-bit
#   security)
#
# * DEFAULT: A reasonable default for today's standards (112-bit security).
#
# * FUTURE: A level that will provide security on a conservative level that is
#   believed to withstand any near-term future attacks (128-bit security).
#
# * FIPS: Policy that enables only FIPS 140-2 approved or allowed algorithms.
#
# After modifying this file, you need to run update-crypto-policies
# for the changes to propagate.
#
LEGACY
↑
DEFAULTをLEGACYに変更 

update-crypto-policies

ただし、そこまでしなくともプロンプトから
update-crypto-policies --set LEGACY
と入力すれば自動的に/etc/crypto-policies/configを直してくれます。この場合、最初からあるコメント文は全部消えます。

・セキュリティポリシーが本当にレガシーになったか確認する
update-crypto-policies --show

・文法チェック
/usr/local/apache2/bin/apachectl configtest

・再起動
systemctl restart apache

この時、もし
Warning: The unit file, source configuration file or drop-ins of apache.service changed on disk. Run 'systemctl daemon-reload' to reload units.
と表示された時は、apache.serviceファイルの読み込みに失敗しているので、
systemctl daemon-reload
とやって、もう1回
systemctl restart apache
とやってみてください。

・ちゃんと動いてるかどうか確認
ps ax | grep httpd

7762 ? Ss 0:00 /usr/local/apache2/bin/httpd -k start
7763 ?        S      0:00 /usr/local/apache2/bin/httpd -k start
7764 ?        Sl     0:00 /usr/local/apache2/bin/httpd -k start
7765 ?        Sl     0:00 /usr/local/apache2/bin/httpd -k start
7766 ?        Sl     0:00 /usr/local/apache2/bin/httpd -k start

・CGIソケットが動作しているかどうか確認
ls /usr/local/apache2/logs/
cgisock.4300
ここで4300は実際にはプロセスIDが入ります。

PostgreSQLのインストール

cd /home/mente/work/targz
wget https://ftp.postgresql.org/pub/source/v12.3/postgresql-12.3.tar.gz
tar xvzf postgresql-12.3.tar.gz
cd postgresql-12.3
./configure
make
make install

・データーベース初期化
useradd postgres
chmod 777 /usr/local/pgsql
su - postgres
/usr/local/pgsql/bin/initdb --encoding=EUC_JP --no-locale -D /usr/local/pgsql/data
exit
chmod 755 /usr/local/pgsql

・ログのローテーションの設定
mkdir /var/log/pgsql
chown postgres.postgres /var/log/pgsql
vi /etc/logrotate.d/postgres

/var/log/pgsql/*log {
    create 0644 postgres postgres
    missingok
    sharedscripts
    postrotate
        /bin/kill -HUP `head -1 /usr/local/pgsql/data/postmaster.pid  2> /dev/null` 2> /dev/null || true
    endscript
}

エラーが出ない事を確認
logrotate -d /etc/logrotate.conf

・自動起動スクリプトの作成
▽ここを参考にしました。ありがとうございました。
http://d.hatena.ne.jp/rougeref/20170815

vi /usr/lib/systemd/system/postgresql.service

[Unit]
Description=PostgreSQL Database Server (/usr/local/pgsql/)

[Service]
Type=forking
User=postgres
ExecStart=/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /var/log/pgsql/postgres.log start
ExecStop=/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -m fast stop
ExecReload=/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -m fast restart
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

/etc/rc.d/init.dに書いていた時代とは異なり、ExecStart=の後にsuコマンドを入れるとエラーになってしまうので、実行するユーザーは
User=postgres
として指定します。これによって、systemdがユーザーを切り替えてから実行してくれます。

▽ここを参考にしました。ありがとうございました。
http://engineer-milione.com/tips/centos7postgres.html

・起動
systemctl start postgresql.service

・動作確認
ps ax | grep postgres
もしpostgresが常駐してないようなら、ログを見て問題を修正します。
cat /var/log/pgsql/postgres.log

・サーバー起動時に自動起動
systemctl enable postgresql.service

・パスを通す
PostgreSQL関係のコマンド(psqlやpg_dumpやvacuumdbなど)をフルパスで入力しなくても良いように、パスを通しておきます。
vi /etc/profile.d/postgresql.sh

export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$POSTGRES_HOME/data
export MANPATH="$MANPATH":$POSTGRES_HOME/man
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
export PGHOST=127.0.0.1
PATH="$PATH":/usr/local/pgsql/bin

ただし、/etc/profile.dに記載したスクリプトはログイン時に有効になるので、いったんtelnetを抜けて入りなおします。入りなおしたら、
psql -U postgres -l
としてパスが通っている事を確認します。

・PostgreSQL8からの互換性のない変更
PostgreSQL9以降からは、psql、pg_dump、vacuumdbコマンドにホストの指定(-h ホスト)が必須となっています。ホストを指定しないと、 「TCP/IP connections on port 5432?」というエラーになってしまいます。

しかし、これではいささか面倒なので、/etc/profile.d/postgresql.shに
export PGHOST=127.0.0.1
を追加しています。

ただし、/etc/profile.d/postgresql.shはtelnetやsshでログインした時に自動的に実行されるスクリプトであって、crontab内では使うことができません。もしcrontabでpg_dumpやvacuumdbをする場合は、pg_dumpやvacuumdbコマンドに -h 127.0.0.1を入れましょう。

.soファイルの場所をシステムに記憶させます。そうしないと、DBD::Pg等でエラーが出る場合があります。
vi /etc/ld.so.conf.d/postgres.conf

/usr/local/pgsql/lib

ldconfig

・DBD::Pgのインストール
DBD::Pgは今ソースからコンパイルしてインストールしたバージョンのPostgreSQLとリンクしなければならないので、DBD::Pgもまたソースからコンパイルして入れます。

cd /home/mente/work/targz
wget https://www.cpan.org/modules/by-module/DBD/DBD-Pg-3.9.1.tar.gz
tar xvzf DBD-Pg-3.9.1.tar.gz
cd DBD-Pg-3.9.1
perl Makefile.PL
make
export DBI_DSN='dbi:Pg:dbname=template1;port=5432;host=127.0.0.1'
export DBI_USER=postgres
make test
make install

PHP7.4のコンパイル&インストール

cd /home/mente/work/targz/
wget https://www.php.net/distributions/php-7.4.7.tar.gz
tar xvzf php-7.4.7.tar.gz
cd php-7.4.7
vi mkphpconf

./configure                                      \
--disable-debug                                  \
--enable-bcmath                                  \
--enable-calendar                                \
--enable-ctype                                   \
--enable-exif                                    \
--enable-ftp                                     \
--enable-gd                                      \
--enable-mbstring                                \
--enable-shared                                  \
--enable-shmop                                   \
--enable-soap                                    \
--enable-sockets                                 \
--enable-static                                  \
--enable-sysvmsg                                 \
--enable-sysvsem                                 \
--enable-sysvshm                                 \
--with-apxs2=/usr/local/apache2/bin/apxs         \
--with-bz2                                       \
--with-config-file-path=/etc                     \
--with-curl                                      \
--with-db4=shared,/usr/local                     \
--with-expat                                     \
--with-freetype                                  \
--with-gettext                                   \
--with-iconv-dir=/usr                            \
--with-jpeg                                      \
--with-kerberos                                  \
--with-layout=GNU                                \
--with-ldap=shared,/usr/local                    \
--with-openssl                                   \
--with-pear=/usr/share/php                       \
--with-pgsql=/usr/local/pgsql                    \
--with-xmlrpc                                    \
--with-xsl                                       \
--with-zlib                                      \
--with-zlib-dir=/usr

configureオプションが前回のPHP7.2の時と一部変更になっていますので、それに合わせて変更しています。(--with-gd=/user/local → --enable-gd など)

chmod 755 mkphpconf
./mkphpconf
ここでエラーが出ない事を確認します。特にPHPのconfigureは、すぐにアレがないコレがないとか言ってエラーばっかり吐くので注意が必要です。

エラーがなければコンパイルします。
make

コンパイルが通ったら
make test
make install
cp php.ini-development /etc/php.ini

・トラブルシューティング
・「libiconv_closeという関数はない」というエラーが出た場合
PHP7.2まではlibiconvを/usr/lib64から探してくれず、泣く泣くソースからコンパイルして/usr/local以下に入れていたのですが、PHP7.4では/usr/local/にソースからコンパイルしたlibiconvが入っているとエラーになってしまうので、/usr/local/include/iconv.hを別の名前(なんでも良い)にリネームします。

・DB4のバージョンが合わないというエラーが出た場合
DB4をソースからコンパイルして/usr/local以下にインストールします。

・「onigurumaがない」というエラーが出た場合
onigurumaのdevelパッケージをネットからwgetして入れておきます。develパッケージはDVDに入ってないので注意が必要です。onigurumaの場合は逆に/usr/localからは探してくれないので、ソースからコンパイルせずにRPMを/usr/lib64に入れないとダメみたいです。

・/usr/lib/rpm/redhat/redhat-hardened-ldがないと出た場合
rpm-buildパッケージが入ってません。RPMからインストールしてください。

なお、PHP7.4ではGD2ライブラリを/usr/lib64からも探してくれるので、PHP7.2の時のようなわざわざGD2をソースからコンパイルして/usr/local/libに入れておく必要はなくなりました。

それにしても、PHPのconfigureスクリプトは、ものによってソースからコンパイル・インストールした時に入る/usr/local/libからしか探してくれなかったり、 RPMからインストールした時に入る/usr/lib64からしか探してくれなかったりするので毎回泣かされます。 全てのオプションで「--with-なんとか=/usrとか/usr/local」みたいにライブラリを探す場所を指定できるようにするべきでしょう。

こういう所(自分のウェブサイト)でぶつぶつ言ってると、そのうち開発者の目にとまっていつのまにか直してたりするので、期待して待つ事にしましょう。

・チューニング
vi /etc/php.ini

error_log = /var/log/apache/php-error.log
file_uploads = On
short_open_tag = On
session.auto_start = 1
session.gc_maxlifetime = 3600
session.use_trans_sid = 1
session.cache_limiter = private, must-revalidate
upload_max_filesize = 100M
post_max_size = 200M
date.timezone = Asia/Tokyo
mbstring.http_output = SJIS-win
mbstring.internal_encoding = SJIS-win
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
default_charset = ""

・default_charset=""
デフォルトではdefault_charset = "UTF8"と記述されていますが、これがあるとブラウザに対してcontent-type: text/html; charset=utf-8を出力してしまい、utf8以外で書かれたページは全て文字化けを起こしてしまいます。

当サイトでは、ほとんどのページがシフトJISなため、default_charset = ""としてブラウザに文字コードヘッダーを出力させないようにします。

▽ここを参考にしました。ありがとうございました。
http://scribble.washo3.com/linux/web-garbled-characters-apacheweb-garbled-character-apache.html

・short_open_tag
「PHP5.4からこの項目は削除された」と他のサイトに書いてあったので、それを鵜呑みにしてこのサイトでもこれまでずっと「PHP5.4から削除されました」と書いていたのですが(人のせいにするな?)、どうやらガセネタだったようです。

しかしデフォルトがOffになっているので、Onと書き換えます。つか、自分のサーバー上のPHPはもう全部<?で開始してるので、いまさらオフにはできません。

・register_globals
これは本当になくなったようです。register_globals=On前提で作ってあるスクリプトは全部修正しなければなりません。

・apacheを再起動
apachectl stop
apachectl start

PHPが入ってない時に新規に入れる場合、restartではなく、いったんstopしてstartしないとうまく動作しないようです。

この後、ネットワーク内のWindowsパソコンから、
http://192.168.0.40/
https://192.168.0.40/
でアクセスできるかどうか確認します。ただし、自己証明なのでhttpsは警告が出て表示されないと思います。
注意:
192.168.0.40はあくまで例です。お使いのIPアドレスに合わせて読み替えてください。

PHPを入れる前にapacheにアクセスしてしまうと、ブラウザがヘッダー
AddType application/x-httpd-php .php .html
を解釈できず、ブラウザで開かずにダウンロードになってしまうのと、ブラウザがヘッダーを解釈できなかった事を覚えてしまうので、その場合はいったんブラウザのキャッシュをクリアしてから再度アクセスしてください。

バックアップディスクの追加

いったんサーバーの電源を切って、シャーシを開けて、バックアップ用ディスクをサーバーに入れて、SATAケーブルを接続します。以後は、バックアップ用ディスクが既にサーバーに装着済みであるとして話を進めます。

・バックアップ用ディスクがsd何かを調べる。
fdisk -l | grep GiB

ディスク /dev/sdb: 931.5 GiB, 1000204886016 バイト, 1953525168 セクタ
ディスク /dev/sda: 931.5 GiB, 1000204886016 バイト, 1953525168 セクタ
ディスク /dev/sdh: 232.9 GiB, 250059350016 バイト, 488397168 セクタ
ディスク /dev/md127: 929.4 GiB, 997918244864 バイト, 1949059072 セクタ
ディスク /dev/md125: 1 GiB, 1074724864 バイト, 2099072 セクタ

バックアップディスクは250Gなので、ここでは/dev/sdhのようです。

バックアップ用に同じ容量のディスクをつけてしまった場合は、容量では判断できないので、RAIDになってるかどうかで判断する事もできます。
cat /proc/mdstat

Personalities : [raid1] 
md125 : active raid1 sdb1[1] sda1[0]
1049536 blocks super 1.0 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk

md126 : active raid1 sda2[0] sdb2[1]
1047552 blocks super 1.2 [2/2] [UU]

md127 : active raid1 sda3[0] sdb3[1]
974529536 blocks super 1.2 [2/2] [UU]
bitmap: 4/8 pages [16KB], 65536KB chunk

unused devices: <none>

としてみて、raidに含まれてないディスクがバックアップ用ディスクという事になります。この例ではsdaとsdbは少なくともバックアップ用ディスクではないという事になります。

・パーティション作成
バックアップ用ディスクにパーティションを作りましょう
fdisk /dev/sdh
コマンド (m でヘルプ): p

ディスク /dev/sdh: 232.9 GiB, 250059350016 バイト, 488397168 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: gpt
ディスク識別子: 3C3543F9-3540-4334-94A9-C15576942EBF

現在はパーティションがないので、新しくパーティションを作ります。

コマンド (m でヘルプ): n
パーティション番号 (1-128, 既定値 1): 
最初のセクタ (34-488397134, 既定値 2048): 2048
最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (2048-488397134, 既定値 488397134): 488397134
新しいパーティション 1 をタイプ Linux filesystem、サイズ 232.9 GiB で作成しました。
コマンド (m でヘルプ): w

最初のセクタも最終セクタも既定値のままで良いでしょう。

うまくいったか確認
fdisk -l

ディスク /dev/sdh: 232.9 GiB, 250059350016 バイト, 488397168 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: gpt
ディスク識別子: 3C3543F9-3540-4334-94A9-C15576942EBF

デバイス   開始位置  終了位置    セクタ サイズ タイプ
/dev/sdh1      2048 488397134 488395087 232.9G Linux ファイルシステム

・フォーマット
mkfs -t xfs /dev/sdh1
注意:このコマンドを丸コピペするのはやめましょう。お使いのディスクのフォーマットしたいデバイス名を調べた上で、デバイス名は置き換えてくださいね。

meta-data=/dev/sdh1              isize=512    agcount=4, agsize=15262347 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=61049385, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=29809, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

・UUIDの確認
blkid | grep sdh1

/dev/sdh1: UUID="5d83842b-ae1a-4657-88ef-2574bedfff58" TYPE="xfs"
PARTUUID="64a49eba-029d-d347-87ca-107e0c3516ae"

・サーバー起動時に自動的にマウントさせる
バックアップ用ディスクのUUIDを/etc/fstabに記載します。
vi /etc/fstab

UUID=5d83842b-ae1a-4657-88ef-2574bedfff58 /backuphdd xfs defaults 0 0

reboot

・うまくいったか確認
df -h

ファイルシス サイズ 使用 残り 使用% マウント位置<
devtmpfs         6.8G     0  6.8G    0% /dev
tmpfs            6.8G  8.0K  6.8G    1% /dev/shm
tmpfs            6.8G  8.9M  6.8G    1% /run
tmpfs            6.8G     0  6.8G    0% /sys/fs/cgroup
/dev/md126       929G   11G  919G    2% /
/dev/sdh1        233G  1.7G  232G    1% /backuphdd
/dev/md125      1023M  6.8M 1017M    1% /boot/efi
tmpfs            1.4G     0  1.4G    0% /run/user/1000

ls /backuphdd
「そのようなディレクトリはありません」とは出ない事を確認します。

バックアップハードディスクが同じサーバー内にあると、ショートや火災等で全データー消失という事も考えられるので、crontabで定期的に遠方にあるサーバーにFTPで転送するように作っておくと、より安全です。

lm_sensorsのインストール

しかし、これはgrubを再構築するので、最悪起動しなくなるかも?? 全部終わった後にそうなるとショックがデカすぎるので、OSをインストール直後にやる方が良いかもしれませんね。

▽ここを参考にしました。ありがとうございました。
https://k-memo-blog.blogspot.com/2015/05/centos7.html
https://mo.kerosoft.com/0196
https://vogel.at.webry.info/201408/article_12.html

・DVDドライブがマウントされてなかったら
mount /dev/cdrom /mnt

mount: /dev/sr0 is write-protected, mounting read-only

・lm_sensorsのインストール
cd /mnt/
rpm -ivh \
BaseOS/Packages/lm_sensors-3.4.0-21.20180522git70f7e08.el8.x86_64.rpm \
BaseOS/Packages/lm_sensors-libs-3.4.0-21.20180522git70f7e08.el8.x86_64.rpm

・grubの再構築
vi /etc/default/grub

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.md.uuid=46ffb918:36e7a60d:9c0887e4:fdb157e2 rd.md.uuid=cb129b1c:8a3c6f98:26f2bb40:3e5091d9 rhgb quiet acpi_enforce_resources=lax"
GRUB_DISABLE_RECOVERY="true"

赤字の部分を足します。それ以外をいじると起動しなくなる恐れがあるので、他の項目は触らないように。ここをしくじると、これまでの作業全部やりなおしになるので、慎重にも慎重を重ねた上で操作してください。

grub2-mkconfig -o /boot/grub2/grub.cfg

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-862.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-862.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-ee353b8023ac45e6acaf42f0fa2d42f4
Found initrd image: /boot/initramfs-0-rescue-ee353b8023ac45e6acaf42f0fa2d42f4.img
done

reboot
再起動後、
sensors-detect
質問が色々出るので、全てyと答えます。
sensors

asus-isa-0000
Adapter: ISA adapter
cpu_fan:        0 RPM

amdgpu-pci-0600
Adapter: PCI adapter
vddgfx:           N/A  
vddnb:            N/A  
temp1:        +33.0°C  (crit = +80.0°C, hyst =  +0.0°C)

k10temp-pci-00c3
Adapter: PCI adapter
Tdie:         +33.2°C  (high = +70.0°C)
Tctl:         +33.2°C  

CPUファンのスピードがCentOSから検出できるかどうかはマザボ(=BIOS)にもよりますが、少なくともこのマザボではダメみたいです。(0RPMになってしまう)

しかし、マザーボードとCPUの温度は検出できるみたいなので、MRTG等に温度変化を記録させる事はできるでしょう。

 fail2banのインストール

・インストール
これまでずっとRPMコマンドを使って依存性を全て自己解決していたのですが、dnfコマンドを使えば依存性は全部自動的に解決してくれるようです。今度から自分もdnfコマンドを使うようにします。

▽ここを参考にしました。ありがとうございました。
https://kojikalog.com/centos8-fail2ban/

dnf -y install epel-release
dnf -y install fail2ban

・起動
systemctl start fail2ban

・設定ファイルの作成
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vi /etc/fail2ban/jail.local

[DEFAULT] ignoreip = 127.0.0.1/8 ::1 192.168.0.0/24 ↑コメントアウトを外してローカルIPを追記 [sshd] enabled = true ←追記 [dovecot] enabled = true ←追記 [postfix-sasl] enabled = true ←postfixを入れている場合は追記(sendmail用はないらしい) [recidive] enabled = true ←追記

自分自身(127.0.0.1/8)や、ローカルIP(192.168.0.0/24)は除外しないと、自分でタイプミスした場合に自分もBANされてしまいます。

sendmailは性善説に基づいて作られているせいか、認証に失敗した記録が残らないためBANできないようです。なので、次からはsendmailではなくpostfixを入れたほうが良さそうです。

・相手にBANさせた事を通知しない
cp /etc/fail2ban/action.d/iptables-common.conf /etc/fail2ban/action.d/iptables-common.local
vi /etc/fail2ban/action.d/iptables-common.local

#blocktype = REJECT --reject-with icmp-port-unreachable ←コメントアウトする blocktype = DROP ←追記する

・ここまでの変更を有効にする
systemctl restart fail2ban

・起動時に自動起動させる
systemctl enable fail2ban
systemctl is-enabled fail2ban

・ちゃんと動作しているか確認
fail2ban-client status
fail2ban-client status sshd

・自分がBANされてしまった
fail2ban-client set [Jail名] unbanip [IPアドレス]
で解除できます。ただし、ローカルIPから繋ぐか、サーバーに直接キーボードとディスプレイを繋いで操作するしかなさそうです。

・ローテーションの設定
最初に「dnf -y install fail2ban」をした時に自動的にやってくれるので必要ないようです。

このページの先頭へ
  広告