本番環境で稼働しているレガシーCentos 5 32ビットマシンでApache httpd
をアップグレードする必要があります。公式リポジトリのバージョンはすべて古くなっているので、Dockerコンテナーでコンパイルしようとしています。しかし、それはさまざまな理由で失敗するようです:
1)古いPCRE
バージョンについて文句を言う:
util_pcre.c:128: error: 'PCRE_DUPNAMES' undeclared (first use in this function)
適切な値をpcre.h
に追加してパッチを適用しました。
2)次に、インストールされているバージョンには存在しないflex
の一部の機能について文句を言います。
"/usr/src/httpd-2.4.43/server/util_expr_scan.l", line 32: unrecognized %option: reentrant
"/usr/src/httpd-2.4.43/server/util_expr_scan.l", line 33: unrecognized %option: bison-bridge
flex: could not create
私は難しい問題を解決しようとしていると思うので、どのような代替案がありますか?
静的にhttpd
をCentos 7.x
でコンパイルしてCentos 5.x
マシンで実行しても問題ありませんか?その際に注意点はありますか?他のオプションは、Centos 5.xですべてを最初からコンパイルすることですが、それはいくつかのタスクのようです:)
httpd
マシンをアップグレードするとプッシュバックが発生します-誰かが実行可能な解決策をアドバイスしてくれませんか?
OSをアップグレードする必要があります。これらの汎用LTSオペレーティングシステムを維持するには、10年に1回程度行うことが最低限です。 CentOS 5にはパッチが適用されていないセキュリティの脆弱性があるため、これを行わないことは無責任です。脆弱なソフトウェアに補償セキュリティコントロールを追加することは、アップグレードするよりも多くの作業です。
他の理由でhttpdメジャーアップグレードが必要です。これは、リリースノートを読んで構成を調整し、テストするプロジェクトの一部です。
ソースからコンパイルすると、ビルド、インストール、および保守という作業が追加されます。もちろん、そうすることは自由ですが、EL httpdのビルドほど速く、または十分にテストされていません。そして、あなた自身のビルドは、OSをアップグレードしないという技術的負債を改善しません。
したがって、CentOS 8でWebサーバーを構成し、テストし、カットオーバーします。
これが機能しない場合は、アップグレードしたホストを保持しますが、レガシーソフトウェアを制限します。コンテナの中など。そして、プロジェクトを適切にアップグレードまたは置き換えるプロジェクトを開始します。
CentOSのこのような古いバージョンを実行することによるセキュリティへの影響を認識しておく必要があります。それについては説明しません。怠惰からそれを実行している場合は、@ John Mahowaldの推奨事項に従ってください。
新しいLinuxボックスで静的httpdをコンパイルすると、古いCentOSで実行されますが、コンパイルされたhttpdバイナリだけがその一部にすぎないことに注意してください。通常のファイルに近い追加ファイルがたくさんあります。 、例としてapachectlコマンドを使用するか、httpd.confから要求される可能性のある外部ライブラリを使用します。
また、新しいバージョンのApacheをコンパイルすると、通常は有効なプレフィックスが/ usr/localに設定されるため、PREFIX = /を構築しない限り、新しいバイナリでは、代わりに/ usr/local/etc/httpdからのApache構成ファイルが想定されます。/etc/httpdなどのすべての関連ファイル。
おそらく、あなたの状況で最も簡単な方法は、静的バイナリ全体をビルドしてから、ソースコードディレクトリ全体をCentOS 5にscpし、そこからmake installを実行すると、そこにすべてのファイルがインストールされます./configureの有効なプレフィックスによると、予想されます。