links to this page:    
View this PageEdit this PageUploads to this PageHistory of this PageTop of the SwikiRecent ChangesSearch the SwikiHelp Guide
Making of 3.7u1
Last updated at 11:51 am UTC on 5 June 2005
This page has info on how the Stable 3.7 Universe was put together, as best anyone can remember.

The Universe

  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.
  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 would be much easier if the bug tracker was 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 there for reliability. 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.

Item 5 was no fun. 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.... Hopefully in the future this will be easier, since most of the offenders will have already been removed.

The Image

  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 basic packages that also have enttries in the universe, and you have to do this in order for the universes tools to realize they have been loaded.
  7. Write a readme window.

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

Useful Code

Here is most of the code used in the above steps.

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.