Jak zainstalować komponenty Cygwin z wiersza poleceń?

178

Czy w pakiecie Cygwin jest narzędzie podobne do tego apt-getw Debianie lub yumna redhat, które pozwala mi instalować komponenty z wiersza poleceń?

vy32
źródło
2
Stack Overflow to witryna zawierająca pytania dotyczące programowania i programowania. To pytanie wydaje się być niezwiązane z tematem, ponieważ nie dotyczy programowania ani programowania. Zobacz, o jakie tematy mogę zapytać w Centrum pomocy. Być może Super User byłby lepszym miejscem do zadawania pytań. Zobacz też Gdzie mogę zadawać pytania dotyczące operacji deweloperskich?
jww
7
@jww, to nie jest devops.
Pacerier

Odpowiedzi:

102

W instalatorze „setup.exe” nie ma żadnego narzędzia oferującego funkcjonalność apt-get. Istnieje jednak instalator pakietu wiersza poleceń dla Cygwin, który można pobrać osobno, ale nie jest on całkowicie stabilny i wymaga obejść.

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

Sprawdź kartę problemów dla projektu, aby zobaczyć znane problemy.

Zorobabel
źródło
Dzięki! Właśnie to chciałem wiedzieć. Zastanawiam się, dlaczego nie są dojrzałe?
vy32
4
@ vy32: ponieważ nie pomogłeś ich w dojrzewaniu? :) Nie potrafią same pisać. Ktoś musi nad nimi popracować. A ponieważ ich użyteczność jest dość ograniczona (aby nadpisać pliki aktualnie używane w systemie Windows, musisz najpierw zamknąć Cygwin, więc nie można uruchomić żadnego menedżera pakietów w zamkniętym Cygwinie :), nie ma wielu zainteresowanych.
David Ferenczy Rogožan
10
Z innej odpowiedzi: setup-x86.exe -q -P packagename1,packagename2. Nie tak wyszukane apt-getlub nawet, apt-cygale w większości przypadków wystarcza. Możesz także uruchomić to z cmd.exe(po zamknięciu Cygwin).
kqw
2
@Steve, odpowiedź Dawida mówi, że przeniósł się do „mędrca”. stackoverflow.com/a/23143997/80772
eel ghEEz
3
Ponieważ oryginalny projekt jest martwy, proponuję przyjrzeć się temu (w momencie tego komentarza) aktywnemu widelcowi: github.com/kou1okada/apt-cyg
Vladimir Panteleev
136

Konfiguracja Cygwin akceptuje argumenty wiersza poleceń, aby zainstalować pakiety z wiersza poleceń.

np. setup-x86.exe -q -P packagename1,packagename2aby zainstalować pakiety bez interakcji z GUI („tryb instalacji nienadzorowanej”).

(Pamiętaj, że musisz użyć setup-x86.exelub setup-x86_64.exeodpowiednio).

Zobacz http://cygwin.com/packages/, aby zapoznać się z listą pakietów.

jturney
źródło
5
Miły! setup.exe nazywa się teraz setup-x86.exe - lub wariantem zależnym od bitów procesora. Zobacz także listę pakietów cygwin.com/packages
ErichBSchulz
2
Aby określić wiele pakietów, oddziel je przecinkami. np. w DOS, wpiszsetup-x86_64 --packages="openssh,python"
Michael Scheper
Wydaje się, że nie ma sposobu na skonfigurowanie określonych wersji.
CMCDragonkai
@jturney, czy to jest stabilne?
Pacerier,
1
@Pacerier, Nie jest jasne, o co pytasz. Powinna to być funkcja konfiguracji, na której można bezpiecznie polegać.
jturney
134

Aby uzyskać wygodniejszy instalator, możesz użyć go apt-cygjako menedżera pakietów. Jego składnia jest podobna do apt-get, co jest plusem. W tym celu wykonaj powyższe kroki, a następnie użyj Cygwin Bash do następujących kroków

wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
chmod +x apt-cyg
mv apt-cyg /usr/local/bin

Teraz to apt-cygjest zainstalowane. Oto kilka przykładów instalacji niektórych pakietów

