Cygwin Offline-Installer?

16506
ripper234

Ich habe versucht, es mehrmals von verschiedenen Computern und Netzwerken herunterzuladen. Wenn ich versuche, es herunterzuladen, bleibt der Download in der Mitte hängen. Wo finde ich einen zuverlässigen Offline-Installer?

6
Das ist mir beim Herunterladen oft über die Jahre passiert. Die ganze Erfahrung des Herunterladens über das Installationsprogramm ist scheiße. Ob es sich um das Installationsprogramm oder um die Server oder um beides handelt, ich weiß es nicht und kümmere mich nicht darum - ich möchte nur ein einfaches Paket, um es in einem einzigen Teil herunterzuladen. ripper234 vor 14 Jahren 3
verschiedene Computer & Anschlüsse. An der Universität, zu Hause, bei der Arbeit ... ripper234 vor 14 Jahren 1
Tun Sie dies nicht, um die Gegenstimme zu widerrufen, aber Sie haben Recht, mein Gesang war unangemessen, überarbeitet. :) ripper234 vor 14 Jahren 1
Cygwin ist eine gute UNIX-artige Entwicklungsumgebung für Windows, aber für die Installation und Einrichtung unter Windows wirklich Müll. Sie sollten die Infrastruktur wirklich verbessern. hagubear vor 10 Jahren 0

4 Antworten auf die Frage

3
quack quixote

Normalerweise verwende ich die Option "In lokales Verzeichnis herunterladen" im Standard-Installationsprogramm und wähle die gewünschten Pakete in einer Basisinstallation aus. Dadurch werden die gewünschten Pakete heruntergeladen, aber nicht installiert, und ich kann das Paketverzeichnis auf eine Netzwerkfreigabe oder einen Thumbdrive kopieren. Fügen Sie diesem lokalen Verzeichnis eine Kopie der Cygwin setup.exe hinzu, und Sie haben ein Offline-Installationsprogramm.

Der Nachteil dieser Methode besteht darin, dass Ihre Offline-Pakete nicht auf dem neuesten Stand sind. Sie können das Setup jedoch immer erneut ausführen, um aktualisierte Pakete herunterzuladen und zu installieren.

3
GreenFox

Ich habe ein modifiziertes apt-cyg, das das Installationsprogramm vom lokalen Archiv aus ausführt .
Es sollte wirklich als Patch eingereicht werden, hatte aber nie die Zeit, es aufzuräumen, also hier.

Eigenschaften

  • Offline installieren
  • Spiegel einstellen
  • Cache-Paket, so dass spätere Installationen schneller sein können
  • Erzwingen Sie die Neuinstallation, auch wenn das Paket installiert ist
  • Unterstützt setup.ini / setup.bz2 /
  • Verwenden Sie einen Downloader Ihrer Wahl, um die Pakete zu erhalten (wir verwenden standardmäßig Rsync).
  • Durchsucht den Cache nach Resten und verwendet Pakete aus fehlgeschlagenen Installationen von setup.exe so weit wie möglich. (Stellen Sie einfach sicher, dass Sie den Cache-Ordner angeben, wenn Sie die Datei setup.exe installieren.)

Herunterladen

http://pastebin.com/SSTZ4ATL
oder sehen Sie den unteren Teil dieser Antwort

Verwendungszweck:

Nehmen wir an, Sie möchten Ihr lokales Repo c:/archive/cygwin/oder, /cygdrive/c/archive/cygwin/ wenn es darauf ankommt.

Lässt ein Repo einrichten, unabhängig von der Downloadgeschwindigkeit. Passen Sie den Spiegel an Ihren Wohnort an oder ist der schnellste Zugriff.

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 

Dann führe folgendes aus

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

Von nun an /cygdrive/c/archive/cygwin/sync-with-cygwin-mirror.sh
aktualisiert ein einfaches Repo Ihren lokalen Repo auf den neuesten Stand.

Richten Sie als Nächstes die Umgebung vars ein, damit setup.exe nicht verwirrt wird.

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

Richten Sie den Standardspiegel auf den für Sie schnellsten ein

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

dann probier es aus!

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

Beispielausgabe einer typischen Installationssitzung (ich habe --forcehier verwendet, da dieses Paket bereits installiert wurde. Sie benötigen es nicht. Nur um zu zeigen, wie man es benutzt, hier)

$ 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 

Beachten Sie, dass es keine lokale Kopie gab, weil keine Verbindung zum Netzwerk bestand, und stattdessen die bekannte Kopie verwendet wurde, die wir hatten. Selbst wenn wir nicht wissen, ob wir das Paket haben, wird es von apt-cyg gefunden, solange sich das Paket irgendwo im Unterverzeichnis des Caches befindet, und mithilfe des Hashes md5sum überprüfen, ob das Paket beschädigt ist oder nicht.

Hilfe:

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 

Und hier ist die Quelle, falls Pastebin nicht in Betrieb ist

Quelle

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

Versuchen Sie, ein eigenständiges Cygwin-Installationsprogramm mit pmycg zu erstellen .

0
Reverse Tarzan

Ich hatte Probleme mit apt-cyg setup.ini

Ich musste die getsetup-Methode in apt-cyg ändern, um alles zum Laufen zu bringen.

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 } 
Hier ist ein Pastebin der gesamten Datei: http://pastebin.com/ZhSXC393 Reverse Tarzan vor 11 Jahren 0