~ To be, or not to be, or to let it be. ~ null-i.net |
Linux/ビルドとyumの混在 | |
ソースからのビルドと yum からのインストールの混在について(2017-03-21) 正直、私もまだ手探りの話題です。
yum install/updateできる 1.0.1 と、最新ソースからの 1.1.0 で それでも最新版を入れたい 何か対策を講じる際に、そのヒントになれば幸いです。 仮想ホスト、Docker、その他諸々、を使えばいいじゃない†申し開きもございません。 インストールする場所の指定について†まず、前提として、 configure; make; make insall; という流れの中の最初、./configure の各オプションで、 ここでインストール先のディレクトリ(prefixなどで指定)をはじめとした コマンドの優先順位について†PATHでコントロールできるよね、という話です。 まず前提条件として、前述のような新旧の openssl が入った状態です。 私の環境だと /usr/local 側が優先されています。 env | grep PATH 環境変数PATH で /usr/local/bin よりも後半に /usr/bin あるのが確認できます。 また、共有ライブラリは これらである程度は新・旧をコントロールできると思います。 ・・・ある程度、としか言えないのは、やっぱり各パッケージの実装方法次第だからです。 ビルドの優先順位について†make できない、困った、という話です。 話が再び、ソースのビルドに戻りますが、 # ./configure --with-openssl=/usr # make (中略) ../../src/ssl/gadgets.h:83:45: error: ‘CRYPTO_LOCK_X509’ was not declared in this scope typedef LockingPointer<X509, X509_free_cpp, CRYPTO_LOCK_X509> X509_Pointer; config.logを見ても ・・・解せぬ。 ここで脱線、少し実験をします。 # vi test.c (以下、C でハローワールドを作成) #include <stdio.h> int main() { printf("Hello World!\n"); } # gcc -v test.c (以下、コンパイル時の詳細出力からの抜粋です) #include <...> search starts here: /usr/lib/gcc/x86_64-redhat-linux/x.x.x/include /usr/local/include /usr/include End of search list. つまり、この環境ではシステムのデフォルトとして、 この順序に割り込む方法として環境変数 CPATH がありますが、 # export CPATH=/usr/include # gcc -v test.c (中略) ignoring duplicate directory "/usr/include" as it is a non-system directory that duplicates a system directory システムデフォルトのPATH(/usr/include)は定義しても無視されてしまいました。 # mkdir /my_path/my_include # cp -pir /usr/include/openssl /my_path/my_include/ # export CPATH=/my_path/my_include (中略) #include <...> search starts here: /my_path/my_include /usr/lib/gcc/x86_64-redhat-linux/x.x.x/include /usr/local/include /usr/include End of search list. もっとスマートな方法もありそうですが、とにかく、 これで、squid の話にもどって # mkdir /my_path/my_include # cp -pir /usr/include/openssl /my_path/my_include/ # export CPATH=/my_path/my_include # ./configure --with-openssl=/usr # make これで古いバージョンのincludeヘッダを読ませることができました。 ちなみに同じ混在環境の dovecot-2.2.28 の場合は、その逆?で 新旧混在で、どんな不測の事態が起きるのかまだ分かりませんが、 ただ、少なくとも前述の通り、めんどくさいです 以上、ご参考まで。 |
|