Как обновить Cygwin из командной строки Cygwin?

73

Для поиска и загрузки пропущенного пакета из Cygwin мне нужно каждый раз запускать графический интерфейс setup.exe, многократно щелкать мышью и делать другие скучные вещи.

Есть ли способ сделать то же самое из командной строки Cygwin напрямую? Как и инструменты apt-get.

Павел Власов
источник

Ответы:

40

Посмотрите здесь:

Помимо прочего, он предоставляет следующий список параметров 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

Так и setup.exe -P <package name>надо делать работу. У вас нет Cygwin, проверьте его работоспособность, как и ожидалось.

Для поиска пакета, по:

Вы можете использовать cygcheck -p:

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

который производит вывод как (пример с сайта выше):

$ 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
источник
9
Предостережение: если обновление заменится cygwin1.dll, программы Cygwin начнут работать неправильно, и в документации Cygwin будет рекомендована перезагрузка. Поэтому лучше всего закрыть все программы Cygwin, а затем запустить их setup.exeнепосредственно cmd(если вы хотите автоматизировать, используйте командный файл, а не сценарий оболочки).
Жиль "ТАК - перестань быть злым"
Спасибо! Еще одна вещь, которая мне нужна, это возможность поиска, потому что я пока не знаю, какой пакет я хочу скачать. Как только я найду полный список пакетов, я смог бы grepэто хотя бы ...
Павел Власов
Смотрите редактирование для примера.
icyrock.com
22

Это выполняет автоматическое обновление всех компонентов Cygwin

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

Вам следует перезагрузиться после завершения обновления, чтобы предотвратить неправильную работу приложений cygwin из-за обновленного cygwin1.dll

--no-desktop Отключить создание ярлыка на рабочем столе

--no-shortcuts Отключить создание рабочего стола и меню «Пуск»

--no-startmenu Отключить создание ярлыка меню Пуск

--quiet-mode Режим автоматической установки

Джонни
источник
Не могли бы вы расширить ответ, чтобы объяснить, что делает каждая команда?
Райстафариан
9
Я считаю, что теперь вам может понадобиться setup-x86_64.exe или setup-x86.exe.
drescherjm
На cygwin 2.9, я получаю zsh: command not found: setup.exe, но установка exe здесь.
Тимо
Если вы используете no-shortcutsпочему бы вам также нужно no-desktopи no-startmenu?
Хашим
Очень полезно, я никогда не знал об этом. Вы даже можете указать, какие пакеты устанавливать, что экономит время. Смотрите здесь для примера: gist.github.com/piotrpolak/c616455f1da8dfc2d4e101afbfdcdc8d
Шридхар Sarnobat
10

Альтернативным решением будет использование apt-cygскрипта, доступного на GitHub.

Крис Чарабарук
источник
3
Я думаю, он не поддерживает обновление самого Cygwin.
thoni56
@ThomasNilsson, почему ты так думаешь?
Андре Шалелла
1
Так как вы будете запускать его из оболочки, используя cygwin1.dll. Конечно, вы можете использовать другую оболочку ...
thoni56
«реальным» вопросом было НЕ обновление, а «как установить один пакет без использования пользовательского интерфейса установки», и это НАСТОЯЩИЙ ответ ... действительно, НАМНОГО лучше, чем настройка -p быть, потому что это СКАЖИТ, ЧТО ЭТО ДЕЛАЕТ, а не просто слепо настраиваете свою веру
THESorcerer
7

Местоположение установки Cygwin, похоже, изменилось и разделилось. Теперь вам нужно либо

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

или же

wget http://cygwin.com/setup-x86_64.exe
Скип Хаффман
источник
у меня есть setup.bat с содержимым bin\wget.exe --timestamping http://www.cygwin.com/setup-x86_64.exe && start setup-x86_64.exe, и я всегда запускаю последнюю версию установщика и загружаю ее только в том случае, если есть новая версия (вот что делает - timestamping), а затем запускается файл bat
hanshenrik
4

Установки позволяют ее из командной строки ( повышенная оболочки , пожалуйста):

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

для 64-битной версии:

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

Подробности:

  • Замените c:\cygwinего корневым каталогом установки CygWin.
  • Предложено закрыть любую оболочку или программу CygWin (например, net stop sshdесли вы установили OpenSSH).
  • Параметр -qне является обязательным.

Работает через GUI (оболочка DOS) или даже на удаленной консоли (SSH или telnet). Не проверено на PowerShell (кто-то сделал?).

Пример правильного обновления вывода:

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

Если во время обновления у вас были проблемы, подобные этим:

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

или же:

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

или же:

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

... тогда вы должны выполнить перезагрузку после установки:

1.- Закройте все оболочки, программы и сервисы CygWin.
2.- Открыть c:\CygWin\bin\ash.exeкак администратор (с повышенными правами).
3.- Беги /bin/rebaseall.

Сопалахо де Арриерес
источник
1
Работает для меня. Благодарю. Сначала необходимо загрузить последнюю версию setup-x86.exe или setup-x86_64.exe. И с помощью cmd Запуск от имени администратора
Marslo
2
Практически нет причин запускать установку с правами администратора или с помощью --root, если вы устанавливаете программу не для всех пользователей (т. Е. Там, где для записи в корневой каталог требуется администратор cygwin ...). setup-86[_x64].exe -Bработать как текущий пользователь. Позже вы можете повысить уровень, чтобы установить cygrunsrv в качестве службы Windows, если это необходимо.
Cowbert
1

Я чувствовал эту потребность слишком давно. Раньше я просто сохранял загруженный файл установщика, чтобы я мог просто запустить его для установки, но иногда, когда Cygwin обновлялся, файл установщика становился устаревшим. В итоге я создал скрипт Powershell, который автоматически повышает уровень прав, загружает установщик и запускает автоматическое обновление. Он у меня на рабочем столе, я могу просто щелкнуть правой кнопкой мыши и «Запустить с Powershell», и он выполнит обновление на месте всех моих пакетов Cygwin. Единственное взаимодействие с пользователем, необходимое для UAC, и подсказка «Нажмите любую клавишу для продолжения» в самом конце. Впрочем, его можно запустить и из командной строки, так как это всего лишь скрипт.

У меня есть код здесь некоторое время: http://pastebin.com/wMRctAuL

Я скопировал это ниже. Я написал это с помощью нескольких вопросов и ответов StackOverflow. :) Все, что вам нужно сделать, чтобы запустить его, это включить локальные скрипты Powershell на вашем компьютере . Это полное решение для 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

Расширение на ответ @ Джонни https://superuser.com/a/624731/110335

Раздражение, с которым я столкнулся, было случайным предложением, что файл .ini взят из более новой версии setup.exe Cygwin

Я написал себе следующий скрипт для самообновления, а затем обновляю все, что нужно, неинтерактивно.

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
источник
0

Создайте пакетный файл, такой как «cygwin-update.bat», со следующим содержимым и поместите его в свой путь:

@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
Декан домохозяин
источник