Vor einigen Tagen habe ich mich entschieden, mein MacBook Air (Late 2010) komplett platt zu machen und OS X El Capitan darauf zu installieren.
Nach der Neuinstallation musste ich auch alle meine MacPorts-Packages neu installieren. Leider gab es Probleme bei der Installation des Pakets monit:
$ sudo port install monit Password: ---> Computing dependencies for monit ---> Configuring monit Error: Failed to configure monit, consult /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_sysutils_monit/monit/work/monit-5.12.1/config.log Error: org.macports.configure for port monit returned: configure failure: command execution failed Please see the log file for port monit for details: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_sysutils_monit/monit/main.log To report a bug, follow the instructions in the guide: http://guide.macports.org/#project.tickets Error: Processing of port monit failed
Ein Blick in /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_sysutils_monit/monit/main.log zeigte folgende detailliertere Fehlermeldung:
... :info:configure checking for static SSL support... disabled :info:configure checking for SSL support... enabled :info:configure checking for SSL include directory... Not found :info:configure :info:configure Couldn't find your SSL header files. :info:configure Use --with-ssl-incl-dir option to fix this problem or disable :info:configure the SSL support with --without-ssl :info:configure :info:configure Command failed: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_sysutils_monit/monit/work/monit-5.12.1" && ./configure --prefix=/opt/local :info:configure Exit code: 1 :error:configure Failed to configure monit, consult /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_sysutils_monit/monit/work/monit-5.12.1/config.log :error:configure org.macports.configure for port monit returned: configure failure: command execution failed :debug:configure Error code: NONE :debug:configure Backtrace: configure failure: command execution failed while executing "portconfigure::configure_main org.macports.configure" ("eval" body line 1) invoked from within "eval $procedure $targetname" :info:configure Warning: targets not executed for monit: org.macports.activate org.macports.configure org.macports.build org.macports.destroot org.macports.install :notice:configure Please see the log file for port monit for details: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_sysutils_monit/monit/main.log
Der relevante Teil des Logs:
... :info:configure Couldn't find your SSL header files. :info:configure Use --with-ssl-incl-dir option to fix this problem or disable :info:configure the SSL support with --without-ssl ...
MacPorts openssl war aber installiert und die Header-Files fanden sich im Pfad /opt/local/include/openssl. Den Pfad hatte ich mit einer Suche nach ssl.h ausgemacht.
Nach mehr als einer Stunde Google-Suche war ich immer noch nicht weiter. Da kam mir der Geistesblitz: Das configure-Script von monit wird die SSL-Headers wohl im Standardverzeichnis suchen. Offenbar gibt es dieses Verzeichnis nicht, weshalb die Installation scheitert … wenn ich aber herausfinde, wie das Standardverzeichnis lautet, kann ich dieses mit einem Symlink auf das MacPorts-Verzeichnis umbiegen und die Installation sollte durchlaufen.
Gesagt, getan. Als erstes startete ich in einem Terminal-Fenster die Installation von monit:
$ sudo port install monit
In einem zweiten Tab führte ich dann folgenden Befehl aus, um alle Zugriffe auf das Dateisystem zu loggen:
$ sudo fs_usage
Nachdem das Tab mit dem MacPorts-Befehl wieder „bash“ als Titel anzeigte, stoppte ich fs_usage mit Ctrl-C. Anschliessend kopierte ich den ganzen Text in eine Textdatei, speicherte diese auf dem Desktop ab und begann, den Text zu greppen.
Ganz am Schluss der Aktivitäten kam heraus:
... 18:17:53 stat64 /usr/include/sys/_pthread/_pthread_key_t.h 0.000008 clang 18:17:53 stat64 /usr/include/sys/_types/_fsblkcnt_t.h 0.000008 clang 18:17:53 stat64 /usr/include/sys/_types/_fsfilcnt_t.h 0.000008 clang 18:17:53 stat64 /opt/local/include 0.000013 clang 18:17:53 stat64 /usr/local/include 0.000005 clang 18:17:53 stat64 /usr/local/include 0.000004 clang 18:17:53 stat64 /Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.3.0/include 0.000013 clang 18:17:53 stat64 .app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include 0.000007 clang 18:17:53 stat64 /usr/include 0.000005 clang
/usr/local/include tönte vielversprechend nach einem Standardpfad … und Bingo:
$ cd /usr/local/include -bash: /usr/local/include: No such file or directory
Tönt wie ein Volltreffer. Dann versuchen wir es doch einmal damit:
$ sudo mkdir /usr/local/include $ cd /usr/local/include $ sudo ln -s /opt/local/include/openssl .
Alles bereit für den Versuch? Dann los — et voilà:
$ sudo port install monit ---> Computing dependencies for monit ---> Configuring monit ---> Building monit ---> Staging monit into destroot ---> Creating launchd control script ########################################################### # A startup item has been generated that will aid in # starting monit with launchd. It is disabled # by default. Execute the following command to start it, # and to cause it to launch at startup: # # sudo port load monit ########################################################### ---> Installing monit @5.12.1_1 ---> Activating monit @5.12.1_1 ---> Cleaning monit ---> Updating database of binaries ---> Scanning binaries for linking errors ---> No broken files found.
Die Jungs von homebrew haben die Problematik übrigens direkt im config-File gefixt, und zwar mit dem Parameter --with-ssl-dir, welches auf den openssl-Pfad zeigt:
... def install system "./configure", "--prefix=#{prefix}", "--localstatedir=#{var}/monit", "--sysconfdir=#{etc}/monit", "--with-ssl-dir=#{Formula["openssl"].opt_prefix}" system "make", "install" (share/"monit").install "monitrc" ...
Quelle: homebrew/monit.rb at master