Jak zaktualizować Cygwin z wiersza poleceń Cygwin?

73

Aby wyszukać i pobrać pakiet pominięty w Cygwin, muszę za każdym razem uruchamiać GUI setup.exe, klikać wiele razy i robić inne nudne rzeczy.

Czy istnieje sposób, aby zrobić to samo bezpośrednio z wiersza poleceń Cygwin? Podobnie jak narzędzia apt-get.

Pavel Vlasov
źródło

Odpowiedzi:

40

Spójrz tutaj:

Oprócz innych rzeczy daje następującą listę opcji 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

Więc setup.exe -P <package name>powinien wykonać pracę. Nie masz tutaj cygwina, więc przetestuj go, aby sprawdzić, czy działa zgodnie z oczekiwaniami.

Aby wyszukać pakiet, wykonaj następujące czynności:

możesz użyć cygcheck -p:

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

który wytwarza dane wyjściowe takie jak (przykład z powyższej strony):

$ 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
źródło
9
Uwaga: jeśli aktualizacja zostanie zastąpiona cygwin1.dll, programy Cygwin zaczną działać nieprawidłowo, a dokumentacje Cygwin zalecają ponowne uruchomienie. Dlatego najlepiej zamknąć wszystkie programy Cygwin, a następnie uruchomić setup.exebezpośrednio z cmd(jeśli chcesz zautomatyzować, użyj pliku wsadowego, a nie skryptu powłoki).
Gilles,
Dzięki! Kolejną rzeczą, której potrzebuję, jest możliwość wyszukiwania, ponieważ nie wiem jeszcze, jaki pakiet chcę pobrać. Kiedy znajdę pełną listę paczek, mógłbym grepprzynajmniej ...
Pavel Vlasov,
Zobacz przykład edycji.
icyrock.com,
22

Wykonuje to nienadzorowaną aktualizację wszystkich komponentów cygwin

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

Powinieneś ponownie uruchomić komputer po zakończeniu aktualizacji, aby zapobiec niewłaściwemu działaniu aplikacji cygwin z powodu zaktualizowanego pliku cygwin1.dll

--no-desktop Wyłącz tworzenie skrótu na pulpicie

- brak skrótów Wyłącz tworzenie pulpitu i menu Start

--no-startmenu Wyłącz tworzenie skrótu menu Start

- tryb cichy Tryb instalacji nienadzorowanej

Jasio
źródło
Czy mógłbyś rozwinąć odpowiedź, aby wyjaśnić, co robi każde polecenie?
Raystafarian
9
Wierzę, że teraz możesz potrzebować pliku setup-x86_64.exe lub setup-x86.exe.
drescherjm
Na Cygwinie 2.9, rozumiem zsh: command not found: setup.exe, ale plik instalacyjny jest tutaj.
Timo,
Jeśli używasz, no-shortcutsdlaczego miałbyś również potrzebować no-desktopi no-startmenu?
Hashim,
Bardzo pomocny, nigdy o tym nie wiedziałem. Możesz nawet określić, które pakiety zainstalować, co oszczędza czas. Zobacz tutaj przykład: gist.github.com/piotrpolak/c616455f1da8dfc2d4e101afbfdcdc8d
Sridhar Sarnobat
10

Alternatywnym rozwiązaniem byłoby użycie apt-cygskryptu dostępnego na GitHub.

Chris Charabaruk
źródło
3
Myślę, że nie obsługuje uaktualnienia samego cygwina.
thoni56
@ThomasNilsson, dlaczego tak myślisz?
André Chalella
1
Ponieważ byłbyś uruchomiony z powłoki za pomocą cygwin1.dll. Oczywiście, że mógłby użyć innej powłoki ...
thoni56
„prawdziwe” pytanie NIE było zaktualizowane, ale „jak zainstalować jeden pakiet bez korzystania z instalacyjnego interfejsu użytkownika”, i to jest PRAWDZIWA odpowiedź ... naprawdę, jest DUŻO lepszy niż setup -p, bo POWIEDZIE CI CO TAK, a nie tylko ślepo pokładać wiarę w konfiguracji
TESorcerer
7

Miejsce instalacji Cygwina wydaje się mieć zmiany i podzielone. Teraz potrzebujesz albo

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

lub

