Làm cách nào để cài đặt các thành phần cygwin từ dòng lệnh?


178

Có một công cụ nào trong gói Cygwin tương tự như apt-gettrên Debian hoặc yumtrên redhat cho phép tôi cài đặt các thành phần từ dòng lệnh không?


2
Stack Overflow là một trang web dành cho các câu hỏi lập trình và phát triển. Câu hỏi này dường như lạc đề vì nó không liên quan đến lập trình hay phát triển. Xem những chủ đề nào tôi có thể hỏi về đây trong Trung tâm trợ giúp. Có lẽ Super User sẽ là một nơi tốt hơn để hỏi. Ngoài ra, xem tôi gửi câu hỏi về Dev Ops ở đâu?
jww

7
@jww, Đây không phải là tín đồ.
Pacerier

Câu trả lời:


102

Không có công cụ cụ thể nào trong trình cài đặt 'setup.exe' cung cấp chức năng của apt-get. Tuy nhiên, có một trình cài đặt gói dòng lệnh cho Cygwin có thể được tải xuống riêng, nhưng nó không hoàn toàn ổn định và phụ thuộc vào cách giải quyết.

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

Kiểm tra tab vấn đề cho dự án để xem các vấn đề đã biết.


Cảm ơn! Chỉ là những gì tôi muốn biết. Tôi tự hỏi tại sao họ không trưởng thành?
vy32

4
@ vy32: vì bạn không giúp họ trưởng thành? :) Họ không thể tự viết. Ai đó phải làm việc trên chúng. Và vì khả năng sử dụng của chúng khá hạn chế (để ghi đè lên các tệp hiện đang sử dụng trên Windows, bạn phải đóng Cygwin trước, do đó không thể thực thi bất kỳ trình quản lý gói nào trong Cygwin đã đóng :), nên không có nhiều người quan tâm.
David Ferenczy Rogožan

10
Từ một câu trả lời khác : setup-x86.exe -q -P packagename1,packagename2. Không phải là ưa thích như apt-gethoặc thậm chí apt-cygnhưng nó thực hiện các mẹo trong hầu hết các trường hợp. Và bạn cũng có thể chạy nó từ cmd.exe(sau khi đóng Cygwin).
kqw

2
@Steve, câu trả lời của Dawid nói rằng nó đã chuyển sang "hiền nhân". stackoverflow.com/a/23143997/80772
lươn ghEEz

3
Vì dự án ban đầu đã chết, tôi khuyên bạn nên xem xét điều này (tại thời điểm nhận xét này) hoạt động của ngã ba: github.com/kou1okada/apt-cyg
Vladimir Panteleev

136

Thiết lập của Cygwin chấp nhận các đối số dòng lệnh để cài đặt các gói từ dòng lệnh.

ví dụ: setup-x86.exe -q -P packagename1,packagename2để cài đặt các gói mà không có bất kỳ tương tác GUI nào ('chế độ thiết lập không giám sát').

(Lưu ý rằng bạn cần sử dụng setup-x86.exehoặc setup-x86_64.exekhi thích hợp.)

Xem http://cygwin.com/packages/ để biết danh sách gói.


5
Đẹp! setup.exe hiện được gọi là setup-x86.exe - hoặc một biến thể tùy thuộc vào các bit cpu. Cũng xem tại đây để biết danh sách gói cygwin.com/packages
ErichBSchulz

2
Ngoài ra, để chỉ định nhiều gói, hãy tách chúng bằng dấu phẩy. ví dụ: trong DOS, gõsetup-x86_64 --packages="openssh,python"
Michael Scheper

Dường như không có cách nào để thiết lập các phiên bản cụ thể.
CMCDragonkai

@jturney, cái này có ổn định không?
Pacerier

1
@Pacerier, không rõ bạn đang hỏi gì. Đây phải là một tính năng của thiết lập mà nó an toàn để dựa vào.
jturney

134

Để cài đặt thuận tiện hơn, bạn có thể muốn sử dụng apt-cyglàm trình quản lý gói của mình. Cú pháp của nó tương tự apt-get, đó là một điểm cộng. Đối với điều này, hãy làm theo các bước trên và sau đó sử dụng Cygwin Bash cho các bước sau

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

Bây giờ apt-cygđược cài đặt. Dưới đây là một vài ví dụ về việc cài đặt một số gói

apt-cyg install nano
apt-cyg install git
apt-cyg install ca-certificates

17
Rõ ràng sử dụng setup-x86_64.exe -q -P wget, tar, qawk, bzip2, subversion, vim cho các cửa sổ 64 bit.
Arun

