2015-11-06 2 views
12

Я пытаюсь получить edx Devstack, установленный с помощью Vagrant, и я нахожусь на машине под Windows. Я получаю ошибки, которые появляются из символических ссылок, которые не поддерживаются Windows.Ошибка vagrant-paver devstack: «[Errno 20] Не каталог«

В соответствии с руководством по устранению неполадок edx под номером Dealing with line endings and symlinks under Windows, я должен запустить следующие команды в cygwin для работы с символическими ссылками.

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 

Я также пробовал команды в ответ на SO Git symlinks in Windows, который производит те же самые результаты.

Выход:

Выход я получаю после выполнения вышеуказанных команд немного странно, так что я не уверен, что если сценарий успешно.

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

Зачем это происходит в командной строке Windows-стиля в конце? Здесь я не уверен, работают ли команды git.

В Vagrant:

После запуска vagrant up и vagrant ssh, я получаю следующие ошибки при запуске paver devstack lms (подобный выход для 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 

Из того, что я понимаю, это проблема с символическими ссылками (см. сообщение this в группах Google).

Правильно ли я запускаю вышеуказанный скрипт symlinks? Как я могу проверить, успешно ли были подписаны символические ссылки?

Другие попытки:

После предложений в группе Google (ссылка выше), я также сделал следующие настройки:

  • настройки в VAGRANT_USE_VBOXFS = истинное
  • используя Vagrantfile при условии, here
  • установка переменной окружения OPENEDX_RELEASE = "named-release/cypress"
  • установка libxmlsec1 из экземпляра Vagrant.

После нескольких vagrant destroy и vagrant provision-х, у меня еще есть один и тот же IOError: [Error 20] Not a directory проблему. Любая помощь приветствуется!

Версии:

  • версия для Windows: 8
  • Vagrant версия: 1.7.4
  • VirtualBox версии: 5.0.8
  • openEdx релиз: именованный релиз/кипарис
+0

Вы пытаетесь создать/использовать символические ссылки в Windows, или вы пытаетесь создать/использование символических ссылок в VirtualBox (предполагая виртуальную машину Linux)? – jperezov

+0

@Jonathan Я пытаюсь использовать символические ссылки в файлах, которые хранятся на моей машине Windows и передаются через VirtualBox в виртуальную виртуальную машину ... По крайней мере, я думаю, что так работает бродяга. – Evelyn

+0

В первом скрипте есть ошибка: 'hash = $ (echo" $ 1 "| git hash-object -w -stdin); 'должен быть' hash = $ (echo -n "$ 1" | git hash-object -w -stdin); '(обратите внимание на дополнительный« -n ») – venimus

ответ

3

Я думаю, что проблема вызвана вашей cydrive путем неправильно.

Попробуйте изменить в c:\cygwin\etc\fstab

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

в

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

рефов: https://cygwin.com/cygwin-ug-net/using.html#cygdrive

UPDATE:

С «баш» Cmd Type, а затем копировать/вставить содержимое сценария

Если вы получите тот же результат попробовать:

Открыть .gitconfig (с Notepad ++ или аналогичный) и добавьте этот раздел, если он еще не существует

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

Это создаст некоторые команды Git для симлинками

Примечание: Файл использует Unix окончания строк, не редактируйте с окнами Блокнот!

Затем выполните команды

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

Я проверил это в моей окр и работает

+0

Я получаю ту же ошибку после редактирования этого файла. Он также по-прежнему переходит к команде windows-style после запуска скрипта. Я использую cygwin в режиме администратора, а 'mount' показывает следующее (после редактирования fstab):' C:/cygwin/bin on/usr/bin type ntfs (двоичный, автоматический) C:/cygwin/lib on/usr/lib type ntfs (двоичный, автоматический) C:/cygwin on/type ntfs (двоичный, автоматический) C: on/c тип ntfs (двоичный, posix = 0, пользователь, noumount, auto) ' – Evelyn

+0

этот вариант" »в fstab для автомонтированных дисков. Он позволяет вам иметь'/cygdrive/c/windows', когда вы его измените, он станет/c/windows. Кажется, вам нужно добавить все вручную установленные пути в fstab, как описано в cygwin manual – venimus

+0

Я отредактировал ответ, чтобы добавить некоторые другие вещи. Я думаю, что ваши лиги .sh' могут быть отключены. Они должны быть в стиле UNIX. – venimus

Смежные вопросы