Impossibile impostare DYLD_FALLBACK_LIBRARY_PATH nella shell su OSX 10.11.1


11

Negli script di shell utilizzati per i test di unità con librerie dinamiche in una directory diversa dal tipico @rpath, in precedenza sono stato in grado di impostare DYLD_FALLBACK_LIBRARY_PATH per impostare la directory contenente le librerie. In 10.11.1, bash sembra ignorare i tentativi di impostare questa variabile d'ambiente:

$ sh -x testscript.sh
+ DYLD_FALLBACK_LIBRARY_PATH=/Users/something/testinglibs
+ export DYLD_FALLBACK_LIBRARY_PATH
+ exec printenv

e DYLD_FALLBACK_LIBRARY_PATH non è presente nell'output di printenv.

È un hack relativo alla sicurezza nella shell di 10.11? Non sono stato in grado di trovare questa modifica documentata nelle pagine man o online.



Certo, install_name_tool è una soluzione permanente (e l'ho effettivamente copiato per configurare l'ambiente di compilazione). Per i test rapidi e il debug in un ambiente di sviluppo, è una seccatura dover fare copie temporanee delle librerie, hackerare le modifiche di @rpath e quindi eventualmente dimenticare le modifiche manuali. DYLD_FALLBACK_LIBRARY_PATH e DYLD_LIBRARY_PATH sono stati utili per questi cicli di sviluppo / test occasionali.
Guy

Risposte:


8

Questa è la protezione dell'integrità del sistema introdotta in El Capitan

La documentazione è in questo da Apple

Fondamentalmente qualsiasi eseguibile OS X fornito da Apple è protetto. e (da un documento precedente)

La generazione di processi figlio di processi limitati da System Integrity Protection, come l'avvio di un processo di supporto in un bundle con NSTask o la chiamata al comando exec (2), ripristina le porte speciali Mach di quel processo figlio. Qualsiasi variabile di ambiente Dynamic Linker (dyld), come DYLD_LIBRARY_PATH, viene eliminata all'avvio di processi protetti.

In questo caso sh è protetto


Grazie per il puntatore! Mi ero concentrato sul kernel e su altre protezioni del filesystem in SIP. Non ho notato questo cambiamento.
Guy,

2
Ok, questo spiega l'origine del fenomeno, ma come diamine dovremmo ora testare le librerie non installate? Voglio dire, come possiamo scrivere make checksu El Capitan quando sono necessarie librerie condivise?
circa

La maggior parte di make via autoconf dovrebbe finire in / usr / local che è ancora scrivibile - se provano in qualsiasi altro posto sotto / usr
metterei in

Se qualcuno lo trova dopo aver perso tempo a cercare di capire perché i variegati ambienti dyld stavano scomparendo, prendi in considerazione la possibilità di presentare un bug ad Apple per far loro documentare l'interazione dyld / SIP. L'ho già fatto e il bug ha ottenuto il numero rdar: // 30755019. (Spero che poi penseranno di documentare altre simili trappole ...)
Hmijail piange le dimissioni il

1
(Intendevo documentare l'interazione SIP nella manpage dyld, che al momento della stesura è totalmente mamma a riguardo)
hmijail piange le dimissioni il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.