3
Cần thêm --no-check-cert vào lệnh wget. Nếu không, tuyệt vời.
akauppi

Và bây giờ là 404 (sau một vài lần chuyển hướng)
Shadow

Chỉ cần thử wgetvà nó tải xuống apt-cygmà không có vấn đề. Tại thời điểm nào 404 xuất hiện?
sagunms

1
wget không được cài đặt theo mặc định với cygwin, có nghĩa là điều này cần phải được khởi động với cài đặt thủ công và không lập trình.

51

Có tồn tại một số tập lệnh, có thể được sử dụng làm trình quản lý gói đơn giản cho Cygwin. Nhưng điều quan trọng cần biết là chúng luôn luôn bị giới hạn bởi vì ... ehm ... Windows.

Cài đặt hoặc gỡ bỏ các gói là tốt, mỗi người quản lý gói cho Cygwin có thể làm điều đó. Nhưng cập nhật là một nỗi đau vì Windows không cho phép bạn ghi đè lên một tệp thực thi, hiện đang chạy. Vì vậy, bạn không thể cập nhật, ví dụ Cygwin DLL hoặc bất kỳ gói nào có chứa tệp thực thi hiện đang chạy từ chính Cygwin. Ngoài ra còn có ghi chú này trên trang Cài đặt Cygwin :

"Lý do cơ bản để không có trình quản lý gói đầy đủ tính năng là vì một chương trình như vậy sẽ cần quyền truy cập đầy đủ vào tất cả các chức năng POSIX của Cygwin. Tuy nhiên, điều đó rất khó để cung cấp trong môi trường không có Cygwin, như trước tiên là tồn tại Ngoài ra, Windows không dễ dàng cho phép ghi đè các tệp thực thi đang sử dụng nên việc cài đặt phiên bản mới của Cygwin DLL trong khi trình quản lý gói đang sử dụng DLL là vấn đề. "

Thiết lập của Cygwin sử dụng sổ đăng ký Windows để ghi đè lên các tệp thực thi đang sử dụng và phương pháp này yêu cầu khởi động lại Windows . Do đó, tốt hơn hết là đóng tất cả các quy trình Cygwin trước khi cập nhật các gói , vì vậy bạn không phải khởi động lại máy tính để thực sự áp dụng các thay đổi. Việc cài đặt một gói mới nên hoàn toàn không có bất kỳ rắc rối nào. Tôi không nghĩ rằng bất kỳ người quản lý gói nào ngoại trừ Cygwin đều setup.exethực hiện bất kỳ phương pháp nào để ghi đè lên các tệp đang sử dụng, vì vậy nó sẽ thất bại nếu không thể ghi đè lên chúng.


Một số trình quản lý gói cho Cygwin:

apt-cyg

Cập nhật : kho lưu trữ đã bị vô hiệu hóa gần đây do vấn đề bản quyền ( gỡ xuống DMCA ). Có vẻ như chủ sở hữu của kho lưu trữ đã phát hành triệt phá DMCA trên kho lưu trữ của riêng mình và tạo ra một dự án mới gọi là Sage (xem dưới đây).

Một trong những tốt nhất cho tôi. Đơn giản vì đó là một trong những thứ gần đây nhất. Nó không sử dụng Cygwin setup.exe, nó thực hiện lại, làm gì setup.exe. Nó hoạt động chính xác cho cả hai nền tảng - x86 cũng như x86_64 . Có rất nhiều dĩa với ít nhiều tính năng bổ sung. Ví dụ, ngã ba kou1okada là một trong những phiên bản cải tiến , thực sự tuyệt vời.

apt-cyg chỉ là một kịch bản shell, không có cài đặt. Chỉ cần tải xuống (hoặc sao chép kho lưu trữ), làm cho nó có thể thực thi được và sao chép nó ở đâu đó vào 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

Ngoài ra còn có một loạt các dĩa với các tính năng khác nhau.


Hiền nhân

Một trình quản lý gói khác được triển khai như một kịch bản shell. Tôi đã không thử nó nhưng nó thực sự có vẻ tốt.

Nó có thể tìm kiếm các gói trong một kho lưu trữ, liệt kê các gói trong một danh mục, kiểm tra các phụ thuộc, liệt kê các tệp gói, v.v. Nó có các tính năng mà các nhà quản lý gói khác không có.


cyg-apt