apt-cyg install nano
apt-cyg install git
apt-cyg install ca-certificates
sagunms
źródło
17
Oczywiście użyj setup-x86_64.exe -q -P wget, tar, qawk, bzip2, subversion, vim dla 64-bitowych okien.
Arun
3
Potrzebne do dodania --no-check-certificate do polecenia wget. W przeciwnym razie super.
akauppi
A teraz to 404 (po kilku przekierowaniach)
Shadow
Właśnie wypróbowałem wgeti pobiera się apt-cygbez problemów. W którym momencie pojawia się 404?
sagunms
1
wget nie jest instalowany domyślnie wraz z cygwin, co oznacza, że ​​należy go załadować za pomocą ręcznej i nieprogramowej instalacji.
51

Istnieje kilka skryptów, których można używać jako prostych menedżerów pakietów dla Cygwin. Ale ważne jest, aby wiedzieć, że zawsze będą one dość ograniczone , ze względu na ... ehm ... Windows.

Instalowanie lub usuwanie pakietów jest w porządku, każdy menedżer pakietów dla Cygwin może to zrobić. Ale aktualizacja jest uciążliwa, ponieważ system Windows nie pozwala na zastąpienie pliku wykonywalnego, który jest obecnie uruchomiony. Nie możesz więc aktualizować np. Cygwin DLL ani żadnego pakietu, który zawiera aktualnie działający plik wykonywalny z samego Cygwin. Na stronie instalacji Cygwin znajduje się również ta uwaga :

„Podstawowym powodem braku bardziej w pełni funkcjonalnego menedżera pakietów jest to, że taki program wymagałby pełnego dostępu do wszystkich funkcji POSIX Cygwin. Jest to jednak trudne do zapewnienia w środowisku wolnym od Cygwin, takim jakie istnieje na początku Ponadto system Windows nie umożliwia łatwego nadpisywania używanych plików wykonywalnych, więc instalacja nowej wersji biblioteki Cygwin DLL, gdy menedżer pakietów używa tej biblioteki, jest problematyczna ”.

Konfiguracja Cygwin używa rejestru systemu Windows do nadpisywania plików wykonywalnych, które są w użyciu, a ta metoda wymaga ponownego uruchomienia systemu Windows . Dlatego lepiej zamknąć wszystkie procesy Cygwin przed aktualizacją pakietów , więc nie musisz ponownie uruchamiać komputera, aby faktycznie zastosować zmiany. Instalacja nowego pakietu powinna przebiegać całkowicie bezproblemowo. Nie sądzę, aby którykolwiek z menedżerów pakietów poza Cygwin setup.exeimplementował jakąkolwiek metodę nadpisywania używanych plików, więc po prostu zawiódłby, gdyby nie mógł ich zastąpić.


Niektóre menedżery pakietów dla Cygwin:

apt-cyg

Aktualizacja : repozytorium zostało niedawno wyłączone z powodu problemów z prawami autorskimi ( usunięcie DMCA ). To wygląda jak właściciel repozytorium wydał DMCA Takedown na własnym repozytorium i stworzył nowy projekt o nazwie Sage (patrz poniżej).

Dla mnie najlepszy. Po prostu dlatego, że jest jednym z najnowszych. Nie korzysta z Cygwina setup.exe, raczej ponownie implementuje, co setup.exerobi. Działa poprawnie na obu platformach - x86 oraz x86_64 . Istnieje wiele wideł z mniej lub bardziej dodatkowymi funkcjami. Na przykład widelec kou1okada to jedna z ulepszonych wersji , która jest naprawdę świetna.

apt-cyg to tylko skrypt powłoki, nie ma instalacji. Wystarczy go pobrać (lub sklonować repozytorium), uczynić go wykonywalnym i skopiować gdzieś do 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

Jest też kilka widelców z różnymi funkcjami.


szałwia

Kolejny menedżer pakietów zaimplementowany jako skrypt powłoki. Nie próbowałem, ale faktycznie wygląda dobrze.

Może wyszukiwać pakiety w repozytorium, wyświetlać pakiety w kategorii, sprawdzać zależności, wyświetlać pliki pakietów i nie tylko. Posiada funkcje, których nie mają inni menedżerowie pakietów.


cyg-apt

Widelec porzuconego oryginału cyg-aptz ulepszeniami i poprawkami. Ma sporo funkcji i jest zaimplementowany w Pythonie. Instalacja odbywa się za pomocą make.


Chocolatey's Cyg-Get

Jeśli użyłeś Chocolatey do zainstalowania Cygwin, możesz zainstalować pakiet cyg-get , który jest w rzeczywistości prostym opakowaniem wokół Cygwin setup.exenapisanego w PowerShell.


