ฉันจะติดตั้งส่วนประกอบ cygwin จากบรรทัดคำสั่งได้อย่างไร


178

มีเครื่องมือในแพ็คเกจ Cygwin ที่คล้ายกับapt-getบน Debian หรือyumredhat ที่ให้ฉันติดตั้งส่วนประกอบจากบรรทัดคำสั่งหรือไม่


2
Stack Overflow เป็นเว็บไซต์สำหรับคำถามเกี่ยวกับการเขียนโปรแกรมและการพัฒนา คำถามนี้ดูเหมือนจะไม่ได้อยู่ที่หัวข้อเพราะมันไม่เกี่ยวกับการเขียนโปรแกรมหรือการพัฒนา ดูหัวข้อใดบ้างที่ฉันสามารถถามเกี่ยวกับที่นี่ในศูนย์ช่วยเหลือ บางทีผู้ใช้ขั้นสูงอาจเป็นสถานที่ที่ดีกว่าที่จะถาม ดูที่ฉันจะโพสต์คำถามเกี่ยวกับ Dev Ops ได้ที่ไหน
jww

7
@jww นี่ไม่ใช่ devops
Pacerier

คำตอบ:


102

ไม่มีเครื่องมือเฉพาะในตัวติดตั้ง 'setup.exe' ซึ่งมีฟังก์ชันการทำงานของ apt-get อย่างไรก็ตามมีตัวติดตั้งแพคเกจบรรทัดคำสั่งสำหรับ Cygwin ที่สามารถดาวน์โหลดแยกต่างหากได้ แต่มันก็ไม่ได้เสถียรอย่างสิ้นเชิงและต้องอาศัยวิธีแก้ปัญหา

apt-cyg: http://github.com/transcode-open/apt-cyg

ตรวจสอบแท็บปัญหาสำหรับโครงการเพื่อดูปัญหาที่ทราบ


ขอบคุณ! สิ่งที่ฉันอยากรู้ ฉันสงสัยว่าทำไมพวกเขาถึงไม่โต
vy32

4
@ vy32: เพราะคุณไม่ได้ช่วยให้พวกเขาเติบโต? :) พวกเขาเขียนตัวเองไม่ได้ บางคนต้องทำงานกับพวกเขา และเนื่องจากการใช้งานของพวกเขาค่อนข้าง จำกัด (ในการเขียนทับไฟล์ที่ใช้อยู่ใน Windows ในปัจจุบันคุณต้องปิด Cygwin ก่อนดังนั้นจึงเป็นไปไม่ได้ที่จะเรียกใช้ตัวจัดการแพคเกจใด ๆ ใน Cygwin ปิด :) มีคนไม่สนใจ
David Ferenczy Rogožan

10
จากคำตอบอื่น: setup-x86.exe -q -P packagename1,packagename2. ไม่แฟนซีapt-getหรือแม้กระทั่งapt-cygแต่มันหลอกลวงในกรณีส่วนใหญ่ และคุณยังสามารถเรียกใช้จากcmd.exe(หลังจากปิด Cygwin)
kqw

2
@ Steve คำตอบของ Dawid บอกว่ามันย้ายไปที่ "sage" stackoverflow.com/a/23143997/80772
eel ghEEz

3
เนื่องจากโครงการดั้งเดิมตายไปแล้วฉันขอแนะนำให้ดูสิ่งนี้ (ณ เวลาที่มีการแสดงความคิดเห็น) ส้อมที่ใช้งาน: github.com/kou1okada/apt-cyg
Vladimir Panteleev

136

การตั้งค่าของ Cygwin ยอมรับอาร์กิวเมนต์บรรทัดคำสั่งเพื่อติดตั้งแพ็กเกจจากบรรทัดคำสั่ง

เช่นsetup-x86.exe -q -P packagename1,packagename2เพื่อติดตั้งแพ็คเกจโดยไม่ต้องมีการโต้ตอบกับ GUI ('โหมดการตั้งค่าแบบอัตโนมัติ')

(โปรดทราบว่าคุณจำเป็นต้องใช้setup-x86.exeหรือsetup-x86_64.exeตามความเหมาะสม)

ดูhttp://cygwin.com/packages/สำหรับรายการแพ็คเกจ


5
ดี! setup.exe เรียกว่า setup-x86.exe - หรือตัวแปรขึ้นอยู่กับบิตของ cpu ดูที่นี่สำหรับรายการแพคเกจcygwin.com/packages
ErichBSchulz

2
นอกจากนี้หากต้องการระบุหลายแพ็คเกจให้คั่นด้วยเครื่องหมายจุลภาค เช่นใน DOS พิมพ์setup-x86_64 --packages="openssh,python"
Michael Scheper

