【问题标题】:How do I install cygwin components from the command line?如何从命令行安装 cygwin 组件?
【发布时间】:2012-03-04 19:47:59
【问题描述】:

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

【问题讨论】:

标签: command-line cygwin


【解决方案1】:

“setup.exe”安装程序中没有专门提供 apt-get 的功能。但是,有一个命令行包安装程序 对于 Cygwin 可以单独下载,但它并不完全稳定和 依赖于变通方法。

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

查看项目的问题选项卡以查看已知问题。

【讨论】:

  • 谢谢!正是我想知道的。我想知道他们为什么不成熟?
  • @vy32:因为你没有帮助他们成熟? :) 他们不能自己写。必须有人为他们工作。而且由于它们的可用性非常有限(要覆盖当前在 Windows 上使用的文件,您必须先关闭 Cygwin,因此无法在关闭的 Cygwin 中执行任何包管理器:),没有多少人感兴趣。
  • 来自另一个答案:setup-x86.exe -q -P packagename1,packagename2。不像apt-get 甚至apt-cyg 那样花哨,但它在大多数情况下都能解决问题。你也可以从cmd.exe 运行它(关闭 Cygwin 之后)。
  • @Steve,Dawid 的回答说它移到了“sage”。 stackoverflow.com/a/23143997/80772
  • 由于原项目已经死了,我建议看看这个(截至本评论时)活动分叉:github.com/kou1okada/apt-cyg
【解决方案2】:

Cygwin 的安装程序接受 command-line arguments 从命令行安装软件包。

例如setup-x86.exe -q -P packagename1,packagename2 无需任何 GUI 交互即可安装软件包(“无人值守安装模式”)。

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

请参阅http://cygwin.com/packages/ 获取软件包列表。

【讨论】:

  • 不错! setup.exe 现在称为 setup-x86.exe - 或取决于 cpu 位的变体。也可以在这里查看包列表cygwin.com/packages
  • 另外,要指定多个包,用逗号分隔它们。例如在 DOS 中,输入 setup-x86_64 --packages="openssh,python"
  • @Pacerier,不清楚你在问什么。这应该是可以安全依赖的设置功能。
  • sourceware.org/git/… 表明 -P 接受 packageName=version 对。功能公告在cygwin.com/pipermail/cygwin-announce/2021-April/010021.html
  • 明确一点,-P packagename=version 是一项新功能。只是-P packagename 已经被接受了很长时间(现在仍然是)......
【解决方案3】:

为了更方便的安装程序,您可能希望使用 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

【讨论】:

  • 显然使用 setup-x86_64.exe -q -P wget,tar,qawk,bzip2,subversion,vim 用于 64 位 windows。
  • 需要在 wget 命令中添加 --no-check-certificate。否则,太棒了。
  • 现在是 404(经过几次重定向)
  • 刚试过wget,它下载apt-cyg没有问题。 404 是在什么时候出现的?
  • wget 默认不随 cygwin 一起安装,这意味着这需要通过手动和非编程安装来引导。
【解决方案4】:

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

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

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

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


Cygwin 的一些包管理器:

apt-cyg

更新:由于版权问题 (DMCA takedown),该存储库最近被禁用。它looks like 存储库的所有者在 他自己的 存储库上发布了 DMCA 删除,并创建了一个名为 Sage 的新项目(见下文)。

对我来说最好的。仅仅因为它是最新的之一。它不使用 Cygwin 的 setup.exe,而是重新实现了 setup.exe 所做的事情。它适用于两个平台 - x86 以及 x86_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

还有 bunch of forks 有不同的功能。


sage

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

它可以搜索存储库中的包,列出类别中的包,检查依赖项,列出包文件等等。它具有其他包管理器所没有的功能。


cyg-apt

废弃的原始 cyg-apt 的分支,带有改进和错误修复。它有很多功能,并且是用 Python 实现的。使用make进行安装。


Chocolatey’s cyg-get

如果您使用 Chocolatey 安装 Cygwin,则可以安装包 cyg-get,它实际上是用 PowerShell 编写的 Cygwin 的 setup.exe 的简单包装器。


Cygwin 的 setup.exe

它还有一个command line mode。此外,它允许您一次升级所有已安装的软件包(就像apt-get upgrade 在基于 Debian 的 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

【讨论】:

  • sageapt-cyg 在过去一两年中最活跃的贡献者 (Steven Penny) 的一个分支。今年早些时候,他似乎与最初的apt-cyg作者(Stephen Jungels)有一些分歧,并在他分叉项目时发布了 DMCA 删除。由于 Jungels(又名 Transcode)是该项目的可验证原始作者,GitHub 很快恢复了原始项目。目前,这两个项目都可用——尽管原始项目自拆分以来没有任何新的代码更新。这是一个混乱的局面,真的。
  • setup-x86_64.exe -q --packages=bash,vim.这种方法过去曾帮助过我。只需从命令行运行它,它就可以顺利运行。
【解决方案5】:

通常在安装软件包之前必须知道它的确切名称:

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

【讨论】:

    【解决方案6】:

    我想要一个类似于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 包缓存复制到包含下载文件的目录(否则安装程序不知道是什么)。

    【讨论】:

      【解决方案7】:

      老问题,但仍然相关。这就是今天(2016 年 6 月 26 日)对我有用的方法。

      从 bash 外壳:

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

      【讨论】:

      • wgetcurl 可能是一个更好的工具。 (就个人而言,我会将其安装在我的 $PATH 的其他目录中,而不是 /bin 中。)
      【解决方案8】:

      Dawid Ferenczy 的回答非常完整,但在我尝试了他的几乎所有选项后,我发现Chocolatey’s cyg-get 是最好的(至少是我唯一可以开始工作的)。

      我想安装wget,步骤是这样的:

      choco install cyg-get
      

      然后:

      cyg-get wget
      

      【讨论】:

        【解决方案9】:

        首先,在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
        

        【讨论】:

        • 我正在使用与此非常相似的方法,它对我来说非常有效,前提是您事先知道要安装的软件包的名称 ;-)
        • 非常简单的解决方案。刚刚将别名添加到 .bashrc
        • 这太简单了,太棒了。起首!
        猜你喜欢
        • 2014-06-27
        • 2011-10-12
        • 2016-04-18
        • 2011-09-15
        • 2015-09-25
        • 1970-01-01
        • 2016-12-05
        • 2016-08-02
        • 1970-01-01
        相关资源
        最近更新 更多