AlmaLinux9に移行

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

以前のOSからデータ移行

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

tar cvzfp httpd.tar.gz httpd

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

tar xvzfp httpd.tar.gz

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

AlmaLinuxの環境整備

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

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

Perl関連の修正

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の更新

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対応

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

# 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

サブドメイン対応

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関連

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

Redirect permanent /blog /d/prof/wp

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

AddDefaultCharset Off

パケットフィルタ

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

mysql関連

サービス起動

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

# systemctl start mysqld

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

# systemctl enable mysqld

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

# systemctl restart mysqld

ユーザアカウント設定

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

# 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;

データのリストア

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

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

$ mysql -u root -p < all_db_dump.sql 

バックアップ設定

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のバージョンアップに伴う対応

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

result[enable] → result['enable']

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

$ php-cgi detail.php id=1670652116

履歴


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-05-05 (金) 09:20:18