2015-11-06 10 views
12

Sto tentando di installare edx Devstack installato con Vagrant e sono su una macchina Windows. Ricevo errori che sembrano derivare da collegamenti simbolici non supportati da Windows.Vagrant - errore di devstack finitrice: "[Errno 20] Non una directory"

In base alla guida per la risoluzione dei problemi di edx sotto Dealing with line endings and symlinks under Windows, dovrei eseguire i seguenti comandi in cygwin per gestire i collegamenti simbolici.

git rm --cached -r . && git reset --hard 

git config --global alias.add-symlink '!__git_add_symlink(){ 
    dst=$(echo "$2")/../$(echo "$1"); 
    if [ -e "$dst" ]; then 
     hash=$(echo "$1" | git hash-object -w --stdin); 
     git update-index --add --cacheinfo 120000 "$hash" "$2"; 
     git checkout -- "$2"; 
    else 
     echo "ERROR: Target $dst does not exist!"; 
     echo "  Not creating invalid symlink."; 
    fi; 
    }; __git_add_symlink "$1" "$2"' 

git config --global alias.rm-symlink '!__git_rm_symlink(){ 
    git checkout -- "$1"; link=$(echo "$1"); 
    POS=$'\''/'\''; DOS=$'\''\\\\'\''; 
    doslink=${link//$POS/$DOS}; 
    dest=$(dirname "$link")/$(cat "$link"); 
    dosdest=${dest//$POS/$DOS}; 
    if [ -f "$dest" ]; then 
     rm -f "$link"; 
     cmd //C mklink //H "$doslink" "$dosdest"; 
    elif [ -d "$dest" ]; then 
     rm -f "$link"; 
     cmd //C mklink //J "$doslink" "$dosdest"; 
    else 
     echo "ERROR: Something went wrong when processing $1 . . ."; 
     echo "  $dest may not actually exist as a valid target."; 
    fi; 
    }; __git_rm_symlink "$1"' 

git config --global alias.rm-symlinks '!__git_rm_symlinks(){ 
    for symlink in `git ls-files -s | grep -E "^120000" | cut -f2`; 
    do 
     git rm-symlink "$symlink"; 
     git update-index --assume-unchanged "$symlink"; 
    done; 
    }; __git_rm_symlinks' 

git config --global alias.checkout-symlinks '!__git_checkout_symlinks(){ 
    POS=$'\''/'\''; DOS=$'\''\\\\'\''; 
    for symlink in `git ls-files -s | grep -E "^120000" | cut -f2`; 
    do 
     git update-index --no-assume-unchanged "$symlink"; 
     if [ -d "$symlink" ]; then 
      dossymlink=${symlink//$POS/$DOS}; 
      cmd //C rmdir //S //Q "$dossymlink"; 
     fi; 
     git checkout -- "$symlink"; 
     echo "Restored git symlink $symlink <<===>> `cat $symlink`"; 
    done; 
    }; __git_checkout_symlinks' 

git rm-symlinks 

ho anche provato i comandi nel SO rispondere Git symlinks in Windows, che produce gli stessi risultati.

uscita:

L'uscita ricevo dopo aver eseguito i comandi di cui sopra è un po 'strano, quindi non sono sicuro se lo script è successo.

[email protected] /cygdrive/c/.../Local/devstack/edx-platform/edx-platform $./symlinks-fix.sh 
**Git checkout output** 
... 
Checking out files: 100% (6983/6983), done. 
HEAD is now at 222bdd9 Merge pull request #10411 from edx/mobile/course-blocks-api 

Microsoft Windows [Version 6.2.9200] 
(c) 2012 Microsoft Corporation. All rights reserved. 

C:\Users\...\Local\devstack\edx-platform\edx-platform> 

Perché nel prompt dei comandi in stile Windows alla fine? È qui che non sono sicuro se i comandi git funzionino.

In Vagrant:

Dopo aver eseguito vagrant up e vagrant ssh, ottengo i seguenti errori durante l'esecuzione paver devstack lms (output simile per paver devstack studio):

