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

CentOS8.1のインストール

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にします。


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

/boot/efiは100Mもあれば十分なのですが、最近のハードディスクは容量が有り余っているので、1Gぐらい取っても特に問題はないでしょう。

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

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


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

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

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


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

/boot/efiパーティションをefi system partitionにしていれば、インストーラーが最優先でブートするパーティションをefi system partitionに変更してくれますが、UEFI BIOS搭載でないマザーボードでは自動的に変更されないので、起動時にDELキーを押して手動でブートの優先順位を/boot/efiパーティションのあるハードディスクに変更します。

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

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

ONBOOT=yes
にします。

サーバー機で操作

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

ENABLED=no

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

SELINUX=disabled

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

・サブミッションポートを有効にする
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を内部LAN(192.168.0.xx)からのみにする場合
・telnet,ftp,ssh全許可のルールを廃止
firewall-cmd --zone=public --remove-service=ssh --permanent
firewall-cmd --zone=public --remove-service=telnet --permanent
firewall-cmd --zone=public --remove-service=ftp --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"

ここではローカル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 submission 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

全部終わったらリロード。
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.x86_64.rpm \
AppStream/Packages/telnet-server-0.17-73.el8.x86_64.rpm
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

・Poderosa、Teratermの謎の切断
しかし、Poderosaではバージョン問わず10回に1回しかtelnetで繋がりません。「切断時にペインを閉じる」のチェックを外しておくと、

のように、カーネルのバージョンが表示された直後に切断されてしまいます。TeraTermでも同じ症状でした。

RLoginやSigTermなら問題なく接続できます。もしファイアウォールやtcpwrapperのせいだとしたら、ターミナルソフトで違いが出るはずがないし、そもそもファイアウォールを止めても症状は変わりません。

また、同じCentOS8でも、Core i5搭載の20号機では何の問題もありません。切断されるのは、
[1]Ryzen3搭載の14号機で、
[2]CentOS8を入れて
[3]PoderosaかTeraTermを使った場合
の全ての条件がそろった場合のみです。

アクセス元 結果
CentOS7.5からtelnetコマンド 10回に1回の割合で
Kernel 4.18.0-147.el8.x86_64 on an x86_64
の後に
Connection closed by foreign host.
と出て切れる
自身から telnet localhost
Windows10からTeraTerm 10回に1回の割合で
Kernel 4.18.0-147.el8.x86_64 on an x86_64
と一瞬だけ出て切れる
Windows10からPoderosa
(全バージョン)
Kernel 4.18.0-147.el8.x86_64 on an x86_64
と一瞬だけ出て切れる
ただし1/10の確率で繋がる
Windows10からRLogin 必ず繋がる
Windows10からSigTerm

インストールの仕方やサーバー機に問題があるとしたら、なぜターミナルソフトによっては何の問題もないのか。なぜ、telnetの接続だけがダメなのか不明です。また、PoderosaやTeraTermに問題があるとしたら、なぜ20号機ならば何の問題もないのか不明です。特定の条件がそろった場合のみ起こる不具合なので、原因がさっぱりわかりません。

in.telnetdのマニュアルを見ると、
https://linuxjm.osdn.jp/html/netkit/man8/telnetd.8.html

-D debugmode
このオプションはデバックのために使われる。 これによって telnetd にデバッグ情報を表示させ、 telnetd の動作をユーザが見ることができる。 以下に示すような、いくつかの debugmode がある:
options
telnet オプションのネゴシエーションについての情報が表示される。

というのがあるので設定してみます。

Poderosaの場合

