
申し訳ありませんが、私はシステム管理の初心者で、Linux もまったくの初心者です (初心者)。何が原因なのかまったくわからないので、皆さんに助けを求めています (すでに述べたように、私は Linux もまったくの初心者です)。GUI をインストールしようとしたときに、誤って (幸運にも) タスクセルで何かを削除してしまい、その後、いくつか (少なくとも覚えているもの) を再インストールしました。現在、apache2 が起動しません。
/etc/apache2/apache2.confの146行目の構文エラーは次のようになります
/etc/apache2/mods-enabled/php7.1.loadの3番目のエラーは次のようになります
確かに、/usr/lib/apache2/modules/ には「libphp7.1」のようなファイルは存在せず、「libphp8.1」のみ存在します (スクリーンショットが新しくて申し訳ありません)。どなたか、今何をすべきか教えていただけませんか? 設定ファイルを 7.1 から 8.1 に変更しますか、それとも 7.1 をインストールしますか?
答え1
おそらく、システム内の PHP バージョンが変更された (Debian/Ubuntu および派生版に適用、他のディストリビューションでは一部のパスが異なる場合があります) が、Apache 構成では変更されていない場合は、次を実行します。
php -v
次のコマンドを実行して、どのバージョンが読み込まれているかを確認します。
ls -l /etc/apache2/mods-enabled/php*
Apacheがロードしているバージョンと異なる場合、結果は次のようになります。
lrwxrwxrwx 1 root root 29 ago 17 12:19 php7.4.conf -> ../mods-available/php7.4.conf
lrwxrwxrwx 1 root root 29 ago 17 12:19 php7.4.load -> ../mods-available/php7.4.load
新しいバージョンが 8.1 になった場合は、実行可能なモジュールを確認してください。
ls -l /etc/apache2/mods-available/
-rw-r--r-- 1 root root 855 jun 13 08:43 php7.4.conf
-rw-r--r-- 1 root root 102 jun 13 08:43 php7.4.load
-rw-r--r-- 1 root root 855 ago 15 07:24 php8.1.conf
-rw-r--r-- 1 root root 101 ago 15 07:24 php8.1.load
リストには古いもの(動作しない)と新しいphp8.1が表示されます。次のコマンドを実行して、新しいバージョンのモジュールへの新しいシンボリックリンクを作成します。
sudo ln -s /etc/apache2/mods-available/php8.1.conf /etc/apache2/mods-enabled/php8.1.conf
sudo ln -s /etc/apache2/mods-available/php8.1.load /etc/apache2/mods-enabled/php8.1.load
古いシンボリックリンクを削除する
sudo rm /etc/apache2/mods-enabled/php7.4.*
Apacheを再起動します
sudo service apache2 restart
答え2
libphp-7.1.so
システムに存在しないか、Apache が見つけられるように設定されていない場所に存在します。何かのアップグレード中に削除された可能性がありますが、特定するのは困難です。
Linux サーバー上で PHP を管理するのは大変だということがわかってきました。特に Ubuntu LTS (これはあなたのディストリビューションかもしれませんし、そうでないかもしれません。これは私の見解です) のような場合、LTS の安定性は得られますが、その後、正しく動作するために「パッケージ X」の新しい機能に依存する他のソフトウェアの新しいリリースに数か月から数年遅れを取らざるを得ないという苦境に陥ります。以下は、Ubuntu で私が対処する方法です。Redhat、Slack、SuSE、または Yggdrasil Linux を実行している場合、これはあまり役に立ちません。
新しいバージョンの PHP をインストールするだけでは、OS ソフトウェアとの依存関係の問題に遭遇することになります。これらの依存関係が MySQL/MariaDB の機能と衝突し、非常に複雑なレッド ピル型の問題が発生することがあります。上記のコメントにあるように、標準 OS にバンドルされている PHP のバージョンが古すぎて使用できない場合もあります (PHP 8.0 未満では間違いなく該当し、2022 年 3 月 29 日現在、7.4 では確実に問題があります)。また、新しい管理者にとっては、次のような理由で混乱を招きます。「なぜあなたの OS にはこんなに古いソフトウェアが存在しているのでしょうか?」そうですか?Ubuntuはセキュリティ問題をLTSリリースにバックポートしているようですが、確認する特定の CVE は、実際には LTS パッケージで修正されています。特定のパッケージの tarball/git リポジトリで修正が利用可能で既に実装されている場合もありますが、そのパッチ/バックポートは、Ubuntu のメンテナーが実際にそれを deb パッケージにロールインしてインストールできるようにするまで待機中です。リポジトリなしでソフトウェアを帯域外にインストールすることは、セキュリティの観点から危険です。なぜなら、OOB パッケージのアップグレードを忘れないようにするために手動プロセスに頼ることになり、実際にはうまくいかないからです。管理者は去り、人々は忘れます。
幸運なことに、チェコ共和国のDebianメンテナーOndřej Surý(魔法使いのような人)が、Debian/UbuntuシステムでPHPをアップグレードするための基盤をすべて含むリポジトリを自ら作成しました。構成、設定この素晴らしいレポPHPをアップグレードしてもメンテナンスは可能です。ボーナスとして、nginx のそしてアパッチ新しいPHPの機能の一部は、それらのパッケージの変更を必要とするため、彼のリポジトリも参照してください。おそらく上記のリンクの1つでよりよい説明が見つかるでしょうが、いくつかのサイトが手順を説明します必要な Nginx または Apache スタックの変更も同様に行われます。
注意点として、Ondřej Surýリポジトリをインストールする前に、全て現在インストールされているPHP/NginX/Apacheパッケージ(例:(dpkg -l | egrep -i '(apache|nginx|php)'
または同様の呪文apt
aptitude
apt-get
))。これらのパッケージの名前は時々変更され、依存関係によってPHPパッケージのバージョンが混在することがあります。たとえば、文字列2、3バージョン前のPHPパッケージ。手動介入
もちろん、これらすべては OS のアップグレード (例: 「Crazy Camel」 -> 「Damaged Dingo」) によって回避できる場合もありますが、その場合でも、最新の LTS リリースにはサードパーティのスタックに必要な最先端の機能が欠けている可能性があり、同じ状況が続きます。
いずれにせよ、頑張ってください。何かをする前に VM のスナップショットを忘れないでください。