cvs больше не работает на mac os x sierra с удаленного терминала

После обновления до mac os x sierra мой репозиторий cvs (да, я все еще использую cvs) больше не доступен с удаленного компьютера. Я все еще могу получить доступ к командам cvs на локальной машине с помощью окна терминала, используя:

CVSROOT=/usr/local/cvsrep

хотя, если я определяю переменные cvs с помощью

export CVS_RSH=ssh
export CVSROOT=:ext:[email protected]/usr/local/cvsrep

он также не работает, выдавая сообщение об ошибке:

tw-imac:testcvs twarren$ cvs version
Client: Concurrent Versions System (CVS) 1.12.13 (client/server)
Password:
bash: cvs: command not found

Программа cvs установлена ​​в /usr/local/bin (который находится в ПУТИ). Это старая версия cvs, которая поставлялась с mac os x и отлично работала с более новыми версиями mac os x до sierra.


person user2132980    schedule 28.09.2016    source источник
comment
Та же проблема, я пытался установить cvs с помощью homebrew, но все равно не работает.   -  person Enrique Muñoz López    schedule 14.10.2016
comment
да, похоже, проблема заключается в том, что после успешной аутентификации ssh запускаемая оболочка bash не содержит каталог /usr/local/bin, поэтому возникает ошибка cvs command not found.   -  person user2132980    schedule 16.10.2016


Ответы (2)


Я только что столкнулся с этой же проблемой.

т.е. удаленные проверки cvs не работают.

т.е. cvs -z3 -d:ext:<user>@<cvs-server-ip>:<CVSROOT> co -P -r <REVISION> <MODULE> приводит к cvs: bad command

Есть три проблемы,

  1. cvs был удален еще в 10.9
  2. cvs поверх ssh опирается на поддержку sshd PATH, которая жестко запрограммирована.
  3. /usr/bin не имеет root-прав, т.е. доступен только для чтения.

Вы решаете первую проблему, устанавливая cvs с помощью homebrew

  • Установите доморощенный см.: https://brew.sh
  • затем brew install cvs

Следующая проблема заключается в том, что когда вы пытаетесь запустить cvs:ext, вы обнаруживаете, что PATH неверен, это можно проверить следующим образом:

ssh <user>@cvs-sever-ip env | grep PATH

Вы увидите PATH=/usr/bin:/bin:/usr/sbin:/sbin, который является жестко закодированным неинтерактивным путем sshd. Для неинтерактивного ssh, используемого CVS для доступа к установке homebrew cvs (установленной в `/usr/local/bin/cvs), вам нужно добавить /usr/local/bin к пути sshd. AFAICT это невозможно сделать... нетривиально... поэтому лучшее решение - создать символическую ссылку в каталоге /usr/bin.

sudo ln -s /usr/local/bin/cvs /usr/bin/cvs

Что приводит к третьей проблеме. Это не работает, потому что /usr/bin не имеет root-прав... и, следовательно, доступен только для чтения.

Вы можете отключить режим без рута в режиме восстановления ... а затем сделать это, а затем снова включить его.

Но самым простым решением является перезагрузка в режиме восстановления, вход в терминал, затем cd /Volumes, затем перейдите в каталог /usr/bin на загрузочном томе, т.е. cd /Volumes/<bootvolume>/usr/bin

затем выполните команду:

ln -s /usr/local/bin/cvs cvs

Это создаст символическую ссылку из /usr/bin/cvs -> /usr/local/bin/cvs.

Перезагрузитесь обратно в свою ОС, и это должно исправить это.

Вы можете убедиться в этом с помощью

ssh <user>@<cvs-server-ip> which cvs

который должен вернуться:

/usr/bin/cvs

Теперь ваши удаленные проверки cvs должны работать...

person stux    schedule 15.02.2017

поэтому я нашел способ заставить cvs работать на sierra. Проблема заключалась в том, что каталог /usr/local/bin больше не находился на пути оболочки, запущенной ssh. Таким образом, решение состояло в том, чтобы скопировать исполняемый файл cvs в /usr/bin.

Однако для этого в Sierra мне пришлось временно отключить SIP. Это было сделано:

  1. перезагрузиться с режимом восстановления
  2. запустить терминальную утилиту
  3. выполнить: csrutil отключить
  4. перезагрузка

Тогда я мог бы скопировать программу cvs. Убедившись, что он работает правильно, я повторил шаги 1-4, за исключением использования: csrutil enable в шаге 3.

ПРИМЕЧАНИЕ. Вероятно, будут случаи, когда обновления Sierra могут заменить содержимое /usr/bin, поэтому возможно, что этот процесс потребуется повторить после обновлений. Чтобы помочь в этом, я скопировал модуль cvs, а не переместил его, поэтому он по-прежнему будет доступен на старом месте.

ПРИМЕЧАНИЕ 2. Я согласен с теми, кто рекомендует использовать git, а не cvs, и буду делать это со всеми новыми проектами. Кроме того, я в конечном итоге также конвертирую существующие проекты в git, где это возможно, но я рад, что я все еще могу использовать cvs, как и до Sierra.

person user2132980    schedule 17.10.2016
comment
Большой! Работал на меня. Не забудьте снова включить SIP после копирования файла! - person Dark.Rider; 03.12.2016