2017-11-08 8 views
0

私はDebianのパッケージングプロセスでいくつかのセキュリティ機能を短絡する必要があります。最初の反応が「セキュリティ機能を無効にしないでください」と「新しいgccでコンパイルするようにプログラムを更新する」ことを知っている理由をここで説明します。古いgcc:CFLAG調整のDebian/Ubuntuパッケージをビルドしますか?

いくつかのライブラリ(http://pj.freefaculty.org/Swarm)をコンパイルするにはgcc-4.6を使用する必要があります。これは従来のObjective-C APIを提供していたgccの最新バージョンです。その後、gccは従来のヘッダーを削除しました。したがって、従来のObjective-Cを使用した非常に大きなコードベースがあるため、「gccをアップグレードする」は受け入れられません。

Ubuntu 17.04では、gcc-4.6は使用できなくなりましたが、私はUbuntuの古いバージョンを "信頼できる"ものにすることでインストールできます。それは正常に動作します。私はプログラムをコンパイルし、古い形式のmake installをインストールすることができます。

しかし、Debianパッケージをビルドするときに問題が発生します。 dpkg-buildpackage -rfakerootを実行すると、通常はパッケージをビルドするために、Debianパッケージシステムにgcc-4.6で合法でないCFLAGSが挿入されたため、私は失敗しました。特に、コマンドラインには-Wdate-time-fstack-protector-strongが含まれていますが、両方ともgcc-4.6と互換性がありません。

ここにconfig.logがあります。

configure:3878: checking whether the C compiler works 
configure:3900: gcc -g -O2 -fdebug-prefix-map=/home/pauljohn/LinuxDownloads/Debian/sources/amd64/swarm-Ubuntu17.04/swarm-2.4.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro conftest.c >&5 
cc1: error: unrecognized command line option '-Wdate-time' 
cc1: error: unrecognized command line option '-fstack-protector-strong 

私はパッケージでdebianディレクトリを検査しましたが、これらのフラグが手動でそこに挿入されていないことがわかりました。私が言うことから、彼らはdpkg-buildpackageと一緒に来ます。

私がコンパイルしようとしているこのライブラリは、まあ、古いプログラムです。私たちが働いたのは、約15年から20年前のサンタフェ研究所との提携です。この古いコードを新しいObjective-Cインターフェイスを使用するように書き直すのは妥当ではないので、gcc-4.6の制限内で生きることが重要です。

私が受け取った最も有益な提案は、Debian/Ubuntuアーキテクチャを削除し、古いgccがより簡単に許容されるRedHatベースのアーキテクチャに移行することです。実際、RedHat 6では、gcc-4.6はいつもよりもいくぶん先行していますが、RedHat 7にはまだgcc-4.6をインストールできます。私はむしろそれを行うことによって、Ubuntuのユーザーを排除しないだろう。

これをナビゲートする方法に関する他のアイデアは高く評価されます。

答えて

1

関連する文書は、あなたは基本的に2つのオプションがありman 1 dpkg-buildflags

です:右フラグを削除することを望んで、

  1. オーバーライド特定ビルド機能dpkgのビルドプロセスの

    export DEB_BUILD_OPTIONS="hardening=-stackprotectorstrong reproducible=-timeless" 
    dpkg-buildpackage -rfakeroot 
    
  2. strip s特定のビルド変数からpecific ビルドフラグ

    export DEB_CPPFLAGS_STRIP="-Wdate-time" 
    export DEB_CFLAGS_STRIP="-fstack-protector-string" 
    export DEB_CXXFLAGS_STRIP="-fstack-protector-string" 
    dpkg-buildpackage -rfakeroot 
    

また、構成ファイルを介して両方の方法を永続化することができます。

+0

ありがとうございました。方法1は意図したとおりに働いた。あなたの助けを借りて、古いSwarmプロジェクトが復活するでしょう。 – pauljohn32

関連する問題