wget http://cygwin.com/setup-x86_64.exe
Pomiń Huffmana
źródło
mam plik setup.bat z zawartością bin\wget.exe --timestamping http://www.cygwin.com/setup-x86_64.exe && start setup-x86_64.exe, upewniając się, że zawsze uruchamiam najnowszy instalator i pobieram go tylko wtedy, gdy faktycznie jest nowa wersja (to właśnie robi - timestamping), a następnie uruchamia go plik nietoperza
hanshenrik
4

Instalator pozwala to z linii polecenia ( podwyższonej powłoki , proszę):

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

dla wersji 64-bitowej:

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

Detale:

  • Zamień c:\cygwinna główny katalog instalacyjny CygWin.
  • Sugerowane zamknięcie dowolnej powłoki lub programu CygWin (tj .: net stop sshdjeśli zainstalowałeś OpenSSH).
  • Ten parametr -qnie jest obowiązkowy.

Działa przez GUI (powłoka DOS) lub nawet na zdalnej konsoli (SSH lub telnet). Nie testowano na PowerShell (ktoś to zrobił?).

Przykład poprawnego wyniku aktualizacji:

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

Jeśli podczas aktualizacji wystąpiły takie problemy :

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

lub:

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

lub:

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

... po instalacji musisz dokonać zmiany bazy:

1. - Zamknij wszystkie powłoki, programy i usługi CygWin.
2. - Otwórz c:\CygWin\bin\ash.exejako administrator (podniesiony).
3. - Uruchom /bin/rebaseall.

Sopalajo de Arrierez
źródło
1
Pracuje dla mnie. Dzięki. Najpierw musisz pobrać najnowszą wersję setup-x86.exe lub setup-x86_64.exe. I za pomocą cmd Run As Administrator
Marslo
2
Nie ma prawie żadnego powodu, aby uruchamiać instalatora jako administrator lub z opcją --root, jeśli nie instalujesz dla wszystkich użytkowników (tzn. Gdy root root w Cygwin wymaga, aby administrator napisał do ...). setup-86[_x64].exe -Bdziałać jako bieżący użytkownik. W razie potrzeby możesz później podwyższyć wersję, aby zainstalować cygrunsrv jako usługę systemu Windows.
cowbert
1

Już dawno czułem tę potrzebę. Kiedyś po prostu utrzymywałem plik instalatora pobrany, więc mogłem po prostu uruchomić go, aby zainstalować, ale czasami, gdy Cygwin był aktualizowany, plik instalatora był nieaktualny. W końcu stworzyłem skrypt Powershell, który automatycznie podnosi, pobiera instalator i uruchamia aktualizację bez nadzoru. Mam go siedzącego na pulpicie i mogę po prostu kliknąć prawym przyciskiem myszy i „Uruchom z PowerShell”, a on przeprowadzi uaktualnienie na miejscu wszystkich moich pakietów Cygwin. Jedyną potrzebną interakcją użytkownika jest UAC i na samym końcu komunikat „Naciśnij dowolny klawisz, aby kontynuować”. Można go również uruchomić z wiersza poleceń, ponieważ jest to tylko skrypt.

Mam już tutaj kod: http://pastebin.com/wMRctAuL

Skopiowałem to poniżej. Napisałem to również przy pomocy kilku pytań i odpowiedzi StackOverflow. :) Wszystko, co musisz zrobić, aby móc go uruchomić, to włączyć lokalne skrypty Powershell na twoim komputerze . To kompletne rozwiązanie dla 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")
Ben Richards
źródło
0

Rozwijanie odpowiedzi @ Johnny'ego https://superuser.com/a/624731/110335

Irytacja, z jaką się spotkałem, okazjonalnie podpowiada, że ​​plik .ini pochodzi z nowszej wersji pliku setup.exe firmy Cygwin

Napisałem sobie następujący skrypt do samodzielnej aktualizacji, a następnie zaktualizuj wszystko, czego potrzeba, nieinteraktywnie.

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
źródło
0

Aktualizacja bez nadzoru

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

setup-x86.exe -q -g

Znaczenie:

Command Line Options:
 -q --quiet-mode                   Unattended setup mode
 -g --upgrade-also                 also upgrade installed packages
KIM Taegyoon
źródło
0

Utwórz plik wsadowy, taki jak „cygwin-update.bat”, o następującej treści i umieść go na swojej ścieżce:

@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
Dean Householder
źródło