명령 행에서 cygwin 구성 요소를 어떻게 설치합니까?


178

Cygwin 패키지 apt-get에 데비안 또는 yumRedhat 과 비슷한 도구가 있습니까? 명령 줄에서 구성 요소를 설치할 수 있습니까?


2
스택 오버플로는 프로그래밍 및 개발 질문을위한 사이트입니다. 이 질문은 프로그래밍이나 개발에 관한 것이 아니기 때문에 주제가 아닌 것 같습니다. 참조 내가 여기에 대해 요청할 수 있습니다 어떤 주제 도움말 센터에서. 아마도 슈퍼 유저 가 더 좋은 곳일 것입니다. 또한 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에서 패키지 관리자를 실행할 수 없습니다 :) 관심이 많은 사람들은 없습니다.
David Ferenczy Rogožan

10
다른 답변에서 : setup-x86.exe -q -P packagename1,packagename2. 아니 공상처럼 apt-get, 심지어 apt-cyg하지만 대부분의 경우 트릭을 수행합니다. 그리고 cmd.exeCygwin을 닫은 후에도 실행할 수 있습니다 .
kqw

2
@Steve, Dawid의 대답은 그것이 "세이지"로 옮겨 졌다고 말합니다. stackoverflow.com/a/23143997/80772
eel ghEEz

3
원래 프로젝트가 죽은 이후, 나는 활성 포크 (이 댓글의 시간으로)이보고 제안 : github.com/kou1okada/apt-cyg
블라디미르 Panteleev

136

Cygwin의 설정은 명령 줄 에서 패키지를 설치하기 위해 명령 줄 인수 를 허용 합니다.

setup-x86.exe -q -P packagename1,packagename2를 들어 GUI 상호 작용없이 패키지를 설치합니다 ( '무인 설치 모드').

(참고 사용에 필요 setup-x86.exe하거나 setup-x86_64.exe적절하게.)

패키지 목록 은 http://cygwin.com/packages/ 를 참조 하십시오 .


5
좋은! setup.exe는 이제 setup-x86.exe 또는 CPU 비트에 따른 변형입니다. 또한 패키지 목록 여기를 참조 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
64 비트 창에서는 setup-x86_64.exe -q -P wget, tar, qawk, bzip2, subversion, vim을 사용하십시오.
Arun

3
wget 명령에 --no-check-certificate를 추가해야합니다. 그렇지 않으면 훌륭합니다.
akauppi

그리고 지금은 404입니다 (몇 번의 리디렉션 후)
Shadow

그냥 시도 wget하고 apt-cyg문제없이 다운로드 합니다. 404는 어느 시점에 나타 납니까?
sagunms

1
기본적으로 wget은 cygwin과 함께 설치되지 않으므로 수동 및 비 프로그래밍 설치로 부트 스트랩해야합니다.

51

Cygwin의 간단한 패키지 관리자로 사용할 수있는 일부 스크립트가 있습니다. 그러나 그것들은 항상 상당히 제한적 이라는 것을 아는 것이 중요합니다. ... ehm ... Windows 때문에 .

Cygwin의 각 패키지 관리자는 패키지를 설치하거나 제거해도됩니다. 그러나 Windows에서는 현재 실행중인 실행 파일을 덮어 쓸 수 없으므로 업데이트가 쉽지 않습니다. 따라서 Cygwin DLL 또는 Cygwin 자체에서 현재 실행중인 실행 파일이 포함 된 패키지를 업데이트 할 수 없습니다. Cygwin 설치 페이지 에도이 참고 사항이 있습니다 .

"모든 기능을 갖춘 패키지 관리자가없는 기본 이유는 이러한 프로그램이 Cygwin의 모든 POSIX 기능에 대한 전체 액세스 권한이 필요하기 때문입니다. 그러나 Cygwin이없는 환경에서는 제공하기가 어렵습니다. 또한 Windows에서는 사용중인 실행 파일을 쉽게 덮어 쓸 수 없으므로 패키지 관리자가 DLL을 사용하는 동안 Cygwin DLL의 새 버전을 설치하는 데 문제가 있습니다. "

