Автономный установщик Cygwin?

16284
ripper234

Я пытался загрузить его несколько раз с нескольких разных компьютеров и сетей. Когда я пытаюсь скачать его, загрузка застревает на полпути, хотя. Где я могу найти надежного автономного установщика?

6
Это случалось со мной много раз за эти годы при загрузке. Весь опыт загрузки его через установщик отстой. Будь то установщик, или серверы, или и то, и другое ... Я не знаю и не волнуюсь - я просто хочу простой пакет, чтобы загрузить все это одним куском. ripper234 14 лет назад 3
разные компьютеры и соединения. В университете, дома, на работе ... ripper234 14 лет назад 1
Не делая этого, чтобы отменить понижающее голосование, но вы правы, моя напыщенная речь была неуместной, исправленной. :) ripper234 14 лет назад 1
Cygwin - хорошая UNIX-подобная среда разработки для Windows, но на самом деле ерунда для установки и настройки в Windows. Они должны действительно улучшить инфраструктуру. hagubear 9 лет назад 0

4 ответа на вопрос

3
quack quixote

Я обычно использую опцию «загрузить в локальный каталог» в стандартном установщике и выбираю нужные пакеты в базовой установке. Это загружает пакеты, которые я хочу, но не устанавливаю, и я могу скопировать этот каталог пакетов в сетевую папку или флэш-накопитель. Добавьте копию Cygwin setup.exe в этот локальный каталог, и вы получите автономный установщик.

Недостатком этого метода является то, что ваши автономные пакеты не обновляются. Но вы всегда можете перезапустить программу установки, чтобы загрузить и установить обновленные пакеты.

3
GreenFox

У меня есть модифицированный apt-cyg, который запускает установщик из локального архива.
Это действительно должно быть представлено как патч, но никогда не было времени, чтобы очистить его, так что здесь.

Характеристики

  • Автономная установка
  • Установить зеркало
  • Пакет кэша, поэтому последующие установки могут быть быстрее
  • Принудительная переустановка, даже если пакет установлен
  • Поддерживает setup.ini / setup.bz2 /
  • Используйте загрузчик по вашему выбору для получения пакетов (по умолчанию мы используем rsync)
  • Сканирует кеш для остатков, максимально использует пакеты из неудачных установок setup.exe. (просто убедитесь, что вы указали папку кеша при установке из setup.exe)

Скачать

http://pastebin.com/SSTZ4ATL
или посмотрите нижнюю часть этого ответа

Использование:

Допустим, вы хотите, чтобы ваш локальный репо c:/archive/cygwin/или /cygdrive/c/archive/cygwin/ если это имеет значение.

Позволяет настроить репо, независимо от скорости загрузки. Отрегулируйте зеркало в зависимости от того, где вы живете, или это самый быстрый доступ.

cat > /cygdrive/c/archive/cygwin/sync-with-cygwin-mirror.sh <<"EOF" #!/bin/bash # ### # Choose mirror that is on http://www.cygwin.com/mirrors.html # # "ftp://ftp.jaist.ac.jp/pub/cygwin/" # "ftp://ftp.sunet.se/pub/lang/cygwin/" # "http://mirrors.kernel.org/sourceware/cygwin/" # # Old # "http://sources.redhat.com/cygwin/mirrors.lst" ### rsync --partial -va rsync://ftp.jaist.ac.jp/pub/cygwin/release/ /cygdrive/c/archive/cygwin/release/ # #/cygdrive/c/archive/cygwin EOF 

Затем запустите следующее

chmod +x /cygdrive/c/archive/cygwin/sync-with-cygwin-mirror.sh 

С этого /cygdrive/c/archive/cygwin/sync-with-cygwin-mirror.sh
момента простое будет обновлять ваш локальный репо до самых последних и лучших.

Затем настройте параметры среды, чтобы setup.exe не запутался.

cat > /etc/setup/last-cache <<"EOF" C:\archive\cygwin EOF 

Настройте зеркало по умолчанию на то, что быстрее для вас

