Làm cách nào để cập nhật Cygwin từ dòng lệnh của Cygwin?


73

Để tìm kiếm và tải xuống một gói bị bỏ lỡ từ Cygwin, tôi cần chạy GUI setup.exe mỗi lần, nhấp nhiều lần và làm những việc nhàm chán khác.

Có cách nào để làm điều tương tự từ dòng lệnh của Cygwin trực tiếp không? Giống như các công cụ apt-get làm.

Câu trả lời:


40

Hãy xem ở đây:

Ngoài những thứ khác, nó cung cấp danh sách các tùy chọn sau đây cho setup.exe:

Command Line Options:
 -A --disable-buggy-antivirus           Disable known or suspected buggy anti
                    virus software packages during execution.
 -C --categories                        Specify entire categories to install
 -D --download                          Download from internet
 -d --no-desktop                        Disable creation of desktop shortcut
 -h --help                              print help
 -K --pubkey                            Path to extra public key file (gpg format)
 -L --local-install                     Install from local directory
 -l --local-package-dir                 Local package directory
 -n --no-shortcuts                      Disable creation of desktop and start menu
                    shortcuts
 -N --no-startmenu                      Disable creation of start menu shortcut
 -O --only-site                         Ignore all sites except for -s
 -P --packages                          Specify packages to install
 -p --proxy                             HTTP/FTP proxy (host:port)
 -q --quiet-mode                        Unattended setup mode
 -r --no-replaceonreboot                Disable replacing in-use files on next
                    reboot.
 -R --root                              Root installation directory
 -S --sexpr-pubkey                      Extra public key in s-expr format
 -s --site                              Download site
 -U --keep-untrusted-keys               Use untrusted keys and retain all
 -u --untrusted-keys                    Use untrusted keys from last-extrakeys
 -X --no-verify                         Don't verify setup.ini signatures

Vì vậy setup.exe -P <package name>nên làm công việc. Đừng có cygwin ngay tại đây, vì vậy hãy kiểm tra nó để xác nhận nó hoạt động như mong đợi.

Để tìm kiếm một gói, mỗi:

bạn có thể sử dụng cygcheck -p:

  cygcheck -p REGEXP
  ...
  -p, --package-query  search for REGEXP in the entire cygwin.com package
                       repository (requires internet connectivity)

mà tạo ra đầu ra như (ví dụ từ trang web trên):

$ cygcheck -p 'libexpat.*\.a'
Found 2 matches for 'libexpat.*\.a'.

expat-1.95.7-1            XML parser library written in C
expat-1.95.8-1            XML parser library written in C

9
Hãy cẩn thận: nếu bản cập nhật thay thế cygwin1.dll, các chương trình Cygwin sẽ bắt đầu hoạt động sai và tài liệu Cygwin khuyên bạn nên khởi động lại. Vì vậy, tốt nhất là đóng tất cả các chương trình Cygwin, sau đó chạy setup.exetrực tiếp từ cmd(nếu bạn muốn tự động hóa, sử dụng tệp bó chứ không phải tập lệnh shell).
Gilles

Cảm ơn! Một điều nữa tôi cần là khả năng tìm kiếm, vì tôi chưa biết gói nào tôi muốn tải xuống. Khi tôi tìm thấy danh sách đầy đủ các gói, tôi có thể grepít nhất là ...
Pavel Vlasov

Xem chỉnh sửa cho một ví dụ.
icyrock.com

22

Điều này thực hiện nâng cấp không giám sát của tất cả các thành phần cygwin

cd C:\cygwin
wget -N https://cygwin.com/setup-x86.exe
setup-x86.exe --no-desktop --no-shortcuts --no-startmenu --quiet-mode

Bạn nên khởi động lại sau khi hoàn thành nâng cấp để ngăn các ứng dụng cygwin hoạt động sai do nâng cấp cygwin1.dll

--no-desktop Vô hiệu hóa việc tạo lối tắt trên màn hình

