Mail Archives: cygwin/2004/08/19/17:04:33
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 's@%3a@:@g' \
-e 's@%2f@/@g' \
-e 's@\([^/]\)/[^/].*@\1@'`
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/
- Raw text -