2015-11-06 9 views
12

Próbuję zainstalować edp Devstack z Vagrantem, a ja jestem na komputerze z systemem Windows. Otrzymuję błędy, które wydają się wynikać z dowiązań symbolicznych, które nie są obsługiwane przez system Windows.Vagrant - błąd układarki brukowej: "[Errno 20] Nie katalog"

Zgodnie z instrukcją rozwiązywania problemów z edx pod Dealing with line endings and symlinks under Windows, powinienem uruchomić następujące polecenia w cygwin, aby poradzić sobie z dowiązaniami symbolicznymi.

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 

Próbowałem również polecenia w tak odpowiedzieć Git symlinks in Windows, który daje te same rezultaty.

wyjściowa:

Wyjście uzyskać po uruchomieniu powyższe polecenia jest trochę dziwne, więc nie jestem pewien, czy skrypt jest udany.

[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> 

Dlaczego na końcu pojawia się wiersz poleceń w stylu systemu Windows? Tutaj nie jestem pewien, czy działają polecenia git.

W Vagrant:

Po uruchomieniu vagrant up i vagrant ssh, otrzymuję następujące błędy podczas uruchamiania paver devstack lms (podobny wyjście 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 

Z tego co rozumiem, to jest problem z dowiązaniami symbolicznymi (zobacz this post w grupach Google).

Czy poprawnie uruchamiam powyższy skrypt symlink? Jak mogę sprawdzić, czy dowiązania symboliczne zostały pomyślnie przetworzone?

Inne próby:

zgodnie z sugestiami w grupie Google (link powyżej), mam również dokonała następujących korekt:

  • ustawień na VAGRANT_USE_VBOXFS = true
  • pomocą Vagrantfile pod warunkiem, że here
  • ustawienie zmiennej środowiskowej OPENEDX_RELEASE = "named-release/cypress"
  • instalowanie biblioteki libxmlsec1 z instancji Vagrant.

Po wielu vagrant destroy i vagrant provision-tych, nadal mam ten sam IOError: [Error 20] Not a directory problem. Każda pomoc będzie doceniona!

Wersje:

  • wersji systemu Windows: 8
  • Vagrant wersja: 1.7.4
  • wersja VirtualBox: 5,0.8
  • openEdx wydania: nazwie uwalnianiu/cyprys
+0

Czy starasz się tworzyć/używać dowiązania w systemie Windows, czy starasz się tworzyć/używać dowiązania w VirtualBox (zakładając maszynę wirtualną linuksa)? – jperezov

+0

@ Jonathan Próbuję użyć dowiązań symbolicznych w plikach przechowywanych na moim komputerze z systemem Windows i udostępnianych przez VirtualBox na maszynie wirtualnej Linux ... Przynajmniej sądzę, że tak działa vagrant. – Evelyn

+0

Występuje błąd w pierwszym skrypcie, w którym 'hash = $ (echo" $ 1 "| git hash-object -w --stdin); 'powinno być' hash = $ (echo -n "$ 1" | git hash-object -w --stdin); '(zauważ dodatkowy" -n ") – venimus

Odpowiedz

3

Myślę, że problem jest spowodowany przez cydrive ścieżki jest źle.

Spróbuj zmienić w c:\cygwin\etc\fstab

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

do

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

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

UPDATE:

z „bash” wpisz cmd, a następnie skopiować/wkleić zawartość skryptu

Jeśli masz taką samą szansę wynik:

Otwórz .gitconfig (z Notepad ++ lub podobny) i dodać tę sekcję, jeśli to nie jest jeszcze istniejące

[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" 

To stworzy jakieś polecenia git dla dowiązania

Uwaga: Plik używa zakończeń linii Unix, nie zmieniać z Notatnika Windows!

następnie wykonać polecenia

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

testowałem go w moim env i działa

+0

Po edycji tego pliku pojawia się ten sam błąd. Po uruchomieniu skryptu nadal jest uruchamiany po poleceniu Windows. Używam cygwin w trybie administratora, a 'mount' pokazuje następujące (po edycji fstab):' C:/cygwin/bin na/usr/bin typ ntfs (binarny, auto) C:/cygwin/lib on/usr/lib typ ntfs (binarny, auto) C:/cygwin on/type ntfs (binarny, auto) C: on/c typ ntfs (binarny, posix = 0, użytkownik, noumount, auto) ' – Evelyn

+0

ta" opcja "w fstab jest dla napędów montowanych automatycznie To pozwala mieć'/cygdrive/c/windows' kiedy go zmienisz stanie się/c/windows Wygląda na to, że musisz dodać wszystkie ręcznie zamontowane ścieżki w fstab, jak to opisano w cygwin instrukcja – venimus

+0

Edytowałem odpowiedź, aby dodać inne rzeczy. Myślę, że linie poleceń '.sh' mogą być wyłączone. Powinny być w stylu UNIX. – venimus

Powiązane problemy