[email protected]:~$ sudo su edxapp 
[email protected]:~/edx-platform$ paver devstack lms 
... 
pip install -q --disable-pip-version-check --exists-action w -r requirements/edx/github.txt 
    Could not find a tag or branch '96e1922348bfe6d99201b9512a9ed946c87b7e0b', assuming commit. 
    .... 20 similar .... 
    Could not find a tag or branch 'e7a6c95c300e95c51e42bfd1eba70489c05a6527', assuming commit. 

pip install -q --disable-pip-version-check --exists-action w -r requirements/edx/local.txt 
pip install -q --disable-pip-version-check --exists-action w -r requirements/edx/base.txt 
    Requested meliae==0.4.0 (from -r requirements/edx/base.txt (line 47)), but installing version 0.4.0.final.0 
pip install -q --disable-pip-version-check --exists-action w -r requirements/edx/post.txt 
python manage.py cms --settings=devstack reindex_course --setup 
2015-11-06 01:37:40,353 WARNING 4797 [xblock.plugin] plugin.py:147 - Unable to load XBlock 'html' 
    Traceback... 
IOError: [Errno 20] Not a directory: '/edx/app/edxapp/edx-platform/common/lib/xmodule/xmodule/js/common_static/js/vendor/draggabilly.pkgd.js' 
2015-11-06 01:37:40,660 WARNING 4797 [xblock.plugin] plugin.py:147 - Unable to load XBlock 'course_info' 
    Traceback... 
IOError: [Errno 20] Not a directory: '/edx/app/edxapp/edx-platform/common/lib/xmodule/xmodule/js/common_static/js/vendor/draggabilly.pkgd.js' 
    Traceback... 
IOError: [Errno 20] Not a directory: '/edx/app/edxapp/edx-platform/common/lib/xmodule/xmodule/js/common_static/js/vendor/draggabilly.pkgd.js' 
    Traceback ... 
IOError: [Errno 20] Not a directory: '/edx/app/edxapp/edx-platform/common/lib/xmodule/xmodule/js/common_static/js/vendor/draggabilly.pkgd.js' 
    Traceback ... 
IOError: [Errno 20] Not a directory: '/edx/app/edxapp/edx-platform/common/lib/xmodule/xmodule/js/common_static/js/vendor/draggabilly.pkgd.js' 

Build failed running pavelib.servers.devstack: Subprocess return code: 1 

Da quello che ho capito, questo è un problema con collegamenti simbolici (vedi il messaggio this sui gruppi di Google).

Sto eseguendo correttamente lo script dei collegamenti simbolici sopra? Come posso verificare se i collegamenti simbolici sono stati gestiti correttamente?

Altri tentativi:

seguendo i suggerimenti del gruppo Google (link qui sotto), mi hanno anche fatto le seguenti regolazioni:

  • l'impostazione del VAGRANT_USE_VBOXFS = true
  • utilizzando il Vagrantfile fornito here
  • impostazione della variabile di ambiente OPENEDX_RELEASE = "named-release/cypress"
  • installazione di libxmlsec1 dall'istanza di Vagrant.

Dopo molteplici vagrant destroy e vagrant provision 's, ho ancora lo stesso problema IOError: [Error 20] Not a directory. Qualsiasi aiuto sarebbe molto apprezzato!

Versioni:

  • versione di Windows: 8
  • versione Vagrant: 1.7.4
  • versione di VirtualBox: 5.0.8
  • openEdx rilascio: rilascio di nome/cipresso
+0

Stai cercando di creare/uso collegamenti simbolici in Windows, o stai cercando di creare/uso collegamenti simbolici in VirtualBox (assumendo una macchina virtuale Linux)? – jperezov

+0

@ Jonathan Sto provando a usare i collegamenti simbolici in file che sono memorizzati sulla mia macchina Windows e condivisi tramite VirtualBox su una VM Linux ... Almeno penso che sia così che funziona. – Evelyn

+0

C'è un bug nel primo script dove 'hash = $ (echo" $ 1 "| git hash-object -w --stdin); 'dovrebbe essere' hash = $ (echo -n "$ 1" | git hash-object -w --stdin); '(notare l'ulteriore" -n ") – venimus

risposta

3

Credo che il problema è causato dal vostro percorso cydrive è sbagliato.

tenta di modificare in c:\cygwin\etc\fstab

none /cydrive cygdrive binary,posix=0,user 0 0