Ngã ba gốc bỏ hoang cyg-aptvới những cải tiến và sửa lỗi. Nó có khá nhiều tính năng và được triển khai trong Python. Cài đặt được thực hiện bằng cách sử dụng make.


Cyg-get của sô cô la

Nếu bạn đã sử dụng Chocolatey để cài đặt Cygwin, bạn có thể cài đặt gói cyg-get , đây thực sự là một trình bao bọc đơn giản xung quanh Cygwin setup.exeđược viết bằng PowerShell.


Cygwin's setup.exe

Nó cũng có chế độ dòng lệnh . Hơn nữa, nó cho phép bạn nâng cấp tất cả các gói đã cài đặt cùng một lúc (cũng như apt-get upgradetrên Linux dựa trên Debian).

Ví dụ sử dụng:

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

Bạn có thể tạo bí danh để sử dụng dễ dàng hơn, ví dụ:

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

Sau đó, bạn có thể cài đặt gói Vim với:

cyg-get vim


3
sagelà một nhánh của apt-cygnhững người đóng góp tích cực nhất của nó trong một hoặc hai năm qua (Steven Penny). Có vẻ như đầu năm nay, ông đã có một số bất đồng với apt-cygtác giả ban đầu (Stephen Jungels) và đưa ra bản gỡ xuống DMCA khi ông rẽ nhánh dự án. Vì Jungels (còn gọi là Transcode) được xác minh là tác giả ban đầu của dự án, GitHub đã khôi phục dự án ban đầu ngay sau đó. Hiện tại, cả hai dự án đều có sẵn - mặc dù dự án ban đầu chưa có bất kỳ cập nhật mã mới nào kể từ khi chia tách. Đó là một tình huống lộn xộn, thực sự.
Anthony Geoghegan

setup-x86_64.exe -q --packages = bash, vim. Cách tiếp cận này đã giúp tôi trong quá khứ. Chỉ cần chạy nó từ dòng lệnh và nó hoạt động trơn tru.
TheWalkingData

9

Đầu tiên, tải xuống trình cài đặt tại: https://cygwin.com/setup-x86_64.exe (Windows 64bit), sau đó:

# 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

ví dụ

# install vim
cygwin vim

# see other options
cygwin --help

Tôi đang sử dụng một phương pháp rất giống với phương pháp này và nó hoạt động rất tốt đối với tôi, cung cấp cho bạn biết tên của các gói bạn muốn cài đặt trước đó là ;-)
Gary Doublé

Giải pháp rất đơn giản. chỉ cần thêm bí danh vào .bashrc
Ach J

4

Tôi muốn một giải pháp cho việc này tương tự apt-get --print-uris, nhưng không may là apt-cyg không làm điều này. Sau đây là một giải pháp cho phép tôi chỉ tải xuống các gói tôi cần, với sự phụ thuộc của chúng và sao chép chúng vào mục tiêu để cài đặt. Đây là một tập lệnh bash phân tích đầu ra apt-cygthành một danh sách các 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

Ở trên sẽ in ra các đường dẫn của các gói cần tải xuống, liên quan đến root nhân bản cygwin, bỏ qua mọi gói đã được cài đặt. Để tải chúng xuống, tôi đã viết đầu ra thành một tệp cygwin-packages-listvà sau đó sử dụng wget:

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

Trình cài đặt sau đó có thể được sử dụng để cài đặt từ thư mục bộ đệm cục bộ. Lưu ý rằng để làm việc này, tôi cần sao chép setup.initừ bộ đệm của gói cygwin trước đó vào thư mục chứa các tệp đã tải xuống (nếu không trình cài đặt không biết là gì).


4

Câu hỏi cũ, nhưng vẫn có liên quan. Đây là những gì làm việc cho tôi ngày hôm nay (26/11/16).

Từ vỏ bash:

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

1
wgethoặc curlcó lẽ là một công cụ tốt hơn cho việc này. (Và cá nhân, tôi sẽ cài đặt nó trong một số thư mục khác trong tôi $PATHchứ không phải trong /bin.)
Keith Thompson

3

Câu trả lời của Dawid Ferenczy khá đầy đủ nhưng sau khi tôi thử hầu hết tất cả các lựa chọn của anh ấy, tôi thấy rằng cyg-get của Chocolate là tốt nhất (ít nhất là cách duy nhất tôi có thể làm việc).

Tôi đã muốn cài đặt wget, các bước là thế này:

choco install cyg-get

Sau đó:

cyg-get wget

1

Thông thường trước khi cài đặt một gói, người ta phải biết tên chính xác của nó:

# 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>>"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.