Bagaimana cara menginstal komponen cygwin dari baris perintah?

178

Apakah ada alat dalam paket Cygwin mirip dengan apt-getdi Debian atau yumdi redhat yang memungkinkan saya untuk menginstal komponen dari baris perintah?

ay32
sumber
2
Stack Overflow adalah situs untuk pertanyaan pemrograman dan pengembangan. Pertanyaan ini tampaknya di luar topik karena ini bukan tentang pemrograman atau pengembangan. Lihat Topik apa yang bisa saya tanyakan di sini di Pusat Bantuan. Mungkin Super User akan menjadi tempat yang lebih baik untuk bertanya. Lihat juga Di mana saya mengirim pertanyaan tentang Dev Ops?
jww
7
@jww, Ini bukan devops.
Pacerier

Jawaban:

102

Tidak ada alat khusus di penginstal 'setup.exe' yang menawarkan fungsionalitas apt-get. Namun, ada penginstal paket baris-perintah untuk Cygwin yang dapat diunduh secara terpisah, tetapi tidak sepenuhnya stabil dan bergantung pada solusi.

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

Periksa tab masalah untuk proyek untuk melihat masalah yang diketahui.

Zorobabel
sumber
Terima kasih! Apa yang ingin saya ketahui. Saya bertanya-tanya mengapa mereka tidak dewasa?
vy32
4
@ vy32: karena Anda tidak membantu membuatnya dewasa? :) Mereka tidak bisa menulis sendiri. Seseorang harus mengerjakannya. Dan karena kegunaannya sangat terbatas (untuk menimpa file yang saat ini digunakan pada Windows Anda harus menutup Cygwin terlebih dahulu, jadi tidak mungkin untuk mengeksekusi manajer paket apa pun di Cygwin tertutup :), tidak banyak orang yang tertarik.
David Ferenczy Rogožan
10
Dari jawaban lain: setup-x86.exe -q -P packagename1,packagename2. Tidak semewah apt-getatau bahkan apt-cygtetapi itu berhasil dalam banyak kasus. Dan Anda juga dapat menjalankan ini dari cmd.exe(setelah menutup Cygwin).
kqw
2
@Steve, jawaban oleh Dawid mengatakan itu pindah ke "bijak". stackoverflow.com/a/23143997/80772
belut ghEEz
3
Karena proyek aslinya sudah mati, saya sarankan melihat ini (pada saat komentar ini) garpu aktif: github.com/kou1okada/apt-cyg
Vladimir Panteleev
136

Setup Cygwin menerima argumen baris perintah untuk menginstal paket dari baris perintah.

mis. setup-x86.exe -q -P packagename1,packagename2untuk menginstal paket tanpa interaksi GUI ('mode pengaturan tanpa pengawasan').

(Perhatikan bahwa Anda perlu menggunakan setup-x86.exeatau setup-x86_64.exejika perlu.)

Lihat http://cygwin.com/packages/ untuk daftar paket.

jurney
sumber
5
Bagus! setup.exe sekarang disebut setup-x86.exe - atau varian tergantung pada bit cpu. Lihat juga di sini untuk daftar paket cygwin.com/packages
ErichBSchulz
2
Juga, untuk menentukan beberapa paket, pisahkan dengan koma. misalnya dalam DOS, ketiksetup-x86_64 --packages="openssh,python"
Michael Scheper
Sepertinya tidak ada cara mengatur versi tertentu.
CMCDragonkai
@ jturney, Apakah ini stabil?
Pacerier
1
@Pacerier, Tidak jelas apa yang Anda minta. Ini harus menjadi fitur pengaturan yang aman untuk diandalkan.
jturney
134

Untuk penginstal yang lebih nyaman, Anda mungkin ingin menggunakan apt-cygsebagai manajer paket Anda. Sintaksnya mirip dengan apt-get, yang merupakan nilai tambah. Untuk ini, ikuti langkah-langkah di atas dan kemudian gunakan Cygwin Bash untuk langkah-langkah berikut

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

Sekarang apt-cygsudah terpasang. Berikut adalah beberapa contoh menginstal beberapa paket