ดูเหมือนจะไม่มีวิธีการตั้งค่ารุ่นที่เฉพาะเจาะจง
CMCDragonkai

@ jturney มันเสถียรไหม?
Pacerier

1
@Pierier มันไม่ชัดเจนในสิ่งที่คุณถาม นี่ควรเป็นคุณสมบัติของการตั้งค่าที่เชื่อถือได้
jturney

134

เพื่อความสะดวกในการติดตั้งคุณอาจต้องการใช้ apt-cygเป็นผู้จัดการแพคเกจของคุณ มันคล้ายกับไวยากรณ์ apt-getซึ่งเป็นบวก สำหรับสิ่งนี้ทำตามขั้นตอนข้างต้นแล้วใช้ Cygwin Bash สำหรับขั้นตอนต่อไปนี้

wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
chmod +x apt-cyg
mv apt-cyg /usr/local/bin

ตอนนี้apt-cygติดตั้งแล้ว นี่คือตัวอย่างของการติดตั้งแพคเกจบางอย่าง

apt-cyg install nano
apt-cyg install git
apt-cyg install ca-certificates

17
เห็นได้ชัดว่าใช้ setup-x86_64.exe -q -P wget, tar, qawk, bzip2, subversion, vim สำหรับ windows 64 บิต
อรุณ

3
จำเป็นต้องเพิ่ม - ไม่มีการตรวจสอบใบรับรองในคำสั่ง wget มิฉะนั้นยอดเยี่ยม
akauppi

และตอนนี้มันก็เป็น 404 (หลังจากการเปลี่ยนเส้นทางไปสองสามครั้ง)
Shadow

แค่ลองwgetแล้วก็ดาวน์โหลดได้apt-cygโดยไม่มีปัญหา 404 ปรากฏที่จุดใด
sagunms

1
wget ไม่ได้รับการติดตั้งโดยค่าเริ่มต้นด้วย cygwin ซึ่งหมายความว่าจะต้องทำการ bootstrapped ด้วยการติดตั้งแบบแมนนวลและไม่มีโปรแกรม

51

มีสคริปต์บางอย่างอยู่ซึ่งสามารถใช้เป็นตัวจัดการแพคเกจอย่างง่ายสำหรับ Cygwin แต่สิ่งสำคัญคือต้องรู้ว่าพวกเขาจะค่อนข้างจำกัดเสมอเสมอเพราะ ... ehm ... Windows

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

"เหตุผลพื้นฐานสำหรับการไม่มีตัวจัดการแพคเกจเต็มรูปแบบมากขึ้นก็คือโปรแกรมดังกล่าวต้องการการเข้าถึงฟังก์ชัน POSIX ทั้งหมดของ Cygwin อย่างเต็มที่อย่างไรก็ตามยากที่จะให้ในสภาพแวดล้อมที่ปราศจาก Cygwin เช่นมีอยู่ก่อน การติดตั้งนอกจากนี้ Windows ไม่อนุญาตให้เขียนทับแฟ้มปฏิบัติการที่ใช้งานอยู่ได้อย่างง่ายดายดังนั้นการติดตั้ง Cygwin DLL รุ่นใหม่ในขณะที่ตัวจัดการแพคเกจกำลังใช้ DLL นั้นเป็นปัญหา "

การติดตั้ง Cygwin ของใช้รีจิสทรีของ Windows เพื่อ executables ทับที่อยู่ในการใช้งานและวิธีการนี้ต้องรีบูตวินโดวส์ ดังนั้นจึงเป็นการดีกว่าที่จะปิดกระบวนการ Cygwin ทั้งหมดก่อนที่จะอัปเดตแพคเกจดังนั้นคุณไม่ต้องรีบูตเครื่องคอมพิวเตอร์ของคุณเพื่อใช้การเปลี่ยนแปลงจริง การติดตั้งแพ็คเกจใหม่ควรสมบูรณ์โดยไม่ต้องยุ่งยาก ฉันไม่คิดว่าผู้จัดการแพคเกจใด ๆ ยกเว้น Cygwin จะsetup.exeใช้วิธีการใด ๆ ในการเขียนทับไฟล์ที่ใช้งานดังนั้นมันจะล้มเหลวหากไม่สามารถเขียนทับไฟล์เหล่านั้นได้


ผู้จัดการแพคเกจบางอย่างสำหรับ Cygwin:

apt-CYG

อัปเดต : พื้นที่เก็บข้อมูลถูกปิดใช้งานเนื่องจากปัญหาลิขสิทธิ์ ( การลบเนื้อหา DMCA ) มันดูเหมือนว่าเจ้าของพื้นที่เก็บข้อมูลที่ออกจับกุม DMCA บนของตัวเองที่เก็บและสร้างโครงการใหม่ที่เรียกว่าSage (ดูร้อง)

