No one expressed a specific interest in my cygwin-without-autoit schemes,
but I guess I'll let you all know how it worked out anyway :)

First here's a summary:

  1. run setup.exe interactivly
    a) select install from local directory
    b) select next
    c) select cancel
    d) copy the file structure you find in $CYGWIN_ROOT to a safe location.

  2. run setup.exe interactivly
    a) select download from network
    b) follow the instructions in the GUI until you
       have download the files you want to a local directory
    c) in a subdirectory of the download directory find setup.ini
    e) edit your setup.ini, replacing any category name that doesn't have
       "Base" in it with the category name "Base"

Now you can make a batch script(note:2 below) to work with Unattended, that copies 
the saved file structure from summary item 1.d, to your target root directory, 
changing /etc/setup/last-cache to point to the repository in your Unattended %Z% drive,
then run setup.exe with the -q flag and using -R to point it at your target
root directory.

Now an explanation:

My procedure is still a little crufty, and it relies on some undocumented
behavior of Cygwin's setup.exe installation application, but I still prefer
it to using point-n-click-o-mation.  To recap you can
run setup.exe -q for a silent install.  Use -R to specify Cygwin's soon to
be root directory.  Now the weird parts . . . By default cygwin wants to 
download from the internet and install a basic set of utilities; worse it 
doesn't have a default mirror selected, so you can't run setup.exe at all 
without some tricks. Here is the procedure I followed to allow an unattended
install with no AutoIt:

First I used setup.exe to download the packages I was interested in, as 
described on the Unattended web site.  Whatever you choose as a source of
files for setup.exe by default it will only install packages from the Base
Category -- even in silent mode.  At the same time, there is no command line
option to control which packages get installed.  This is an obvious problem,
how do we trick it?  It knows what category a packages belongs by looking 
in a file named setup.ini(3), which it keeps in its file cache.  So that 
setup.exe will think everything is part of the Base category you can just 
search setup.ini for lines like this(4):

    category: Editors

and make them like this:

    category: Base

Now before we run setup.exe, we still need a way to tell it to install from a
local directory.  As you run setup.exe it starts putting files into your Cygwin-
root-to-be(1).  If you cancel and start up again, it remembers your previous 
choices, made through the GUI, by saving them in files in /etc/setup and by 
reading events out of /var/log/setup.log!  The all important decision about where
to install from is read from a line in the log like:

    2004/02/02 08:29:40 source: network install

I haven't experimented enough to know what a minimal log file would look like, so
I just used one I created by running setup.exe to the point where I select an 
install from a local directory, click next, then cancel.  I then retrieve the 
/var/log/setup.log file, and save it for later use.

If /etc/setup/last-action contains the string "Install" cygwin will be in install
mode (that's actually it'd default anyway), and it reads /etc/setup/last-cache
to decide where to store downloaded files.  Thus, to pass those defaults to
setup.exe when I run from Unattended I just pre-populate the target root directory
with an /etc/setup/ with the right contents.

(1) After a partial run of setup.exe in interactive mode my cygwin root contains
the following files:


(2) My cygwin.bat looks like this:
     set CYGWIN_ROOT=C:\cygwin

     todo.pl "%Z%\packages\cygwin\setup.exe -q -R %CYGWIN_ROOT%"
     todo.pl "xcopy /S %Z%\packages\cygwin\skel %CYGWIN_ROOT%\ "

(3) After downloading from http://mirrors.kernel.org/ using cygwin/pkgs as a file cache
setup.exe created the following file structure in ./pkgs:


    ... release has lots of subdirectories containing packages ...


(4) This is what entries from setup.ini look like:

    @ vim
    sdesc: "Vi IMproved - enhanced vi editor"
    category: Base
    requires: cygwin terminfo libncurses7 libiconv2
    version: 6.2.098-1
    install: release/vim/vim-6.2.098-1.tar.bz2 2967923 33bf949dc538038f63af0c87f5bf37d6
    source: release/vim/vim-6.2.098-1-src.tar.bz2 4715007 
    version: 6.2-3
    install: release/vim/vim-6.2-3.tar.bz2 2216868 de773831f76bc255f2ef10285f0b50d5
    source: release/vim/vim-6.2-3-src.tar.bz2 3284103 fb2523b96ffc7a5c1214ad9929f9a59a

    @ w32api
    sdesc: "Win32 API header and library import files"
    category: Libs
    version: 2.4-1
    install: release/w32api/w32api-2.4-1.tar.bz2 960732 
    source: release/w32api/w32api-2.4-1-src.tar.bz2 808115 
    version: 2.3-1
    install: release/w32api/w32api-2.3-1.tar.bz2 908529 
    source: release/w32api/w32api-2.3-1-src.tar.bz2 760509 

SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
unattended-info mailing list

Reply via email to