Maybe you could make this a MR?

  Barry



> On Aug 28, 2020, at 2:17 PM, Hapla Vaclav <vaclav.ha...@erdw.ethz.ch> wrote:
> 
> On MacOS, maybe you also have lots of firewall popups appearing/disappearing 
> when running tests like
>   Do you want the application "ex29" to accept incoming network connections?
> 
> They are annoying, disturbing, slowing down, and virtually making any other 
> work on the computer impossible (and driving me crazy).
> 
> There is not much information about this issue. Usually the hints involve 
> enabling each application separately in Firewall settings (no support for 
> wildcards), which is virtually impossible to do with all PETSc test 
> executables (and not really working for me).
> 
> Some guys suggest signing the app using codesign 
> <https://apple.stackexchange.com/a/150711> which also didn't work for me.
> 
> But I have finally found a reliable solution. So I'm sharing it, also for my 
> own reference - not sure whether it could be added to PETSc directly in some 
> form.
> 
> It consists in applying a small makefile patch (below) which uses MacOS 
> firewall CLI (which is not much advertised). This way, make adds the 
> executable to the firewall whitelist right after it's produced by a linker. 
> 
> It uses sudo so it asks for your password for the first time.
> 
> Please let me know if you have a better solution - except of disabling the 
> firewall ;-) - or other comments/questions.
> 
> See also
> * man socketfilterfw <http://www.manpagez.com/man/8/socketfilterfw/>
> * 
> https://krypted.com/mac-security/command-line-firewall-management-in-os-x-10-10/
>  
> <https://krypted.com/mac-security/command-line-firewall-management-in-os-x-10-10/>
> 
> Vaclav
> 
> 
> 
> diff --git a/gmakefile.test b/gmakefile.test
> index 95ff59b4ab..c513a0bc0c 100644
> --- a/gmakefile.test
> +++ b/gmakefile.test
> @@ -192,18 +192,37 @@ $(TESTDIR)/snes/tests/ex1: PETSC_TEST_LIB = 
> $(PETSC_SNES_LIB)
>  $(TESTDIR)/ts/tests/ex2: PETSC_TEST_LIB = $(PETSC_TS_LIB)
>  $(TESTDIR)/tao/tutorials/ex1: PETSC_TEST_LIB = $(PETSC_TAO_LIB)
>  
> +define macos-firewall-register
> +  @APP=$(call abspath, $(1)); \
> +    FW=/usr/libexec/ApplicationFirewall/socketfilterfw; \
> +    if ! $$FW --getappblocked $$APP | grep 'is permitted' > /dev/null; then \
> +      sudo $$FW --add $$APP && \
> +      sudo $$FW --unblock $$APP; \
> +    fi
> +endef
> +
> +# Ensure mpiexec.hydra and test executable is on firewall list
> +define macos-firewall-fix
> +  $(call macos-firewall-register, $(shell which mpiexec.hydra))
> +  $(call macos-firewall-register, $(1))
> +endef
> +
>  # Test executables
>  $(testexe.F) $(testexe.F90) : $(TESTDIR)/% : $(TESTDIR)/%.o $$^ 
> $(libpetscall)
>         $(call quiet,FLINKER) -o $@ $^ $(PETSC_TEST_LIB)
> +       $(call macos-firewall-fix,$@)
>  
>  $(testexe.c) $(testexe.cu) : $(TESTDIR)/% : $(TESTDIR)/%.o $$^ $(libpetscall)
>         $(call quiet,CLINKER) -o $@ $^ $(PETSC_TEST_LIB)
> +       $(call macos-firewall-fix,$@)
>  
>  $(testexe.kokkos.cxx) : $(TESTDIR)/% : $(TESTDIR)/%.o $$^ $(libpetscall)
>         $(call quiet,PETSC_LINK.kokkos.cxx) -o $@ $^ $(PETSC_TEST_LIB)
> +       $(call macos-firewall-fix,$@)
>  
>  $(testexe.cxx) : $(TESTDIR)/% : $(TESTDIR)/%.o $$^ $(libpetscall)
>         $(call quiet,CXXLINKER) -o $@ $^ $(PETSC_TEST_LIB)
> +       $(call macos-firewall-fix,$@)
>  
>  # Fortran source files need petsc*.mod, which isn't explicitly managed in 
> the makefile.
>  $(foreach pkg, $(pkgs), $(call concattestlang,$(pkg),F F90)) : $(libpetscall)

Reply via email to