diff options
author | jhb <jhb@FreeBSD.org> | 2003-01-17 19:05:32 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2003-01-17 19:05:32 +0000 |
commit | dc23a6cc293c5c66de9b340f144e5ac526bba8ad (patch) | |
tree | 5693ab9d8e2cce0b997fefaa64f9d54c4151f882 /usr.sbin/sysinstall | |
parent | e4bbc64e1d967c8a58f0c9dee351e26d463366b0 (diff) | |
download | FreeBSD-src-dc23a6cc293c5c66de9b340f144e5ac526bba8ad.zip FreeBSD-src-dc23a6cc293c5c66de9b340f144e5ac526bba8ad.tar.gz |
- Rename installFixupBin to installFixupBase to finish up the 'bin' to
'base' dist rename.
- Rework struct dist to allow for different types of dists. There are
currently three types of dists: DT_TARBALL, the traditonal gzipped and
split tar file; DT_PACKAGE, a package; and DT_SUBDIST, a meta-dist in
the tree that has its own array of dists as its contents. For example,
the 'base' dist is a DT_TARBALL dist, the 'perl' dist is a DT_PACKAGE
dist, and the 'src' dist is a DT_SUBDIST dist with its own dist table
that contains 'sbase', 'ssys', etc.
- Add helper macros for defining array entries for the different types of
dists to try and make the statically defined dist table in dist.c more
readable.
- Split the logic to deal with a DT_TARBALL dist out of distExtract()
and into its own distExtractTarball() function. distExtract() now
calls other functions to extract each dist.
- Tweak the percentage complete calculation in distExtractTarball() to
do the multiply prior to the divide so it doesn't have to use floating
point.
- Axe the installPackage() function along with the special handling for
the perl and XFree86 dists in distExtractAll() since distExtract()
handles package dists directly now.
- Add back in subdists for the X packages based on the split up packages
that XFree86-4 uses that as closely map to the X dists we used with
X 3.3.x.
- Lots of things like distSetX() and the X dist masks are no longer
#ifndef X_AS_PKG since we use them in both cases now.
- Make the entire installFixupXFree() function #ifndef X_AS_PKG, we only
call it in that case anyways, and it's not suitable for the X_AS_PKG
case.
- Add in X dist menus for the X_AS_PKG case.
Approved by: re
Diffstat (limited to 'usr.sbin/sysinstall')
-rw-r--r-- | usr.sbin/sysinstall/dispatch.c | 2 | ||||
-rw-r--r-- | usr.sbin/sysinstall/dist.c | 879 | ||||
-rw-r--r-- | usr.sbin/sysinstall/dist.h | 25 | ||||
-rw-r--r-- | usr.sbin/sysinstall/install.c | 19 | ||||
-rw-r--r-- | usr.sbin/sysinstall/menus.c | 98 | ||||
-rw-r--r-- | usr.sbin/sysinstall/sysinstall.h | 13 |
6 files changed, 564 insertions, 472 deletions
diff --git a/usr.sbin/sysinstall/dispatch.c b/usr.sbin/sysinstall/dispatch.c index 7a7584a..17b5e9a 100644 --- a/usr.sbin/sysinstall/dispatch.c +++ b/usr.sbin/sysinstall/dispatch.c @@ -88,7 +88,7 @@ static struct _word { { "installExpress", installExpress }, { "installStandard", installStandard }, { "installUpgrade", installUpgrade }, - { "installFixupBin", installFixupBin }, + { "installFixupBase", installFixupBase }, #ifndef X_AS_PKG { "installFixupXFree", installFixupXFree }, #endif diff --git a/usr.sbin/sysinstall/dist.c b/usr.sbin/sysinstall/dist.c index 0177929..91c24f8 100644 --- a/usr.sbin/sysinstall/dist.c +++ b/usr.sbin/sysinstall/dist.c @@ -45,169 +45,216 @@ unsigned int Dists; unsigned int CRYPTODists; unsigned int SrcDists; -#ifndef X_AS_PKG unsigned int XF86Dists; unsigned int XF86ServerDists; unsigned int XF86FontDists; -#endif + +enum _disttype { DT_TARBALL, DT_SUBDIST, DT_PACKAGE }; typedef struct _dist { char *my_name; - char *my_dir; unsigned int *my_mask; unsigned int my_bit; - struct _dist *my_dist; + enum _disttype my_type; + union { + char *my_string; /* DT_TARBALL & DT_PACKAGE */ + struct _dist *my_dist; /* DT_SUBDIST */ + } my_data; } Distribution; extern Distribution DistTable[]; extern Distribution CRYPTODistTable[]; extern Distribution SrcDistTable[]; -#ifndef X_AS_PKG extern Distribution XF86DistTable[]; extern Distribution XF86FontDistTable[]; extern Distribution XF86ServerDistTable[]; -#endif + +#define DTE_TARBALL(name, mask, flag, directory) \ + { name, mask, DIST_ ## flag, DT_TARBALL, { directory } } +#define DTE_PACKAGE(name, mask, flag, package) \ + { name, mask, DIST_ ## flag, DT_PACKAGE, { package } } +#define DTE_SUBDIST(name, mask, flag, subdist) \ + { name, mask, DIST_ ## flag, DT_SUBDIST, { my_dist: subdist } } + +#define BASE_DIST (&DistTable[0]) /* The top-level distribution categories */ static Distribution DistTable[] = { -{ "base", "/", &Dists, DIST_BASE, NULL }, -{ "doc", "/", &Dists, DIST_DOC, NULL }, -{ "games", "/", &Dists, DIST_GAMES, NULL }, -{ "manpages", "/", &Dists, DIST_MANPAGES, NULL }, -{ "catpages", "/", &Dists, DIST_CATPAGES, NULL }, -{ "proflibs", "/", &Dists, DIST_PROFLIBS, NULL }, -{ "dict", "/", &Dists, DIST_DICT, NULL }, -{ "info", "/", &Dists, DIST_INFO, NULL }, -{ "src", "/", &Dists, DIST_SRC, SrcDistTable }, -{ "crypto", "/", &Dists, DIST_CRYPTO, CRYPTODistTable }, + DTE_TARBALL("base", &Dists, BASE, "/"), + DTE_TARBALL("doc", &Dists, DOC, "/"), + DTE_TARBALL("games", &Dists, GAMES, "/"), + DTE_TARBALL("manpages", &Dists, MANPAGES, "/"), + DTE_TARBALL("catpages", &Dists, CATPAGES, "/"), + DTE_TARBALL("proflibs", &Dists, PROFLIBS, "/"), + DTE_TARBALL("dict", &Dists, DICT, "/"), + DTE_TARBALL("info", &Dists, INFO, "/"), + DTE_SUBDIST("src", &Dists, SRC, SrcDistTable), + DTE_SUBDIST("crypto", &Dists, CRYPTO, CRYPTODistTable), #ifdef __i386__ -{ "compat1x", "/", &Dists, DIST_COMPAT1X, NULL }, -{ "compat20", "/", &Dists, DIST_COMPAT20, NULL }, -{ "compat21", "/", &Dists, DIST_COMPAT21, NULL }, -{ "compat22", "/", &Dists, DIST_COMPAT22, NULL }, -{ "compat3x", "/", &Dists, DIST_COMPAT3X, NULL }, + DTE_TARBALL("compat1x", &Dists, COMPAT1X, "/"), + DTE_TARBALL("compat20", &Dists, COMPAT20, "/"), + DTE_TARBALL("compat21", &Dists, COMPAT21, "/"), + DTE_TARBALL("compat22", &Dists, COMPAT22, "/"), + DTE_TARBALL("compat3x", &Dists, COMPAT3X, "/"), #endif #if defined(__i386__) || defined(__alpha__) -{ "compat4x", "/", &Dists, DIST_COMPAT4X, NULL }, + DTE_TARBALL("compat4x", &Dists, COMPAT4X, "/"), #endif -{ "ports", "/usr", &Dists, DIST_PORTS, NULL }, -{ "local", "/", &Dists, DIST_LOCAL, NULL }, -#ifndef X_AS_PKG -{ "XF86336", "/usr", &Dists, DIST_XF86, XF86DistTable }, -#endif -{ NULL }, + DTE_TARBALL("ports", &Dists, PORTS, "/usr"), + DTE_TARBALL("local", &Dists, LOCAL, "/"), + DTE_PACKAGE("perl", &Dists, PERL, "perl"), + DTE_SUBDIST("XFree86", &Dists, XF86, XF86DistTable), + { NULL }, }; /* The CRYPTO distribution */ static Distribution CRYPTODistTable[] = { -{ "crypto", "/", &CRYPTODists, DIST_CRYPTO_CRYPTO, NULL }, -{ "krb4", "/", &CRYPTODists, DIST_CRYPTO_KERBEROS4, NULL }, -{ "krb5", "/", &CRYPTODists, DIST_CRYPTO_KERBEROS5, NULL }, -{ "ssecure", "/usr/src", &CRYPTODists, DIST_CRYPTO_SSECURE, NULL }, -{ "scrypto", "/usr/src", &CRYPTODists, DIST_CRYPTO_SCRYPTO, NULL }, -{ "skrb4", "/usr/src", &CRYPTODists, DIST_CRYPTO_SKERBEROS4, NULL }, -{ "skrb5", "/usr/src", &CRYPTODists, DIST_CRYPTO_SKERBEROS5, NULL }, -{ NULL }, + DTE_TARBALL("crypto", &CRYPTODists, CRYPTO_CRYPTO, "/"), + DTE_TARBALL("krb4", &CRYPTODists, CRYPTO_KERBEROS4, "/"), + DTE_TARBALL("krb5", &CRYPTODists, CRYPTO_KERBEROS5, "/"), + DTE_TARBALL("ssecure", &CRYPTODists, CRYPTO_SSECURE, "/usr/src"), + DTE_TARBALL("scrypto", &CRYPTODists, CRYPTO_SCRYPTO, "/usr/src"), + DTE_TARBALL("skrb4", &CRYPTODists, CRYPTO_SKERBEROS4, "/usr/src"), + DTE_TARBALL("skrb5", &CRYPTODists, CRYPTO_SKERBEROS5, "/usr/src"), + { NULL }, }; /* The /usr/src distribution */ static Distribution SrcDistTable[] = { -{ "sbase", "/usr/src", &SrcDists, DIST_SRC_BASE, NULL }, -{ "scontrib", "/usr/src", &SrcDists, DIST_SRC_CONTRIB, NULL }, -{ "sgnu", "/usr/src", &SrcDists, DIST_SRC_GNU, NULL }, -{ "setc", "/usr/src", &SrcDists, DIST_SRC_ETC, NULL }, -{ "sgames", "/usr/src", &SrcDists, DIST_SRC_GAMES, NULL }, -{ "sinclude", "/usr/src", &SrcDists, DIST_SRC_INCLUDE, NULL }, -{ "slib", "/usr/src", &SrcDists, DIST_SRC_LIB, NULL }, -{ "slibexec", "/usr/src", &SrcDists, DIST_SRC_LIBEXEC, NULL }, -{ "srelease", "/usr/src", &SrcDists, DIST_SRC_RELEASE, NULL }, -{ "sbin", "/usr/src", &SrcDists, DIST_SRC_BIN, NULL }, -{ "ssbin", "/usr/src", &SrcDists, DIST_SRC_SBIN, NULL }, -{ "sshare", "/usr/src", &SrcDists, DIST_SRC_SHARE, NULL }, -{ "ssys", "/usr/src", &SrcDists, DIST_SRC_SYS, NULL }, -{ "subin", "/usr/src", &SrcDists, DIST_SRC_UBIN, NULL }, -{ "susbin", "/usr/src", &SrcDists, DIST_SRC_USBIN, NULL }, -{ "stools", "/usr/src", &SrcDists, DIST_SRC_TOOLS, NULL }, -{ NULL }, + DTE_TARBALL("sbase", &SrcDists, SRC_BASE, "/usr/src"), + DTE_TARBALL("scontrib", &SrcDists, SRC_CONTRIB, "/usr/src"), + DTE_TARBALL("sgnu", &SrcDists, SRC_GNU, "/usr/src"), + DTE_TARBALL("setc", &SrcDists, SRC_ETC, "/usr/src"), + DTE_TARBALL("sgames", &SrcDists, SRC_GAMES, "/usr/src"), + DTE_TARBALL("sinclude", &SrcDists, SRC_INCLUDE, "/usr/src"), + DTE_TARBALL("slib", &SrcDists, SRC_LIB, "/usr/src"), + DTE_TARBALL("slibexec", &SrcDists, SRC_LIBEXEC, "/usr/src"), + DTE_TARBALL("srelease", &SrcDists, SRC_RELEASE, "/usr/src"), + DTE_TARBALL("sbin", &SrcDists, SRC_BIN, "/usr/src"), + DTE_TARBALL("ssbin", &SrcDists, SRC_SBIN, "/usr/src"), + DTE_TARBALL("sshare", &SrcDists, SRC_SHARE, "/usr/src"), + DTE_TARBALL("ssys", &SrcDists, SRC_SYS, "/usr/src"), + DTE_TARBALL("subin", &SrcDists, SRC_UBIN, "/usr/src"), + DTE_TARBALL("susbin", &SrcDists, SRC_USBIN, "/usr/src"), + DTE_TARBALL("stools", &SrcDists, SRC_TOOLS, "/usr/src"), + { NULL }, }; -#ifndef X_AS_PKG +#ifdef X_AS_PKG /* The XFree86 distribution */ static Distribution XF86DistTable[] = { -{ "XF86336", "/usr/X11R6", &XF86Dists, DIST_XF86_FONTS, XF86FontDistTable }, -{ "XF86336", "/usr/X11R6", &XF86Dists, DIST_XF86_SERVER, XF86ServerDistTable }, -{ "Xbin", "/usr/X11R6", &XF86Dists, DIST_XF86_BIN, NULL }, -{ "Xcfg", "/usr/X11R6", &XF86Dists, DIST_XF86_CFG, NULL }, -{ "Xdoc", "/usr/X11R6", &XF86Dists, DIST_XF86_DOC, NULL }, -{ "Xhtml", "/usr/X11R6", &XF86Dists, DIST_XF86_HTML, NULL }, -{ "Xlib", "/usr/X11R6", &XF86Dists, DIST_XF86_LIB, NULL }, + DTE_SUBDIST("XFree86", &XF86Dists, XF86_FONTS, XF86FontDistTable), + DTE_SUBDIST("XFree86", &XF86Dists, XF86_SERVER, XF86ServerDistTable), + DTE_PACKAGE("Xbin", &XF86Dists, XF86_CLIENTS, "XFree86-clients"), + DTE_PACKAGE("Xdoc", &XF86Dists, XF86_DOC, "XFree86-documents"), + DTE_PACKAGE("Xlib", &XF86Dists, XF86_LIB, "XFree86-libraries"), + DTE_PACKAGE("Xman", &XF86Dists, XF86_MAN, "XFree86-manuals"), + DTE_PACKAGE("Xprog", &XF86Dists, XF86_PROG, "imake"), + { NULL }, +}; + +/* The XFree86 server distribution */ +static Distribution XF86ServerDistTable[] = { + DTE_PACKAGE("Xsrv", &XF86ServerDists, XF86_SERVER_FB, "wrapper"), + DTE_PACKAGE("Xnest", &XF86ServerDists, XF86_SERVER_NEST, "XFree86-NestServer"), + DTE_PACKAGE("Xprt", &XF86ServerDists, XF86_SERVER_PRINT, "XFree86-PrintServer"), + DTE_PACKAGE("Xvfb", &XF86ServerDists, XF86_SERVER_VFB, "XFree86-VirtualFramebufferServer"), + { NULL } +}; + +/* The XFree86 font distribution */ +static Distribution XF86FontDistTable[] = { + DTE_PACKAGE("Xf75", &XF86FontDists, XF86_FONTS_75, "XFree86-font75dpi"), + DTE_PACKAGE("Xf100", &XF86FontDists, XF86_FONTS_100, "XFree86-font100dpi"), + DTE_PACKAGE("Xfcyr", &XF86FontDists, XF86_FONTS_CYR, "XFree86-fontCyrillic"), + DTE_PACKAGE("Xfscl", &XF86FontDists, XF86_FONTS_SCALE, "XFree86-fontScalable"), + DTE_PACKAGE("Xfnts", &XF86FontDists, XF86_FONTS_BITMAPS, "XFree86-fontDefaultBitmaps"), + DTE_PACKAGE("Xfsrv", &XF86FontDists, XF86_FONTS_SERVER, "XFree86-FontServer"), + { NULL }, +}; + +#else /* !X_AS_PKG */ + +/* The XFree86 distribution */ +static Distribution XF86DistTable[] = { + DTE_SUBDIST("XF86336", &XF86Dists, XF86_FONTS, XF86FontDistTable), +#if defined(__i386__) && defined(PC98) + DTE_SUBDIST("XF86336/PC98-Servers", &XF86Dists, XF86_SERVER, XF86ServerDistTable), +#else + DTE_SUBDIST("XF86336/Servers", &XF86Dists, XF86_SERVER, XF86ServerDistTable), +#endif + DTE_TARBALL("Xbin", &XF86Dists, XF86_BIN, "/usr/X11R6"), + DTE_TARBALL("Xcfg", &XF86Dists, XF86_CFG, "/usr/X11R6"), + DTE_TARBALL("Xdoc", &XF86Dists, XF86_DOC, "/usr/X11R6"), + DTE_TARBALL("Xhtml", &XF86Dists, XF86_HTML, "/usr/X11R6"), + DTE_TARBALL("Xlib", &XF86Dists, XF86_LIB, "/usr/X11R6"), #if defined(__i386__) && defined(PC98) -{ "Xlk98", "/usr/X11R6", &XF86Dists, DIST_XF86_LKIT98, NULL }, + DTE_TARBALL("Xlk98", &XF86Dists, XF86_LKIT98, "/usr/X11R6"), #endif -{ "Xlkit", "/usr/X11R6", &XF86Dists, DIST_XF86_LKIT, NULL }, -{ "Xman", "/usr/X11R6", &XF86Dists, DIST_XF86_MAN, NULL }, -{ "Xprog", "/usr/X11R6", &XF86Dists, DIST_XF86_PROG, NULL }, -{ "Xps", "/usr/X11R6", &XF86Dists, DIST_XF86_PS, NULL }, -{ "Xset", "/usr/X11R6", &XF86Dists, DIST_XF86_SET, NULL }, + DTE_TARBALL("Xlkit", &XF86Dists, XF86_LKIT, "/usr/X11R6"), + DTE_TARBALL("Xman", &XF86Dists, XF86_MAN, "/usr/X11R6"), + DTE_TARBALL("Xprog", &XF86Dists, XF86_PROG, "/usr/X11R6"), + DTE_TARBALL("Xps", &XF86Dists, XF86_PS, "/usr/X11R6"), + DTE_TARBALL("Xset", &XF86Dists, XF86_SET, "/usr/X11R6"), #if defined(__i386__) && defined(PC98) -{ "X9set", "/usr/X11R6", &XF86Dists, DIST_XF86_9SET, NULL }, + DTE_TARBALL("X9set", &XF86Dists, XF86_9SET, "/usr/X11R6"), #endif -{ NULL }, + { NULL }, }; /* The XFree86 server distribution */ static Distribution XF86ServerDistTable[] = { #if defined(__i386__) && defined(PC98) -{ "PC98-Servers/X9480", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_9480, NULL }, -{ "PC98-Servers/X9EGC", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_9EGC, NULL }, -{ "PC98-Servers/X9GA9", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_9GA9, NULL }, -{ "PC98-Servers/X9GAN", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_9GAN, NULL }, -{ "PC98-Servers/X9LPW", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_9LPW, NULL }, -{ "PC98-Servers/X9MGA", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_9MGA, NULL }, -{ "PC98-Servers/X9NKV", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_9NKV, NULL }, -{ "PC98-Servers/X9NS3", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_9NS3, NULL }, -{ "PC98-Servers/X9SPW", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_9SPW, NULL }, -{ "PC98-Servers/X9SVG", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_9SVG, NULL }, -{ "PC98-Servers/X9TGU", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_9TGU, NULL }, -{ "PC98-Servers/X9WEP", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_9WEP, NULL }, -{ "PC98-Servers/X9WS", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_9WS, NULL }, -{ "PC98-Servers/X9WSN", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_9WSN, NULL }, + DTE_TARBALL("X9480", &XF86ServerDists, XF86_SERVER_9480, "/usr/X11R6"), + DTE_TARBALL("X9EGC", &XF86ServerDists, XF86_SERVER_9EGC, "/usr/X11R6"), + DTE_TARBALL("X9GA9", &XF86ServerDists, XF86_SERVER_9GA9, "/usr/X11R6"), + DTE_TARBALL("X9GAN", &XF86ServerDists, XF86_SERVER_9GAN, "/usr/X11R6"), + DTE_TARBALL("X9LPW", &XF86ServerDists, XF86_SERVER_9LPW, "/usr/X11R6"), + DTE_TARBALL("X9MGA", &XF86ServerDists, XF86_SERVER_9MGA, "/usr/X11R6"), + DTE_TARBALL("X9NKV", &XF86ServerDists, XF86_SERVER_9NKV, "/usr/X11R6"), + DTE_TARBALL("X9NS3", &XF86ServerDists, XF86_SERVER_9NS3, "/usr/X11R6"), + DTE_TARBALL("X9SPW", &XF86ServerDists, XF86_SERVER_9SPW, "/usr/X11R6"), + DTE_TARBALL("X9SVG", &XF86ServerDists, XF86_SERVER_9SVG, "/usr/X11R6"), + DTE_TARBALL("X9TGU", &XF86ServerDists, XF86_SERVER_9TGU, "/usr/X11R6"), + DTE_TARBALL("X9WEP", &XF86ServerDists, XF86_SERVER_9WEP, "/usr/X11R6"), + DTE_TARBALL("X9WS", &XF86ServerDists, XF86_SERVER_9WS, "/usr/X11R6"), + DTE_TARBALL("X9WSN", &XF86ServerDists, XF86_SERVER_9WSN, "/usr/X11R6"), #endif -{ "Servers/X3DL", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_3DL, NULL }, + DTE_TARBALL("X3DL", &XF86ServerDists, XF86_SERVER_3DL, "/usr/X11R6"), #ifdef __i386__ -{ "Servers/X8514", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_8514, NULL }, -{ "Servers/XAGX", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_AGX, NULL }, + DTE_TARBALL("X8514", &XF86ServerDists, XF86_SERVER_8514, "/usr/X11R6"), + DTE_TARBALL("XAGX", &XF86ServerDists, XF86_SERVER_AGX, "/usr/X11R6"), #endif -{ "Servers/XI128", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_I128, NULL }, + DTE_TARBALL("XI128", &XF86ServerDists, XF86_SERVER_I128, "/usr/X11R6"), #ifdef __i386__ -{ "Servers/XMa8", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_MACH8, NULL }, -{ "Servers/XMa32", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_MACH32,NULL }, + DTE_TARBALL("XMa8", &XF86ServerDists, XF86_SERVER_MACH8, "/usr/X11R6"), + DTE_TARBALL("XMa32", &XF86ServerDists, XF86_SERVER_MACH32, "/usr/X11R6"), #endif -{ "Servers/XMa64", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_MACH64,NULL }, -{ "Servers/XMono", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_MONO, NULL }, -{ "Servers/XP9K", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_P9000, NULL }, -{ "Servers/XS3", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_S3, NULL }, -{ "Servers/XS3V", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_S3V, NULL }, -{ "Servers/XSVGA", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_SVGA, NULL }, + DTE_TARBALL("XMa64", &XF86ServerDists, XF86_SERVER_MACH64, "/usr/X11R6"), + DTE_TARBALL("XMono", &XF86ServerDists, XF86_SERVER_MONO, "/usr/X11R6"), + DTE_TARBALL("XP9K", &XF86ServerDists, XF86_SERVER_P9000, "/usr/X11R6"), + DTE_TARBALL("XS3", &XF86ServerDists, XF86_SERVER_S3, "/usr/X11R6"), + DTE_TARBALL("XS3V", &XF86ServerDists, XF86_SERVER_S3V, "/usr/X11R6"), + DTE_TARBALL("XSVGA", &XF86ServerDists, XF86_SERVER_SVGA, "/usr/X11R6"), #ifdef __i386__ -{ "Servers/XVG16", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_VGA16, NULL }, -{ "Servers/XW32", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_W32, NULL }, + DTE_TARBALL("XVG16", &XF86ServerDists, XF86_SERVER_VGA16, "/usr/X11R6"), + DTE_TARBALL("XW32", &XF86ServerDists, XF86_SERVER_W32, "/usr/X11R6"), #endif #ifdef __alpha__ -{ "Servers/XTGA", "/usr/X11R6", &XF86ServerDists, DIST_XF86_SERVER_TGA, NULL }, + DTE_TARBALL("XTGA", &XF86ServerDists, XF86_SERVER_TGA, "/usr/X11R6"), #endif -{ NULL }, + { NULL }, }; /* The XFree86 font distribution */ static Distribution XF86FontDistTable[] = { -{ "Xfnts", "/usr/X11R6", &XF86FontDists, DIST_XF86_FONTS_MISC, NULL }, -{ "Xf100", "/usr/X11R6", &XF86FontDists, DIST_XF86_FONTS_100, NULL }, -{ "Xfcyr", "/usr/X11R6", &XF86FontDists, DIST_XF86_FONTS_CYR, NULL }, -{ "Xfscl", "/usr/X11R6", &XF86FontDists, DIST_XF86_FONTS_SCALE, NULL }, -{ "Xfnon", "/usr/X11R6", &XF86FontDists, DIST_XF86_FONTS_NON, NULL }, -{ "Xfsrv", "/usr/X11R6", &XF86FontDists, DIST_XF86_FONTS_SERVER, NULL }, -{ NULL }, + DTE_TARBALL("Xfnts", &XF86FontDists, XF86_FONTS_MISC, "/usr/X11R6"), + DTE_TARBALL("Xf100", &XF86FontDists, XF86_FONTS_100, "/usr/X11R6"), + DTE_TARBALL("Xfcyr", &XF86FontDists, XF86_FONTS_CYR, "/usr/X11R6"), + DTE_TARBALL("Xfscl", &XF86FontDists, XF86_FONTS_SCALE, "/usr/X11R6"), + DTE_TARBALL("Xfnon", &XF86FontDists, XF86_FONTS_NON, "/usr/X11R6"), + DTE_TARBALL("Xfsrv", &XF86FontDists, XF86_FONTS_SERVER, "/usr/X11R6"), + { NULL }, }; #endif /* !X_AS_PKG */ @@ -226,22 +273,21 @@ distVerifyFlags(void) else if ((Dists & DIST_CRYPTO) && !CRYPTODists) CRYPTODists |= DIST_CRYPTO_ALL; #ifndef X_AS_PKG + /* XXX : realy only for X 3.3.6 */ if (XF86Dists & DIST_XF86_SET) XF86ServerDists |= DIST_XF86_SERVER_VGA16; +#endif if (XF86ServerDists) XF86Dists |= DIST_XF86_SERVER; if (XF86FontDists) XF86Dists |= DIST_XF86_FONTS; if (XF86Dists || XF86ServerDists || XF86FontDists) Dists |= DIST_XF86; -#endif if (isDebug()) { msgDebug("Dist Masks: Dists: %0x, CRYPTO: %0x, Srcs: %0x\n", Dists, CRYPTODists, SrcDists); -#ifndef X_AS_PKG msgDebug("XServer: %0x, XFonts: %0x, XDists: %0x\n", XF86ServerDists, XF86FontDists, XF86Dists); -#endif } } @@ -251,11 +297,9 @@ distReset(dialogMenuItem *self) Dists = 0; CRYPTODists = 0; SrcDists = 0; -#ifndef X_AS_PKG XF86Dists = 0; XF86ServerDists = 0; XF86FontDists = 0; -#endif return DITEM_SUCCESS | DITEM_REDRAW; } @@ -275,12 +319,6 @@ distConfig(dialogMenuItem *self) if ((cp = variable_get(VAR_DIST_SRC)) != NULL) SrcDists = atoi(cp); -#ifdef X_AS_PKG - if (variable_get(VAR_DIST_X11) != NULL || - variable_get(VAR_DIST_XSERVER) != NULL || - variable_get(VAR_DIST_XFONTS) != NULL) - Dists |= DIST_XF86; -#else if ((cp = variable_get(VAR_DIST_X11)) != NULL) XF86Dists = atoi(cp); @@ -289,7 +327,6 @@ distConfig(dialogMenuItem *self) if ((cp = variable_get(VAR_DIST_XFONTS)) != NULL) XF86FontDists = atoi(cp); -#endif distVerifyFlags(); return DITEM_SUCCESS | DITEM_REDRAW; } @@ -298,14 +335,16 @@ static int distSetX(void) { Dists |= DIST_XF86; -#ifndef X_AS_PKG +#ifdef X_AS_PKG + XF86Dists = DIST_XF86_CLIENTS | DIST_XF86_LIB | DIST_XF86_PROG | DIST_XF86_MAN | DIST_XF86_DOC | DIST_XF86_SERVER | DIST_XF86_FONTS; + XF86ServerDists = DIST_XF86_SERVER_FB; + XF86FontDists = DIST_XF86_FONTS_BITMAPS | DIST_XF86_FONTS_75; +#else XF86Dists = DIST_XF86_BIN | DIST_XF86_SET | DIST_XF86_CFG | DIST_XF86_LIB | DIST_XF86_PROG | DIST_XF86_MAN | DIST_XF86_DOC | DIST_XF86_SERVER | DIST_XF86_FONTS; XF86ServerDists = DIST_XF86_SERVER_SVGA | DIST_XF86_SERVER_VGA16; XF86FontDists = DIST_XF86_FONTS_MISC; - return distSetXF86(NULL); -#else - return DITEM_SUCCESS; #endif + return distSetXF86(NULL); } int @@ -400,11 +439,9 @@ distSetEverything(dialogMenuItem *self) Dists = DIST_ALL | DIST_XF86; SrcDists = DIST_SRC_ALL; CRYPTODists = DIST_CRYPTO_ALL; -#ifndef X_AS_PKG XF86Dists = DIST_XF86_ALL; XF86ServerDists = DIST_XF86_SERVER_ALL; XF86FontDists = DIST_XF86_FONTS_ALL; -#endif i = distMaybeSetPorts(self); distVerifyFlags(); return i; @@ -437,17 +474,19 @@ distSetByName(Distribution *dist, char *name) /* Loop through current set */ for (i = 0; dist[i].my_name; i++) { - /* This is shorthand for "dist currently disabled" */ - if (!dist[i].my_dir) - continue; - if (!strcmp(dist[i].my_name, name)) { - *(dist[i].my_mask) |= dist[i].my_bit; - status = TRUE; - } - if (dist[i].my_dist) { - if (distSetByName(dist[i].my_dist, name)) { + switch (dist[i].my_type) { + case DT_TARBALL: + case DT_PACKAGE: + if (!strcmp(dist[i].my_name, name)) { + *(dist[i].my_mask) |= dist[i].my_bit; + status = TRUE; + } + break; + case DT_SUBDIST: + if (distSetByName(dist[i].my_data.my_dist, name)) { status = TRUE; } + break; } } distVerifyFlags(); @@ -461,17 +500,19 @@ distUnsetByName(Distribution *dist, char *name) /* Loop through current set */ for (i = 0; dist[i].my_name; i++) { - /* This is shorthand for "dist currently disabled" */ - if (!dist[i].my_dir) - continue; - if (!strcmp(dist[i].my_name, name)) { - *(dist[i].my_mask) &= ~(dist[i].my_bit); - status = TRUE; - } - if (dist[i].my_dist) { - if (distUnsetByName(dist[i].my_dist, name)) { + switch (dist[i].my_type) { + case DT_TARBALL: + case DT_PACKAGE: + if (!strcmp(dist[i].my_name, name)) { + *(dist[i].my_mask) &= ~(dist[i].my_bit); + status = TRUE; + } + break; + case DT_SUBDIST: + if (distUnsetByName(dist[i].my_data.my_dist, name)) { status = TRUE; } + break; } } return status; @@ -542,7 +583,6 @@ distSetSrc(dialogMenuItem *self) return i | DITEM_RESTORE; } -#ifndef X_AS_PKG int distSetXF86(dialogMenuItem *self) { @@ -554,7 +594,6 @@ distSetXF86(dialogMenuItem *self) distVerifyFlags(); return i | DITEM_RESTORE; } -#endif static Boolean got_intr = FALSE; @@ -576,300 +615,306 @@ check_for_interrupt(void) return FALSE; } +/* + * Try to get distribution as multiple pieces, locating and parsing an + * info file which tells us how many we need for this distribution. + */ static Boolean -distExtract(char *parent, Distribution *me) +distExtractTarball(char *path, char *dist, char *my_dir, int is_base) { - int i,j, status, total, intr, unmounted_dev; + char *buf = NULL, fname[PATH_MAX]; + struct timeval start, stop; + int i, j, status, total, intr, unmounted_dev; int cpid, zpid, fd2, chunk, numchunks; - char *path, *dist, *buf = NULL, fname[PATH_MAX]; + properties dist_attr = NULL; const char *tmp; FILE *fp; - WINDOW *w = savescr(); - struct timeval start, stop; - struct sigaction old, new; - properties dist_attr = NULL; status = TRUE; - if (isDebug()) - msgDebug("distExtract: parent: %s, me: %s\n", parent ? parent : "(none)", me->my_name); - - /* Make ^C fake a sudden timeout */ - new.sa_handler = handle_intr; - new.sa_flags = 0; - (void)sigemptyset(&new.sa_mask); - dialog_clear_norefresh(); - dialog_msgbox("Please Wait", "Extracting all requested distributions...", -1, -1, 0); - sigaction(SIGINT, &new, &old); - - /* Loop through to see if we're in our parent's plans */ - for (i = 0; me[i].my_name; i++) { - dist = me[i].my_name; - path = parent ? parent : dist; - - /* If our bit isn't set, go to the next */ - if (!(me[i].my_bit & *(me[i].my_mask))) - continue; - - /* This is shorthand for "dist currently disabled" */ - if (!me[i].my_dir) { - *(me[i].my_mask) &= ~(me[i].my_bit); - continue; - } - - /* Recurse if we actually have a sub-distribution */ - if (me[i].my_dist) { - if ((status = distExtract(dist, me[i].my_dist)) == TRUE) - *(me[i].my_mask) &= ~(me[i].my_bit); - goto done; - } - + numchunks = 0; + snprintf(fname, sizeof (fname), "%s/%s.inf", path, dist); + +getinfo: + fp = DEVICE_GET(mediaDevice, fname, TRUE); + intr = check_for_interrupt(); + if (fp == (FILE *)IO_ERROR || intr || !mediaDevice) { + /* Hard error, can't continue */ + if (!msgYesNo("Unable to open %s: %s.\nReinitialize media?", + fname, !intr ? "I/O error." : "User interrupt.")) { + DEVICE_SHUTDOWN(mediaDevice); + if (!DEVICE_INIT(mediaDevice)) + return (FALSE); + goto getinfo; + } else + return (FALSE); + } else if (fp == NULL) { + /* No attributes file, so try as a single file. */ + snprintf(fname, sizeof(fname), "%s/%s.%s", path, dist, + USE_GZIP ? "tgz" : "tbz"); /* - * Try to get distribution as multiple pieces, locating and parsing an - * info file which tells us how many we need for this distribution. + * Passing TRUE as 3rd parm to get routine makes this a "probing" + * get, for which errors are not considered too significant. */ - numchunks = 0; - snprintf(fname, sizeof fname, "%s/%s.inf", path, dist); - - getinfo: + getsingle: fp = DEVICE_GET(mediaDevice, fname, TRUE); intr = check_for_interrupt(); if (fp == (FILE *)IO_ERROR || intr || !mediaDevice) { /* Hard error, can't continue */ - if (!msgYesNo("Unable to open %s: %s.\nReinitialize media?", - fname, !intr ? "I/O error." : "User interrupt.")) { - DEVICE_SHUTDOWN(mediaDevice); - if (!DEVICE_INIT(mediaDevice)) { - status = FALSE; - goto done; - } - else - goto getinfo; - } - else { - status = FALSE; - goto done; - } - } - else if (fp != NULL) { - if (isDebug()) - msgDebug("Parsing attributes file for distribution %s\n", dist); - - dist_attr = properties_read(fileno(fp)); - intr = check_for_interrupt(); - if (intr || !dist_attr) { - msgConfirm("Cannot parse information file for the %s distribution: %s\n" - "Please verify that your media is valid and try again.", - dist, !intr ? "I/O error" : "User interrupt"); - } - else { - tmp = property_find(dist_attr, "Pieces"); - if (tmp) - numchunks = strtol(tmp, 0, 0); - } - fclose(fp); - if (!numchunks) - continue; - } - else { - /* Try to get the distribution as a single file */ - snprintf(fname, sizeof fname, "%s/%s.%s", path, dist, - USE_GZIP ? "tgz" : "tbz"); - /* - * Passing TRUE as 3rd parm to get routine makes this a "probing" - * get, for which errors are not considered too significant. - */ - getsingle: - fp = DEVICE_GET(mediaDevice, fname, TRUE); - intr = check_for_interrupt(); - if (fp == (FILE *)IO_ERROR || intr || !mediaDevice) { - /* Hard error, can't continue */ - if (intr) /* result of an interrupt */ - msgConfirm("Unable to open %s: User interrupt", fname); - else - msgConfirm("Unable to open %s: I/O error", fname); - DEVICE_SHUTDOWN(mediaDevice); - if (!DEVICE_INIT(mediaDevice)) { - status = FALSE; - goto done; - } - else - goto getsingle; - } - else if (fp != NULL) { - char *dir = root_bias(me[i].my_dir); + msgConfirm("Unable to open %s: %s", fname, + !intr ? "I/O error" : "User interrupt"); + DEVICE_SHUTDOWN(mediaDevice); + if (!DEVICE_INIT(mediaDevice)) + return (FALSE); + goto getsingle; + } else if (fp != NULL) { + char *dir = root_bias(my_dir); - dialog_clear_norefresh(); - msgNotify("Extracting %s into %s directory...", dist, dir); - status = mediaExtractDist(dir, dist, fp); - fclose(fp); - goto done; - } - else { - status = FALSE; - goto done; - } - } + dialog_clear_norefresh(); + msgNotify("Extracting %s into %s directory...", dist, dir); + status = mediaExtractDist(dir, dist, fp); + fclose(fp); + return (status); + } else + return (FALSE); + } - /* Fall through from "we got the attribute file, now get the pieces" step */ - if (!numchunks) - continue; + if (isDebug()) + msgDebug("Parsing attributes file for distribution %s\n", dist); + + dist_attr = properties_read(fileno(fp)); + intr = check_for_interrupt(); + if (intr || !dist_attr) { + msgConfirm("Cannot parse information file for the %s distribution: %s\n" + "Please verify that your media is valid and try again.", + dist, !intr ? "I/O error" : "User interrupt"); + } else { + tmp = property_find(dist_attr, "Pieces"); + if (tmp) + numchunks = strtol(tmp, 0, 0); + } + fclose(fp); + if (!numchunks) + return (TRUE); - if (isDebug()) - msgDebug("Attempting to extract distribution from %u chunks.\n", numchunks); + if (isDebug()) + msgDebug("Attempting to extract distribution from %u chunks.\n", + numchunks); - total = 0; - (void)gettimeofday(&start, (struct timezone *)0); + total = 0; + (void)gettimeofday(&start, (struct timezone *)NULL); - if (me[i].my_bit == DIST_BASE && RunningAsInit && !Fake) { - unmounted_dev = 1; - unmount("/dev", MNT_FORCE); - } else - unmounted_dev = 0; + if (is_base && RunningAsInit && !Fake) { + unmounted_dev = 1; + unmount("/dev", MNT_FORCE); + } else + unmounted_dev = 0; - /* We have one or more chunks, initialize unpackers... */ - mediaExtractDistBegin(root_bias(me[i].my_dir), &fd2, &zpid, &cpid); + /* We have one or more chunks, initialize unpackers... */ + mediaExtractDistBegin(root_bias(my_dir), &fd2, &zpid, &cpid); - /* And go for all the chunks */ - dialog_clear_norefresh(); - for (chunk = 0; chunk < numchunks; chunk++) { - int n, retval, last_msg, chunksize, realsize; - char prompt[80]; - - last_msg = 0; - - getchunk: - snprintf(fname, sizeof fname, "cksum.%c%c", (chunk / 26) + 'a', (chunk % 26) + 'a'); - tmp = property_find(dist_attr, fname); - chunksize = 0; - if (tmp) { - tmp=index(tmp, ' '); - chunksize = strtol(tmp, 0, 0); - } - snprintf(fname, sizeof fname, "%s/%s.%c%c", path, dist, (chunk / 26) + 'a', (chunk % 26) + 'a'); - if (isDebug()) - msgDebug("trying for piece %d of %d: %s\n", chunk + 1, numchunks, fname); - fp = DEVICE_GET(mediaDevice, fname, FALSE); - intr = check_for_interrupt(); - if (fp <= (FILE *)0 || intr) { - if (fp == (FILE *)0) - msgConfirm("Failed to find %s on this media. Reinitializing media.", fname); - else - msgConfirm("failed to retreive piece file %s.\n" - "%s: Reinitializing media.", fname, !intr ? "I/O error" : "User interrupt"); - DEVICE_SHUTDOWN(mediaDevice); - if (!DEVICE_INIT(mediaDevice)) - goto punt; - else - goto getchunk; - } + /* And go for all the chunks */ + dialog_clear_norefresh(); + for (chunk = 0; chunk < numchunks; chunk++) { + int n, retval, last_msg, chunksize, realsize; + char prompt[80]; + + last_msg = 0; + + getchunk: + snprintf(fname, sizeof(fname), "cksum.%c%c", (chunk / 26) + 'a', + (chunk % 26) + 'a'); + tmp = property_find(dist_attr, fname); + chunksize = 0; + if (tmp) { + tmp = index(tmp, ' '); + chunksize = strtol(tmp, 0, 0); + } + snprintf(fname, sizeof(fname), "%s/%s.%c%c", path, dist, (chunk / 26) + 'a', + (chunk % 26) + 'a'); + if (isDebug()) + msgDebug("trying for piece %d of %d: %s\n", chunk + 1, numchunks, + fname); + fp = DEVICE_GET(mediaDevice, fname, FALSE); + intr = check_for_interrupt(); + /* XXX: this can't work if we get an I/O error */ + if (fp <= (FILE *)NULL || intr) { + if (fp == NULL) + msgConfirm("Failed to find %s on this media. Reinitializing media.", fname); + else + msgConfirm("Failed to retreive piece file %s.\n" + "%s: Reinitializing media.", + fname, !intr ? "I/O error" : "User interrupt"); + DEVICE_SHUTDOWN(mediaDevice); + if (!DEVICE_INIT(mediaDevice)) + goto punt; + else + goto getchunk; + } - snprintf(prompt, sizeof prompt, "Extracting %s into %s directory...", dist, root_bias(me[i].my_dir)); - dialog_gauge("Progress", prompt, 8, 15, 6, 50, (int)((float)(chunk + 1) / numchunks * 100)); + snprintf(prompt, sizeof(prompt), "Extracting %s into %s directory...", + dist, root_bias(my_dir)); + dialog_gauge("Progress", prompt, 8, 15, 6, 50, + (chunk + 1) * 100 / numchunks); - buf = safe_realloc(buf, chunksize); - realsize = 0; - while (1) { - int seconds; + buf = safe_realloc(buf, chunksize); + realsize = 0; + while (1) { + int seconds; - n = fread(buf + realsize, 1, BUFSIZ, fp); - if (check_for_interrupt()) { - msgConfirm("Media read error: User interrupt."); - fclose(fp); - goto punt; - } - else if (n <= 0) - break; - total += n; - realsize += n; - - /* Print statistics about how we're doing */ - (void) gettimeofday(&stop, (struct timezone *)0); - stop.tv_sec = stop.tv_sec - start.tv_sec; - stop.tv_usec = stop.tv_usec - start.tv_usec; - if (stop.tv_usec < 0) - stop.tv_sec--, stop.tv_usec += 1000000; - seconds = stop.tv_sec + (stop.tv_usec / 1000000.0); - if (!seconds) - seconds = 1; - - if (seconds != last_msg) { - last_msg = seconds; - msgInfo("%10d bytes read from %s dist, chunk %2d of %2d @ %.1f KBytes/sec.", - total, dist, chunk + 1, numchunks, (total / seconds) / 1000.0); - } + n = fread(buf + realsize, 1, BUFSIZ, fp); + if (check_for_interrupt()) { + msgConfirm("Media read error: User interrupt."); + fclose(fp); + goto punt; + } else if (n <= 0) + break; + total += n; + realsize += n; + + /* Print statistics about how we're doing */ + (void) gettimeofday(&stop, (struct timezone *)0); + stop.tv_sec = stop.tv_sec - start.tv_sec; + stop.tv_usec = stop.tv_usec - start.tv_usec; + if (stop.tv_usec < 0) + stop.tv_sec--, stop.tv_usec += 1000000; + seconds = stop.tv_sec + (stop.tv_usec / 1000000.0); + if (!seconds) + seconds = 1; + + if (seconds != last_msg) { + last_msg = seconds; + msgInfo("%10d bytes read from %s dist, chunk %2d of %2d @ %.1f KBytes/sec.", + total, dist, chunk + 1, numchunks, + (total / seconds) / 1000.0); } - fclose(fp); - - if (!chunksize || (realsize == chunksize)) { - /* No substitution necessary */ - retval = write(fd2, buf, realsize); - if (retval != realsize) { - fclose(fp); - dialog_clear_norefresh(); - msgConfirm("Write failure on transfer! (wrote %d bytes of %d bytes)", retval, realsize); + } + fclose(fp); + + if (!chunksize || (realsize == chunksize)) { + /* No substitution necessary */ + retval = write(fd2, buf, realsize); + if (retval != realsize) { + fclose(fp); + dialog_clear_norefresh(); + msgConfirm("Write failure on transfer! (wrote %d bytes of %d bytes)", retval, realsize); goto punt; - } - } else { - for (j = 0; j < realsize; j++) { - /* On finding CRLF, skip the CR; don't exceed end of buffer. */ - if ((buf[j] != 0x0d) || (j == total - 1) || (buf[j + 1] != 0x0a)) { - retval = write(fd2, buf + j, 1); - if (retval != 1) { - fclose(fp); - dialog_clear_norefresh(); - msgConfirm("Write failure on transfer! (wrote %d bytes of %d bytes)", j, chunksize); - goto punt; - } + } + } else { + for (j = 0; j < realsize; j++) { + /* On finding CRLF, skip the CR; don't exceed end of buffer. */ + if ((buf[j] != 0x0d) || (j == total - 1) || (buf[j + 1] != 0x0a)) { + retval = write(fd2, buf + j, 1); + if (retval != 1) { + fclose(fp); + dialog_clear_norefresh(); + msgConfirm("Write failure on transfer! (wrote %d bytes of %d bytes)", j, chunksize); + goto punt; } } } } - close(fd2); + } + goto done; + +punt: + status = FALSE; +done: + properties_free(dist_attr); + close(fd2); + if (status != FALSE) status = mediaExtractDistEnd(zpid, cpid); - goto done; + else + (void)mediaExtractDistEnd(zpid, cpid); + + if (unmounted_dev) { + struct iovec iov[4]; + + iov[0].iov_base = "fstype"; + iov[0].iov_len = sizeof("fstype"); + iov[1].iov_base = "devfs"; + iov[1].iov_len = sizeof("devfs"); + iov[2].iov_base = "fspath"; + iov[2].iov_len = sizeof("fstype"); + iov[3].iov_base = "/dev"; + iov[3].iov_len = sizeof("/dev"); + (void)nmount(iov, 4, 0); + unmounted_dev = 0; + } - punt: - close(fd2); - mediaExtractDistEnd(zpid, cpid); - status = FALSE; + safe_free(buf); +} - done: - if (!status) { - dialog_clear_norefresh(); - if (me[i].my_dist) { +static Boolean +distExtract(char *parent, Distribution *me) +{ + int i, status; + char *path, *dist; + WINDOW *w = savescr(); + struct sigaction old, new; + + status = TRUE; + if (isDebug()) + msgDebug("distExtract: parent: %s, me: %s\n", parent ? parent : "(none)", me->my_name); + + /* Make ^C fake a sudden timeout */ + new.sa_handler = handle_intr; + new.sa_flags = 0; + (void)sigemptyset(&new.sa_mask); + dialog_clear_norefresh(); + dialog_msgbox("Please Wait", "Extracting all requested distributions...", -1, -1, 0); + sigaction(SIGINT, &new, &old); + + /* Loop through to see if we're in our parent's plans */ + for (i = 0; me[i].my_name; i++) { + dist = me[i].my_name; + path = parent ? parent : dist; + + /* If our bit isn't set, go to the next */ + if (!(me[i].my_bit & *(me[i].my_mask))) + continue; + + switch (me[i].my_type) { + case DT_SUBDIST: + /* Recurse if we actually have a sub-distribution */ + status = distExtract(dist, me[i].my_data.my_dist); + if (!status) { + dialog_clear_norefresh(); msgConfirm("Unable to transfer all components of the %s distribution.\n" - "You may wish to switch media types and try again.\n", me[i].my_name); + "You may wish to switch media types and try again.\n", + me[i].my_name); } - else if (me[i].my_bit != DIST_LOCAL) { - status = msgYesNo("Unable to transfer the %s distribution from\n%s.\n\n" - "Do you want to try to retrieve it again?", - me[i].my_name, mediaDevice->name); - if (!status) - --i; + break; + case DT_PACKAGE: + dialog_clear_norefresh(); + msgNotify("Installing %s distribution...", dist); + status = (package_add(me[i].my_data.my_string) == DITEM_SUCCESS); + if (!status) + dialog_clear_norefresh(); + break; + case DT_TARBALL: + status = distExtractTarball(path, dist, me[i].my_data.my_string, + &me[i] == BASE_DIST); + if (!status) { + dialog_clear_norefresh(); + if (me[i].my_bit != DIST_LOCAL) { + status = msgYesNo("Unable to transfer the %s distribution from\n%s.\n\n" + "Do you want to try to retrieve it again?", + me[i].my_name, mediaDevice->name); + if (!status) + --i; + status = FALSE; + } } + break; } - /* If extract was successful, remove ourselves from further consideration */ + + /* + * If extract was successful, remove ourselves from further + * consideration. + */ if (status) *(me[i].my_mask) &= ~(me[i].my_bit); - else - continue; - if (unmounted_dev) { - struct iovec iov[4]; - - iov[0].iov_base = "fstype"; - iov[0].iov_len = sizeof("fstype"); - iov[1].iov_base = "devfs"; - iov[1].iov_len = sizeof("devfs"); - iov[2].iov_base = "fspath"; - iov[2].iov_len = sizeof("fstype"); - iov[3].iov_base = "/dev"; - iov[3].iov_len = sizeof("/dev"); - (void)nmount(iov, 4, 0); - unmounted_dev = 0; - } } - safe_free(buf); - properties_free(dist_attr); sigaction(SIGINT, &old, NULL); /* Restore signal handler */ restorescr(w); return status; @@ -887,19 +932,16 @@ printSelected(char *buf, int selected, Distribution *me, int *col) if (!(me[i].my_bit & selected)) continue; - /* This is shorthand for "dist currently disabled" */ - if (!me[i].my_dir) - continue; - *col += strlen(me[i].my_name); if (*col > 50) { *col = 0; strcat(buf, "\n"); } sprintf(&buf[strlen(buf)], " %s", me[i].my_name); + /* Recurse if have a sub-distribution */ - if (me[i].my_dist) - printSelected(buf, *(me[i].my_mask), me[i].my_dist, col); + if (me[i].my_type == DT_SUBDIST) + printSelected(buf, *(me[i].my_mask), me[i].my_data.my_dist, col); } } @@ -909,10 +951,6 @@ distExtractAll(dialogMenuItem *self) int old_dists, retries = 0, status = DITEM_SUCCESS; char buf[512]; WINDOW *w; - int want_perl_package = 0; -#ifdef X_AS_PKG - int want_x_package = 0; -#endif /* paranoia */ if (!Dists) { @@ -930,33 +968,14 @@ distExtractAll(dialogMenuItem *self) w = savescr(); msgNotify("Attempting to install all selected distributions.."); - /* Clear perl dist flag, but remember it was present. */ - if (Dists & DIST_PERL) { - want_perl_package = 1; - Dists &= ~DIST_PERL; - } -#ifdef X_AS_PKG - /* Clear any XFree86 dist flags, but remember they were present. */ - if(Dists & DIST_XF86) - want_x_package = 1; - Dists &= ~DIST_XF86; -#endif - /* Try for 3 times around the loop, then give up. */ while (Dists && ++retries < 3) distExtract(NULL, DistTable); - if (want_perl_package) - status |= installPackage(NULL, "Perl", "perl"); -#ifdef X_AS_PKG - if (want_x_package) - status |= installPackage(NULL, "XFree86", "XFree86-4"); -#endif - dialog_clear_norefresh(); - /* Only do bin fixup if bin dist was successfully extracted */ + /* Only do base fixup if base dist was successfully extracted */ if ((old_dists & DIST_BASE) && !(Dists & DIST_BASE)) - status |= installFixupBin(self); + status |= installFixupBase(self); #ifndef X_AS_PKG if (old_dists & DIST_XF86) status |= installFixupXFree(self); diff --git a/usr.sbin/sysinstall/dist.h b/usr.sbin/sysinstall/dist.h index b63ffa6..b6fc015 100644 --- a/usr.sbin/sysinstall/dist.h +++ b/usr.sbin/sysinstall/dist.h @@ -63,7 +63,30 @@ #define DIST_SRC_BIN 0x08000 #define DIST_SRC_ALL 0x0FFFF -#ifndef X_AS_PKG +#ifdef X_AS_PKG +/* Subtypes for XFree86 packages */ +#define DIST_XF86_CLIENTS 0x0001 +#define DIST_XF86_DOC 0x0002 +#define DIST_XF86_LIB 0x0004 +#define DIST_XF86_MAN 0x0008 +#define DIST_XF86_PROG 0x0010 +#define DIST_XF86_MISC_ALL 0x001F +#define DIST_XF86_SERVER 0x0020 +#define DIST_XF86_SERVER_FB 0x0001 +#define DIST_XF86_SERVER_NEST 0x0002 +#define DIST_XF86_SERVER_PRINT 0x0004 +#define DIST_XF86_SERVER_VFB 0x0008 +#define DIST_XF86_SERVER_ALL 0x000F +#define DIST_XF86_FONTS 0x0040 +#define DIST_XF86_FONTS_75 0x0001 +#define DIST_XF86_FONTS_100 0x0002 +#define DIST_XF86_FONTS_CYR 0x0004 +#define DIST_XF86_FONTS_SCALE 0x0008 +#define DIST_XF86_FONTS_BITMAPS 0x0010 +#define DIST_XF86_FONTS_SERVER 0x0020 +#define DIST_XF86_FONTS_ALL 0x003F +#define DIST_XF86_ALL 0x007F +#else /* Subtypes for XFree86 distribution */ #define DIST_XF86_BIN 0x0001 #define DIST_XF86_CFG 0x0002 diff --git a/usr.sbin/sysinstall/install.c b/usr.sbin/sysinstall/install.c index e1763ec..3590405 100644 --- a/usr.sbin/sysinstall/install.c +++ b/usr.sbin/sysinstall/install.c @@ -797,7 +797,7 @@ installConfigure(void) } int -installFixupBin(dialogMenuItem *self) +installFixupBase(dialogMenuItem *self) { Device **devs; char *cp; @@ -843,19 +843,7 @@ installFixupBin(dialogMenuItem *self) return DITEM_SUCCESS | DITEM_RESTORE; } -int -installPackage(dialogMenuItem *self, char *desc, char *package) -{ - WINDOW *w = savescr(); - int i; - - dialog_clear_norefresh(); - msgNotify("Installing %s package...", desc); - i = package_add(package); - restorescr(w); - return i; -} - +#ifndef X_AS_PKG /* Fix side-effects from the the XFree86 installation */ int installFixupXFree(dialogMenuItem *self) @@ -867,17 +855,16 @@ installFixupXFree(dialogMenuItem *self) vsystem("chmod -R a+r /usr/X11R6"); vsystem("find /usr/X11R6 -type d | xargs chmod a+x"); -#ifndef X_AS_PKG /* Also do bogus minimal package registration so ports don't whine */ if (file_readable("/usr/X11R6/lib/X11/pkgreg.tar.gz")) { dialog_clear_norefresh(); msgNotify("Installing package metainfo.."); vsystem("tar xpzf /usr/X11R6/lib/X11/pkgreg.tar.gz -C / && rm /usr/X11R6/lib/X11/pkgreg.tar.gz"); } -#endif } return DITEM_SUCCESS | DITEM_RESTORE; } +#endif #define QUEUE_YES 1 #define QUEUE_NO 0 diff --git a/usr.sbin/sysinstall/menus.c b/usr.sbin/sysinstall/menus.c index be89f05..4c37d18 100644 --- a/usr.sbin/sysinstall/menus.c +++ b/usr.sbin/sysinstall/menus.c @@ -60,7 +60,6 @@ clearSrc(dialogMenuItem *self) return DITEM_SUCCESS | DITEM_REDRAW; } -#ifndef X_AS_PKG static int setX11Misc(dialogMenuItem *self) { @@ -109,7 +108,6 @@ clearX11Fonts(dialogMenuItem *self) XF86FontDists = 0; return DITEM_SUCCESS | DITEM_REDRAW; } -#endif /* !X_AS_PKG */ #define _IS_SET(dist, set) (((dist) & (set)) == (set)) @@ -166,13 +164,9 @@ checkDistEverything(dialogMenuItem *self) { return Dists == DIST_ALL && CRYPTODists == DIST_CRYPTO_ALL && _IS_SET(SrcDists, DIST_SRC_ALL) && -#ifndef X_AS_PKG _IS_SET(XF86Dists, DIST_XF86_ALL) && _IS_SET(XF86ServerDists, DIST_XF86_SERVER_ALL) && _IS_SET(XF86FontDists, DIST_XF86_FONTS_ALL); -#else - 1; -#endif } static int @@ -228,9 +222,7 @@ DMenu MenuIndex = { { " Dists, User", "Select average user distribution.", checkDistUser, distSetUser }, { " Dists, X User", "Select average X user distribution.", checkDistXUser, distSetXUser }, { " Distributions, Adding", "Installing additional distribution sets", NULL, distExtractAll }, -#ifndef X_AS_PKG { " Distributions, XFree86","XFree86 distribution menu.", NULL, distSetXF86 }, -#endif { " Documentation", "Installation instructions, README, etc.", NULL, dmenuSubmenu, NULL, &MenuDocumentation }, { " Doc, README", "The distribution README file.", NULL, dmenuDisplayFile, NULL, "README" }, { " Doc, Early Adopter's", "Early Adopter's Guide to FreeBSD 5.0.", NULL, dmenuDisplayFile, NULL, "EARLY" }, @@ -296,13 +288,11 @@ DMenu MenuIndex = { { " Upgrade", "Upgrade an existing system.", NULL, installUpgrade }, { " Usage", "Quick start - How to use this menu system.", NULL, dmenuDisplayFile, NULL, "usage" }, { " User Management", "Add user and group information.", NULL, dmenuSubmenu, NULL, &MenuUsermgmt }, -#ifndef X_AS_PKG { " XFree86, Fonts", "XFree86 Font selection menu.", NULL, dmenuSubmenu, NULL, &MenuXF86SelectFonts }, { " XFree86, Server", "XFree86 Server selection menu.", NULL, dmenuSubmenu, NULL, &MenuXF86SelectServer }, -#if defined(__i386__) && defined(PC98) +#if !defined(X_AS_PKG) && defined(__i386__) && defined(PC98) { " XFree86, PC98 Server", "XFree86 PC98 Server selection menu.", NULL, dmenuSubmenu, NULL, &MenuXF86SelectPC98Server }, #endif -#endif { NULL } }, }; @@ -1006,11 +996,7 @@ DMenu MenuSubDistributions = { { " perl", "The Perl distribution", dmenuFlagCheck, dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_PERL }, { " XFree86", "The XFree86 distribution", -#ifdef X_AS_PKG - dmenuFlagCheck, dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_XF86 }, -#else x11FlagCheck, distSetXF86 }, -#endif { NULL } }, }; @@ -1122,7 +1108,6 @@ DMenu MenuXDesktops = { { NULL } }, }; -#ifndef X_AS_PKG DMenu MenuXF86Select = { DMENU_NORMAL_TYPE, "XFree86 Distribution", @@ -1137,6 +1122,87 @@ DMenu MenuXF86Select = { { NULL } }, }; +#ifdef X_AS_PKG +DMenu MenuXF86SelectCore = { + DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS, + "XFree86 base distribution types", + "Please check off the basic XFree86 components you wish to install.\n" + "Bin, lib, and set are recommended for a minimum installaion.", + NULL, + NULL, + { { "X Exit", "Exit this menu (returning to previous)", + checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' }, + { "All", "Select all below", + NULL, setX11Misc, NULL, NULL, ' ', ' ', ' ' }, + { "Reset", "Reset all below", + NULL, clearX11Misc, NULL, NULL, ' ', ' ', ' ' }, + { " bin", "Client applications", + dmenuFlagCheck, dmenuSetFlag, NULL, &XF86Dists, '[', 'X', ']', DIST_XF86_CLIENTS }, + { " lib", "Shared libraries and data files needed at runtime", + dmenuFlagCheck, dmenuSetFlag, NULL, &XF86Dists, '[', 'X', ']', DIST_XF86_LIB }, + { " man", "Manual pages", + dmenuFlagCheck, dmenuSetFlag, NULL, &XF86Dists, '[', 'X', ']', DIST_XF86_MAN }, + { " doc", "Documentation", + dmenuFlagCheck, dmenuSetFlag, NULL, &XF86Dists, '[', 'X', ']', DIST_XF86_DOC }, + { " prog", "Programming tools", + dmenuFlagCheck, dmenuSetFlag, NULL, &XF86Dists, '[', 'X', ']', DIST_XF86_PROG }, + { NULL } }, +}; + +DMenu MenuXF86SelectFonts = { + DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS, + "Font distribution selection.", + "Please check off the individual font distributions you wish to\n\ +install. At the minimum, you should install the standard\n\ +75 DPI and misc fonts if you're also installing a server\n\ +(these are selected by default).", + NULL, + NULL, + { { "X Exit", "Exit this menu (returning to previous)", + checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' }, + { "All", "All fonts", + NULL, setX11Fonts, NULL, NULL, ' ', ' ', ' ' }, + { "Reset", "Reset font selections", + NULL, clearX11Fonts, NULL, NULL, ' ', ' ', ' ' }, + { " fnts", "Standard miscellaneous fonts", + dmenuFlagCheck, dmenuSetFlag, NULL, &XF86FontDists, '[', 'X', ']', DIST_XF86_FONTS_BITMAPS }, + { " f75", "75 DPI fonts", + dmenuFlagCheck, dmenuSetFlag, NULL, &XF86FontDists, '[', 'X', ']', DIST_XF86_FONTS_75 }, + { " f100", "100 DPI fonts", + dmenuFlagCheck, dmenuSetFlag, NULL, &XF86FontDists, '[', 'X', ']', DIST_XF86_FONTS_100 }, + { " fcyr", "Cyrillic Fonts", + dmenuFlagCheck, dmenuSetFlag, NULL, &XF86FontDists, '[', 'X', ']', DIST_XF86_FONTS_CYR }, + { " fscl", "Speedo and Type scalable fonts", + dmenuFlagCheck, dmenuSetFlag, NULL, &XF86FontDists, '[', 'X', ']', DIST_XF86_FONTS_SCALE }, + { " server", "Font server", + dmenuFlagCheck, dmenuSetFlag, NULL, &XF86FontDists, '[', 'X', ']', DIST_XF86_FONTS_SERVER }, + { NULL } }, +}; + +DMenu MenuXF86SelectServer = { + DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS, + "X Server selection.", + "Please check off the types of X servers you wish to install.\n", + NULL, + NULL, + { { "X Exit", "Exit this menu (returning to previous)", + checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' }, + { "All", "Select all of the above", + NULL, setX11Servers, NULL, NULL, ' ', ' ', ' ' }, + { "Reset", "Reset all of the above", + NULL, clearX11Servers, NULL, NULL, ' ', ' ', ' ' }, + { " srv", "Standard Graphics Framebuffer", + dmenuFlagCheck, dmenuSetFlag, NULL, &XF86ServerDists, '[', 'X', ']', DIST_XF86_SERVER_FB }, + { " nest", "Nested X Server", + dmenuFlagCheck, dmenuSetFlag, NULL, &XF86ServerDists, '[', 'X', ']', DIST_XF86_SERVER_NEST }, + { " prt", "X Print Server", + dmenuFlagCheck, dmenuSetFlag, NULL, &XF86ServerDists, '[', 'X', ']', DIST_XF86_SERVER_PRINT }, + { " vfb", "Virtual Framebuffer", + dmenuFlagCheck, dmenuSetFlag, NULL, &XF86ServerDists, '[', 'X', ']', DIST_XF86_SERVER_VFB }, + { NULL } }, +}; + +#else DMenu MenuXF86SelectCore = { DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS, "XFree86 base distribution types", diff --git a/usr.sbin/sysinstall/sysinstall.h b/usr.sbin/sysinstall/sysinstall.h index 5f19c13..68a16c9 100644 --- a/usr.sbin/sysinstall/sysinstall.h +++ b/usr.sbin/sysinstall/sysinstall.h @@ -413,11 +413,9 @@ extern Device *mediaDevice; /* Where we're getting our distribution from */ extern unsigned int Dists; /* Which distributions we want */ extern unsigned int CRYPTODists; /* Which naughty distributions we want */ extern unsigned int SrcDists; /* Which src distributions we want */ -#ifndef X_AS_PKG extern unsigned int XF86Dists; /* Which XFree86 dists we want */ extern unsigned int XF86ServerDists; /* The XFree86 servers we want */ extern unsigned int XF86FontDists; /* The XFree86 fonts we want */ -#endif extern int BootMgr; /* Which boot manager to use */ extern int StatusLine; /* Where to print our status messages */ extern DMenu MenuInitial; /* Initial installation menu */ @@ -467,13 +465,13 @@ extern DMenu MenuDiskDevices; /* Disk type devices */ extern DMenu MenuSubDistributions; /* Custom distribution menu */ extern DMenu MenuSrcDistributions; /* Source distribution menu */ extern DMenu MenuXF86; /* XFree86 main menu */ -#ifndef X_AS_PKG extern DMenu MenuXF86Select; /* XFree86 distribution selection menu */ extern DMenu MenuXF86SelectCore; /* XFree86 core distribution menu */ extern DMenu MenuXF86SelectServer; /* XFree86 server distribution menu */ +#if !defined(X_AS_PKG) && defined(__i386__) && defined(PC98) extern DMenu MenuXF86SelectPC98Server; /* XFree86 server distribution menu */ -extern DMenu MenuXF86SelectFonts; /* XFree86 font selection menu */ #endif +extern DMenu MenuXF86SelectFonts; /* XFree86 font selection menu */ extern DMenu MenuXDesktops; /* Disk devices menu */ extern DMenu MenuHTMLDoc; /* HTML Documentation menu */ extern DMenu MenuUsermgmt; /* User management menu */ @@ -589,9 +587,7 @@ extern int distSetXUser(dialogMenuItem *self); extern int distSetMinimum(dialogMenuItem *self); extern int distSetEverything(dialogMenuItem *self); extern int distSetSrc(dialogMenuItem *self); -#ifndef X_AS_PKG extern int distSetXF86(dialogMenuItem *self); -#endif extern int distExtractAll(dialogMenuItem *self); /* dmenu.c */ @@ -663,13 +659,14 @@ extern int installStandard(dialogMenuItem *self); extern int installFixitHoloShell(dialogMenuItem *self); extern int installFixitCDROM(dialogMenuItem *self); extern int installFixitFloppy(dialogMenuItem *self); -extern int installFixupBin(dialogMenuItem *self); +extern int installFixupBase(dialogMenuItem *self); +#ifndef X_AS_PKG extern int installFixupXFree(dialogMenuItem *self); +#endif extern int installUpgrade(dialogMenuItem *self); extern int installFilesystems(dialogMenuItem *self); extern int installVarDefaults(dialogMenuItem *self); extern void installEnvironment(void); -extern int installPackage(dialogMenuItem *self, char *package, char *desc); extern Boolean copySelf(void); /* kget.c */ |