cat > /etc/setup/last-mirror <<"EOF" ftp://ftp.iij.ad.jp/pub/cygwin EOF 

тогда попробуй!

apt-cyg find <pacakge name> apt-cyg install <package name> 

Пример вывода типичного сеанса установки (я использовал --forceздесь, поскольку этот пакет уже установлен. Вам это не нужно. Просто для демонстрации того, как использовать, здесь)

$ apt-cyg install man --force Working directory is /cygdrive/c/archive/cygwin Mirror is ftp://ftp.iij.ad.jp/pub/cygwin We are using the cache as package source.  Installing man Found package man DBG:pwd=[/cygdrive/c/archive/cygwin]pkg=[man]file=[man-1.6f-1.tar.bz2]mirror=[ftp://ftp.iij.ad.jp/pub/cygwin]install=[release/man/ man-1.6f-1.tar.bz2] DBG:169:pwd=[/cygdrive/c/archive/cygwin/release/man]pkg=[man]file=[man-1.6f-1.tar.bz2]mirror=[ftp://ftp.iij.ad.jp/pub/cygwin]insta ll=[release/man/man-1.6f-1.tar.bz2] Checking md5hash [9a34daa8d8dfbf9222035b4f1952ab1d] == [9a34daa8d8dfbf9222035b4f1952ab1d] Unpacking... Package man requires the following packages, installing: bash libgcc1 bzip2 coreutils gawk groff gzip less cygwin Package bash is already installed, skipping Package libgcc1 is already installed, skipping Package bzip2 is already installed, skipping Package coreutils is already installed, skipping Package gawk is already installed, skipping Package groff is already installed, skipping Package gzip is already installed, skipping Package less is already installed, skipping Package cygwin is already installed, skipping Package man installed 

Обратите внимание, что, поскольку у нас уже есть локальная копия, она не подключалась к сети, а вместо этого использовала известную копию, которая у нас была. Даже если мы не знаем, есть ли у нас пакет, пока пакет находится где-то в подкаталоге кеша, apt-cyg найдет его и использует хеш md5sum для проверки, сломан пакет или нет.

Помогите:

apt-cyg: Installs and removes Cygwin packages. "apt-cyg install <package names>" to install packages "apt-cyg remove <package names>" to remove packages "apt-cyg update" to update setup.ini "apt-cyg show" to show installed packages "apt-cyg find <patterns>" to find packages matching patterns "apt-cyg describe <patterns>" to describe packages matching patterns "apt-cyg packageof <commands or files>" to locate parent packages Options: --mirror, -m <url> : set mirror --cache, -c <dir> : set cache --file, -f <file> : read package names from file --noupdate, -u : don't update setup.ini from mirror --localdiskcache : Use local cache as source, if available. Used for offline instalation. --force : Force re-installing package. USE WITH CAUTION AND CARE! --ForceUpdate : Force re-initalizeing setup.ini. --help --version --find-setup-exe :experemental 

И вот источник, на случай, если пастина не работает

источник

