Bagaimana cara memperbarui Cygwin dari baris perintah Cygwin?

73

Untuk mencari dan mengunduh paket yang terlewatkan dari Cygwin, saya perlu menjalankan GUI setup.exe setiap kali, klik berkali-kali dan lakukan hal-hal membosankan lainnya.

Apakah ada cara untuk melakukan hal yang sama dari baris perintah Cygwin secara langsung? Seperti alat apt-get lakukan.

Pavel Vlasov
sumber

Jawaban:

40

Lihatlah di sini:

Selain dari hal-hal lain, itu memberikan daftar opsi berikut untuk 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

Jadi setup.exe -P <package name>harus melakukan pekerjaan itu. Tidak ada cygwin di sini, jadi uji untuk memastikannya berfungsi seperti yang diharapkan.

Untuk mencari paket, per:

Anda bisa menggunakan cygcheck -p:

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

yang menghasilkan keluaran seperti (contoh dari situs di atas):

$ 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
icyrock.com
sumber
9
Peringatan: jika pembaruan diganti cygwin1.dll, program Cygwin akan mulai bertingkah buruk, dan dokumentasi Cygwin merekomendasikan reboot. Jadi yang terbaik adalah menutup semua program Cygwin, kemudian jalankan setup.exelangsung dari cmd(jika Anda ingin mengotomatisasi, gunakan file batch, bukan skrip shell).
Gilles 'SO- stop being evil'
Terima kasih! Hal lain yang saya butuhkan adalah kemampuan untuk mencari, karena saya belum tahu paket apa yang ingin saya unduh. Setelah saya akan menemukan daftar lengkap paket saya bisa grepsetidaknya ...
Pavel Vlasov
Lihat hasil edit sebagai contoh.
icyrock.com
22

Ini melakukan pemutakhiran tanpa pengawasan semua komponen cygwin

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

Anda harus mem-boot ulang setelah pemutakhiran selesai untuk mencegah aplikasi cygwin dari kesalahan karena memutakhirkan cygwin1.dll

--no-desktop Nonaktifkan pembuatan pintasan desktop

--no-pintas Nonaktifkan pembuatan desktop dan menu mulai

--no-startmenu Nonaktifkan pembuatan pintasan menu mulai

--quiet-mode Mode pengaturan tanpa pengawasan

Johnny
sumber
Maukah Anda memperluas jawaban untuk menjelaskan apa yang setiap perintah lakukan?
Raystafarian
9
Saya percaya sekarang Anda mungkin perlu setup-x86_64.exe atau setup-x86.exe.
drescherjm
Di cygwin 2.9, saya mengerti zsh: command not found: setup.exe, tapi setup exe ada di sini.
Timo
Jika Anda menggunakan no-shortcutsmengapa Anda juga perlu no-desktopdan no-startmenu?
Hashim
Sangat membantu, saya tidak pernah tahu tentang ini. Anda bahkan dapat menentukan paket mana yang akan diinstal, yang merupakan penghemat waktu. Lihat di sini untuk contoh: gist.github.com/piotrpolak/c616455f1da8dfc2d4e101afbfdcdc8d
Sridhar Sarnobat
10

Solusi alternatif adalah dengan menggunakan apt-cygskrip yang tersedia di GitHub.

Chris Charabaruk
sumber
3
Saya kira itu tidak mendukung peningkatan cygwin.
thoni56
@ThomasNilsson mengapa Anda berpikir begitu?
André Chalella
1
Karena Anda akan menjalankannya dari shell menggunakan cygwin1.dll. Tentu saja Anda bisa menggunakan shell lain ...
thoni56
pertanyaan "sebenarnya" BUKAN pembaruan, tetapi "bagaimana menginstal satu paket tanpa menggunakan UI pengaturan", dan ini adalah jawaban NYATA ... sungguh, adalah BANYAK lebih baik daripada pengaturan -p menjadi cuz, itu AKAN MENGATAKAN ANDA APA ITU APAKAH, dan tidak hanya menaruh kepercayaan Anda secara membuta pada pengaturan
PENULIS
7

Lokasi untuk pengaturan Cygwin tampaknya memiliki perubahan dan perpecahan. Sekarang kamu juga perlu

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

atau

