Как установить компоненты cygwin из командной строки?
Есть ли в пакете Cygwin инструмент, аналогичный apt-get
на Debian или yum
на redhat, что позволяет мне устанавливать компоненты из командной строки?
9 ответов
В инсталляторе 'setup.exe' нет инструмента, который предлагает функциональность apt-get. Однако для Cygwin существует установщик пакета командной строки, который можно загрузить отдельно, но он не является полностью стабильным и использует обходные пути.
apt-cyg: http://github.com/transcode-open/apt-cyg
Проверьте вкладку проблем для проекта, чтобы увидеть известные проблемы.
Программа установки Cygwin принимает аргументы командной строки для установки пакетов из командной строки.
например setup-x86.exe -q -P packagename1,packagename2
устанавливать пакеты без какого-либо взаимодействия с графическим интерфейсом ("режим автоматической установки").
(Обратите внимание, что вам нужно использовать setup-x86.exe
или же setup-x86_64.exe
при необходимости.)
См. http://cygwin.com/packages/ для списка пакетов.
Для более удобного установщика, вы можете использоватьapt-cyg
как ваш менеджер пакетов. Его синтаксис похож наapt-get
, что является плюсом. Для этого выполните вышеуказанные шаги, а затем используйте Cygwin Bash для следующих шагов
wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
chmod +x apt-cyg
mv apt-cyg /usr/local/bin
Теперь, когда apt-cyg
установлено. Вот несколько примеров установки некоторых пакетов
apt-cyg install nano
apt-cyg install git
apt-cyg install ca-certificates
Существует несколько сценариев, которые можно использовать в качестве простых менеджеров пакетов для Cygwin. Но важно знать, что они всегда будут весьма ограниченными из-за... эм...Windows.
Установка или удаление пакетов - это хорошо, это может сделать каждый менеджер пакетов для Cygwin. Но обновление является проблемой, поскольку Windows не позволяет перезаписать исполняемый файл, который в данный момент запущен. Таким образом, вы не можете обновить, например, Cygwin DLL или любой пакет, который содержит исполняемый в данный момент исполняемый файл из самого Cygwin. На странице установки Cygwin также есть это примечание:
"Основная причина отсутствия более полнофункционального диспетчера пакетов заключается в том, что такой программе потребуется полный доступ ко всем функциям Cygwin POSIX. Однако это трудно обеспечить в среде, свободной от Cygwin, такой как существует в первом Кроме того, Windows не позволяет легко перезаписывать используемые исполняемые файлы, поэтому установка новой версии DLL Cygwin, когда менеджер пакетов использует DLL, является проблематичной ".
Программа установки Cygwin использует реестр Windows для перезаписи исполняемых файлов, которые используются, и этот метод требует перезагрузки Windows. Поэтому перед обновлением пакетов лучше закрыть все процессы Cygwin, поэтому вам не нужно перезагружать компьютер, чтобы применить изменения. Установка нового пакета должна быть полностью без каких-либо хлопот. Я не думаю, что кто-либо из менеджеров пакетов, кроме Cygwin's setup.exe
реализует любой метод для перезаписи используемых файлов, поэтому он просто потерпит неудачу, если не сможет перезаписать их.
Некоторые менеджеры пакетов для Cygwin:
кв-Лебедь
Обновление: хранилище было недавно отключено из-за проблем с авторскими правами ( DMCA Takown). Похоже, что владелец репозитория выпустил разметку DMCA в своем собственном репозитории и создал новый проект под названием Sage (см. Ниже).
Лучший для меня. Просто потому, что это один из самых последних. Это не использует Cygwin's setup.exe
Скорее повторяет, что setup.exe
делает. Он работает правильно для обеих платформ - x86 и x86_64. Есть много вилок с более или менее дополнительными функциями. Например, вилка kou1okada - одна из улучшенных версий, которая действительно великолепна.
apt-cyg - это всего лишь сценарий оболочки, установка не производится. Просто скачайте его (или клонируйте репозиторий), сделайте его исполняемым и скопируйте его куда-нибудь в PATH:
chmod +x apt-cyg # set executable bit
mv apt-cyg /usr/local/bin # move somewhere to PATH
# ...and use it:
apt-cyg install vim
Есть также куча вилок с различными функциями.
шалфей
Еще один менеджер пакетов реализован в виде сценария оболочки. Я не пробовал, но на самом деле это выглядит хорошо.
Он может искать пакеты в репозитории, перечислять пакеты в категории, проверять зависимости, перечислять файлы пакетов и многое другое. У него есть функции, которых нет у других менеджеров пакетов.
Лебедь-кв
Вилка заброшенного оригинала Лебедь-кв с улучшениями и исправлениями. Он имеет довольно много функций и реализован на Python. Установка производится с использованием make
,
Шоколадный cyg-get
Если вы использовали Chocolatey для установки Cygwin, вы можете установить пакет cyg-get, который на самом деле является простой оболочкой для Cygwin. setup.exe
написано в PowerShell.
Cygwin's setup.exe
Он также имеет режим командной строки. Кроме того, он позволяет обновить все установленные пакеты одновременно (как apt-get upgrade
работает на Linux на основе Debian).
Пример использования:
setup-x86_64.exe -q --packages=bash,vim
Вы можете создать псевдоним для более удобного использования, например:
alias cyg-get="/cygdrive/d/path/to/cygwin/setup-x86_64.exe -q -P"
Затем вы можете, например, установить пакет Vim с:
cyg-get vim
Сначала загрузите установщик по адресу: https://cygwin.com/setup-x86_64.exe, затем:
# move installer to cygwin folder
mv C:/Users/<you>/Downloads/setup-x86_64.exe C:/cygwin64/
# add alias to bash_aliases
echo "alias install='C:/cygwin64/setup-x86_64.exe -q -P'" >> ~/.bash_aliases
# add bash_aliases to bashrc if missing
echo "source ~/.bash_aliases" >> ~/.bashrc
например
install vim
Ответ Дэвида Ференци довольно полный, но после того, как я попробовал почти все его варианты, я обнаружил, что cyg-get от Chocolatey был лучшим (по крайней мере, единственным, который я мог заставить работать).
Я хотел установить wget
Пошагово было это:
choco install cyg-get
Затем:
cyg-get wget
Старый вопрос, но все еще актуален. Вот что сработало для меня сегодня (26.06.16).
Из оболочки Bash:
lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin
Я хотел решение для этого похоже на apt-get --print-uris
, но, к сожалению, apt-cyg этого не делает. Ниже приведено решение, которое позволило мне загрузить только те пакеты, которые мне были нужны, с их зависимостями и скопировать их в целевой каталог для установки. Вот скрипт bash, который анализирует вывод apt-cyg
в список URI:
#!/usr/bin/bash
package=$1
depends=$( \
apt-cyg depends $package \
| perl -ne 'while ($x = /> ([^>\s]+)/g) { print "$1\n"; }' \
| sort \
| uniq)
depends=$(echo -e "$depends\n$package")
for curpkg in $depends; do
if ! grep -q "^$curpkg " /etc/setup/installed.db; then
apt-cyg show $curpkg \
| perl -ne '
if ($x = /install: ([^\s]+)/) {
print "$1\n";
}
if (/\[prev\]/) {
exit;
}'
fi
done
Выше будет распечатывать пути пакетов, которые нужно скачать, относительно корневого корня cygwin, пропуская все пакеты, которые уже установлены. Чтобы скачать их, я записал вывод в файл cygwin-packages-list
а затем использовал wget:
mirror=http://cygwin.mirror.constant.com/
uris=$(for line in $(cat cygwin-packages-list); do echo "$mirror$line"; done)
wget -x $uris
Затем установщик можно использовать для установки из каталога локального кэша. Обратите внимание, что для этого мне нужно было скопировать setup.ini
из предыдущего кэша пакета cygwin в каталог с загруженными файлами (в противном случае установщик не знает, что к чему).
Обычно перед установкой пакета необходимо знать его точное имя:
# define a string to search
export to_srch=perl
# get html output of search and pick only the cygwin package names
wget -qO- "https://cygwin.com/cgi-bin2/package-grep.cgi?grep=$to_srch&arch=x86_64" | \
perl -l -ne 'm!(.*?)<\/a>\s+\-(.*?)\:(.*?)<\/li>!;print $2'
# and install
# install multiple packages at once, note the
setup-x86_64.exe -q -s http://cygwin.mirror.constant.com -P "<<chosen_package_name>>"