td: send do TERMINAL TYPE                    
td: send do TSPEED                           
td: send do XDISPLOC                         
td: send do NEW-ENVIRON                      
td: recv will TERMINAL TYPE                  
td: recv wont TSPEED                         
td: recv wont XDISPLOC                       
td: recv wont NEW-ENVIRON                    
td: recv will TERMINAL TYPE                  
td: recv do SUPPRESS GO AHEAD                
td: send will SUPPRESS GO AHEAD              
td: recv will SUPPRESS GO AHEAD              
td: send do SUPPRESS GO AHEAD                
td: recv will NAWS                           
td: send do NAWS                             
td: recv suboption NAWS 0 124 (124) 0 47 (47)
td: recv suboption TERMINAL-TYPE IS "xterm"  
td: send do ECHO                             
td: send will STATUS                         
td: send do LFLOW                            
td: recv will ECHO                           
td: recv dont STATUS                         
td: recv wont LFLOW                          
td: simulating recv                          
td: recv will ECHO                           
td: send dont ECHO                           
td: send will ECHO                           

RLoginの場合

td: send do TERMINAL TYPE
td: send do TSPEED
td: send do XDISPLOC
td: send do NEW-ENVIRON
td: recv do BINARY
td: send will BINARY
td: recv will BINARY
td: send do BINARY
td: recv will TERMINAL TYPE
td: recv will TSPEED
td: recv wont XDISPLOC
td: recv will NEW-ENVIRON
td: recv suboption TERMINAL-SPEED IS 38400,38400
td: recv suboption ENVIRON IS 
td: recv suboption TERMINAL-TYPE IS "xterm"
td: send will SUPPRESS GO AHEAD
td: send do ECHO
td: send do NAWS
td: send will STATUS
td: send do LFLOW
td: recv do SUPPRESS GO AHEAD
td: recv will ECHO
td: recv will NAWS
td: recv suboption NAWS 0 151 (151) 0 43 (43)
td: recv dont STATUS
td: recv wont LFLOW
td: simulating recv
td: recv will ECHO
td: send dont ECHO
td: send will ECHO

のように、PoderosaとRLoginでネゴシエーションの内容が若干異なります。また、デバッグモードにしてネゴシエーションの内容を表示させるとPoderosaでも切断されません。

どうも、Ryzen3機(3.7GHz)はCPUが速すぎてネゴシエーション時にソケット通信のタイミングが合わないようです。それなんで、ネゴシエーションの内容を表示させると適度にウェイトがかかってPorderosaでも切れないようです。なので、Core i5機ではCPUがそんなに速くない(2.5GHz)ので切れないようです。

また、RLoginでは
recv suboption TERMINAL-SPEED IS 38400,38400
というふうにターミナルスピードが指定できるのに対し、Poderosaでは
recv wont TSPEED
のようにターミナルスピードを指定できないので、通信速度はCPU任せになっている事も、切断される要因の1つのようです。

他のLinux端末や自身のコンソールからtelnetコマンドで接続を試みると10回に1回の割合で落ちる理由がよくわかりません。やはり回線速度の指定ができないのが原因なのかもしれません。

いずれにしても、Ryzen3 3.7GHzのサーバー+Poderosa+telnetの組み合わせでのみ起こる現象のため、一概にどれが悪いとも言えないのが現状です。telnet自体使ってる人が今や少ないのに、ましてこんな速いCPUのサーバーにtelnetなんていう古いものを入れた人がまだいないのかもしれません。

・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-28.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 ←ひな形にないので最後に追加

・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が止まってしまいます。

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.2.36-10.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
↑コメントアウトを外す

・プレーンテキストパスワードに対応する
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の設定

・wgetのインストール
cd /mnt
rpm -ivh AppStream/Packages/wget-1.19.5-7.el8_0.1.x86_64.rpm

・chronyの取得とインストール
cd /home/mente
mkdir work
cd work
mkdir RPMS
cd RPMS
wget http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/chrony-3.5-1.el8.x86_64.rpm
rpm -ivh 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

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

・cpp、gcc
rpm -ivh \
AppStream/Packages/cpp-8.3.1-4.5.el8.x86_64.rpm \
AppStream/Packages/gcc-8.3.1-4.5.el8.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-9.el8.x86_64.rpm \
BaseOS/Packages/binutils-2.30-58.el8.x86_64.rpm \
BaseOS/Packages/glibc-devel-2.28-72.el8.x86_64.rpm \
BaseOS/Packages/glibc-headers-2.28-72.el8.x86_64.rpm \
BaseOS/Packages/libxcrypt-devel-4.1.1-4.el8.x86_64.rpm \
BaseOS/Packages/kernel-headers-4.18.0-147.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-4.5.el8.x86_64.rpm \
AppStream/Packages/libstdc++-devel-8.3.1-4.5.el8.x86_64.rpm

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

