Max Bowsher <maxb <at> ukf.net> writes: > > Christopher Cobb wrote: > > I've found snipets of information, such as this: > > > > http://sources.redhat.com/ml/cygwin-apps/2003-03/msg00526.html > > > > What I would like is an example of how to use setup.exe from the command > > line > > (e.g., via ssh) to install a package remotely. > > > > I've tried this: > > > > setup -D -s ftp://mirrors.kernel.org -R $CYGWIN_HOME -q -n wget > > > > which does not produce any errors, but it also doesn't seem to download or > > install the package. > > setup isn't really designed for use from the command line. It doesn't take > package names as arguments, for example. You could, I suppose, munge > /etc/setup/installed.db to fool setup into thinking that a really old (e.g. > version 0) version of a package is installed, so that it would updated - > it's a messy way to do it, but there is no better way. > > Max.
Thanks Max for the idea. Here is a quick hack/shell script which worked on the (small handful) of packages that I tried with it. --- begin installCygwinPackage.sh --- #!/bin/sh # # This script/hack allows you to install a cygwin package from the command line. # # Usage: installCygwinPackage.sh <package1> ... <packageN> # # It assumes that packages are at /packages and that setup.exe is somewhere # in the path (like /usr/local/bin). # # It works by inserting fake package entries with a zeroed out versions # into installed.db, then running setup.exe. # # Unfortunately, setup.exe insists on popping up a progress window # on the local system. # # Thanks to Max Bowsher for the idea. # scriptName=`basename $0` [ "$#" = "0" ] && { echo>&2 "$scriptName: No packages specified." echo>&2 "Usage: $scriptName <packageName> ... " exit 1 } PACKAGES_DIR=/packages # adjust this for your installation INSTALL_SITE_DIR=$PACKAGES_DIR/`(cd $PACKAGES_DIR && ls -1t | head -1)` # most recently modified install dir INSTALL_SITE=`echo $INSTALL_SITE_DIR | sed -e '[EMAIL PROTECTED]@:@g' \ -e '[EMAIL PROTECTED]@/@g' \ -e '[EMAIL PROTECTED]([^/]\)/[^/[EMAIL PROTECTED]@'` SETUP_INI=$INSTALL_SITE_DIR/setup.ini INSTALLED_DB=/etc/setup/installed.db # backup installed.db INSTALLED_DB_BACKUP=$INSTALLED_DB.`date +%F_%H_%M_%S` cp $INSTALLED_DB $INSTALLED_DB_BACKUP # add zero-version packages to $INSTALLED_DB for pkgName do grep -q "^$pkgName " $INSTALLED_DB && { echo>&2 $scriptName: $pkgName is already installed continue; } pkgFileName=` awk < $SETUP_INI ' /@ / { pkgName=$2 } /version: / && pkg == pkgName { pkgVer=$2 } /install: / && pkg == pkgName { num=split($2,arrFile,"/") pkgFile=arrFile[num] hyphenOffset=index(pkgFile,"-") if (hyphenOffset != 0) { pkgPrefix=substr(pkgFile, 0, hyphenOffset) verLength=index(pkgFile,".tar.bz2") - hyphenOffset ver=substr(pkgFile, hyphenOffset+1, verLength - 1) pkgSuffix=substr(pkgFile, hyphenOffset + verLength) pkgFile=pkgPrefix "" gensub(/[0-9]/,"0","g",ver) "" pkgSuffix print pkgFile pkgPrinted="true" exit } } END{ if (pkgPrinted != "true") print pkgFile } ' pkg=$pkgName ` echo $pkgName $pkgFileName 0 | cat $INSTALLED_DB - | sort -f > $INSTALLED_DB.tmp mv $INSTALLED_DB.tmp $INSTALLED_DB done diff -q $INSTALLED_DB $INSTALLED_DB_BACKUP > /dev/null || setup -D -L -s $INSTALL_SITE -R `cygpath -m /` -q -n --- end installCygwinPackage.sh --- -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/