จะอัพเดท Cygwin จากบรรทัดคำสั่งของ Cygwin ได้อย่างไร


73

ในการค้นหาและดาวน์โหลดแพ็คเกจที่ไม่ได้รับจาก Cygwin ฉันจำเป็นต้องเรียกใช้ setup.exe GUI ทุกครั้งคลิกหลายครั้งและทำสิ่งที่น่าเบื่ออื่น ๆ

มีวิธีทำเช่นเดียวกันจากบรรทัดคำสั่งของ 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

9
คำเตือน: หากการอัปเดตมาแทนที่cygwin1.dllโปรแกรม Cygwin จะเริ่มทำงานผิดปกติและเอกสารประกอบของ Cygwin จะแนะนำให้รีบูต ดังนั้นควรปิดโปรแกรม Cygwin ทั้งหมดจากนั้นเรียกใช้setup.exeโดยตรงจากcmd(หากคุณต้องการทำให้เป็นอัตโนมัติใช้แบตช์ไฟล์ไม่ใช่เชลล์สคริปต์)
Gilles

ขอบคุณ! อีกสิ่งหนึ่งที่ฉันต้องการคือความสามารถในการค้นหาเพราะฉันยังไม่รู้ว่าฉันต้องการดาวน์โหลดแพ็คเกจอะไร เมื่อฉันจะได้พบกับรายการเต็มรูปแบบของแพคเกจที่จะทำได้grepอย่างน้อย ...
พาเวล Vlasov

ดูการแก้ไขสำหรับตัวอย่าง
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-startmenu ปิดใช้งานการสร้างทางลัดเมนูเริ่ม

- โหมดเงียบโหมดการตั้งค่าแบบอัตโนมัติ


คุณช่วยขยายคำตอบเพื่ออธิบายว่าแต่ละคำสั่งทำอะไรได้บ้าง
Raystafarian

9
ฉันเชื่อว่าตอนนี้คุณอาจต้อง setup-x86_64.exe หรือ setup-x86.exe
drescherjm

ใน cygwin 2.9 ฉันได้รับzsh: command not found: setup.exeแต่การตั้งค่า exe อยู่ที่นี่
Timo

หากคุณกำลังใช้no-shortcutsเหตุผลที่คุณจะยังต้องno-desktopและno-startmenu?
Hashim

มีประโยชน์มากฉันไม่เคยรู้เรื่องนี้เลย คุณสามารถระบุแพ็คเกจที่จะติดตั้งได้ซึ่งเป็นการประหยัดเวลา ดูตัวอย่างได้ที่นี่: gist.github.com/piotrpolak/c616455f1da8dfc2d4e101afbfdcdc8d
Sridhar Sarnobat

10

โซลูชันอื่นคือใช้apt-cygสคริปต์ที่มีอยู่ใน GitHub


3
ฉันไม่สนับสนุนการอัพเกรด cygwin เอง
thoni56

@ThomasNilsson ทำไมคุณคิดอย่างนั้น
André Chalella

1
เนื่องจากคุณต้องการเรียกใช้จากเชลล์โดยใช้ cygwin1.dll แน่นอนคุณสามารถใช้เปลือกอื่น ...
thoni56

คำถาม "ของจริง" ไม่ได้อัปเดต แต่ "วิธีการติดตั้งหนึ่งแพคเกจโดยไม่ต้องใช้ UI การติดตั้ง" และนี่คือคำตอบที่แท้จริง ... จริง ๆ เป็นจำนวนมากดีกว่าการติดตั้ง -p จะ cuz มันจะบอกคุณว่า ใช่และไม่เพียง แต่ทำให้ศรัทธาของคุณเป็นแบบสุ่มในการตั้งค่า
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ตรวจสอบให้แน่ใจว่าฉันเรียกใช้ตัวติดตั้งล่าสุดเสมอและดาวน์โหลดตัวติดตั้งหากมีเวอร์ชันใหม่จริง ๆ (นั่นคือสิ่งที่ - การประทับเวลาทำ) จากนั้นไฟล์ 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 shell หรือโปรแกรมใด ๆ (เช่น: net stop sshdหากคุณติดตั้ง OpenSSH)
  • พารามิเตอร์-qไม่จำเป็นต้องมี

ทำงานผ่าน GUI (DOS shell) หรือแม้แต่บน remote console (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

... จากนั้นคุณต้องทำการ rebase หลังการติดตั้ง:

1.- ปิด CygWin shell โปรแกรมและบริการทั้งหมด
2.- เปิดc:\CygWin\bin\ash.exeเป็นผู้ดูแลระบบ (ยกระดับ)
3.- /bin/rebaseallRun


1
ใช้งานได้สำหรับฉัน ขอบคุณ จำเป็นต้องดาวน์โหลด setup-x86.exe ล่าสุดหรือ setup-x86_64.exe ก่อน และใช้ cmd Run As Administrator
Marslo

2
แทบจะไม่มีเหตุผลใดที่จะเรียกใช้การตั้งค่าในฐานะผู้ดูแลระบบหรือด้วย - รูตหากคุณไม่ได้ติดตั้งสำหรับผู้ใช้ทุกคน (เช่นที่ราก cygwin ต้องการให้ผู้ดูแลระบบเขียนถึง ... ) setup-86[_x64].exe -Bเพื่อเรียกใช้ในฐานะผู้ใช้ปัจจุบัน คุณสามารถยกระดับการติดตั้ง cygrunsrv ในภายหลังได้หากต้องการบริการ windows
cowbert

1

ฉันรู้สึกว่าสิ่งนี้จำเป็นต้องใช้มานานแล้ว ฉันเคยดาวน์โหลดไฟล์ตัวติดตั้งไว้แล้วดังนั้นฉันจึงสามารถเรียกใช้เพื่อติดตั้งได้ แต่บางครั้งเนื่องจาก Cygwin จะได้รับการอัปเดตไฟล์ตัวติดตั้งจะล้าสมัย ฉันลงเอยด้วยการสร้างสคริปต์ Powershell ที่ยกระดับอัตโนมัติดาวน์โหลดตัวติดตั้งและรันการอัพเกรดแบบอัตโนมัติ ฉันติดตั้งไว้บนเดสก์ท็อปและสามารถคลิกขวาและ "เรียกใช้ด้วย Powershell" และจะทำการอัปเกรดแพคเกจ Cygwin ทั้งหมดของฉัน การโต้ตอบกับผู้ใช้เพียงอย่างเดียวที่จำเป็นสำหรับ UAC และพรอมต์ "กดปุ่มใดก็ได้เพื่อดำเนินการต่อ" ที่ส่วนท้ายสุด มันสามารถเรียกใช้จากบรรทัดคำสั่งได้เช่นกันเนื่องจากเป็นเพียงสคริปต์

ฉันมีรหัสขึ้นที่นี่ในขณะที่: http://pastebin.com/wMRctAuL

ฉันคัดลอกมันด้านล่าง ฉันเขียนด้วยความช่วยเหลือของ StackOverflow Q & As ไม่กี่เช่นกัน :) ทั้งหมดที่คุณต้องทำเพื่อให้สามารถทำงานได้ก็คือการเปิดใช้งานสคริปต์ 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

ขยายคำตอบของ @ Johnny 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


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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.