wget http://cygwin.com/setup-x86_64.exe
Lewati Huffman
sumber
Saya memiliki setup.bat dengan konten bin\wget.exe --timestamping http://www.cygwin.com/setup-x86_64.exe && start setup-x86_64.exe, memastikan saya selalu menjalankan installer terbaru dan hanya mengunduh installer jika sebenarnya ada versi baru (itulah yang --timest dilakukan), maka file bat memulai itu
hanshenrik
4

The installer memungkinkan dari baris perintah ( ditinggikan shell , silakan):

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

untuk versi 64 bit:

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

Detail:

  • Ganti c:\cygwindengan direktori instalasi root Cygwin Anda.
  • Disarankan untuk menutup semua shell atau program CygWin (yaitu: net stop sshdjika Anda menginstal OpenSSH).
  • Parameter -qtidak wajib.

Bekerja melalui GUI (DOS shell) atau bahkan pada konsol jarak jauh (SSH atau telnet). Tidak diuji pada PowerShell (seseorang melakukannya?).

Contoh hasil pembaruan yang benar:

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

Jika, selama pembaruan, Anda memiliki masalah seperti ini:

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

atau:

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

atau:

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

... maka Anda harus rebase setelah instalasi:

1.- Tutup semua shell, program, dan layanan CygWin.
2.- Buka c:\CygWin\bin\ash.exesebagai admin (ditinggikan).
3.- Jalankan /bin/rebaseall.

Sopalajo de Arrierez
sumber
1
Bekerja untukku. Terima kasih. Perlu mengunduh setup-x86.exe terbaru atau setup-x86_64.exe terlebih dahulu. Dan menggunakan cmd Run As Administrator
Marslo
2
Hampir tidak ada alasan untuk menjalankan pengaturan sebagai administrator atau dengan --root jika Anda tidak menginstal untuk semua pengguna (yaitu di mana cygwin root mengharuskan admin untuk menulis ke ...). setup-86[_x64].exe -Buntuk dijalankan sebagai pengguna saat ini. Anda nanti dapat meningkatkan untuk menginstal cygrunsrv sebagai layanan windows jika diperlukan.
cowbert
1

Saya merasa ini perlu beberapa waktu yang lalu. Saya dulu hanya menyimpan file installer di-download sehingga saya bisa menjalankannya untuk menginstal, tetapi kadang-kadang sebagai Cygwin akan diperbarui, file installer akan menjadi ketinggalan zaman. Saya akhirnya membuat skrip Powershell yang mengangkat otomatis, mengunduh pemasang, dan menjalankan pemutakhiran yang tidak dijaga. Saya memilikinya duduk di desktop saya dan bisa klik kanan dan "Jalankan dengan Powershell" dan itu akan melakukan upgrade di tempat semua paket Cygwin saya. Satu-satunya interaksi pengguna yang diperlukan adalah untuk UAC dan prompt "Tekan sembarang tombol untuk melanjutkan" di bagian paling akhir. Itu bisa dijalankan dari command-line juga, karena itu hanya sebuah skrip.

Saya memiliki kode di sini untuk sementara waktu: http://pastebin.com/wMRctAuL

Saya menyalinnya di bawah. Saya menulisnya dengan bantuan beberapa T&J StackOverflow juga. :) Yang harus Anda lakukan untuk dapat menjalankannya adalah mengaktifkan skrip Powershell lokal di mesin Anda . Ini adalah solusi Windows asli yang lengkap.

# 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")
Ben Richards
sumber
0

Memperluas pada @ Johnny's answer https://superuser.com/a/624731/110335

Gangguan yang saya hadapi adalah kesempatan yang meminta bahwa file .ini dari versi yang lebih baru dari setup.exe Cygwin

Saya menulis sendiri skrip berikut kepada saya untuk memperbarui diri, dan kemudian memperbarui semua yang perlu, tanpa berinteraksi.

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
Marcos
sumber
0

Pembaruan tanpa pengawasan

https://cygwin.com/faq.html#faq.setup.cli

setup-x86.exe -q -g

Berarti:

Command Line Options:
 -q --quiet-mode                   Unattended setup mode
 -g --upgrade-also                 also upgrade installed packages
KIM Taegyoon
sumber
0

Buat file batch seperti "cygwin-update.bat" dengan konten berikut dan letakkan di path Anda:

@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
Householder Dekan
sumber