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


178

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


2
Stack Overflow - сайт для вопросов программирования и разработки. Этот вопрос кажется не по теме, потому что он не касается программирования или разработки. Смотрите, какие темы я могу задать здесь, в Справочном центре. Возможно , лучше спросить Super User . Также см. Где я могу разместить вопросы о Dev Ops?
jww

7
@jww, это не devops.
Pacerier

Ответы:


102

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

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

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


Спасибо! Как раз то, что я хотел знать. Интересно, почему они не зрелые?
vy32

4
@ vy32: потому что ты не помог сделать их зрелыми? :) Они не могут писать сами. Кто-то должен работать над ними. А поскольку их удобство использования весьма ограничено (чтобы перезаписать файлы, используемые в настоящее время в Windows, сначала нужно закрыть Cygwin, поэтому невозможно запустить любой менеджер пакетов в закрытом Cygwin :), мало кто заинтересован.
Давид Ференци Рогожан

10
С другой ответ: setup-x86.exe -q -P packagename1,packagename2. Не так красиво, как apt-getдаже, apt-cygно в большинстве случаев это помогает. И вы также можете запустить это из cmd.exe(после закрытия Cygwin).
kqw

2
@ Стив, в ответе Давида говорится, что он перешел в "мудрец". stackoverflow.com/a/23143997/80772
угорь ghEEz

3
Поскольку оригинальный проект мертв, я предлагаю посмотреть на этот (на момент
Владимир Пантелеев

136

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

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

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

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


5
Ницца! setup.exe теперь называется setup-x86.exe - или вариант в зависимости от битов процессора. Также см. Здесь список пакетов cygwin.com/packages
ErichBSchulz

2
Также, чтобы указать несколько пакетов, разделяйте их запятыми. например, в DOS, введитеsetup-x86_64 --packages="openssh,python"
Michael Scheper

Кажется, нет способа настроить конкретные версии.
CMCDragonkai

@jturney, это стабильно?
Pacerier

1
@Pacerier, неясно, что вы спрашиваете. Это должна быть особенность установки, на которую можно положиться.
jturney

134

Для более удобного установщика вы можете использовать его в 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

17
Очевидно, используйте setup-x86_64.exe -q -P wget, tar, qawk, bzip2, subversion, vim для 64-битных окон.
Арун

3
Необходимо добавить --no-check-certificate в команду wget. В противном случае превосходно.
akauppi

И теперь это 404 (после нескольких переадресаций)
Shadow

Только что попробовал wgetи скачивает apt-cygбез проблем. В какой момент появляется 404?
Сагунмс

1
wget не устанавливается по умолчанию вместе с cygwin, а это означает, что его нужно загрузить с ручной и непрограммной установкой.

51

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

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

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

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


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

кв-Лебедь

Обновление : хранилище было недавно отключено из-за проблем с авторским правом ( удаление DMCA ). Это выглядит как владелец репозитория выдал 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


3
sageявляется ответвлением apt-cygего самых активных участников за последний год или два (Стивен Пенни). Похоже, что в начале этого года у него были некоторые разногласия с первоначальным apt-cygавтором (Стивеном Джангелсом), и он издал разборку DMCA, когда он раздвоил проект. Так как Jungels (он же Transcode), несомненно, является первоначальным автором проекта, вскоре после этого GitHub восстановил оригинальный проект. В настоящее время оба проекта доступны, хотя в исходном проекте не было никаких новых обновлений кода с момента разделения. Это действительно грязная ситуация.
Энтони Геогеган

setup-x86_64.exe -q --packages = bash, vim. Этот подход помог мне в прошлом. Просто запустите его из командной строки, и он работает гладко.
TheWalkingData

9

Сначала загрузите установщик по адресу: 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

Я использую метод, очень похожий на этот, и он работает очень хорошо для меня, при условии, что вы знаете имена пакетов, которые вы хотите установить заранее, то есть ;-)
Gary Doublé

очень простое решение. только что добавил псевдоним .bashrc
Ach J

4

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


4

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

Из оболочки Bash:

lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin

1
wgetили curl, вероятно, лучший инструмент для этого. (И лично я установил бы это в некотором другом каталоге в моем, $PATHа не в /bin.)
Кит Томпсон

3

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

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

choco install cyg-get

Затем:

cyg-get wget

1

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

# 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>>"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.