apt-cyg install nano
apt-cyg install git
apt-cyg install ca-certificates
sagunms
sumber
17
Jelas menggunakan setup-x86_64.exe -q -P wget, tar, qawk, bzip2, subversi, vim untuk windows 64 bit.
Arun
3
Diperlukan untuk menambahkan --tidak-periksa-sertifikat ke perintah wget. Kalau tidak, hebat.
akauppi
Dan sekarang 404 (setelah beberapa pengalihan)
Shadow
Baru saja mencoba wgetdan unduhan apt-cygtanpa masalah. Kapan 404 muncul?
sagunms
1
wget tidak terinstal secara default dengan cygwin, artinya ini perlu bootstrap dengan instalasi manual dan non-programatik.
51

Ada beberapa skrip, yang dapat digunakan sebagai manajer paket sederhana untuk Cygwin. Tapi penting untuk diketahui, bahwa mereka akan selalu sangat terbatas , karena ... ehm ... Windows.

Menginstal atau menghapus paket tidak masalah, setiap manajer paket untuk Cygwin dapat melakukannya. Tetapi memperbarui itu menyusahkan karena Windows tidak memungkinkan Anda untuk menimpa executable, yang saat ini sedang berjalan. Jadi, Anda tidak dapat memperbarui mis. Cygwin DLL atau paket apa pun yang berisi executable yang sedang berjalan dari Cygwin itu sendiri. Ada juga catatan ini di halaman Instalasi Cygwin :

"Alasan dasar untuk tidak memiliki manajer paket berfitur lengkap adalah bahwa program seperti itu akan membutuhkan akses penuh ke semua fungsionalitas POSIX Cygwin. Namun, sulit untuk menyediakan dalam lingkungan yang bebas Cygwin, seperti yang ada di pertama instalasi. Selain itu, Windows tidak dengan mudah memungkinkan menimpa executable yang sedang digunakan sehingga menginstal versi baru dari Cygwin DLL saat manajer paket menggunakan DLL bermasalah. "

Setup Cygwin menggunakan registri Windows untuk menimpa executable yang sedang digunakan dan metode ini membutuhkan reboot Windows . Oleh karena itu, lebih baik untuk menutup semua proses Cygwin sebelum memperbarui paket , jadi Anda tidak perlu me-reboot komputer Anda untuk benar-benar menerapkan perubahan. Instalasi paket baru harus sepenuhnya tanpa gangguan. Saya tidak berpikir satu pun dari manajer paket kecuali Cygwin setup.exemengimplementasikan metode apa pun untuk menimpa file yang digunakan, jadi itu hanya akan gagal jika tidak bisa menimpa mereka.


Beberapa manajer paket untuk Cygwin:

apt-cyg

Pembaruan : repositori dinonaktifkan baru-baru ini karena masalah hak cipta ( penghapusan DMCA ). Ini terlihat seperti pemilik repositori mengeluarkan pencopotan DMCA pada sendiri repositori dan menciptakan sebuah proyek baru yang disebut Sage (lihat di bawah).

Yang terbaik untukku. Hanya karena itu salah satu yang terbaru. Itu tidak menggunakan Cygwin setup.exe, melainkan mengimplementasikan kembali, apa setup.exe. Ini berfungsi dengan baik untuk kedua platform - x86 dan juga x86_64 . Ada banyak garpu dengan fitur tambahan yang kurang lebih. Misalnya, garpu kou1okada adalah salah satu versi yang disempurnakan , yang benar-benar hebat.

apt-cyg hanyalah skrip shell, tidak ada instalasi. Cukup unduh (atau gandakan repositori), buat itu dapat dieksekusi dan salin ke suatu tempat ke 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

Ada juga banyak garpu dengan fitur berbeda.


Sage

Manajer paket lain diimplementasikan sebagai skrip shell. Saya tidak mencobanya tetapi sebenarnya terlihat bagus.

Itu dapat mencari paket dalam repositori, daftar paket dalam kategori, memeriksa dependensi, daftar file paket, dan banyak lagi. Ini memiliki fitur yang tidak dimiliki manajer paket lain.


cyg-apt

Garpu asli yang ditinggalkan cyg-aptdengan perbaikan dan perbaikan bug. Ini memiliki banyak fitur dan diimplementasikan dalam Python. Instalasi dibuat menggunakan make.


Cyg-get Chocolatey

