Como instalo os componentes do cygwin a partir da linha de comando?

178

Existe uma ferramenta no pacote Cygwin semelhante ao apt-getDebian ou yumao redhat que me permita instalar componentes a partir da linha de comando?

vy32
fonte
2
Stack Overflow é um site para perguntas sobre programação e desenvolvimento. Esta questão parece estar fora de tópico, porque não se trata de programação ou desenvolvimento. Consulte Quais tópicos posso perguntar aqui na Central de Ajuda. Talvez o Superusuário seja um lugar melhor para perguntar. Consulte também Onde postar perguntas sobre Dev Ops?
jww 27/10/16
7
@jww, isso não é devops.
Pacerier

Respostas:

102

Não há nenhuma ferramenta específica no instalador 'setup.exe' que ofereça a funcionalidade do apt-get. No entanto, existe um instalador de pacote de linha de comando para o Cygwin que pode ser baixado separadamente, mas não é totalmente estável e depende de soluções alternativas.

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

Confira a guia de problemas do projeto para ver os problemas conhecidos.

Zorobabel
fonte
Obrigado! Apenas o que eu queria saber. Eu me pergunto por que eles não são maduros?
vy32
4
@ vy32: porque você não ajudou a torná-los maduros? :) Eles não podem se escrever. Alguém tem que trabalhar neles. E como a usabilidade deles é bastante limitada (para sobrescrever arquivos atualmente em uso no Windows, você deve fechar o Cygwin primeiro, portanto não é possível executar nenhum gerenciador de pacotes no Cygwin fechado :), não há muitas pessoas interessadas.
David Ferenczy Rogožan
10
De outra resposta: setup-x86.exe -q -P packagename1,packagename2. Não é tão chique quanto apt-getou mesmo, apt-cygmas faz o truque na maioria dos casos. E você também pode executar isso em cmd.exe(após fechar o Cygwin).
kqw
2
@ Steve, a resposta de Dawid diz que mudou para "sálvia". stackoverflow.com/a/23143997/80772
enguia ghEEz
3
Como o projeto original está inoperante, sugiro olhar para este fork ativo (no momento deste comentário): github.com/kou1okada/apt-cyg
Vladimir Panteleev
136

A instalação do Cygwin aceita argumentos da linha de comando para instalar pacotes a partir da linha de comando.

por exemplo, setup-x86.exe -q -P packagename1,packagename2para instalar pacotes sem nenhuma interação da GUI ('modo de instalação autônoma').

(Observe que você precisa usar setup-x86.exeou setup-x86_64.execonforme apropriado.)

Veja http://cygwin.com/packages/ para a lista de pacotes.

jturney
fonte
5
Agradável! O setup.exe agora é chamado de setup-x86.exe - ou uma variante, dependendo dos bits da CPU. Veja também aqui a lista de pacotes cygwin.com/packages
ErichBSchulz
2
Além disso, para especificar vários pacotes, separe-os com vírgulas. por exemplo, no DOS, digitesetup-x86_64 --packages="openssh,python"
Michael Scheper
Não parece haver uma maneira de configurar versões específicas.
CMCDragonkai
@jturney, isso é estável?
Pacerier
1
@ Pacerier, não está claro o que você está perguntando. Esse deve ser um recurso da configuração em que é seguro confiar.
jturney
134

Para um instalador mais conveniente, você pode usar apt-cygcomo seu gerenciador de pacotes. Sua sintaxe é semelhante a apt-get, que é uma vantagem. Para isso, siga as etapas acima e use o Cygwin Bash para as seguintes etapas

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

Agora que apt-cygestá instalado. Aqui estão alguns exemplos de instalação de alguns pacotes

apt-cyg install nano
apt-cyg install git
apt-cyg install ca-certificates
sagunms
fonte
17
Obviamente, use setup-x86_64.exe -q -P wget, tar, qawk, bzip2, subversion, vim para janelas de 64 bits.
Arun
3
Necessário adicionar --no-check-certificate ao comando wget. Caso contrário, excelente.
27614
E agora é um 404 (depois de alguns redirecionamentos) #
Shadow
Apenas tentei wgete faz o download apt-cygsem problemas. Em que momento o 404 aparece?
sagunms
1
O wget não é instalado por padrão com o cygwin, o que significa que ele precisa ser inicializado com uma instalação manual e não programática.
51

Existem alguns scripts, que podem ser usados ​​como gerenciadores de pacotes simples para o Cygwin. Mas é importante saber que eles sempre serão bastante limitados , por causa do ... ehm ... Windows.

Instalar ou remover pacotes é bom, cada gerenciador de pacotes do Cygwin pode fazer isso. Mas atualizar é um problema, pois o Windows não permite substituir um executável, que está sendo executado no momento. Portanto, você não pode atualizar, por exemplo, a DLL do Cygwin ou qualquer pacote que contenha o executável atualmente em execução no próprio Cygwin. Há também esta nota na página de instalação do Cygwin :

"O motivo básico para não ter um gerenciador de pacotes mais completo é que esse programa precisaria de acesso total a todas as funcionalidades POSIX do Cygwin. Isso é, no entanto, difícil de fornecer em um ambiente livre de Cygwin, como existe no primeiro Além disso, o Windows não permite a substituição fácil de executáveis ​​em uso, portanto, a instalação de uma nova versão da Cygwin DLL enquanto um gerenciador de pacotes está usando a DLL é problemática. "

