web-dev-qa-db-ja.com

コマンドラインからcygwinコンポーネントをインストールするにはどうすればいいですか?

Cygwinパッケージには、Debianのapt-getやredのyumのようなコマンドラインからコンポーネントをインストールするためのツールがありますか?

159
vy32

Apt-getの機能を提供する 'setup.exe'インストーラには特にツールはありません。ただし、Cygwin用のコマンドラインパッケージインストーラは別にダウンロードできますが、完全に安定しているわけではなく、回避策に依存しています。

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

プロジェクトの問題タブをチェックして、既知の問題を確認してください。

95
Zorobabel

より便利なインストーラのために、あなたはあなたのパッケージマネージャとして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
129
sagunms

Cygwinの設定は コマンドライン引数 を受け付け、コマンドラインからパッケージをインストールします。

例えばGUIを介さずにパッケージをインストールするためのsetup-x86.exe -q -P packagename1,packagename2(「無人セットアップモード」)。

(必要に応じてsetup-x86.exeまたはsetup-x86_64.exeを使用する必要があることに注意してください。)

パッケージリストについては http://cygwin.com/packages/ を参照してください。

125
jturney

Cygwin用の単純なパッケージマネージャとして使用できるスクリプトがいくつかあります。しかし、...ええと... Windowsのせいで、それらは常に非常に制限付きになることを知っておくことは重要です。

パッケージのインストールや削除は問題ありません、Cygwinの各パッケージマネージャがそれを行うことができます。しかし、Windowsでは現在実行中の実行可能ファイルを上書きできないため、更新は面倒です。ですから、更新することはできません。 Cygwin DLL、またはCygwin自体から現在実行中の実行可能ファイルを含むパッケージ。 Cygwinインストール ページにもこのメモがあります。

「よりフル機能のパッケージマネージャを持たないことの基本的な理由は、そのようなプログラムがCygwinのPOSIX機能のすべてにフルアクセスする必要があることです。しかし、Cygwinを含まない環境で提供するのは難しいです。さらに、Windowsは使用中の実行ファイルの上書きを容易に許可していないので、パッケージマネージャがDLLを使用している間に新しいバージョンのCygwin DLLをインストールするのは問題があります。」

CygwinのセットアップはWindowsレジストリを使用して実行中の実行可能ファイルを上書きし、この方法で{Windowsの再起動が必要を実行します。そのため、パッケージを更新する前にすべてのCygwinプロセスを閉じるをお勧めします。したがって、実際に変更を適用するためにコンピュータを再起動する必要はありません。新しいパッケージのインストールは面倒なことが全くないはずです。 Cygwinのsetup.exe以外のパッケージマネージャが、使用中のファイルを上書きする方法を実装しているとは思わないので、上書きできなければ失敗するだけです。


Cygwin用のパッケージマネージャ:

apt-cyg

更新:リポジトリは著作権の問題で最近無効にされています( DMCA削除 )。それは のように見える リポジトリの所有者は 彼自身の リポジトリにDMCA削除を発行し、 Sage という新しいプロジェクトを作成しました(下記参照)。

私にとって最高のもの。それは最新のものだからです。 Cygwinのsetup.exeを使用するのではなく、むしろsetup.exeが実行することを再実装します。両方のプラットフォーム - x86 x86_64 の両方で正しく動作します。多かれ少なかれ追加機能を持つフォークがたくさんあります。たとえば、kou1okada fork は改善されたバージョンの1つです。これは非常に優れています。

apt-cyg は単なるシェルスクリプトです。インストールは行われません。それをダウンロードする(あるいはリポジトリのクローンを作成する)だけで、実行可能にして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

さまざまな機能を備えた たくさんのフォーク もあります。


セージ

シェルスクリプトとして実装された別のパッケージマネージャ。私は試していませんでしたが、実際は良さそうです。

リポジトリ内のパッケージの検索、カテゴリ内のパッケージの一覧表示、依存関係のチェック、パッケージファイルの一覧表示などを実行できます。他のパッケージマネージャにはない機能があります。


cyg-apt

放棄されたオリジナルのフォーク cyg-apt 改良とバグ修正。それは非常に多くの機能を持っており、それはPythonで実装されています。インストールはmakeを使用して行われます。


チョコレートのcyg-get

CygwinをインストールするためにChocolateyを使用した場合は、パッケージ cyg-get をインストールできます。これは、実際にはPowerShellで書かれたCygwinのsetup.exeを囲む単純なラッパーです。


Cygwinのsetup.exe

また、 コマンドラインモード もあります。さらに、({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 packageと一緒にインストールすることができます。

cyg-get vim

まず、インストーラをダウンロードします。 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
4
Jason

古い質問ですが、それでも関連性があります。これが今日私のために働いていたものです(6/26/16)。

Bashシェルから:

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

私はapt-get --print-urisのようなこれに対する解決策を望みました、しかし残念ながらapt-cygはこれをしません。以下は私が必要としているパッケージのみをそれらの依存関係と共にダウンロードし、それらをインストールのためにターゲットにコピーすることを可能にする解決策です。これはapt-cygの出力をURIのリストに解析するbashスクリプトです。

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

その後、インストーラを使ってローカルキャッシュディレクトリからインストールすることができます。これがうまくいくためには、私は以前のcygwinパッケージのキャッシュからsetup.iniをダウンロードしたファイルがあるディレクトリにコピーする必要がありました(そうでなければインストーラは何が何なのかわかりません)。

4
wakjah

Dawid Ferenczyの答えは非常に完成していますが、ほとんどすべてのオプションを試したところ、 Chocolateyのcyg-get が最良であることがわかりました(少なくとも私が仕事に就ける唯一の選択肢)。

wgetをインストールしたいのですが、手順は次のとおりです。

choco install cyg-get

その後:

cyg-get wget
3

通常、パッケージをインストールする前に、正確な名前を知っておく必要があります。

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