・rpm-build
rpm -ivh \
AppStream/Packages/rpm-build-4.14.2-25.el8.x86_64.rpm \
AppStream/Packages/gdb-headless-8.2-6.el8.x86_64.rpm \
BaseOS/Packages/bzip2-1.0.6-26.el8.x86_64.rpm \
BaseOS/Packages/elfutils-0.176-5.el8.x86_64.rpm \
BaseOS/Packages/patch-2.7.6-9.el8_0.x86_64.rpm \
AppStream/Packages/redhat-rpm-config-120-1.el8.noarch.rpm \
BaseOS/Packages/unzip-6.0-41.el8.x86_64.rpm \
AppStream/Packages/libbabeltrace-1.5.4-2.el8.x86_64.rpm \
AppStream/Packages/guile-2.0.14-7.el8.x86_64.rpm \
AppStream/Packages/libipt-1.6.1-8.el8.x86_64.rpm \
AppStream/Packages/annobin-8.78-1.el8.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/ghc-srpm-macros-1.4.2-7.el8.noarch.rpm \
AppStream/Packages/go-srpm-macros-2-16.el8.noarch.rpm \
AppStream/Packages/ocaml-srpm-macros-5-4.el8.noarch.rpm \
AppStream/Packages/perl-srpm-macros-1-25.el8.noarch.rpm \
AppStream/Packages/python-srpm-macros-3-37.el8.noarch.rpm \
AppStream/Packages/python3-rpm-macros-3-37.el8.noarch.rpm \
AppStream/Packages/qt5-srpm-macros-5.11.1-2.el8.noarch.rpm \
AppStream/Packages/rust-srpm-macros-5-2.el8.noarch.rpm \
AppStream/Packages/openblas-srpm-macros-2-2.el8.noarch.rpm \
BaseOS/Packages/zip-3.0-23.el8.x86_64.rpm \
AppStream/Packages/gc-7.6.4-3.el8.x86_64.rpm \
BaseOS/Packages/libtool-ltdl-2.4.6-25.el8.x86_64.rpm \
AppStream/Packages/libatomic_ops-7.6.2-3.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.1-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/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/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-3.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/libXpm-devel-3.5.12-7.el8.x86_64.rpm \
AppStream/Packages/libXpm-3.5.12-7.el8.x86_64.rpm \
AppStream/Packages/libX11-1.6.7-1.el8.x86_64.rpm \
AppStream/Packages/libX11-common-1.6.7-1.el8.noarch.rpm \
AppStream/Packages/libX11-devel-1.6.7-1.el8.x86_64.rpm \
AppStream/Packages/libXext-1.3.3-9.el8.x86_64.rpm \
AppStream/Packages/libXt-1.1.5-12.el8.x86_64.rpm \
AppStream/Packages/libxcb-1.13-5.el8.x86_64.rpm \
AppStream/Packages/libICE-1.0.9-15.el8.x86_64.rpm \
AppStream/Packages/libSM-1.2.3-1.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/xorg-x11-proto-devel-2018.4-1.el8.noarch.rpm \
AppStream/Packages/libxcb-devel-1.13-5.el8.x86_64.rpm \
AppStream/Packages/libX11-xcb-1.6.7-1.el8.x86_64.rpm

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

