Makefile: refine support for building an installer from a site
This commit is contained in:
parent
99f124e82d
commit
1260dd6b2e
52
INSTALL.txt
52
INSTALL.txt
|
@ -205,7 +205,7 @@ that act as client machines.
|
|||
|
||||
See
|
||||
|
||||
pkgs/distro-build/doc.txt
|
||||
pkgs/distro-build-pkgs/distro-build-client/doc.txt
|
||||
|
||||
for a description of the site-configuration module and requirements on
|
||||
client hosts.
|
||||
|
@ -224,7 +224,9 @@ configuration file there and omit the `CONFIG' argument to
|
|||
`make'. Supply `CONFIG_MODE=...' to pass a configuration mode on to
|
||||
your site-configuration module (accessible via the `current-mode'
|
||||
parameter). Supply `CLEAN_MODE=--clean' to make the default `#:clean?'
|
||||
configuration for a client #t instead of #f.
|
||||
configuration for a client #t instead of #f, and supply
|
||||
`RELEASE_MODE=--release' to make thde default `#:release?'
|
||||
configuration #t.
|
||||
|
||||
A configuration file can specify the packages to include, host address
|
||||
of the server, distribution name, installer directory, and
|
||||
|
@ -354,15 +356,20 @@ Roughly, the steps are
|
|||
|
||||
Add `DIST_DESC="..."' to the `client' line to set the installer's
|
||||
description, which is used as a key in the generated table of
|
||||
installer files.
|
||||
uploaded installer files (when UPLOAD is set).
|
||||
|
||||
Add `DIST_CATALOGS_q='...'' to the `client' line to declare a
|
||||
space-separated sequence of catalog URLs to set an installation's
|
||||
initial package catalog URLs. Use the empty string in place of a
|
||||
URL to indicate that the default path should be spliced.
|
||||
|
||||
Add `README="..."' to specify a file to download from the server
|
||||
to use as the "README" file in the generated installer.
|
||||
Add `README="..."' to specify a URL for a file to use as the
|
||||
"README" file in the generated installer, or leave as empty for no
|
||||
"README".
|
||||
|
||||
Add `UPLOAD="..."` to specify a URL to use as an upload
|
||||
destination for the created installed, where the installer's name
|
||||
is added to the end of the URL, or leave as empty for no upload.
|
||||
|
||||
In more detail:
|
||||
|
||||
|
@ -397,7 +404,7 @@ In more detail:
|
|||
|
||||
The server provides README files from the "build/readmes"
|
||||
directory. If "README.txt" does not exist when the sever is
|
||||
started, when a default file is created (and clients download
|
||||
started, a default file is created (and clients download
|
||||
"README.txt" by default).
|
||||
|
||||
If you stop the server and want to restart it, use the
|
||||
|
@ -470,6 +477,19 @@ In more detail:
|
|||
`make'. The `README' value is used as a file name to download
|
||||
from the server.
|
||||
|
||||
For a Mac OS X installer, set `SIGN_IDENTITY' to sign the
|
||||
installer, where the value of `SIGN_IDENTITY' is the name to
|
||||
which the signing certificate is associated. Set `MAC_PKG_MODE'
|
||||
to "--mac-pkg" to create a ".pkg" installer instead of a ".dmg"
|
||||
image.
|
||||
|
||||
The `SERVER_CATALOG_PATH' and `SERVER_COLLECTS_PATH' makefile
|
||||
variables specify paths at `SERVER' plus `SERVER_PORT' to access
|
||||
the package catalog and pre-built "collects" tree needed for a
|
||||
client, but those paths should be empty for a server started with
|
||||
`make server', and they are used mainly by `make
|
||||
client-from-site' (described below).
|
||||
|
||||
On each client, step 2b produces a "bundle/installer.txt" file that
|
||||
contains the path to the generated installer on one line, followed by
|
||||
the description on a second line. The installer is also uploaded to
|
||||
|
@ -480,3 +500,23 @@ its filename in "build/installers/table.rktd".
|
|||
If you provide `JOB_OPTIONS=...' for either a client or server build,
|
||||
the options are used both for `raco setup' and `raco pkg
|
||||
install'. Normally, `JOB_OPTIONS' is used to control parallelism.
|
||||
|
||||
Creating a Client from an Installer Web Site
|
||||
--------------------------------------------
|
||||
|
||||
If you (or someone else) previously created an installer site with
|
||||
`make site', then `make client-from-site` in a clean repository
|
||||
creates an installer for the current platform drawing packages
|
||||
from the site.
|
||||
|
||||
At a minimum, provide `SERVER', `SERVER_PORT' (usually 80), and
|
||||
`SITE_PATH' (if not empty, include a trailing "/") makefile variables
|
||||
to access a site at
|
||||
|
||||
http://$(SERVER):$(SERVER_PORT)/$(SITE_PATH)
|
||||
|
||||
The `client-from-site' makefile target chains to `make client' while
|
||||
passing suitable values for `DIST_CATALOGS_q`, `DOC_SEARCH`,
|
||||
`SERVER_CATALOG_PATH', and `SERVER_COLLECTS_PATH'. Supply any other
|
||||
suitable variables, such as `DIST_NAME' or `RELEASE_MODE', the same as
|
||||
for `make client'.
|
||||
|
|
66
Makefile
66
Makefile
|
@ -120,6 +120,11 @@ DOC_SEARCH =
|
|||
SERVER = localhost
|
||||
SERVER_PORT = 9440
|
||||
|
||||
# Paths on the server to reach catalog content and "collects.tgz",
|
||||
# if not the root:
|
||||
SERVER_CATALOG_PATH =
|
||||
SERVER_COLLECTS_PATH =
|
||||
|
||||
# Set `SERVER_HOSTS` to a comma-delimited set of server addresses
|
||||
# that determine the interfaces on which the server listens; the
|
||||
# default, "localhost", listens only on the loopback device, while
|
||||
|
@ -151,7 +156,7 @@ DIST_DIR = racket
|
|||
# a variant of an OS:
|
||||
DIST_SUFFIX =
|
||||
# A human-readable description (spaces allowed) of the generated
|
||||
# installer, usually describing a platform:
|
||||
# installer, usually describing a platform, used for upload:
|
||||
DIST_DESC =
|
||||
|
||||
# Package catalog URLs (individually quoted as needed, separated by
|
||||
|
@ -172,8 +177,14 @@ INSTALL_NAME =
|
|||
# installer:
|
||||
SIGN_IDENTITY =
|
||||
|
||||
# A README file to download from the server for the client:
|
||||
README = README.txt
|
||||
# URL for a README file to include in an installer (empty for none,
|
||||
# spaces allowed):
|
||||
README = http://$(SVR_PRT)/README.txt
|
||||
|
||||
# URL destination to upload an installer file after it is created
|
||||
# (empty for no upload, spaces allowed); the file name is added to the
|
||||
# end of the URL, and DIST_DESC is passed as a "Description:" header:
|
||||
UPLOAD =
|
||||
|
||||
# Configuration module that describes a build, normally implemented
|
||||
# with `#lang distro-build/config':
|
||||
|
@ -210,6 +221,8 @@ DISTBLD = pkgs/distro-build-pkgs/distro-build-server
|
|||
|
||||
SVR_PRT = $(SERVER):$(SERVER_PORT)
|
||||
|
||||
SVR_CAT = http://$(SVR_PRT)/$(SERVER_CATALOG_PATH)
|
||||
|
||||
# Helper macros:
|
||||
USER_CONFIG = -G build/user/config -A build/user
|
||||
RACKET = racket/bin/racket $(USER_CONFIG)
|
||||
|
@ -220,8 +233,8 @@ X_AUTO_OPTIONS = --skip-installed --deps search-auto --pkgs $(JOB_OPTIONS)
|
|||
USER_AUTO_OPTIONS = --scope user $(X_AUTO_OPTIONS)
|
||||
LOCAL_USER_AUTO = --catalog build/local/catalog $(USER_AUTO_OPTIONS)
|
||||
SOURCE_USER_AUTO_q = --catalog "$(SRC_CATALOG)" $(USER_AUTO_OPTIONS)
|
||||
REMOTE_USER_AUTO = --catalog http://$(SVR_PRT)/ $(USER_AUTO_OPTIONS)
|
||||
REMOTE_INST_AUTO = --catalog http://$(SVR_PRT)/ --scope installation $(X_AUTO_OPTIONS)
|
||||
REMOTE_USER_AUTO = --catalog $(SVR_CAT) $(USER_AUTO_OPTIONS)
|
||||
REMOTE_INST_AUTO = --catalog $(SVR_CAT) --scope installation $(X_AUTO_OPTIONS)
|
||||
CONFIG_MODE_q = "$(CONFIG)" "$(CONFIG_MODE)"
|
||||
BUNDLE_CONFIG = bundle/racket/etc/config.rktd
|
||||
BUNDLE_RACO_FLAGS = -A bundle/user -l raco
|
||||
|
@ -382,25 +395,30 @@ binary-catalog-server:
|
|||
# keep the "build/user" directory on the grounds that the
|
||||
# client is the same as the server.
|
||||
|
||||
COPY_ARGS = SERVER=$(SERVER) SERVER_PORT=$(SERVER_PORT) SERVER_HOSTS="$(SERVER_HOSTS)" \
|
||||
PROP_ARGS = SERVER=$(SERVER) SERVER_PORT=$(SERVER_PORT) SERVER_HOSTS="$(SERVER_HOSTS)" \
|
||||
PKGS="$(PKGS)" BUILD_STAMP="$(BUILD_STAMP)" \
|
||||
RELEASE_MODE=$(RELEASE_MODE) SOURCE_MODE=$(SOURCE_MODE) MAC_PKG_MODE=$(MAC_PKG_MODE) \
|
||||
PKG_SOURCE_MODE="$(PKG_SOURCE_MODE)" INSTALL_NAME="$(INSTALL_NAME)"\
|
||||
DIST_NAME="$(DIST_NAME)" DIST_BASE=$(DIST_BASE) \
|
||||
DIST_DIR=$(DIST_DIR) DIST_SUFFIX=$(DIST_SUFFIX) \
|
||||
DIST_DIR=$(DIST_DIR) DIST_SUFFIX=$(DIST_SUFFIX) UPLOAD="$(UPLOAD)" \
|
||||
DIST_DESC="$(DIST_DESC)" README="$(README)" SIGN_IDENTITY="$(SIGN_IDENTITY)"\
|
||||
JOB_OPTIONS="$(JOB_OPTIONS)"
|
||||
|
||||
COPY_ARGS = $(PROP_ARGS) \
|
||||
SERVER_CATALOG_PATH=$(SERVER_CATALOG_PATH) SERVER_COLLECTS_PATH=$(SERVER_COLLECTS_PATH)
|
||||
|
||||
# Not copied, because used only immediately: DOC_SEARCH and DIST_CATALOGS_q
|
||||
|
||||
SET_BUNDLE_CONFIG_q = $(BUNDLE_CONFIG) "" "" "$(INSTALL_NAME)" "$(BUILD_STAMP)" "$(DOC_SEARCH)" $(DIST_CATALOGS_q)
|
||||
|
||||
client:
|
||||
if [ ! -d build/log ] ; then rm -rf build/user ; fi
|
||||
$(MAKE) base $(COPY_ARGS)
|
||||
$(MAKE) distro-build-from-server $(COPY_ARGS)
|
||||
$(MAKE) bundle-from-server $(COPY_ARGS)
|
||||
$(MAKE) bundle-config $(COPY_ARGS)
|
||||
$(RACKET) -l distro-build/set-config $(SET_BUNDLE_CONFIG_q)
|
||||
$(MAKE) installer-from-bundle $(COPY_ARGS)
|
||||
|
||||
SET_BUNDLE_CONFIG_q = $(BUNDLE_CONFIG) "" "" "$(INSTALL_NAME)" "$(BUILD_STAMP)" "$(DOC_SEARCH)" $(DIST_CATALOGS_q)
|
||||
|
||||
win32-client:
|
||||
IF EXIST build\user cmd /c rmdir /S /Q build\user
|
||||
$(MAKE) win32-base $(COPY_ARGS)
|
||||
|
@ -425,15 +443,12 @@ bundle-from-server:
|
|||
rm -rf bundle
|
||||
mkdir -p bundle/racket
|
||||
$(RACKET) -l setup/unixstyle-install bundle racket bundle/racket
|
||||
$(RACKET) -l distro-build/unpack-collects http://$(SVR_PRT)/
|
||||
$(RACKET) -l distro-build/unpack-collects http://$(SVR_PRT)/$(SERVER_COLLECTS_PATH)
|
||||
$(BUNDLE_RACO) pkg install $(REMOTE_INST_AUTO) $(PKG_SOURCE_MODE) $(REQUIRED_PKGS)
|
||||
$(BUNDLE_RACO) pkg install $(REMOTE_INST_AUTO) $(PKG_SOURCE_MODE) $(PKGS)
|
||||
$(RACKET) -l setup/unixstyle-install post-adjust "$(SOURCE_MODE)" "$(PKG_SOURCE_MODE)" racket bundle/racket
|
||||
|
||||
bundle-config:
|
||||
$(RACKET) -l distro-build/set-config $(SET_BUNDLE_CONFIG_q)
|
||||
|
||||
UPLOAD_q = --readme http://$(SVR_PRT)/$(README) --upload http://$(SVR_PRT)/ --desc "$(DIST_DESC)"
|
||||
UPLOAD_q = --readme "$(README)" --upload "$(UPLOAD)" --desc "$(DIST_DESC)"
|
||||
DIST_ARGS_q = $(UPLOAD_q) $(RELEASE_MODE) $(SOURCE_MODE) $(MAC_PKG_MODE) \
|
||||
"$(DIST_NAME)" $(DIST_BASE) $(DIST_DIR) "$(DIST_SUFFIX)" \
|
||||
"$(SIGN_IDENTITY)"
|
||||
|
@ -455,13 +470,32 @@ win32-bundle:
|
|||
|
||||
win32-bundle-from-server:
|
||||
$(MAKE) win32-bundle $(COPY_ARGS)
|
||||
$(WIN32_RACKET) -l distro-build/unpack-collects http://$(SVR_PRT)/
|
||||
$(WIN32_RACKET) -l distro-build/unpack-collects http://$(SVR_PRT)/$(SERVER_COLLECTS_PATH)
|
||||
$(WIN32_BUNDLE_RACO) pkg install $(REMOTE_INST_AUTO) $(PKG_SOURCE_MODE) $(REQUIRED_PKGS)
|
||||
$(WIN32_BUNDLE_RACO) pkg install $(REMOTE_INST_AUTO) $(PKG_SOURCE_MODE) $(PKGS)
|
||||
|
||||
win32-installer-from-bundle:
|
||||
$(WIN32_RACKET) -l- distro-build/installer $(DIST_ARGS_q)
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# On a supported platform (for an installer build) after a `make site'
|
||||
# has completed; SERVER, SERVER_PORT (usually 80), and SITE_PATH
|
||||
# should be set, and other configurations are propagated; normally,
|
||||
# README should be set (possibly to empty), because a site doesn't
|
||||
# provide a generic "README.txt".
|
||||
|
||||
# Relative path on server for the site; include a trailing "/"
|
||||
# if non-empty:
|
||||
SITE_PATH =
|
||||
|
||||
FROM_SITE_ARGS = SERVER_CATALOG_PATH=$(SITE_PATH)catalog/ SERVER_COLLECTS_PATH=$(SITE_PATH)origin/ \
|
||||
DIST_CATALOGS_q='http://$(SERVER):$(SERVER_PORT)/$(SITE_PATH)catalog/ ""' \
|
||||
DOC_SEARCH="http://$(SERVER):$(SERVER_PORT)/$(SITE_PATH)doc/local-redirect/index.html" \
|
||||
$(PROP_ARGS)
|
||||
|
||||
client-from-site:
|
||||
make client $(FROM_SITE_ARGS)
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Drive installer build across server and clients:
|
||||
|
||||
|
|
|
@ -30,11 +30,13 @@
|
|||
[("--mac-pkg") "Create a \".pkg\" installer on Mac OS X"
|
||||
(set! mac-pkg? #t)]
|
||||
[("--upload") url "Upload installer"
|
||||
(set! upload-to url)]
|
||||
(unless (string=? url "")
|
||||
(set! upload-to url))]
|
||||
[("--desc") desc "Description to accompany upload"
|
||||
(set! upload-desc desc)]
|
||||
[("--readme") readme "URL for README.txt to include"
|
||||
(set! download-readme readme)]
|
||||
(unless (string=? readme "")
|
||||
(set! download-readme readme))]
|
||||
#:args
|
||||
(human-name base-name dir-name dist-suffix sign-identity)
|
||||
(values human-name
|
||||
|
@ -81,7 +83,7 @@
|
|||
(printf "Upload ~a to ~a\n" installer-file upload-to)
|
||||
(define i
|
||||
(put-pure-port
|
||||
(string->url (format "~aupload/~a"
|
||||
(string->url (format "~a~a"
|
||||
upload-to
|
||||
(path->string (file-name-from-path installer-file))))
|
||||
(file->bytes installer-file)
|
||||
|
|
|
@ -338,7 +338,8 @@
|
|||
(q "--source --no-setup")
|
||||
(q ""))
|
||||
" MAC_PKG_MODE=" (if mac-pkg? "--mac-pkg" (q ""))
|
||||
" README=" (q (file-name-from-path readme))))
|
||||
" UPLOAD=http://" server ":" server-port "/upload/"
|
||||
" README=http://" server ":" server-port "/" (q (file-name-from-path readme))))
|
||||
|
||||
(define (unix-build c platform host port user server server-port repo clean? pull? readme)
|
||||
(define dir (get-path-opt c '#:dir "build/plt" #:localhost (current-directory)))
|
||||
|
|
Loading…
Reference in New Issue
Block a user