หนึ่งที่ดีที่สุดสำหรับฉัน เพียงเพราะมันเป็นหนึ่งในล่าสุด มันไม่ได้ใช้ Cygwin setup.exeแต่จะนำไปใช้setup.exeใหม่ มันทำงานได้อย่างถูกต้องสำหรับทั้งสองแพลตฟอร์ม - x86เช่นเดียวกับx86_64 มีส้อมจำนวนมากที่มีคุณสมบัติเพิ่มเติมไม่มากก็น้อย ตัวอย่างเช่นตัวแยก kou1okadaเป็นหนึ่งในรุ่นที่ปรับปรุงแล้วซึ่งยอดเยี่ยมมาก

apt-cygเป็นเพียงเชลล์สคริปต์ไม่มีการติดตั้ง เพียงดาวน์โหลด (หรือคัดลอกพื้นที่เก็บข้อมูล) ทำให้เป็นไฟล์ปฏิบัติการและคัดลอกไฟล์ไปที่ PATH:

chmod +x apt-cyg # set executable bit
mv apt-cyg /usr/local/bin # move somewhere to PATH
# ...and use it:
apt-cyg install vim

นอกจากนี้ยังมีส้อมที่มีคุณสมบัติแตกต่างกัน


ปราชญ์

ตัวจัดการแพคเกจอื่นนำมาใช้เป็นเชลล์สคริปต์ ฉันไม่ได้ลอง แต่ดูดีจริง ๆ

มันสามารถค้นหาแพคเกจในพื้นที่เก็บข้อมูลรายการแพคเกจในหมวดหมู่ตรวจสอบการอ้างอิงไฟล์รายการแพคเกจและอื่น ๆ มันมีคุณสมบัติที่ผู้จัดการแพ็คเกจอื่นไม่มี


CYG-ฉลาด

ส้อมของเดิมที่ถูกทิ้งร้าง CYG-ฉลาดด้วยการปรับปรุงและแก้ไขข้อผิดพลาด มีคุณสมบัติค่อนข้างมากและใช้งานใน Python makeการติดตั้งจะทำโดยใช้


รับของ Chocolatey

หากคุณใช้ Chocolatey เพื่อติดตั้ง Cygwin คุณสามารถติดตั้งแพคเกจcyg-getซึ่งอันที่จริงแล้วเป็น wrapper ง่าย ๆ ของ Cygwin ที่setup.exeเขียนใน PowerShell


setup.exe ของ Cygwin

นอกจากนี้ยังมีโหมดบรรทัดคำสั่ง นอกจากนี้ยังช่วยให้คุณสามารถอัพเกรดแพ็คเกจที่ติดตั้งทั้งหมดในครั้งเดียว (เช่นเดียวapt-get upgradeกับ Debian based Linux)

ตัวอย่างการใช้:

setup-x86_64.exe -q --packages=bash,vim

คุณสามารถสร้างนามแฝงเพื่อให้ใช้งานง่ายขึ้นตัวอย่างเช่น:

alias cyg-get="/cygdrive/d/path/to/cygwin/setup-x86_64.exe -q -P"

จากนั้นคุณสามารถติดตั้งแพ็กเกจVimด้วย:

cyg-get vim


3
sageเป็นทางเลือกapt-cygโดยผู้มีส่วนร่วมมากที่สุดในช่วงปีหรือสองปีที่ผ่านมา (Steven Penny) ปรากฏว่าเมื่อต้นปีที่ผ่านมาเขาไม่เห็นด้วยกับapt-cygผู้เขียนต้นฉบับ(สตีเฟ่นจังเกล) และออกการจับกุม DMCA เมื่อเขาแยกโครงการ เนื่องจาก Jungels (aka Transcode) เป็นผู้เขียนต้นฉบับของโครงการด้วยเหตุผลจริง GitHub จึงเรียกคืนโครงการเดิมหลังจากนั้นไม่นาน ปัจจุบันทั้งสองโครงการมีให้บริการ - แม้ว่าโครงการดั้งเดิมจะไม่มีการอัปเดตโค้ดใหม่ตั้งแต่การแยก มันเป็นสถานการณ์ที่ยุ่งเหยิงจริงๆ
Anthony Geoghegan

setup-x86_64.exe -q - แพ็คเกจ = bash, vim วิธีการนี้ช่วยฉันในอดีต เพียงเรียกใช้จากบรรทัดคำสั่งและทำงานได้อย่างราบรื่น
TheWalkingData

9

ก่อนอื่นให้ดาวน์โหลดตัวติดตั้งที่: https://cygwin.com/setup-x86_64.exe (Windows 64 บิต) จากนั้น:

# move installer to cygwin folder
mv C:/Users/<you>/Downloads/setup-x86_64.exe C:/cygwin64/

