Как установить компоненты cygwin из командной строки?

есть ли инструмент в пакете Cygwin, похожий на apt-get на Debian или yum на redhat, который позволяет мне устанавливать компоненты из командной строки?

8 ответов


нет никакого инструмента специально в " setup.установщик exe', который предлагает функциональность apt-get. Однако существует установщик пакетов командной строки для Cygwin, который можно загрузить отдельно, но он не совсем стабилен и полагается на обходные пути.

apt-cyg:http://github.com/transcode-open/apt-cyg

Проверьте вкладку проблемы для проекта, чтобы увидеть известные проблемы.


для более удобного установщика вы можете использовать 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 install nano
apt-cyg install git
apt-cyg install ca-certificates

настройка Cygwin принимает аргументы командной строки для установки пакетов из командной строки.

например setup-x86.exe -q -P packagename1,packagename2 для установки пакетов без какого-либо взаимодействия с GUI ("режим автоматической установки").

(обратите внимание, что вы должны использовать setup-x86.exe или setup-x86_64.exe по мере необходимости.)

см.http://cygwin.com/packages/ для списка пакетов.


существуют некоторые скрипты, которые можно использовать как простые менеджеры пакетов для Cygwin. Но важно знать, что они всегда будут совсем ограниченный, из-за...ЭМ...Окна.

установка или удаление пакетов в порядке, каждый менеджер пакетов для Cygwin может это сделать. Но обновление-это боль, так как Windows не позволяет перезаписывать исполняемый файл, который в настоящее время запущен. Таким образом, вы не можете обновить, например, Cygwin DLL или любой пакет, который содержит в настоящее время выполняется исполняемый файл из самого Cygwin. Существует также эта заметка на Установка Cygwin страницы:

" основная причина отсутствия более полнофункционального менеджера пакетов заключается в том, что такая программа должна иметь полный доступ ко всем функциям POSIX Cygwin. Однако это трудно обеспечить в среде, свободной от Cygwin, такой как существует при первой установке. Кроме того, Windows не позволяет перезапись в использовании исполняемые файлы, поэтому установка новой версии Cygwin DLL при использовании диспетчера пакетов DLL является проблематичным."

программа установки Cygwin использует реестр Windows для перезаписи используемых исполняемых файлов и этот метод требуется перезагрузка Windows. Поэтому лучше закрыть все процессы Cygwin перед обновлением пакетов, так что вам не придется перезагрузить ваш компьютер, чтобы применить изменения. Установка нового пакета должен быть полностью без каких-либо неприятностей. Я не думаю, что кто-либо из менеджеров пакетов Кроме по Cygwin setup.exe реализует любой метод перезаписи используемых файлов, поэтому он просто потерпит неудачу, если не сможет их перезаписать.


некоторые менеджеры пакетов для Cygwin:

АПТ-системы Cyg

обновление: недавно репозиторий был отключен из-за проблем с авторским правом (DMCA takedown). Это выглядит так: владелец репозиторий выпустил DMCA takedown на свой репозиторий и создал новый проект под названием шалфей (см. ниже).

лучший для меня. Просто потому, что это один из самых последних. Не использовать Cygwin это setup.exe, он скорее переосмысливает, что setup.exe делает. Он работает правильно для обеих платформ - x86 а также x86_64 с. Есть много вилок с более или менее дополнительными функциями. Например, вилка kou1okada это одна из улучшенных версий, что действительно здорово.

АПТ-системы Cyg - это просто сценарий оболочки, установки нет. Просто скачайте его (или клонируйте репозиторий), сделайте его исполняемым и скопируйте его куда-нибудь по пути:

chmod +x apt-cyg # set executable bit
mv apt-cyg /usr/local/bin # move somewhere to PATH
# ...and use it:
apt-cyg install vim

появилась куча развилок с различными функциями.


шалфей

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

он может искать пакеты в репозитории, перечислять пакеты в категории, проверять зависимости, перечислять файлы пакетов и многое другое. У него есть функции, которых нет у других менеджеров пакетов.


cyg-apt

вилка заброшенного оригинала cyg-apt с улучшениями и исправлениями ошибок. Она имеет довольно много функций и это реализованный на языке Python. Установка производится с помощью make.


шоколадный по

если вы использовали Chocolatey для установки Cygwin, вы можете установить пакет cyg-get, который на самом деле является простой оберткой по Cygwin setup.exe написано в PowerShell.


настройка Cygwin.exe

он также имеет режим командной строки. Более того, это позволяет обновить все установленные пакеты сразу (as apt-get upgrade делает на основе Debian Linux).

пример использования:

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


старый вопрос, но все еще актуален. Вот что сработало для меня сегодня (6/26/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 в список URIs:

#!/usr/bin/bash

package=
depends=$( \
    apt-cyg depends $package \
    | perl -ne 'while ($x = /> ([^>\s]+)/g) { print "\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 "\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 в каталог с загруженными файлами (в противном случае установщик не знает, что к чему).


ответ Давида Ференци довольно полный, но после того, как я попробовал почти все его варианты, я обнаружил, что шоколадный по был лучшим (по крайней мере, единственным, который я мог получить на работу).

Я хотел установить wget, шаги были такие:

choco install cyg-get

затем:

cyg-get wget

обычно перед установкой пакета необходимо знать его точное название:

# 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 '

# and install 
# install multiple packages at once, note the
setup-x86_64.exe -q -s http://cygwin.mirror.constant.com -P "<<chosen_package_name>>"