Cygwin의 설정은 Windows 레지스트리를 사용하여 사용중인 실행 파일을 덮어 쓰며이 방법을 사용 하려면 Windows를 다시 부팅해야합니다 . 따라서 패키지를 업데이트하기 전에 모든 Cygwin 프로세스닫는 것이 좋습니다. 따라서 실제로 변경 사항을 적용하기 위해 컴퓨터를 재부팅하지 않아도됩니다. 새로운 패키지의 설치는 번거롭지 않아야합니다. Cygwin의 setup.exe구현을 제외한 모든 패키지 관리자 는 사용중인 파일을 덮어 쓰는 방법을 구현 한다고 생각하지 않으므로 덮어 쓸 수 없으면 단순히 실패합니다.


Cygwin의 일부 패키지 관리자 :

apt-cyg

업데이트 : 최근 저작권 문제로 인해 저장소가 비활성화되었습니다 ( DMCA 게시 중단 ). 그것은 처럼 보이는 저장소의 소유자의 DMCA 게시 중단 발행 자신의 저장소를하고라는 새로운 프로젝트 생성 세이지 (우는 소리 참조).

나에게 가장 좋은 것. 가장 최근의 것이기 때문입니다. Cygwin을 사용하지 setup.exe않고 다시 구현 setup.exe합니다. x86x86_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

다른 기능을 가진 많은 포크 도 있습니다.


세이지

다른 패키지 관리자는 쉘 스크립트로 구현되었습니다. 나는 그것을 시도하지 않았지만 실제로 좋아 보인다.

리포지토리에서 패키지를 검색하고, 범주에서 패키지를 나열하고, 종속성을 확인하고, 패키지 파일을 나열하는 등의 작업을 수행 할 수 있습니다. 다른 패키지 관리자에게는없는 기능이 있습니다.


꽉 쥐다

버려진 원본의 포크 꽉 쥐다개선 및 버그 수정. 그것은 많은 기능을 가지고 있으며 파이썬으로 구현되었습니다. 를 사용하여 설치합니다 make.


초콜릿의 cyg-get

Chocolatey를 사용하여 Cygwin을 설치 한 경우 cyg-get 패키지를 설치할 수 있습니다. Cyg-get 패키지 는 실제로 Cygwin의 setup.exePowerShell로 작성된 간단한 래퍼 입니다.


Cygwin의 setup.exe

또한 명령 행 모드가 있습니다. 또한 설치된 모든 패키지를 한 번업그레이드 할 수 있습니다 ( apt-get upgradeDebian 기반 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
sageapt-cyg지난 1 년 또는 2 년 (Steven Penny)의 가장 활발한 참여자 들의 포크입니다 . 올해 초 그는 apt-cyg원작자 (Stephen Jungels)와 의견이 맞지 않아서 프로젝트를 시작했을 때 DMCA 게시 중단을 발표 한 것으로 보입니다. 융 엘스 (일명 트랜스 코드)는 프로젝트의 최초 저자이기 때문에 GitHub는 곧 원래 프로젝트를 복원했습니다. 현재 두 프로젝트 모두 사용 가능하지만 원래 프로젝트는 분할 이후 새로운 코드 업데이트가 없었습니다. 정말 지저분한 상황입니다.
Anthony Geoghegan

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는 이것을하지 않습니다. 다음은 필요한 패키지 만 종속성과 함께 다운로드하여 설치 대상으로 복사 할 수있는 솔루션입니다. 다음은 출력 apt-cyg을 URI 목록으로 구문 분석하는 bash 스크립트입니다 .

#!/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-listwget을 사용했습니다.

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

오래된 질문이지만 여전히 관련성이 있습니다. 오늘 나를 위해 일한 것은 다음과 같습니다 (6/26/16).

bash 쉘에서 :

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

1
wget아니면 curl아마도 더 좋은 도구 일 것입니다. (그리고 개인적으로, 나는 그것을 $PATH아닌 내 다른 디렉토리에 설치했다 /bin.)
Keith Thompson

3

Dawid Ferenczy의 답변은 매우 완전하지만 거의 모든 옵션을 시도한 후 Chocolatey의 cyg-get을 찾았 습니다. 이 최고 (최소한 일을 할 수있는 유일한 것)임을 알았습니다.

설치하고 싶었습니다 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>>"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.