如何从命令行安装cygwin组件?

Cygwin包中是否有类似Debian上的apt-get或redhat上的yum的工具,允许我从命令行安装组件?

232595 次浏览

` ` setup.exe ` `安装程序中没有专门的工具提供 apt-get的功能。但是,有一个命令行包安装程序 可以单独下载,但它不是完全稳定的和 依赖于变通办法。< / p >

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

检查项目的issues选项卡,查看已知的问题。

Cygwin的安装程序接受命令行参数来从命令行安装包。

例如setup-x86.exe -q -P packagename1,packagename2在没有任何GUI交互的情况下安装包('无人参与的安装模式')。

(注意,你需要酌情使用setup-x86.exesetup-x86_64.exe。)

包列表参见https://cygwin.com/packages/

对于一个更方便的安装程序,您可能需要使用 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

有一些脚本可以用作Cygwin的简单包管理器。但重要的是要知道,他们总是相当有限的,因为……嗯……Windows。

安装或删除包是很好的,Cygwin的每个包管理器都可以做到这一点。但是更新是一件痛苦的事情,因为Windows不允许你覆盖当前正在运行的可执行文件。因此,您不能更新例如Cygwin DLL或任何包含当前运行的Cygwin本身的可执行文件的包。在Cygwin安装页面上还有这样的注释:

没有一个功能更全的包管理器的基本原因是 这样的程序需要完全访问Cygwin的所有POSIX功能。 然而,这在无cygwin的环境中很难提供,例如 第一次安装时存在。此外,Windows不容易允许 覆盖正在使用的可执行文件,从而安装新版本的Cygwin 当包管理器正在使用DLL时,DLL是有问题的。"

Cygwin的设置使用Windows注册表覆盖正在使用的可执行文件 和这个方法需要重新启动Windows。因此,最好是关闭 所有Cygwin进程在更新包之前,所以你不需要重新启动 让您的计算机实际应用这些更改。安装一个新包 应该完全没有任何麻烦。我不认为任何包管理器 除了Cygwin的setup.exe实现了任何方法来覆盖正在使用的文件, 所以如果它不能覆盖它们,它就会失败

Cygwin的一些包管理器:

apt-cyg

更新:存储库最近由于版权问题被禁用(DMCA拆卸)。它看起来像存储库的所有者在他自己的存储库上发布了DMCA删除,并创建了一个名为圣人的新项目(见下文)。

对我来说最好的。因为它是最近的一种。它没有使用Cygwin的setup.exe,而是重新实现了setup.exe所做的事情。它适用于两个平台——x86x86_64。有许多带有或多或少附加特性的分支。例如,kou1okada fork是改进版本之一,这真的很棒。

apt-cyg只是一个shell脚本,没有安装。只需下载它(或克隆存储库),使其可执行,并将其复制到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

还有具有不同特性的一堆叉子


sage

另一个作为shell脚本实现的包管理器。我没试过,不过看起来不错。

它可以在存储库中搜索包、在类别中列出包、检查依赖关系、列出包文件等等。它具有其他包管理器不具备的特性。


cyg-apt

被抛弃的原始< del > cyg-apt del > < /的分叉,改进和错误修复。它有很多特性,而且是用Python实现的。安装使用make


巧克力巧克力的cyg-get

如果你使用Chocolatey来安装Cygwin,你可以安装包cyg-get,它实际上是一个简单的包装器,围绕着用PowerShell编写的Cygwin的setup.exe


Cygwin安装程序的

它还有一个命令行模式。此外,它允许你一次升级所有已安装的包(就像基于Debian的Linux上的apt-get upgrade一样)。

使用示例:

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

通常在安装一个包之前,你必须知道它的确切名称:

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

我想为这个类似apt-get --print-uris的解决方案,但不幸的是apt-cyg不这样做。下面是一个解决方案,它允许我只下载我需要的包及其依赖项,并将它们复制到目标安装。下面是一个bash脚本,它将apt-cyg的输出解析为一个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

上面的代码将打印出需要下载的包相对于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包缓存复制到下载文件的目录中(否则安装程序不知道什么是什么)。

老问题了,但仍然相关。以下是今天对我有效的方法(6/26/16)。

来自bash shell:

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

Dawid Ferenczy的答案是相当完整的,但在我尝试了几乎所有的选项后,我发现巧克力色的cyg-get是最好的(至少是唯一一个我可以得到的工作)。

我想安装wget,步骤如下:

choco install cyg-get

然后:

cyg-get wget

首先,在:https://cygwin.com/setup-x86_64.exe (Windows 64bit)下载安装程序,然后:

# 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