Subject: Re: cygwin installation batch file?
From: "Mike Verstegen" <[email-masked]>
To: <[email-masked]>
Cc: <[email-masked]>
Date: Sun, 17 Sep 2006 08:27:46 -0700

First, a few apologies...
- I just joined this mailing list, so this reply is cobbled 
together using the original message from the archives.
- Though I've used cygwin for several years as an administrative 
user, I'm brand new to using cygwin in any complex ways
- I'm not at all skilled at Windows batch files (this is my first one...)

With that said, I have a similar need to what (the other) Mike needed
to do -- namely the ability to install cygwin in a "batch" mode, preferably
from
an autostart CD. My goal is to have ssh running at the completion.

In particular, the problem I tried to address was how to install something
other than the set of packages that setup.exe chooses by default.

After searching the archives, I found two suggested approaches:

- Igor suggested that one could have one dummy package in the "Base" 
category and make it depend on everything you want. 
http://sourceware.org/ml/cygwin-apps/2005-05/msg00244.html

- Fergus' approach was to create a "template" installed.db listing 
only those packages you want, with the version numbers of each set to zero. 
For example
rxvt rxvt-0.tar.bz2 0
tar tar-0.tar.bz2 0
Setup.exe will find this file and update each listed package to the 
current (non-zero) version.
http://marc.theaimsgroup.com/?l=cygwin&m=110538795118459&w=2

Since making the dummy package in setup.ini would require some magic 
to edit setup.ini (downloaded fresh with each execution of setup.exe??) 
on the fly that I couldn't quite figure out how to do, I chose the latter 
approach.

With the goal of getting sshd completely up and running, I used the 
procedure described at http://pigtail.net/LRP/printsrv/cygwin-sshd.html 
and attempted to turn it in to a batch file.

One tool that I could not find in cygwin was a way to set the Windows 
System Environment variables. For ssh it looks like both PATH and CYGWIN 
need to be updated/created. To get this done, I used setenv.exe 
from http://barnyard.syr.edu/~vefatica/ which looks quite old, is only 
available as an executable (ouch!), but solved the immediate problem. 
Suggestions welcome on how to do this better.