・tiff
rpm -ivh \
AppStream/Packages/libtiff-4.0.9-15.el8.x86_64.rpm \
AppStream/Packages/libtiff-devel-4.0.9-15.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 \
BaseOS/Packages/expat-devel-2.2.5-3.el8.x86_64.rpm \
AppStream/Packages/libdb-devel-5.3.28-37.el8.x86_64.rpm \
BaseOS/Packages/openldap-devel-2.4.46-10.el8.x86_64.rpm \
BaseOS/Packages/cyrus-sasl-devel-2.1.27-1.el8.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/openssl-devel-1.1.1c-2.el8.x86_64.rpm \
BaseOS/Packages/krb5-devel-1.17-9.el8.x86_64.rpm \
BaseOS/Packages/zlib-devel-1.2.11-10.el8.x86_64.rpm \
BaseOS/Packages/keyutils-libs-devel-1.5.10-6.el8.x86_64.rpm \
BaseOS/Packages/libcom_err-devel-1.44.6-3.el8.x86_64.rpm \
BaseOS/Packages/libselinux-devel-2.9-2.1.el8.x86_64.rpm \
BaseOS/Packages/libverto-devel-0.3.0-5.el8.x86_64.rpm \
BaseOS/Packages/libsepol-devel-2.9-1.el8.x86_64.rpm \
BaseOS/Packages/libkadm5-1.17-9.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

・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 \
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 \
AppStream/Packages/bitmap-fixed-fonts-0.3-28.el8.noarch.rpm \
BaseOS/Packages/libuuid-devel-2.32.1-17.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-3.el8.x86_64.rpm \
AppStream/Packages/libxml2-devel-2.9.7-5.el8.x86_64.rpm \
AppStream/Packages/libxslt-devel-1.1.32-3.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-3.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-11.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-3.el8.x86_64.rpm \
BaseOS/Packages/sqlite-devel-3.26.0-3.el8.x86_64.rpm \
BaseOS/Packages/sqlite-doc-3.26.0-3.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
標準のDVDには入ってないので、ネットからダウンロードします。ImageMagickには色々と脆弱性が発見されているため、DVDからは削除されてしまったようですが、ネットからはダウンロードできます。
cd /home/mente/work/RPMS
wget https://mirrors.sonic.net/epel/8/Everything/x86_64/Packages/i/ImageMagick-6.9.10.86-1.el8.x86_64.rpm
wget https://mirrors.sonic.net/epel/8/Everything/x86_64/Packages/i/ImageMagick-perl-6.9.10.86-1.el8.x86_64.rpm
wget https://mirrors.sonic.net/epel/8/Everything/x86_64/Packages/i/ImageMagick-libs-6.9.10.86-1.el8.x86_64.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/l/libraqm-0.7.0-4.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 \
/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-6.el8.x86_64.rpm \
/mnt/AppStream/Packages/gdk-pixbuf2-modules-2.36.12-5.el8.x86_64.rpm \
/mnt/AppStream/Packages/glibc32-2.28-42.1.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-39.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-4.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.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.1-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-1.el8.x86_64.rpm \
/mnt/AppStream/Packages/pango-1.42.4-6.el8.x86_64.rpm \
/mnt/AppStream/Packages/pixman-0.36.0-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-28.el8.x86_64.rpm \
/mnt/BaseOS/Packages/gdk-pixbuf2-2.36.12-5.el8.x86_64.rpm

tcp-wrapperの設定

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

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

BINDのインストール

cd /mnt
rpm -ivh \
AppStream/Packages/bind-9.11.4-26.P2.el8.x86_64.rpm \
AppStream/Packages/bind-libs-9.11.4-26.P2.el8.x86_64.rpm \
AppStream/Packages/bind-utils-9.11.4-26.P2.el8.x86_64.rpm \
AppStream/Packages/bind-libs-lite-9.11.4-26.P2.el8.x86_64.rpm \
AppStream/Packages/bind-license-9.11.4-26.P2.el8.noarch.rpm \
AppStream/Packages/python3-bind-9.11.4-26.P2.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

・ちゃんと動いてるかどうか確認
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.6.tar.gz
tar xvzf php-7.4.6.tar.gz
cd php-7.4.6
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のRPMをネットからwgetして入れておきます。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-20.20180522git70f7e08.el8.x86_64.rpm \
BaseOS/Packages/lm_sensors-libs-3.4.0-20.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等に温度変化を記録させる事はできるでしょう。

スポンサーリンク