--no-Phím tắt Vô hiệu hóa việc tạo màn hình nền và menu bắt đầu

--no-startmenu Tắt tạo phím tắt menu bắt đầu

--quiet-mode Chế độ thiết lập không giám sát


Bạn có muốn mở rộng câu trả lời để giải thích mỗi lệnh làm gì không?
Raystafarian

9
Tôi tin rằng bây giờ bạn có thể cần setup-x86_64.exe hoặc setup-x86.exe.
drescherjm

Trên cygwin 2.9, tôi nhận được zsh: command not found: setup.exe, nhưng thiết lập exe ở đây.
Timo

Nếu bạn đang sử dụng no-shortcutstại sao bạn cũng cần no-desktopno-startmenu?
Hashim

Rất hữu ích, tôi không bao giờ biết về điều này. Bạn thậm chí có thể chỉ định gói nào sẽ cài đặt, đó là một trình tiết kiệm thời gian. Xem ở đây để biết ví dụ: gist.github.com/piotrpolak/c616455f1da8dfc2d4e101afbfdcdc8d
Sridhar Sarnobat

10

Một giải pháp thay thế sẽ là sử dụng apt-cygtập lệnh có sẵn trên GitHub.


3
Nó không hỗ trợ nâng cấp cygwin, tôi nghĩ vậy.
thoni56

@ThomasNilsson tại sao bạn nghĩ vậy?
André Chalella

1
Vì bạn sẽ chạy nó từ shell bằng cygwin1.dll. Tất nhiên bạn có thể sử dụng một vỏ khác ...
thoni56

câu hỏi "thực sự" KHÔNG phải là cập nhật, nhưng "làm thế nào để cài đặt một gói mà không cần sử dụng UI thiết lập", và đây là câu trả lời THỰC SỰ ... thực sự, RẤT NHIỀU so với thiết lập - vì vậy, nó sẽ nói với bạn những gì LÀM, và không chỉ đặt niềm tin của bạn một cách mù quáng vào thiết lập
THESorcerer

7

Vị trí thiết lập của Cygwin dường như có những thay đổi và phân chia. Bây giờ bạn cần một trong hai

wget http://cygwin.com/setup-x86.exe

hoặc là

wget http://cygwin.com/setup-x86_64.exe

Tôi có một setup.bat với nội dung bin\wget.exe --timestamping http://www.cygwin.com/setup-x86_64.exe && start setup-x86_64.exe, đảm bảo tôi luôn chạy trình cài đặt mới nhất và chỉ tải xuống trình cài đặt nếu thực sự có phiên bản mới (đó là --timest Kẹp làm), sau đó tệp bat khởi động nó
hanshenrik

4

Trình cài đặt cho phép nó từ dòng lệnh ( xin vui lòng nâng cao ):

setup-x86.exe --root c:\cygwin -q --upgrade-also

cho phiên bản 64 bit:

setup-x86_64.exe --root c:\cygwin -q --upgrade-also

Chi tiết:

  • Thay thế c:\cygwinbằng thư mục cài đặt gốc CygWin của bạn.
  • Đề xuất đóng bất kỳ chương trình hoặc trình bao CygWin nào (tức là: net stop sshdnếu bạn đã cài đặt OpenSSH).
  • Tham số -qkhông bắt buộc.

Hoạt động thông qua GUI (DOS shell) hoặc thậm chí trên bảng điều khiển từ xa (SSH hoặc telnet). Chưa được thử nghiệm trên PowerShell (ai đó đã làm?).

Ví dụ về đầu ra cập nhật chính xác:

