Cygwin软件包中是否有类似于apt-get
Debian或yum
redhat 上的工具,可让我从命令行安装组件?
Cygwin软件包中是否有类似于apt-get
Debian或yum
redhat 上的工具,可让我从命令行安装组件?
Answers:
“ setup.exe”安装程序中没有专门提供apt-get功能的工具。但是,有适用于Cygwin的命令行软件包安装程序,可以单独下载,但是它并不完全稳定,并且依赖于变通方法。
apt-cyg:http : //github.com/transcode-open/apt-cyg
签出项目的问题标签以查看已知问题。
setup-x86.exe -q -P packagename1,packagename2
。不像apt-get
甚至不花哨,apt-cyg
但在大多数情况下,它可以解决问题。您也可以从cmd.exe
(关闭Cygwin之后)运行它。
Cygwin的安装程序接受命令行参数以从命令行安装软件包。
例如setup-x86.exe -q -P packagename1,packagename2
,安装没有任何GUI交互的软件包(“无人参与安装模式”)。
(请注意,您需要使用setup-x86.exe
或setup-x86_64.exe
视情况而定。)
有关软件包列表,请参见http://cygwin.com/packages/。
setup-x86_64 --packages="openssh,python"
对于更方便的安装程序,您可能希望
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
wget
,它下载apt-cyg
没有问题。404在什么时候出现?
存在一些脚本,可以将其用作Cygwin的简单程序包管理器。但是重要的是要知道,由于... ehm ... Windows ,它们总是非常有限的。
安装或删除软件包很好,每个Cygwin的软件包管理器都可以做到这一点。但是更新很麻烦,因为Windows不允许您覆盖当前正在运行的可执行文件。因此,您无法更新例如Cygwin DLL或包含来自Cygwin本身的当前正在运行的可执行文件的任何程序包。Cygwin安装页面上也有此注释:
“没有更全功能的软件包管理器的基本原因是,这样的程序需要完全访问Cygwin的POSIX所有功能。但是,这在非Cygwin的环境中很难提供,例如首先存在此外,Windows不允许轻易覆盖正在使用的可执行文件,因此,在程序包管理器使用DLL的同时安装新版本的Cygwin DLL是有问题的。”
Cygwin的安装程序使用Windows注册表覆盖正在使用的可执行文件,并且此方法需要重新启动Windows。因此,最好在更新软件包之前关闭所有Cygwin进程,这样就不必重新启动计算机即可实际应用更改。新软件包的安装应该完全没有任何麻烦。除了Cygwin的setup.exe
实现之外,我认为没有任何软件包管理器可以实现任何方法来覆盖正在使用的文件,因此,如果无法覆盖它们,它只会失败。
更新:该存储库由于版权问题(DMCA删除)最近被禁用。它看起来像仓库的所有者发行的DMCA删除自己的信息库,并创建了一个名为新项目贤者(参见下文)。
对我来说最好的。仅仅是因为它是最新的之一。它不使用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
实现为Shell脚本的另一个程序包管理器。我没有尝试过,但实际上看起来不错。
它可以搜索存储库中的软件包,在类别中列出软件包,检查依赖关系,列出软件包文件等等。它具有其他程序包管理器所没有的功能。
废弃原件的叉子 半胱氨酸进行了改进和修正。它具有很多功能,并且是用Python实现的。使用安装make
。
如果使用Chocolatey安装Cygwin,则可以安装cyg-get软件包,实际上是Cygwin setup.exe
用PowerShell编写的简单包装。
它还具有命令行模式。而且,它允许您一次升级所有已安装的软件包(与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
sage
是apt-cyg
过去一两年中最活跃的贡献者(史蒂芬·潘妮)的叉子。看来,今年早些时候,他与原始apt-cyg
作者(Stephen Jungels)有所不同,并在分叉该项目时发布了DMCA删除书。由于Jungels(aka Transcode)确实是该项目的原始作者,因此GitHub在不久后恢复了原始项目。目前,这两个项目都可用-尽管自拆分以来原始项目没有任何新的代码更新。真的,这是一个混乱的情况。
首先,从以下位置下载安装程序: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
我想要一个类似于的解决方案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
wget
或curl
可能是一个更好的工具。(就我个人而言,我会将其安装在目录中的其他目录中,$PATH
而不是在目录中/bin
。)
戴维德·费伦奇(Dawid Ferenczy)的回答很完整,但是在尝试了几乎所有他的选择之后,我发现Chocolatey的cyg-get是最好的(至少是我能上班的唯一一种)。
我想安装wget
,步骤是这样的:
choco install cyg-get
然后:
cyg-get wget
通常,在安装软件包之前,必须先知道其确切名称:
# 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>>"