A instalação do Cygwin usa o registro do Windows para substituir os executáveis ​​que estão em uso e esse método requer uma reinicialização do Windows . Portanto, é melhor fechar todos os processos do Cygwin antes de atualizar os pacotes , para que você não precise reiniciar o computador para aplicar as alterações. A instalação de um novo pacote deve ser completamente sem aborrecimentos. Eu não acho que nenhum dos gerenciadores de pacotes, exceto o Cygwin, setup.exeimplemente qualquer método para substituir arquivos em uso, então ele simplesmente falharia se não pudesse substituí-los.


Alguns gerenciadores de pacotes do Cygwin:

apt-cyg

Atualização : o repositório foi desativado recentemente devido a problemas de direitos autorais ( remoção da DMCA ). Ele se parece com o proprietário do repositório emitiu o DMCA takedown em seu próprio repositório e criou um novo projeto chamado Sábio (ver abaixo).

O melhor para mim. Simplesmente porque é um dos mais recentes. Ele não usa o Cygwin setup.exe, mas reimplementa o que setup.exefaz. Funciona corretamente para ambas as plataformas - x86 e x86_64 . Existem muitos garfos com mais ou menos recursos adicionais. Por exemplo, o garfo kou1okada é uma das versões aprimoradas , o que é realmente ótimo.

O apt-cyg é apenas um script de shell, não há instalação. Basta fazer o download (ou clonar o repositório), torná-lo executável e copiá-lo em algum lugar no 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

Há também um monte de garfos com recursos diferentes.


sábio

Outro gerenciador de pacotes implementado como um script de shell. Eu não tentei, mas parece realmente bom.

Ele pode procurar pacotes em um repositório, listar pacotes em uma categoria, verificar dependências, listar arquivos de pacotes e muito mais. Possui recursos que outros gerenciadores de pacotes não possuem.


cyg-apt

Garfo do original abandonado cyg-aptcom melhorias e correções. Possui muitos recursos e é implementado em Python. A instalação é feita usando make.


Cyg-get de Chocolatey

Se você usou o Chocolatey para instalar o Cygwin, pode instalar o pacote cyg-get , que é realmente um invólucro simples em torno do Cygwin, setup.exeescrito no PowerShell.


Setup.exe do Cygwin

Ele também possui um modo de linha de comando . Além disso, ele permite que você atualize todos os pacotes instalados de uma só vez (como apt-get upgradeno Linux baseado no Debian).

Exemplo de uso:

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

Você pode criar um alias para facilitar o uso, por exemplo:

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

Então você pode, por exemplo, instalar o pacote Vim com:

cyg-get vim

David Ferenczy Rogožan
fonte
3
sageé um exemplo dos apt-cygcontribuintes mais ativos nos últimos dois anos (Steven Penny). Parece que no início deste ano ele teve alguma discordância com o apt-cygautor original (Stephen Jungels) e emitiu a remoção do DMCA quando ele forçou o projeto. Como Jungels (aka Transcode) é o autor original do projeto, o GitHub restaurou o projeto original logo depois. Atualmente, os dois projetos estão disponíveis - embora o projeto original não tenha recebido novas atualizações de código desde a divisão. É uma situação confusa, realmente.
Anthony Geoghegan
setup-x86_64.exe -q --packages = bash, vim. Essa abordagem me ajudou no passado. Basta executá-lo na linha de comando e ele funciona sem problemas.
TheWalkingData
9

Primeiro, baixe o instalador em: https://cygwin.com/setup-x86_64.exe (Windows 64bit) e, em seguida:

# 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

por exemplo

# install vim
cygwin vim

# see other options
cygwin --help
Jason
fonte
Eu estou usando um método muito semelhante a esta e está funcionando muito bem para mim, fornecendo-lhe conhecer os nomes dos pacotes que deseja instalar de antemão que é ;-)
Gary Doublé
solução muito simples. acabou de adicionar o alias ao .bashrc
Ach J
4

Eu queria uma solução parecida com essa apt-get --print-uris, mas infelizmente o apt-cyg não faz isso. A seguir, uma solução que me permitiu baixar apenas os pacotes necessários, com suas dependências, e copiá-los para o destino para instalação. Aqui está um script bash que analisa a saída apt-cygem uma lista de 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

O item acima irá imprimir os caminhos dos pacotes que precisam ser baixados, em relação à raiz do espelho cygwin, omitindo quaisquer pacotes que já estejam instalados. Para baixá-los, escrevi a saída em um arquivo cygwin-packages-liste usei o wget:

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

O instalador pode ser usado para instalar a partir de um diretório de cache local. Observe que, para isso funcionar, eu precisava copiar setup.inide um cache de pacote cygwin anterior para o diretório com os arquivos baixados (caso contrário, o instalador não sabe o que é o quê).

wakjah
fonte
4

Pergunta antiga, mas ainda relevante. Aqui está o que funcionou para mim hoje (26/6/16).

Do shell bash:

lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin
Steve Isenberg
fonte
1
wgetou curlé provavelmente uma ferramenta melhor para isso. (E, pessoalmente, eu instalá-lo em algum outro diretório na minha $PATHvez de no /bin.)
Keith Thompson
3

A resposta de Dawid Ferenczy é bastante completa, mas depois que tentei quase todas as opções dele, descobri que o cyg-get do Chocolate era o melhor (pelo menos o único que eu conseguia trabalhar).

Eu estava querendo instalar wget, os passos eram os seguintes:

choco install cyg-get

Então:

cyg-get wget
fabriciorissetto
fonte
1

Geralmente, antes de instalar um pacote, é necessário saber seu nome exato:

# 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
fonte