G:\Instalac\CygWin\v2.852>Starting cygwin install, version 2.852
User has backup/restore rights
Current Directory: g:\Instalac\CygWin\Packages
Could not open service McShield for query, start and stop. McAfee may not be installed, or we don't have access.
root: c:\cygwin system
Selected local directory: g:\Instalac\CygWin\Packages
net: Direct
Loaded cached mirror list
get_url_to_membuf http://cygwin.com/mirrors.lst
getUrlToStream http://cygwin.com/mirrors.lst
site: http://ftp.hawo.stw.uni-erlangen.de/cygwin/
get_url_to_membuf http://ftp.hawo.stw.uni-erlangen.de/cygwin/x86/setup.bz2
getUrlToStream http://ftp.hawo.stw.uni-erlangen.de/cygwin/x86/setup.bz2
get_url_to_membuf http://ftp.hawo.stw.uni-erlangen.de/cygwin/x86/setup.bz2.sig
getUrlToStream http://ftp.hawo.stw.uni-erlangen.de/cygwin/x86/setup.bz2.sig
Changing gid back to original
Visited: 122 nodes out of 4415 while creating dependency order.
Dependency order of packages: _autorebase base-cygwin cygwin _update-info-dir libgcc1 libiconv2 libintl8 alternatives libattr1 li
bgmp10 coreutils libstdc++6 terminfo libncursesw10 libreadline7 bash findutils sed base-files libuuid1 libblkid1 libsmartcols1 zl
ib0 util-linux bashdb zlib-devel binutils libbz2_1 bzip2 libffi6 libp11-kit0 libtasn1_6 p11-kit p11-kit-trust ca-certificates cry
pt libmpfr4 gawk editrights libpcre1 grep libsigsegv2 diffutils csih cygrunsrv popt libpopt0 cygutils cygwin-devel dash file liba
tomic1 libcloog-isl4 libgomp1 libisl10 libmpc3 libquadmath0 libssp0 w32api-headers w32api-runtime windows-default-manifest gcc-co
re libexpat1 liblzma5 libdb4.8 libgdbm4 libopenssl100 libsqlite3_0 libcharset1 libiconv libintl-devel libuuid-devel python gdb li
bargp getent groff gzip hostname info ipc-utils libncurses10 less libapr1 libiodbc2 libmysqlclient18 libcom_err2 libkrb5support0
libk5crypto3 libkrb5_3 libgssapi_krb5_2 libsasl2_3 libopenldap2_4_2 perl openssl libpq5 libaprutil1 libedit0 libproxy1 libneon27
libpipeline1 libserf1_0 login lynx make man-db mintty nano ncurses openssh procps psmisc rebase run screen subversion xz tar tzco
de vim-minimal which zsh
Changing gid to Administrators
Ending cygwin install

Nếu trong quá trình cập nhật, bạn gặp vấn đề như sau:

The following DLLs couldn't be rebased due to errors:
  /usr/bin/cygcrypt-0.dll

hoặc là:

The following DLLs couldn't be rebased because they were in use:
  /usr/bin/cygcrypt-0.dll

hoặc là:

ReBaseImage (/usr/bin/cygcrypt-0.dll) failed with last error = 6

... Sau đó, bạn phải rebase sau khi cài đặt:

1.- Đóng tất cả các vỏ, chương trình và dịch vụ của CygWin.
2.- Mở c:\CygWin\bin\ash.exevới tư cách quản trị viên (nâng cao).
3.- Chạy /bin/rebaseall.


1
Làm việc cho tôi. Cảm ơn. Cần tải xuống setup-x86.exe mới nhất hoặc setup-x86_64.exe trước. Và sử dụng cmd Run As Administrator
Marslo

2
Hầu như không có lý do gì để chạy thiết lập với tư cách quản trị viên hoặc với --root nếu bạn không cài đặt cho tất cả người dùng (ví dụ: nơi cygwin root yêu cầu quản trị viên ghi vào ...). setup-86[_x64].exe -Bđể chạy như người dùng hiện tại. Sau này bạn có thể nâng lên để cài đặt cygrunsrv như một dịch vụ windows nếu cần.
cowbert

1