a

none/cygdrive binary,posix=0,user 0 0

arbitri: https://cygwin.com/cygwin-ug-net/using.html#cygdrive

UPDATE:

Da CMD Tipo 'bash' e quindi copiare/incollare il contenuto dello script

Se si ottiene lo stesso risultato prova:

aperta .gitconfig (con Notepad ++ o simili) e di aggiungere questa sezione se si non è ancora esistente

[alias] 
add-symlink = "!__git_add_symlink(){\n dst=$(echo \"$2\")/../$(echo \"$1\"); \n if [ -e \"$dst\" ]; then \n  hash=$(echo -n \"$1\" | git hash-object -w --stdin); \n  git update-index --add --cacheinfo 120000 \"$hash\" \"$2\"; \n  git checkout -- \"$2\"; \n else \n  echo \"ERROR: Target $dst does not exist!\"; \n  echo \"  Not creating invalid symlink.\"; \n fi; \n }; __git_add_symlink \"$1\" \"$2\"" 
rm-symlink = "!__git_rm_symlink(){\n git checkout -- \"$1\"; link=$(echo \"$1\"); \n POS=$'/'; DOS=$'\\\\\\\\'; \n doslink=${link//$POS/$DOS}; \n dest=$(dirname \"$link\")/$(cat \"$link\"); \n dosdest=${dest//$POS/$DOS}; \n if [ -f \"$dest\" ]; then \n  rm -f \"$link\"; \n  cmd //C mklink //H \"$doslink\" \"$dosdest\"; \n elif [ -d \"$dest\" ]; then \n  rm -f \"$link\"; \n  cmd //C mklink //J \"$doslink\" \"$dosdest\"; \n else \n  echo \"ERROR: Something went wrong when processing $1 . . .\"; \n  echo \"  $dest may not actually exist as a valid target.\"; \n fi; \n }; __git_rm_symlink \"$1\"" 
rm-symlinks = "!__git_rm_symlinks(){\n for symlink in `git ls-files -s | grep -E \"^120000\" | cut -f2`; \n do \n  git rm-symlink \"$symlink\"; \n  git update-index --assume-unchanged \"$symlink\"; \n done; \n }; __git_rm_symlinks" 
checkout-symlinks = "!__git_checkout_symlinks(){\n POS=$'/'; DOS=$'\\\\\\\\'; \n for symlink in `git ls-files -s | grep -E \"^120000\" | cut -f2`; \n do \n  git update-index --no-assume-unchanged \"$symlink\"; \n  if [ -d \"$symlink\" ]; then \n   dossymlink=${symlink//$POS/$DOS}; \n   cmd //C rmdir //S //Q \"$dossymlink\"; \n  fi; \n  git checkout -- \"$symlink\"; \n  echo \"Restored git symlink $symlink <<===>> `cat $symlink`\"; \n done; \n }; __git_checkout_symlinks" 

Questo creerà alcuni comandi Git per i collegamenti simbolici

Nota: File utilizza Unix fine riga, non modificare con Blocco Note di Windows!

Poi eseguire i comandi

git rm --cached -r . 
git reset --hard 
git rm-symlinks 

ho provato nella mia env e funziona

+0

Ottengo lo stesso errore dopo che ho modificato quel file. Va anche al comando windows-style dopo aver eseguito lo script. Sto usando cygwin in modalità amministratore e 'mount' mostra il seguente (dopo aver modificato fstab):' C:/cygwin/bin su/usr/bin tipo ntfs (binario, auto) C:/cygwin/lib su/usr/lib tipo ntfs (binario, auto) C:/cygwin on/tipo ntfs (binario, auto) C: on/c tipo ntfs (binario, posix = 0, utente, noumount, auto) ' – Evelyn

+0

questa" opzione "in fstab è per unità montate automaticamente Permette di avere'/cygdrive/c/windows' quando lo si cambia diventerà/c/windows Sembra che sia necessario aggiungere tutti i percorsi montati manualmente in fstab come descritto in cygwin manuale – venimus

+0

Ho modificato la risposta per aggiungere altre cose. Penso che i tuoi lineings '.sh' potrebbero essere spenti. Dovrebbero essere in stile UNIX. – venimus

Problemi correlati