#!/bin/bash # apt-cyg: install tool for cygwin similar to debian apt-get #  # Copyright (C) 2005-9, Stephen Jungels # Modified by GreenFox #  # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. #  # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. #  # (http://www.fsf.org/licensing/licenses/gpl.html)  # this script requires some packages  WGET=`which wget 2> /dev/null` BZIP2=`which bzip2 2> /dev/null` TAR=`which tar 2> /dev/null` GAWK=`which awk 2> /dev/null` if test "-$WGET-" = "--" || test "-$BZIP2-" = "--" || test "-$TAR-" = "--" \ || test "-$GAWK-" = "--" then echo You must install wget, tar, gawk and bzip2 to use apt-cyg. exit 1 fi   function usage() { echo apt-cyg: Installs and removes Cygwin packages. echo " \"apt-cyg install <package names>\" to install packages" echo " \"apt-cyg remove <package names>\" to remove packages" echo " \"apt-cyg update\" to update setup.ini" echo " \"apt-cyg show\" to show installed packages" echo " \"apt-cyg find <patterns>\" to find packages matching patterns" echo " \"apt-cyg describe <patterns>\" to describe packages matching patterns" echo " \"apt-cyg packageof <commands or files>\" to locate parent packages" echo "Options:" echo " --mirror, -m <url> : set mirror" echo " --cache, -c <dir> : set cache" echo " --file, -f <file> : read package names from file" echo " --noupdate, -u : don't update setup.ini from mirror" echo " --localdiskcache : Use local cache as source, if available. Used for offline instalation." echo " --force : Force re-installing package. USE WITH CAUTION AND CARE!" echo " --ForceUpdate : Force re-initalizeing setup.ini. " echo " --help" echo " --version" echo " --find-setup-exe :experemental" }    function version() { echo "apt-cyg version 0.58 custombuild" echo "Written by Stephen Jungels" echo "Modified by GreenFox" echo "Copyright (c) 2005-2012. Released under the GPL." }  function findsetupexe() { echo "Attempting to load setup.exe, or loading from network..." [ -e "$/setup.exe" ] && echo "Try using [ $/setup.exe ]" }  function findworkspace() { # default working directory and mirror  mirror="ftp://mirror.mcs.anl.gov/pub/cygwin" mirror="ftp://ftp.iij.ad.jp/pub/cygwin" cache="/cygdrive/c/archive/cygwin" # Note: path should be in unix format.  # work wherever setup worked last, if possible  if test -e /etc/setup/last-cache then tmp="`head -1 /etc/setup/last-cache`" cache="`cygpath -au "$tmp"`" fi  if test -e /etc/setup/last-mirror then mirror="`head -1 /etc/setup/last-mirror`" fi if test "$localdiskcache" == "1" then echo Working directory is $cache echo Mirror is $mirror echo We are using the cache as package source. cd "$cache" else # Old method that uses network. Left for compatibility purpose. mirrordir="`echo "$mirror" | sed -e "s/:/%3a/g" -e "s:/:%2f:g"`" echo Working directory is $cache echo Mirror is $mirror mkdir -p "$cache/$mirrordir" cd "$cache/$mirrordir" fi }   function getsetup()  { if test "$noscripts" == "0" -a "$noupdate" == "0" -a "$localdiskcache" == "0" then touch "setup.ini" mv "setup.ini" "setup.ini-save" wget -N "$mirror/setup.bz2" if test -e "setup.bz2" && test $? -eq 0 then bunzip2 "setup.bz2" mv "setup" "setup.ini" echo "Updated setup.ini" else wget -N "$mirror/setup.ini" if test -e setup.ini && test $? -eq 0 then echo "Updated setup.ini" else mv "setup.ini-save" "setup.ini" echo "Error updating setup.ini, reverting" fi fi fi }   function checkpackages() { if test "-$packages-" = "--" then echo Nothing to do, exiting exit 0 fi } function apt-cyg-func-install(){ for pkg in $packages do already="`grep -c "^$pkg " /etc/setup/installed.db`" if test $already -ge 1 -a "$forceinstall" == "0" then echo "Package $pkg is already installed, skipping" continue fi echo "" echo Installing $pkg # look for package and save desc file mkdir -p "release/$pkg" cat setup.ini | awk > "release/$pkg/desc" -v package="$pkg" \ 'BEGIN } \ END'   desc=`cat "release/$pkg/desc"` if test "-$desc-" = "-Package not found-" then echo Package $pkg not found or ambiguous name, exiting rm -r "release/$pkg" exit 1 fi echo Found package $pkg  # download and unpack the bz2 file  # pick the latest version, which comes first install=`cat "release/$pkg/desc" | awk '/^install: / { print $2; exit }'`   if test "-$install-" = "--" then echo "Could not find \"install\" in package description: obsolete package?" echo "Debug output of [$(realpath "release/$pkg/desc")]" echo "-----------------------------------------------------" cat "release/$pkg/desc" echo "-----------------------------------------------------" exit 1 fi file=`basename $install` if test "$localdiskcache" == "1" then ############################################ # This section needs refactoring. TODO ############################################ echo "DBG:pwd=[`pwd`]pkg=[$pkg]file=[$file]mirror=[$mirror]install=[$install]" cd "$cache" cd "release/$pkg" if ! test -e "$file" then # Scan dir for matching name echo "Scanning cache for leftover..." local leftover_file="`find "$cache" -name "$file" |head -n 1`"; if test "$leftover_file" == "" ; then # echo "Package $pkg missing from cache. Downloading file from mirror $mirror." wget -nc $mirror/$install # The mirror might not have the file.TODO. else echo "Trying to use [$leftover_file] as alternative to [$file]" file="$leftover_file"; fi fi echo "DBG:169:pwd=[`pwd`]pkg=[$pkg]file=[$file]mirror=[$mirror]install=[$install]"  digest="`cat "desc" | awk '/^install: / { print $4; exit }'`"; digactual="`md5sum "$file" | awk ''`"; echo "Checking md5hash [$digest] == [$digactual] " if test "$digest" != "$digactual" ; then echo "Package $pkg in cache data is broken, partial, or empty. Downloading file from mirror." wget -c $mirror/$install fi digactual=`md5sum $file | awk ''` ############################################ else cd "release/$pkg" wget -nc $mirror/$install digest=`cat "desc" | awk '/^install: / { print $4; exit }'`  digactual=`md5sum $file | awk ''` fi  if ! test $digest = $digactual then echo "MD5 sum did not match, exiting" exit 1 fi  echo "Unpacking..." ##### # Dumps to root dir. We need to add code for chroot creating options #### cat "$file" | bunzip2 | tar > "/etc/setup/$pkg.lst" xvf - -C / gzip -f "/etc/setup/$pkg.lst" cd ../..   # update the package database  cat /etc/setup/installed.db | awk > /tmp/awk.$$ -v pkg="$pkg" -v bz=$file \ '; print $0} \ END' mv /etc/setup/installed.db /etc/setup/installed.db-save mv /tmp/awk.$$ /etc/setup/installed.db   # recursively install required packages  echo > /tmp/awk.$$ '/^requires: / ' requires=`cat "release/$pkg/desc" | awk -f /tmp/awk.$$`  warn=0 if ! test "-$requires-" = "--" then echo Package $pkg requires the following packages, installing: echo $requires for package in $requires do already=`grep -c "^$package " /etc/setup/installed.db` if test $already -ge 1 then echo Package $package is already installed, skipping continue fi apt-cyg --noscripts install $package if ! test $? = 0 ; then warn=1; fi done fi if ! test $warn = 0 then echo "Warning: some required packages did not install, continuing" fi  # run all postinstall scripts  pis=`ls "/etc/postinstall/*.sh" 2>/dev/null | wc -l` if test $pis -gt 0 && ! test $noscripts -eq 1 then echo Running postinstall scripts for script in "/etc/postinstall/*.sh" do $script mv $script $script.done done fi  echo Package $pkg installed done  }  function main(){ # process options local noscripts=0 local noupdate=0 local file="" local dofile=0 local command="" local filepackages="" local packages="" local localdiskcache=1 local forceinstall=0  # use vars = [ noscripts noupdate localdiskcache forceinstall file dofile command packages ] while test $# -gt 0 do case "$1" in --mirror|-m) echo "$2" > /etc/setup/last-mirror shift ; shift ;; --cache|-c) cygpath -aw "$2" > /etc/setup/last-cache shift ; shift ;; --noscripts) noscripts=1 shift ;; --noupdate|-u) noupdate=1 shift ;; --ForceUpdate) noupdate=0 localdiskcache=0 shift ;; --localdiskcache) localdiskcache=1 shift ;; --force) forceinstall=1 shift ;; --help) usage exit 0 ;; --version) version exit 0 ;; --find-setup-exe) findsetupexe exit 0 ;; --file|-f) if ! test "-$2-" = "--" then file="$2" dofile=1 shift else echo 1>&2 No file name provided, ignoring $1 fi shift ;; update|show|find|describe|packageof|install|remove) if test "-$command-" = "--" then command=$1 else packages="$packages $1" fi shift ;; *) packages="$packages $1" shift ;; esac done ###################################################### # Done reading the options. Now process accordingly ###################################################### if test $dofile = 1 then if test -f "$file" then filepackages="$filepackages `cat "$file" | awk ''`" else echo File $file not found, skipping fi packages="$packages $filepackages" fi  case "$command" in update) findworkspace getsetup ;; show) echo 1>&2 The following packages are installed: cat /etc/setup/installed.db | awk '/[^ ]+ [^ ]+ 0/ ' ;; find) checkpackages findworkspace getsetup for pkg in $packages do echo "" echo Searching for installed packages matching $pkg: awk '/[^ ]+ [^ ]+ 0/ ' query="$pkg" /etc/setup/installed.db echo "" echo Searching for installable packages matching $pkg: cat setup.ini | awk -v query="$pkg" \ 'BEGIN }' done ;; describe) checkpackages findworkspace getsetup for pkg in $packages do echo "" cat setup.ini | awk -v query="$pkg" \ 'BEGIN }' done ;; packageof) checkpackages for pkg in $packages do key=`which "$pkg" 2>/dev/null | sed "s:^/::"` if test "-$key-" = "--" then key="$pkg" fi for manifest in "/etc/setup/*.lst.gz" do found=`cat "$manifest" | gzip -d | grep -c "$key"` if test $found -gt 0 then package=`echo "$manifest" | sed -e "s:/etc/setup/::" -e "s/.lst.gz//"` echo Found $key in the package $package fi done done ;; install) checkpackages findworkspace getsetup apt-cyg-func-install ;; remove) checkpackages for pkg in $packages do already=`grep -c "^$pkg " /etc/setup/installed.db` if test $already = 0 then echo Package $pkg is not installed, skipping continue fi dontremove="cygwin coreutils gawk bzip2 tar wget bash" for req in $dontremove do if test "-$pkg-" = "-$req-" then echo apt-cyg cannot remove package $pkg, exiting exit 1 fi done if ! test -e "/etc/setup/$pkg.lst.gz" then echo Package manifest missing, cannot remove $pkg. Exiting exit 1 fi echo Removing $pkg # run preremove scripts if test -e "/etc/preremove/$pkg.sh" then "/etc/preremove/$pkg.sh" rm "/etc/preremove/$pkg.sh" fi cat "/etc/setup/$pkg.lst.gz" | gzip -d | awk '/[^\/]$/ ' | sh rm "/etc/setup/$pkg.lst.gz" rm -f /etc/postinstall/$pkg.sh.done cat /etc/setup/installed.db | awk > /tmp/awk.$$ -v pkg="$pkg" '' mv /etc/setup/installed.db /etc/setup/installed.db-save mv /tmp/awk.$$ /etc/setup/installed.db echo Package $pkg removed done ;; *) usage ;; esac  } main "$@" 
0
RWP

Попробуйте создать автономный установщик Cygwin с помощью pmycg .

0
Reverse Tarzan

I was having some trouble with apt-cyg setup.ini

I had to change the getsetup method in apt-cyg in order to get everything working.

function getsetup() { if test "$noscripts" == "0" -a "$noupdate" == "0" then touch setup.ini mv setup.ini setup.ini-save wget -N $mirror/setup.bz2 if test -e setup.bz2 && test $? -eq 0 then bunzip2 setup.bz2 mv setup setup.ini echo Updated setup.ini else if [ `arch` == "x86_64" ] then echo using x86_64 arch=x86_64 else echo using x86 arch=x86 fi wget -N $mirror/$arch/setup.ini if test -e setup.ini && test $? -eq 0 then echo Updated setup.ini else mv setup.ini-save setup.ini echo Error updating setup.ini, reverting fi fi fi } 
Вот тапка всего файла: http://pastebin.com/ZhSXC393 Reverse Tarzan 10 лет назад 0