# add alias to bash_aliases
echo "alias cygwin='C:/cygwin64/setup-x86_64.exe -q -P'" >> ~/.bash_aliases
source ~/.bash_aliases

# add bash_aliases to bashrc if missing
echo "source ~/.bash_aliases" >> ~/.profile

เช่น

# install vim
cygwin vim

# see other options
cygwin --help

ฉันใช้วิธีที่คล้ายกันมากกับสิ่งนี้และมันทำงานได้ดีสำหรับฉันโดยให้คุณรู้ชื่อของแพ็คเกจที่คุณต้องการติดตั้งล่วงหน้านั่นคือ ;-)
Gary Doublé

ทางออกที่ง่ายมาก เพิ่งเพิ่มนามแฝงใน. bashrc
Ach J

4

ฉันต้องการทางออกสำหรับสิ่งนี้คล้ายกันapt-get --print-urisแต่น่าเสียดายที่ apt-cyg ไม่ได้ทำเช่นนี้ ต่อไปนี้เป็นวิธีแก้ปัญหาที่อนุญาตให้ฉันดาวน์โหลดเฉพาะแพ็คเกจที่ฉันต้องการด้วยการอ้างอิงและคัดลอกไปยังเป้าหมายสำหรับการติดตั้ง นี่คือสคริปต์ทุบตีที่แยกวิเคราะห์ผลลัพธ์ของapt-cygลงในรายการของ URIs:

#!/usr/bin/bash

package=$1
depends=$( \
    apt-cyg depends $package \
    | perl -ne 'while ($x = /> ([^>\s]+)/g) { print "$1\n"; }' \
    | sort \
    | uniq)
depends=$(echo -e "$depends\n$package")
for curpkg in $depends; do
    if ! grep -q "^$curpkg " /etc/setup/installed.db; then
    apt-cyg show $curpkg \
        | perl -ne '
            if ($x = /install: ([^\s]+)/) { 
                print "$1\n"; 
            }
            if (/\[prev\]/) { 
                exit; 
            }'
    fi
done

ด้านบนจะพิมพ์เส้นทางของแพ็คเกจที่ต้องการดาวน์โหลดโดยสัมพันธ์กับรูทกระจก cygwin โดยไม่ข้ามแพ็คเกจใด ๆ ที่ติดตั้งไว้แล้ว ในการดาวน์โหลดพวกเขาฉันเขียนผลลัพธ์ไปยังไฟล์cygwin-packages-listแล้วใช้ wget:

mirror=http://cygwin.mirror.constant.com/
uris=$(for line in $(cat cygwin-packages-list); do echo "$mirror$line"; done)
wget -x $uris

จากนั้นตัวติดตั้งสามารถใช้เพื่อติดตั้งจากไดเรกทอรีแคชโลคัล โปรดทราบว่าเพื่อให้ทำงานได้ฉันต้องคัดลอกsetup.iniจากแพคเกจ cygwin ก่อนหน้าไปยังไดเรกทอรีที่มีไฟล์ที่ดาวน์โหลด (มิฉะนั้นโปรแกรมติดตั้งไม่ทราบว่ามีอะไร)


4

คำถามเก่า แต่ก็ยังมีความเกี่ยวข้อง นี่คือสิ่งที่ใช้ได้กับฉันในวันนี้ (6/26/16)

จากเปลือกทุบตี:

lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin

1
wgetหรือcurlอาจเป็นเครื่องมือที่ดีกว่าสำหรับสิ่งนี้ (และโดยส่วนตัวฉันจะติดตั้งในไดเรกทอรีอื่น ๆ ในของฉัน$PATHมากกว่าสิ่งต่อไป/binนี้)
Keith Thompson

3

คำตอบของ Dawid Ferenczy ค่อนข้างสมบูรณ์ แต่หลังจากที่ฉันลองตัวเลือกของเขาเกือบทั้งหมดฉันได้พบว่าcyg-get ของ Chocolateyนั้นดีที่สุด

ฉันต้องการติดตั้งwgetขั้นตอนคือ:

choco install cyg-get

แล้ว:

cyg-get wget

1

โดยปกติก่อนการติดตั้งแพคเกจหนึ่งจะต้องรู้ชื่อที่แน่นอน:

# define a string to search
export to_srch=perl

# get html output of search and pick only the cygwin package names
wget -qO- "https://cygwin.com/cgi-bin2/package-grep.cgi?grep=$to_srch&arch=x86_64" | \
perl -l -ne 'm!(.*?)<\/a>\s+\-(.*?)\:(.*?)<\/li>!;print $2'

# and install 
# install multiple packages at once, note the
setup-x86_64.exe -q -s http://cygwin.mirror.constant.com -P "<<chosen_package_name>>"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.