Cygwin's setup.exe

Posiada również tryb wiersza poleceń . Co więcej, pozwala na jednoczesną aktualizację wszystkich zainstalowanych pakietów (podobnie apt-get upgradejak w systemie Linux opartym na Debianie).

Przykładowe zastosowanie:

setup-x86_64.exe -q --packages=bash,vim

Możesz utworzyć alias, aby ułatwić korzystanie z niego, na przykład:

alias cyg-get="/cygdrive/d/path/to/cygwin/setup-x86_64.exe -q -P"

Następnie możesz na przykład zainstalować pakiet Vima z:

cyg-get vim

David Ferenczy Rogožan
źródło
3
sagejest rozwidleniem apt-cygnajbardziej aktywnych współpracowników w ciągu ostatniego roku lub dwóch (Steven Penny). Wygląda na to, że na początku tego roku nie zgadzał się z oryginalnym apt-cygautorem (Stephenem Jungelsem) i wydał żądanie DMCA, kiedy rozwidlił projekt. Ponieważ Jungels (aka Transcode) jest oryginalnym autorem projektu, GitHub przywrócił oryginalny projekt wkrótce potem. Obecnie oba projekty są dostępne - chociaż oryginalny projekt nie miał żadnych nowych aktualizacji kodu od czasu podziału. To naprawdę nieporządna sytuacja.
Anthony Geoghegan
setup-x86_64.exe -q --packages = bash, vim. Takie podejście pomogło mi w przeszłości. Po prostu uruchom go z wiersza poleceń i działa płynnie.
TheWalkingData
9

Najpierw pobierz instalator ze strony: https://cygwin.com/setup-x86_64.exe (Windows 64bit), a następnie:

# 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

na przykład

# install vim
cygwin vim

# see other options
cygwin --help
Jason
źródło
Używam metody bardzo podobnej do tej i działa ona naprawdę dobrze, pod warunkiem, że znasz wcześniej nazwy pakietów, które chcesz zainstalować ;-)
Gary Doublé
bardzo proste rozwiązanie. właśnie dodałem alias do .bashrc
Ach J
4

Chciałem rozwiązania podobnego do tego apt-get --print-uris, ale niestety apt-cyg tego nie robi. Poniżej przedstawiono rozwiązanie, które pozwoliło mi pobrać tylko potrzebne pakiety wraz z ich zależnościami i skopiować je do miejsca docelowego w celu instalacji. Oto skrypt bash, który analizuje dane wyjściowe apt-cygna listę identyfikatorów 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

Powyższe wypisze ścieżki pakietów, które wymagają pobrania, względem głównego lustrzanego katalogu cygwin, pomijając wszelkie pakiety, które są już zainstalowane. Aby je pobrać, zapisałem wynik do pliku, cygwin-packages-lista następnie użyłem wget:

mirror=http://cygwin.mirror.constant.com/
uris=$(for line in $(cat cygwin-packages-list); do echo "$mirror$line"; done)
wget -x $uris

Instalatora można następnie użyć do zainstalowania z lokalnego katalogu pamięci podręcznej. Zauważ, że aby to zadziałało, musiałem skopiować setup.iniz poprzedniej pamięci podręcznej pakietu cygwin do katalogu z pobranymi plikami (w przeciwnym razie instalator nie wie, co jest).

wakjah
źródło
4

Stare pytanie, ale nadal aktualne. Oto, co zadziałało dla mnie dzisiaj (26.06.16).

Z powłoki bash:

lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin
Steve Isenberg
źródło
1
wgetlub curljest prawdopodobnie lepszym narzędziem do tego. (Osobiście zainstalowałbym go w innym katalogu w moim, $PATHa nie w /bin.)
Keith Thompson,
3

Odpowiedź Dawida Ferenczego jest dość kompletna, ale po wypróbowaniu prawie wszystkich jego opcji stwierdziłem, że cyg-get Chocolatey'ego jest najlepsze (przynajmniej jedyne, które udało mi się zabrać do pracy).

Chciałem zainstalować wget, kroki były następujące:

choco install cyg-get

Następnie:

cyg-get wget
fabriciorissetto
źródło
1

Zwykle przed zainstalowaniem pakietu trzeba znać jego dokładną nazwę:

# 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>>"
Yordan Georgiev
źródło