Tôi cảm thấy cần điều này một thời gian trước đây. Tôi đã từng giữ tệp cài đặt được tải xuống để tôi có thể chạy nó để cài đặt, nhưng đôi khi vì Cygwin sẽ được cập nhật, tệp trình cài đặt sẽ bị lỗi thời. Cuối cùng tôi đã tạo ra một tập lệnh Powershell tự động nâng cao, tải xuống trình cài đặt và chạy một bản nâng cấp không giám sát. Tôi có nó ngồi trên máy tính để bàn của mình và chỉ cần nhấp chuột phải và "Chạy với Powershell" và nó sẽ thực hiện nâng cấp tại chỗ tất cả các gói Cygwin của tôi. Tương tác người dùng duy nhất cần có là cho UAC và lời nhắc "Nhấn phím bất kỳ để tiếp tục" ở cuối. Nó cũng có thể được chạy từ dòng lệnh, vì nó chỉ là một tập lệnh.

Tôi đã có mã ở đây một thời gian: http://pastebin.com/wMRctAuL

Tôi đã sao chép nó dưới đây. Tôi đã viết nó với sự giúp đỡ của một vài câu hỏi và hỏi đáp về StackOverflow. :) Tất cả những gì bạn phải làm để có thể chạy nó là kích hoạt các tập lệnh Powershell cục bộ trên máy của bạn . Đây là một giải pháp hoàn chỉnh, có nguồn gốc từ Windows.

# Get the ID and security principal of the current user account
$myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)

# Get the security principal for the Administrator role
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator

# Check to see if we are currently running "as Administrator"
if ($myWindowsPrincipal.IsInRole($adminRole)) {
   # We are running "as Administrator" - so change the title and background color to indicate this
   $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)"
   $Host.UI.RawUI.BackgroundColor = "DarkBlue"
   clear-host
}
else {
   # We are not running "as Administrator" - so relaunch as administrator

   # Create a new process object that starts PowerShell
   $newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell";

   # Specify the current script path and name as a parameter
   $newProcess.Arguments = $myInvocation.MyCommand.Definition;

   # Indicate that the process should be elevated
   $newProcess.Verb = "runas";

   # Start the new process
   [System.Diagnostics.Process]::Start($newProcess);

   # Exit from the current, unelevated, process
   exit
}

# Run your code that needs to be elevated here
(new-object System.Net.WebClient).DownloadFile('http://cygwin.com/setup-x86_64.exe','setup-x86_64.exe')

if (!$?) {
   Write-Host "Something wrong happened when downloading the Cygwin installer."
   Write-Host -NoNewLine "Press any key to continue..."
   $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
   exit
}

$p = Start-Process .\setup-x86_64.exe -ArgumentList "--upgrade-also --quiet-mode" -wait -NoNewWindow -PassThru

if ($p.ExitCode -ne 0) {
   Write-Host "Cygwin setup failed with an error!"
}

Remove-Item .\setup-x86_64.exe

Write-Host -NoNewLine "Press any key to continue..."
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

0

Mở rộng câu trả lời của @ Johnny https://superuser.com/a/624731/110335

Sự phiền toái mà tôi gặp phải là nhân dịp nhắc nhở rằng tệp .ini là từ phiên bản mới hơn của Cygwin's setup.exe

Tôi đã tự viết kịch bản sau đây để tự cập nhật, và sau đó cập nhật tất cả những gì cần, không tương tác.

cygwinSetup64.cmd

@echo on
cd /d e:\cygwin
move /y cygwinSetup-x86_64.exe   setup-x86_64.exe
wget --progress=dot -S -N  http://cygwin.com/setup-x86_64.exe
move /y  setup-x86_64.exe cygwinSetup-x86_64.exe 

cygwinSetup-x86_64.exe   --no-desktop --no-shortcuts --no-startmenu --quiet-mode


0

Tạo một tệp bó như "cygwin-update.bat" với các nội dung sau và đặt nó vào đường dẫn của bạn:

@echo off
"%~dp0\gnubin\wget.exe" --no-check-certificate https://www.cygwin.com/setup-x86_64.exe -O C:\cygwin64\setup-x86_64.exe
cd /d C:\cygwin64
setup-x86_64.exe -q -g
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.