[ANN] Stable Squeak 3.7 Universe

Lex Spoon lex at cc.gatech.edu
Wed Feb 2 00:53:55 UTC 2005


=?ISO-8859-1?Q?st=E9phane_ducasse?= <ducasse at iam.unibe.ch> wrote:
> did you publish the script you used to create these images?


1. Find a student.
2. Give them some real work.
3. Watch them procrastinate away until such an image pops out...


Seriously, I've now posted some info on where it all came from.  Info
appended as well.

-Lex


MAKING OF THE STABLE 3.7 UNIVERSE

The universe itself was developed roughly as follows:

1. Import SqueakMap into a universe named "Squeak 3.7".
2. Announce that a stable universe is being built.
3. Wait 2 weeks for people to hack away at it.
4. Close the universe off from public edits.  Only the release manager
can edit it after this point.
5. Try loading all the packages, and remove ones that fail a basic smoke
test.  (This was MISERABLE.  It should get better in the future,
though.)
6. Scan through the packages and clean up names adn description.  For
example, we don't need "Refactoring Browser for 3.7", and can instead
call it "Refactoring Browser".
7. Fix up dependencies.  These all had to be added by hand.
8. Clean up a few packages, that do not load nicely.  (I won't do this
in the future!)
9. Programatically remove all old versions of packages.  There is no
point to them in a stable universe.
10. Clear out the universetmp directory, and create a new one by
downloading all the packages that have survived to this point.
11. Upload all the package files to a single directory on the universes
server.
12. Edit all package entries to point to the universes server, instead
of where the original package was. 

2 weeks is short for creating a truly low-bug universe, but I didn't
expect people to really spend a lot of time on this first stable
universe.  In the future, we should think about driving it from the bug
tracker: continue until the number of severe bugs is reasonably low.

Item 8 is *much* easier if the bug tracker is helping.  I would like to
get to the point where failure to load is a true surprise and is worth
filing a bug about.  Right now, nobody is surprised when a package
doesn't load, and they don't seem to complain, and thus the situation
never gets remedied.

Items 11 and 12 are optional, but they seem to make a big difference in
practice.  It's bad to pull from 20 different web sites and ftp sites,
because at any given time ,it is likely at least one of them will be
down.  With the current solution, 

Item 5 truly sucked.  Downloading all those packages, waiting for http
servers to time out, dealing with the errors (either fixing the error
and uploading a new version, fixing a dependency, or removing the
package from the universe), then trying to continue where i left off....
 I think it will be better now that the worst offenders have already
been removed.


The image itself was developed as follows:
1. Start with a 3.7 basic image.
2. Load universes.
3. Set Stable 3.7 as the current system universe.
4. Open a universes browser and "update list".
5. Remove SqueakMap. It's in the universes browser, and it is confusing to have two package loaders visible to newbies.
6. Install the "Universes", "Compiler", and "AppRegistry" packages. 
These are pre-installed packages that also have enttries in the universe, and 
you have to do this in order for the universes tools to realize they 
have already been loaded.
7. Write a readme window.


The zip file includes the image plus a fully populated universetmp
cache.


USEFUL CODE SNIPPETS

I was not careful to keep all these around, but here are a few useful
ones.


univ _ UUniverse systemUniverse.

"delete all downloaded files that are no longer needed"
dir _ FileDirectory default directoryNamed: 'universetmp'.
univ packages do: [ :p | (dir isAFileNamed: p url path last) ifFalse: [
p inspect ] ].
extraneous _ dir entries select: [ :ent | univ packages noneSatisfy: [
:p | p url path last = ent name ] ].
extraneous do: [ :ent | dir deleteFileNamed: ent name ].

"update all entries to point to the universes server instead of their
original location"
client _ UUniverseClient new.
univ packages select: [ :p | p url scheme ~= 'http' ]
univ packages do: [ :p |
	newp _ p deepCopy.
	newcomponents _ { 'universes' . 'repositories' . 'stable-3.7' . p url
path last }.
	newp url: (HttpUrl schemeName: 'http' authority:
'universes.dnsalias.net:8888' path: newcomponents query: nil).
	client sendMessage: (UMAddPackage username: 'master' password:
'PASSWORD' package: newp) ].
client processIO

"remove the list of packages in toRemove from the server"
client _ UUniverseClient new.
toRemove do: [ :p | client sendMessage: (UMRemovePackage username:
'master' password: 'PASSWORD' packageName: p name packageVersion: p
version) ].
client processIO.



More information about the Squeak-dev mailing list