Jika Anda menggunakan Chocolatey untuk menginstal Cygwin, Anda dapat menginstal paket cyg-get , yang sebenarnya merupakan pembungkus sederhana seputar Cygwin yang setup.exeditulis dalam PowerShell.


Setup.exe Cygwin

Ini juga memiliki mode baris perintah . Selain itu, ini memungkinkan Anda untuk memutakhirkan semua paket yang diinstal sekaligus (seperti apt-get upgradehalnya pada Linux berbasis Debian).

Contoh penggunaan:

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

Anda dapat membuat alias untuk penggunaan yang lebih mudah, misalnya:

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

Maka Anda dapat, misalnya, menginstal paket Vim dengan:

cyg-get vim

David Ferenczy Rogožan
sumber
3
sageadalah pertanda apt-cygoleh kontributor paling aktif selama satu atau dua tahun terakhir (Steven Penny). Tampaknya awal tahun ini dia memiliki beberapa ketidaksepakatan dengan apt-cygpenulis asli (Stephen Jungels) dan mengeluarkan penghentian DMCA ketika dia melakukan forked pada proyek tersebut. Karena Jungels (alias Transcode) diverifikasi sebagai penulis asli proyek, GitHub memulihkan proyek asli segera setelah itu. Saat ini, kedua proyek tersedia - meskipun proyek asli belum memiliki pembaruan kode baru sejak pemisahan. Ini situasi yang berantakan, sungguh.
Anthony Geoghegan
setup-x86_64.exe -q --packages = bash, vim. Pendekatan ini telah membantu saya di masa lalu. Jalankan saja dari baris perintah dan itu bekerja dengan lancar.
TheWalkingData
9

Pertama, unduh pemasang di: https://cygwin.com/setup-x86_64.exe (Windows 64bit), lalu:

# 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

misalnya

# install vim
cygwin vim

# see other options
cygwin --help
Jason
sumber
Saya menggunakan metode yang sangat mirip dengan ini dan ini berfungsi dengan sangat baik bagi saya, asal Anda tahu nama-nama paket yang ingin Anda instal sebelumnya yaitu ;-)
Gary Doublé
solusi yang sangat sederhana. baru saja menambahkan alias ke .bashrc
Ach J
4

Saya ingin solusi untuk ini mirip apt-get --print-uris, tetapi sayangnya apt-cyg tidak melakukan ini. Berikut ini adalah solusi yang memungkinkan saya untuk mengunduh hanya paket yang saya butuhkan, dengan dependensinya, dan menyalinnya ke target untuk instalasi. Berikut ini adalah skrip bash yang mem-parsing output apt-cygmenjadi daftar URI:

#!/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

Hal di atas akan mencetak jalur paket yang perlu diunduh, relatif terhadap cygwin mirror root, menghilangkan paket apa pun yang sudah diinstal. Untuk mengunduhnya, saya menulis output ke file cygwin-packages-listdan kemudian menggunakan wget:

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

Penginstal kemudian dapat digunakan untuk menginstal dari direktori cache lokal. Perhatikan bahwa agar ini berfungsi, saya perlu menyalin setup.inidari cache paket cygwin sebelumnya ke direktori dengan file yang diunduh (jika installer tidak tahu apa apa).

wakjah
sumber
4

Pertanyaan lama, tetapi masih relevan. Inilah yang bekerja untuk saya hari ini (26/6/16).

Dari bash shell:

lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin
Steve Isenberg
sumber
1
wgetatau curlmungkin alat yang lebih baik untuk ini. (Dan secara pribadi, saya akan menginstalnya di beberapa direktori lain $PATHdaripada di /bin.)
Keith Thompson
3

Jawaban Dawid Ferenczy cukup lengkap tetapi setelah saya mencoba hampir semua opsinya, saya menemukan bahwa Chocolate-Cyg-get adalah yang terbaik (setidaknya satu-satunya yang bisa saya peroleh).

Saya ingin menginstal wget, langkah-langkahnya adalah ini:

choco install cyg-get

Kemudian:

cyg-get wget
fabriciorissetto
sumber
1

Biasanya sebelum menginstal paket kita harus tahu nama persisnya:

# 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>>"
Yordan Georgiev
sumber