The following batch file is intended (haven't actually done the CD part yet)
to be put on a CD containing the following files:
- cygwin_inst.bat -- the following file
- setup.exe -- the cygwin set up program
- setenv.exe -- the program described previously to set environment
variables
- to_be_installed.db -- the list of packages desired, with the versions set
to zero

=========== begin batch file =============
rem -- Batch install file for cygwin
rem -- MDV 9/16/06
rem
rem -- To set system environment variables (PATH, CYGWIN), this script
depends on 
rem -- setenv.exe from http://barnyard.syr.edu/%7Evefatica
rem -- which is used instead of Microsoft setx (which is in a Windows
resource pack)
rem -- because of possible MS licensing restrictions on copying to an
install CD.
rem -- There may be a better way to do this!

rem -- CYG_MIRROR is the URL of a public or private server from where cygwin
can be downloaded.
rem -- This particular site works, but necessarily the best one... to do...
rem -- the http:// is important

set CYG_MIRROR="http://www.signal42.com"

mkdir c:\cygwin

rem -- Assume that setup.exe and setenv.exe are in the working directory on
the CD when started
rem -- Copy executables from CD to disk

copy setup.exe c:\cygwin
copy setenv.exe c:\cygwin

rem -- Now put a hand-crafted installed.db in cygwin's /etc/setup
rem -- This installed.db has the list of packages desired with the revision
level set to zero
rem --   as suggested by Fergus in
http://marc.theaimsgroup.com/?l=cygwin&m=110538795118459&w=2
rem -- For example
rem --   openssh openssh-0.tar.bz2 0

if exist c:\cygwin\etc\setup\installed.db (
	echo "cygwin already installed"
	goto end
) else (
	mkdir c:\cygwin\etc
	mkdir c:\cygwin\etc\setup
	copy to_be_installed.db c:\cygwin\etc\setup\installed.db
)

rem -- Instead of "goto end", above, do something more appropriate
rem -- Future work: compare the list of packages in our target
to_be_installed.db to the list of 
rem --   packages already in /etc/setup/installed.db to make sure that all
the packages that we want
rem --   are included. If not, merge them in with the rev level set to zero.

rem --   #UNTESTED bash code 
rem --   CURRENT_INSTALLED=/etc/setup/installed.db
rem --   TO_BE_INSTALLED=to_be_installed.db
rem --   cat $TO_BE_INSTALLED | while read
rem --   do
rem --   if grep $1 $CURRENT_INSTALLED
rem --   then
rem --      echo "Package " $1 " already included"
rem --   else
rem --       echo $0 >> $CURRENT_INSTALLED
rem --       echo "Added: " $0
rem --    fi
rem --    DOES INSTALLED.DB NEED TO BE SORTED?
` 
c:
cd \cygwin

rem -- Now we can finally run setup. Though this will show a status window,
no user interaction
rem -- is required.

setup --quiet-mode --site %CYG_MIRROR% --no-shortcuts --no-desktop

rem -- Now set the Windows System environment variable PATH and CYGWIN as
noted in
rem -- http://pigtail.net/LRP/printsrv/cygwin-sshd.html

setenv -m PATH "%PATH%;\cygwin\bin"
setenv -m CYGWIN "ntsec tty"

rem -- Add our new cygwin tools to the path for the remainder of this shell
set PATH=%PATH%;\cygwin\bin;\cygwin\usr\bin

rem -- In the following lines, use double quotes to insure that Windows will
not parse the 
rem --   file redirection > symbols (Windows found the > inside single
quotes)

bash.exe -c "/usr/bin/mkpasswd --local > /etc/passwd"
bash.exe -c "/usr/bin/mkgroup --local > /etc/group"

rem -- Suggestion to include "tty" in CYGWIN environment variable at
rem --   http://pigtail.net/LRP/printsrv/tty.html
rem -- How does the --cygwin option interact with the setenv CYGWIN above?

bash.exe -c "/usr/bin/ssh-host-config --yes --cygwin NTSEC"

net start sshd

:end
rem -- cleanup
rm /setenv.exe
==============  end of batch file =================

Well that's my attempt. It seems to work (I'm not sure I could have ever
tested this without Vmware...). Comments welcome.

Mike

________________________________________
.	From: Mike <mikee at mikee dot ath dot cx>
.	To: cygwin at cygwin dot com
.	Date: Tue, 12 Sep 2006 00:55:55 +0000 (UTC)
.	Subject: cygwin installation batch file?
<hr size=2 width="100%" align=center> 
I have used cygwin for many years and now am in a situation
where I need/want to install it on 30 or so windows xp boxes.
Does someone have a batch file I can adapt to my situation?
I've started on one at work (no access to it at the moment)
that attempts to copy setup.exe from a local mirror I've
created, c:, mkdir \cygwin, cd \cygwin, copy \\host\cygwin\setup.exe,
and then I get into a problem trying to get setup.exe to run.

The command (at work, so I'm going from memory) I'm trying to use
is 'setup.exe --download --site http://host/cygwin --no-shortcuts
--no-desktop perl rsync cvs ssh cygserv'. I am following up the
installation with cd bin, bash.exe --login -i -c '/usr/bin/mkpasswd
--local > /etc/passwd', bash --login -i -c '/usr/bin/mkgroup
--local > /etc/group', bash ... wait, this is confusing...

----------------------------------
c:
mkdir \cygwin
cd \cygwin
copy \\host\cygwin\setup.exe
setup --download --site http://host/cygwin --no-shortcuts \
               --no-desktop perl rsync cvs ssh cygserv
bash.exe --login -i -c '/usr/bin/mkpasswd --local > /etc/passwd
bash.exe --login -i -c '/usr/bin/mkgroup --local > /etc/group
bash.exe --login -i -c '/usr/bin/ssh-keygen'
bash.exe --login -i -c '/usr/bin/ssh-host-config --yes'
net start sshd
----------------------------------

That's what I've tried so far (from memory). Does someone have
a script that does the above and works? :)

Mike

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