Як встановити компоненти cygwin з командного рядка?


178

Чи є в пакеті Cygwin інструмент, подібний до apt-getDebian або yumRedhat, який дозволяє мені встановлювати компоненти з командного рядка?


2
Переповнення стека - це сайт для програмування та питань розробки. Це питання видається поза темою, оскільки мова не йде про програмування чи розробку. Дивіться, які теми я можу запитати тут, у довідковому центрі. Можливо, Супер Користувача було б краще запитати. Також див. Де я публікую запитання про Dev Ops?
jww

7
@jww, це не deps.
Печер'є

Відповіді:


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
@Steve, відповідь Давіда говорить, що вона перейшла на "мудрець". stackoverflow.com/a/23143997/80772
вугра ghEEz

3
Оскільки оригінальний проект мертвий, пропоную поглянути на цей (на час цього коментаря) активний вил: github.com/kou1okada/apt-cyg
Володимир Пантелєєв

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 - або варіантом залежно від бітів процесора. Ознайомтесь також із
ErichBSchulz

2
Крім того, щоб вказати кілька пакетів, розділіть їх комами. наприклад, у DOS, типsetup-x86_64 --packages="openssh,python"
Майкл Шепер

Здається, не існує способу налаштування конкретних версій.
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-сертифікат до команди wget. Інакше чудово.
akauppi

А зараз це 404 (після декількох переспрямувань)
Shadow

Просто спробував, wgetі це завантажує apt-cygбез проблем. У який момент з'являється 404?
sagunms

1
wget не встановлений за замовчуванням з cygwin, тобто це потрібно завантажувати за допомогою встановлення вручну та непрограматично.

51

Існує кілька сценаріїв, які можна використовувати як прості менеджери пакунків для Cygwin. Але важливо знати, що вони завжди будуть досить обмеженими , через ... ем ... Windows.

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

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

Установка Cygwin використовує реєстр Windows для заміни виконуваних файлів, які використовуються, і цей метод вимагає перезавантаження Windows . Тому краще закрити всі процеси Cygwin перед оновленням пакетів , тому вам не доведеться перезавантажувати комп'ютер, щоб реально застосувати зміни. Установка нового пакету повинна бути повністю без зайвих проблем. Я не думаю, що жоден із менеджерів пакетів, крім Cygwin, не setup.exeреалізує будь-який метод перезапису файлів, що використовуються, тому він просто вийде з ладу, якщо не зможе їх перезаписати.


Деякі менеджери пакунків для Cygwin:

влучний циг

Оновлення : сховище нещодавно було відключено через проблеми з авторським правом ( видалення DMCA ). Це виглядає як власник сховища видав DMCA партер на своєму власному сховище і створив новий проект під назвою Sage (див нижче).

Найкращий для мене. Просто тому, що це одна з найсвіжіших. Він не використовує Cygwin 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.


Шоколаді цигать

Якщо ви використовували Chocolatey для встановлення Cygwin, ви можете встановити пакет cyg-get , який насправді є простою обгорткою навколо setup.exeнаписаного в PowerShell Cygwin .


Cygwin's setup.exe

Він також має режим командного рядка . Більше того, це дозволяє оновлювати всі встановлені пакети одночасно (як 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


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).

З панцирної оболонки:

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

1
wgetабо curl, мабуть, кращий інструмент для цього. (І особисто я би встановив його в якомусь іншому каталозі в моєму, $PATHа не в іншому /bin).
Кіт Томпсон,

3

Відповідь Давіда Ференчі досить повна, але після того, як я спробував майже всі його варіанти, я виявив, що цигарета Шоколаді була найкращою (принаймні єдиною, яку я міг взяти на роботу).

Я хотів встановити 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.