#author("2023-01-10T15:17:21+00:00","default:bokupi","bokupi")
#author("2023-05-05T00:20:18+00:00","default:bokupi","bokupi")
* AlmaLinux9に移行 [#c8e9b87d]

主に自分の備忘録としての内容です。
CentOS6のサポートが切れて久しいので、新しいOSに移行しました。
CentOSは開発中止となったので、AlmaLinuxを代替として選択しました。

** 以前のOSからデータ移行 [#f7925d8a]

必要なデータを、tarで圧縮します。パーミッションは維持しておきます。

 tar cvzfp httpd.tar.gz httpd

新しいサーバで展開します。

 tar xvzfp httpd.tar.gz

apacheなどのアプリケーション設定ファイルは、特に保存しませんでした。
アプリケーションのバージョンが変わって設定方法が変わる可能性があるからです。
面倒でなければ保存しておいた方が安心かと思います。

** AlmaLinuxの環境整備 [#w8b17397]

tarなどのコマンドも初期状態では使えませんので、不足しているコマンド等があれば、逐次インストールします。

 # dnf install tar
 # dnf install php
 # dnf install ruby
 # dnf install mysql-server mysql
 # dnf install php-mysqlnd

** Perl関連の修正 [#tdc8445a]

Perlのバージョンが上がったことで、jcode.plでエラーが出るようになりました。
jacode.plを代わりに使います。

https://metacpan.org/release/INA/jacode-2.13.4.18

色々ファイルがありますが、必要なファイルはjacode.plのみです。
こちらをjcode.plがあるディレクトリに配置し、require対象をjcode.plからjacode.plに書き換えるだけでOKです。

** pukiwikiの更新 [#wdcfd377]

PHP8.1となったので、pukiwikiを1.5.3から1.5.4にアップデートする必要があります。
update_pukiwiki_153to154_eucjp.patch.zip の内容を適用しました。
数箇所衝突が発生しましたが、手動で直せそうなところは直し、対応箇所が見つからない部分は放置しました。
またwikiディレクトリ配下でも衝突が起きていましたが、マニュアル系かと思うので無視します。
パッチで更新した1.5.3なので、こうした衝突が起きたのかと思います。

下記のエラーが発生しましたが、該当ファイルのパーミッションを0666にして解決しました。

 pkwk_chown(): fopen() failed for: CACHEDIR/pkwk_chown.lock

** SSL対応 [#eed3b05e]

必要なパッケージをインストールします。

 # dnf install openssl
 # dnf install mod_ssl
 # dnf install epel-release
 # dnf install certbot
 # dnf install certbot-apache

certbotで証明書を発行する場合、自分がサーバ管理者であることを証明するために、httpd.confをいじる必要があります。~
https://hacknote.jp/archives/48748/

続いてssl.confを更新します。~
https://hacknote.jp/archives/48748/

設定ファイル修正後は、apacheを再起動します。
 # systemctl restart httpd

** サブドメイン対応 [#f5a6f374]

httpd.confにサブドメインの情報を設定します。
とりあえず末尾に追加しておきます。
 # for subdomain
 <virtualHost *:80>
     ServerName album.omoshiro-joho.com
     DocumentRoot /var/www/yyy
     AllowEncodedSlashes On
     <Directory /var/www/yyy>
         SetEnv HTTP_X_FORWARDED_PROTO http
         SetEnv REAL_HOST_NAME album.omoshiro-joho.com
         AllowOverride All
         Require all granted
     </Directory>
 </VirtualHost>
 
ssl.confにサブドメインの情報を設定します。
必要な項目だけで良いです。
 <VirtualHost *:443>
 DocumentRoot "/var/www/yyy"
 ServerName album.omoshiro-joho.com:443
 
 SSLCertificateFile /etc/letsencrypt/live/omoshiro-joho.com/cert.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/omoshiro-joho.com/privkey.pem
 SSLCertificateChainFile /etc/letsencrypt/live/omoshiro-joho.com/chain.pem
 </VirtualHost>

** Apache関連 [#a457f893]

その他の設定を反映します。 リダイレクト設定です。Aliasやシンボリックリンクは相対リンクなど解決できない問題があるので使いません。
 Redirect permanent /blog /d/prof/wp

続いて文字化け対策で、下記を設定します。これが指定されていると、htmlコンテンツ内の文字コード(実際の文字コードやmetaタグによる指定)を無視して、それより手前の段階で文字コードを設定してしまうため、複数の文字コードのページが混在している場合にはOffにする必要があります。
 AddDefaultCharset Off

** パケットフィルタ [#h93e16f6]

ローカル環境でwgetを実行して取得できているのに、外部のPCからHTTPコンテンツを取得できない現象が発生しました。
firewalldが動いていれば、その設定を見直します。
もし動いていない場合は、OSの外側でパケットフィルタが動いていないか確認します。
自分の環境の場合、VPSが提供するパケットフィルタ機能が動いていて、そこでアクセスが遮断されていました。

** mysql関連 [#n2c93454]

*** サービス起動 [#b2711a7e]

まずサービスを起動します。

 # systemctl start mysqld

下記で自動起動設定をします。

 # systemctl enable mysql
 # systemctl enable mysqld

設定変更後などで再起動したい場合は下記です。

 # systemctl restart mysqld

*** ユーザアカウント設定 [#q585c4c6]

管理ユーザを設定します。

 # mysqladmin -u root password "****" 

mysqlクライアントを起動します。

 $ mysql -u root -p
 mysql > CREATE USER 'bokupi'@'localhost' IDENTIFIED BY '****';
 mysql > GRANT ALL PRIVILEGES ON *.* TO 'bokupi'@'localhost' WITH GRANT OPTION;

以前は下記のコマンド1発でユーザを作成できましたが、今はできないようです。

 GRANT ALL PRIVILEGES ON *.* TO 'bokupi'@'localhost' IDENTIFIED BY '****' WITH GRANT OPTION;

*** データのリストア [#u0ea40b2]

mysqldumpでダンプしたSQLデータを用いてリストアします。通常はシステムテーブルを含めた環境一式をそのまま復元できますが、今回はMySQLのバージョンが8に上がったことでシステムテーブルのデータベースエンジンがMyISAMからinnoDBに変わったことでそのまま復元できません。

対応としては、ダンプしたSQLデータからmysqlデータベースの部分(恐らく先頭にある)を削除した上でリストアすることです。
その代わりユーザー設定などは改めて行なう必要があります。

 $ mysql -u root -p < all_db_dump.sql 

*** バックアップ設定 [#z4c2872a]

cronにmysqlのバックアップスクリプトを登録します。~
まずはバックアップスクリプトを用意します。
スクリプトに直接パスワードを書くと下記のWarningが出て気持ち悪いので、外部ファイル(dbaccess.cnf)に設定します。

 mysqldump: [Warning] Using a password on the command line interface can be insecure.

 $ emacs dbaccess.cnf
 [client]
 user = root
 password = ******

 $ emacs backupmysql.sh
 #!/bin/sh
 
 mysqldump --defaults-extra-file=dbaccess.cnf --all-databases > /var/www/mysql/all_db_dump.sql

それからcronに登録します。
 $ crontab -e
 0 3 * * * sh /var/www/mysql/backupmysql.sh 1> /dev/null

** PHPのバージョンアップに伴う対応 [#k8a3b4af]

言語仕様の変化や厳格化により、古いコードに影響が出る場合があります。

 result[enable] → result['enable']

apacheのerror_logに情報は出るはずですが、出ないケースもあるので、php-cgiを使ってデバッグするのが良いです。

 $ php-cgi detail.php id=1670652116

----

** 履歴 [#i715743f]
- 2023/01/07 bokupi : 新規作成

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS