2015-04-18 15 views
22

Sto cercando di installare il pacchetto R nloptr su una macchina CentOS Linux che non dispone di connessione a Internet come segue:Installazione nloptr su Linux

install.packages("/home/ravi/nloptr_1.0.4.tar.gz", repos = NULL, type="source") 

Questo comando a sua volta cerca il seguente file on-line

http://ab-initio.mit.edu/nlopt/nlopt-2.4.2.tar.gz 

Tuttavia, ciò non riesce poiché non vi è alcuna connessione Internet alla macchina.

Ho provato il suggerimento del seguente post StackOverflow:

trouble with Installing nloptr by locally on Ubuntu

ho cambiato l'URL nel file di configurazione e configure.ac come segue:

NLOPT_URL="file:///home//ravi//${NLOPT_TGZ}" 

Tuttavia, ottengo il seguente errore quando provo a installare di nuovo il pacchetto:

> install.packages("/home/ravi/nloptr_1.0.4.tar.gz", repos = NULL, type="source") 
* installing *source* package 'nloptr' ... 
files 'configure', 'configure.ac' have the wrong MD5 checksums 
ERROR: 'configure' exists but is not executable -- see the 'R Installation and Administration Manual' 
* removing '/opt/vertica/R/library/nloptr' 
Warning message: 
In install.packages("/home/ravi/nloptr_1.0.4.tar.gz", : 
    installation of package '/home/ravi/nloptr_1.0.4.tar.gz' had non-zero exit status 

Qualcuno può guidarmi su come installare questo pacchetto R localmente?

Update 1

Sulla base del suggerimento di Dirk sull'installazione nlopt prima, ho seguito le istruzioni riportate nella pagina seguente:

http://ab-initio.mit.edu/wiki/index.php/NLopt_Installation

ho installato nlopt come segue:

./configure --enable-shared 
make 
make install 
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib 

Quando ho provato a reinstallare nloptr in R, non lo fa t cercare il link nlopt più ma getta il seguente errore:

Error in dyn.load(file, DLLpath = DLLpath, ...) : 
    unable to load shared object '/opt/vertica/R/library/nloptr/libs/nloptr.so': 
    /opt/vertica/R/library/nloptr/libs/nloptr.so: undefined symbol: nlopt_set_maxtime 
Error: loading failed 
Execution halted 
ERROR: loading failed 
* removing '/opt/vertica/R/library/nloptr' 
Warning message: 
In install.packages("/home/ravi/nloptr_1.0.4.tar.gz", : 
    installation of package '/home/ravi/nloptr_1.0.4.tar.gz' had non-zero exit  status 

Update 2

Come suggerito da Dirk, ho guardato nel comando ldconfig e utilizzato il seguente riferimento:

http://codeyarns.com/2014/01/14/how-to-add-library-directory-to-ldconfig-cache/

Ho modificato il file /etc/ld.so.conf, aggiunto la directory/usr/local/lib che contiene la libreria condivisa ed ha eseguito il comando ldconfig. Questo ha aggiunto la libreria condivisa rilevante come illustrato di seguito:

libnlopt.so.0 (libc6,x86-64) => /usr/local/lib/libnlopt.so.0 
libnlopt.so (libc6,x86-64) => /usr/local/lib/libnlopt.so 

Tuttavia, quando ho provato a reinstallare il pacchetto nloptr, ho ancora lo stesso errore oggetto condiviso.

Qualcuno potrebbe guidarmi sull'errore della libreria condivisa?

risposta

24

Quando si dice [t] il suo comando cerca a turno il seguente file in cui si ottiene solo metà della storia.Insieme con Jelmer, il manutentore del pacchetto nloptr attuale, ho modificato il pacchetto per effettuare le seguenti operazioni:

  • look per una libreria di installazione libnlopt, e, se trovato, usarlo
  • se non trovato di nuovo a caduta il vecchio comportamento e scarica la libreria

Quindi si può semplicemente installare nlopt via

sudo apt-get install libnlopt-dev 

(o l'equivalente sudo dpkg -i /media/.... puntamento al file da un'unità USB , ecc., quindi reinstallare il pacchetto nloptr. Funzionerà solo. Sulla mia macchina:

[email protected]:~$ install.r nloptr   ## install.r is in littler 
trying URL 'http://cran.rstudio.com/src/contrib/nloptr_1.0.4.tar.gz' 
Content type 'application/x-gzip' length 353942 bytes (345 KB) 
================================================== 
downloaded 345 KB 

* installing *source* package ‘nloptr’ ... 
** package ‘nloptr’ successfully unpacked and MD5 sums checked 
checking for g++... g++ 
checking whether the C++ compiler works... yes 
checking for C++ compiler default output file name... a.out 
checking for suffix of executables... 
checking whether we are cross compiling... no 
checking for suffix of object files... o 
checking whether we are using the GNU C++ compiler... yes 
checking whether g++ accepts -g... yes 
checking how to run the C++ preprocessor... g++ -E 
checking whether we are using the GNU C++ compiler... (cached) yes 
checking whether g++ accepts -g... (cached) yes 
checking for pkg-config... yes 
configure: Now testing for NLopt header file. 
[...] 
checking for nlopt.h... yes 
configure: Suitable NLopt library found. 
configure: creating ./config.status 
config.status: creating src/Makevars 
** libs 
g++ -I/usr/share/R/include -DNDEBUG  -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -O3 -Wall -pipe -Wno-unused -pedantic -c dummy.cpp -o dummy.o 
gcc -I/usr/share/R/include -DNDEBUG  -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -O3 -Wall -pipe -pedantic -std=gnu99 -c nloptr.c -o nloptr.o 
g++ -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o nloptr.so dummy.o nloptr.o -lnlopt -lm -L/usr/lib/R/lib -lR 
installing to /usr/local/lib/R/site-library/nloptr/libs 
** R 
** inst 
** preparing package for lazy loading 
** help 
*** installing help indices 
** building package indices 
** installing vignettes 
** testing if installed package can be loaded 
* DONE (nloptr) 

The downloaded source packages are in 
     ‘/tmp/downloaded_packages’ 
[email protected]:~$ 

Nota come compilato solo due file dai pacchetti R effettivi aver trovato l'installazione nlopt.

+0

Ciao Dirk, io non avere apt-get o dpkg installato nella mia macchina. C'è un altro modo per farlo? – Ravi

+0

Sicuro. Quindi la tua domanda è completamente, o sei totalmente confuso, dato che * è improbabile che tu sia su una macchina Ubuntu *. Installare nlopt ti aiuterà ancora: il comportamento di * using nlopt if found * è proprietà del pacchetto CRAN che stai tentando di installare. –

+0

Scuse. Sono su una distribuzione CentOS. Confuso con la mia altra macchina. – Ravi

9

Ho avuto esattamente lo stesso problema, su una macchina di produzione senza accesso a Internet diretto, con Red Hat Enterprise Linux Server versione 6.6 (Santiago). Le correzioni proposte sopra non hanno funzionato: quando si installa la libreria nlopt sul sistema, il successivo tentativo di installare nloptr fallisce con l'errore "nlopt_set_maxtime". Ho provato a giocherellare con le opzioni di compilazione per nlopt, senza risultato. Ho persino riprodotto il problema su una macchina Ubuntu con connessione Internet: ho disinstallato nloptr, installato nlopt sul sistema e quindi l'installazione di nloptr non è riuscita.

Finalmente risolto il problema nel seguente modo:

  1. disinstallare nlopt dal sistema operativo (assicurarsi che sia completamente rimosso).
  2. Scaricare manualmente nlopt-2.4.2.tar.gz e copiarlo in/tmp/
  3. Scaricare manualmente nloptr_1.0.4.tar.gz in una directory di lavoro e decomprimerlo; questo crea la directory "nloptr /".
  4. Modifica "nloptr/configure", commento la riga

    $ ("$ {} R_HOME/bin/rscript" --vanilla -e "download.file (url = '$ {} NLOPT_URL' , destfile = '$ {} NLOPT_TGZ') ")

    e inserire una nuova riga:

    $ (" $ {} R_HOME/bin/rscript "--vanilla -e " File.Copy (da = '/ tmp/nlopt-2.4.2.tar.gz', a = '$ {NLOPT_TGZ}') ")

  5. Installare con" R CMD INSTALL nloptr ".

+0

Ciao .. Anche dopo aver apportato la suddetta modifica nello script configure di nloptr e ricreato il tar.gz, ottengo lo stesso errore "impossibile caricare l'oggetto condiviso" /usr/lib64/RRO-8.0.2/R-3.1. 2/lib64/R/library/nloptr/libs/nloptr.so ': " – myloginid

+0

Non ho ricreato il .tar.gz: l'ho installato direttamente dalla directory" nloptr/"dove avevo decompresso l'originale .tar.gz e quindi modificato "nloptr/configure". Non sono sicuro che questo potrebbe fare la differenza ... –

+0

Accetto. Ma lo stesso vale anche per il dosent. L'ho fatto perché R di solito ci impone di fornire un .tar.gz e non ero sicuro che avrebbe funzionato senza quello. Il mio team Infra non consente la connessione diretta a Internet. – myloginid

-2

penso di avere lo stesso problema come voi ed io sto usando CentOS 6.5 Rimuovere nlopt e installare nloptr con install.packages() in R, un nlopt verrà installato automaticamente.

Ho rimosso installato nlopt con il seguente comando nella cartella nlopt decompressa.

make uninstall 

Se avessi cercato di utilizzare repository EPEL in CentOS e aveva installato nlopt con yum, provare:

yum remove nlopt 

dopo aver rimosso esistito nlopt, sono in grado di installare nloptr con

install.packages("nloptr") 
3

Ho avuto lo stesso problema impostando nloptr sulla mia istanza di RHEL 7.2. Per coloro che utilizzano RHEL è possibile effettuare le seguenti operazioni: Scarica & installare le seguenti RPM nello stesso ordine:

si prega di notare che questi RPM possono avere bisogno di ulteriori dipendenze da installare in base alla configurazione del sistema.

Posta questo è possibile installare nloptr direttamente utilizzando l'utility install.packages o l'origine di download da CRAN e installare dal sorgente come suggerito nelle risposte precedenti.

Spero che questo aiuti!

Kiran

5

Se siete su CentOS (e hanno accesso a internet, ma il server non è raggiungibile nlopt), è possibile installare nlopt prima utilizzando

yum install nlopt nlopt-devel 

Quindi è possibile installare nloptr normalmente.

8

Ho avuto un problema simile su Ubuntu. Oltre a installare nlopt-dev come Dirk answered, ho anche dovuto installare pkg-config:

sudo apt-get install pkg-config 

Spero che questo aiuti.

+0

ha risolto il problema per me! Grazie molto – Thorsten

0

se si sta usando Linux AWS il seguito dovrebbe aiutare

yum --enablerepo=epel install NLopt-devel -y 
Problemi correlati