Как установить компоненты cygwin из командной строки? - PullRequest
160 голосов
/ 13 февраля 2012

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

Ответы [ 9 ]

130 голосов
/ 01 июня 2013

Для более удобной установки, вы можете использовать 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
126 голосов
/ 20 февраля 2013

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

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

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

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

95 голосов
/ 19 февраля 2012

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

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

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

47 голосов
/ 18 апреля 2014

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

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

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

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


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

APT-Лебедь

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

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

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

Существует также связка вилок с различными функциями.


шалфей

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

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


Лебедь-склонный

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


Шоколадный cyg-get

Если вы использовали Chocolatey для установки Cygwin, вы можете установить пакет cyg-get , который на самом деле является простой оболочкой для setup.exe Cygwin, написанного на 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

4 голосов
/ 11 ноября 2018

Сначала загрузите установщик по адресу: https://cygwin.com/setup-x86_64.exe (Windows 64bit), затем:

# move installer to cygwin folder
mv C:/Users/<you>/Downloads/setup-x86_64.exe C:/cygwin64/

# add alias to bash_aliases
echo "alias cygwin='C:/cygwin64/setup-x86_64.exe -q -P'" >> ~/.bash_aliases
source ~/.bash_aliases

# add bash_aliases to bashrc if missing
echo "source ~/.bash_aliases" >> ~/.profile

например,

# install vim
cygwin vim

# see other options
cygwin --help
4 голосов
/ 27 июня 2016

Старый вопрос, но все еще актуален. Вот что сработало для меня сегодня (26.06.16).

из оболочки bash:

lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin
4 голосов
/ 23 ноября 2015

Я хотел найти решение для этого, похожее на 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 в каталог с загруженными файлами (в противном случае установщик не знает, что к чему).

3 голосов
/ 23 июля 2016

Ответ Дэвида Ференци довольно полный, но после того, как я попробовал почти все его варианты, я обнаружил, что Chocolatey's cyg-get был лучшим (по крайней мере, единственным, который я мог заставить работать) .

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

choco install cyg-get

Тогда:

cyg-get wget
1 голос
/ 07 апреля 2015

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

# 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>>"
...