Remove metadata_overlay option, since it doesn't make sense with >=portage-2.1.6
[catalyst.git] / TODO
diff --git a/TODO b/TODO
index d74f6ee08b58bde87758f8600f20e9e073c36fb1..21fb38628d47c382c2141d8c63d6f5bc9b8b9ac2 100644 (file)
--- a/TODO
+++ b/TODO
-- Remove spec_prefix from all exported variables
-- sign materials automatically
-- create logs
-- send emails
-- add multiple target support
-- separate out options that control catalyst versus the package manager
-- add a new livecd/type for livedvd
-  - make livedvd type perform several actions automatically
-    - auto-fetch distfiles
-       - automatically pull stages
-- check that distcc_hosts is set before enabling distcc
-- allow setting of distcc_hosts in catalyst.conf with override in the specs
-- check ccache settings, such as size, and ensure we don't overwrite them
-- perform user management via a loop in livecd-stage2
-- add portage jobs support
-  - --jobs
-  - --keep-going
-  - --load-average
-- perform GCC version detection in seed stages to determine supported settings
-- build bootloaders for targets on-demand, rather than using pre-built tarballs
+# $Id$
+
+This file is a rough list of changes that need to be made to catalyst.  If you
+have questions about any of these items, or wish to help with development, send
+them to the gentoo-catalyst@lists.gentoo.org mailing list.  Bug reports should
+be filed at http://tinyurl.com/79slrk (http://bugs.gentoo.org) under the
+Catalyst component.
+
+Global:
+- remove spec_prefix from all exported variables (DONE)
+  - variables without spec_prefix are global and used in all targets
+  - variables with spec_prefix only apply to that target
+- add multiple target support for spec files (DONE)
+  - target: stage1
+  - targets: stage1 stage2 stage3 stage4 livecd netboot
+- add more validation and checking to code
+  - allow configuration globally (catalyst.conf), per-spec, or per-target
+  - setup defaults if host isn't configured
+  - do not assume end-user is a Release Engineer/Developer
+    - fallback to defaults on invalid options, by default (opt-out)
+    - more verbose error reporting to assist in troubleshooting problems
+  - perform verifications before starting processing
+    - referenced files exist
+    - seed has required components for building
+- support new portage features
+  - cache backends
+    - metadata_overlay (portage default in 2.1.6)
+    - sqlite
+  - jobs
+  - load average
+  - dependency checking
+    - --deep
+    - --complete-graph
+    - --with-bdeps y (Build-time dependencies)
+  - USE changes
+    - --newuse
+    - --reinstall changed-use
+  - failure detection
+    - --keep-going
+    - --resume --skipfirst
+- detect GCC version in seed stages for supported settings (CFLAGS)
+- add statistics gathering/reporting
+  - counters
+    - sessions started/completed/failed
+    - targets started/completed/failed (and per-subarch here, too)
+    - sessions/targets run-time, CPU/RAM/disk usage (max and final)
+  - guages
+    - sessions/targets active
+    - caching information
+      - packages/stages/snapshots in respective caches
+      - cache hit ratio/percent
+      - cache age
+    - timing information
+      - currently-running jobs
+      - specific tasks
+        - dependency calculation
+        - unpacking seeds
+  - easily retrievable (text files? BDB? SQLite? configurable?) for monitoring
+- enhance support for catalystrc
+  - source before each build step
+  - more like /etc/portage/bashrc or profile.bashrc
+  - adds ability for user-defined hooks
+
+Config:
+- security
+  - automated signing
+  - security updates
+- logging
+  - add logging support (partially done through use of catalyst.output.msg())
+    - file-based
+    - syslog
+  - add notification capabilities
+    - email
+    - snmp trap
+- seperate catalyst options from the package manager options
+  - options key should specify catalyst options only
+  - new keys for package managers
+    - portage_features
+    - pkgcore_features
+- clean up mixed host/target options
+  - save/restore host settings
+    - ccache (size, location, etc)
+    - distcc (distcc_hosts, allowed, logging, etc)
+    - icecream (icecream_hosts, etc)
+- add options to update the caches/seeds before processing targets
+  - validate caches, update as necessary
+  - trust caches to be accurate
+  - update packages in seed
+    - no updates
+    - minimal updates (toolchain and dependencies, basically)
+    - update world
+
+Targets:
+- add support for livedvd/liveusb
+  - do we use livecd/type or something new
+  - perform automatic actions, if configured
+    - auto-fetch non-target materials
+      - snapshots
+      - distfiles
+      - stages
+        - local absolute or relative path
+        - support URIs
+          - absolute URI path
+          - base URI path
+        - allow tarball names to be derived from target name
+    - create a default user
+- change user creation to be more flexible
+  - stage4 and netboot support
+- build boot software for targets on-demand
+  - removes cdtar requirement
+  - allows one to specify multiple bootloaders
+    - boot/loader: grub elilo
+    - netboot/boot/loader: pxelinux elilo
+    - livecd/boot/loader: isolinux elilo
+  - add ability to specify other "bootables" to build/install, like memtest86+
+    - do we use a single spec key or multiple?
+      - single
+        - boot/image: memtest|/path/to/image (pre-built, label=memtest)
+        - livecd/boot/image: memtest86+ (use PM to build)
+        - livecd/boot/image: memtest|build-memtest86+ (use PM, change label)
+        - livecd/boot/image: memtest|auto (locate in cache, try build, fail)
+      - multiple
+        - livecd/boot/labels: gentoo gentoo-nofb gentoo-nodetect memtest
+        - livecd/boot/image: gentoo gentoo gentoo memtest86 ("kernel" line)
+        - livecd/boot/opts: default default default,nodetect none
+    - do we also need a way to specify an initrd with this?
+  - setup defaults for each arch
+    - allow user-defined overrides/adds
+    - verify usability on arch
+- add variable support for spec files
+  - automatic substitution
+    - %DATESTAMP%
+    - %BUILDDIR%
+  - user-defined
+    - %DISTRIBUTION%
+    - %AUTHOR%
+- add new targets
+  - system (proof of concept)
+    - aligned with current stage3, but has all lower-level work done (toolchain)
+      - mkdir -p /tmp/stage3root/etc
+      - cp -a /etc/make.conf /etc/make.globals make.profile /tmp/stage3root/etc/
+      - ROOT=/tmp/stage3root PORTAGE_CONFIGROOT=/tmp/stage3root
+      - USE=build emerge -O1 baselayout
+      - emerge system
+      - eat cake
+  - world
+    - stage4 work-a-like
+  - all-stages
+    - perform stages 1, 2, and 3 (and 4?)
+  - all-images
+    - perform all-stages, if necessary
+    - build all image types
+      - LiveCD
+      - LiveDVD
+      - LiveUSB
+      - NetBoot
+        - standalone
+        - nfsroot
+- merge livecd-stage1 and livecd-stage2 into livecd target
+  - do we add targets for other live (LiveDVD, LiveUSB, LiveNet) media?
+- add support for multiple userland images on a single media
+  - 32-bit and 64-bit kernels/userlands
+  - multiple arches/ABIs
+  - normal and debug kernels/userlands
+- perform fetches before builds
+- smarter auto-resume/caching
+  - record file/dir metadata (such as for portage_confdir) to invalidate autoresume
+  - one failed autoresume invalidates all remaining autoresume points
+  - store failure info
+    - attempt normal --resume or equivalent auto-resume
+    - remove object from seed/package caches
+      - try --resume then --skipfirst to continue
+    - attempt to resolve issue, where possible
+      - merge failing package individually
+      - again with unset MAKEOPTS
+  - detect optional changes
+    - CFLAGS/LDFLAGS/etc
+  - reduce duplicated cache files
+    - shared caches, where possible
+    - symlinks
+    - hard links
+- include livecd-tools functionality
+  - userspace device enumeration/configuration
+    - pre-defined hardware information for OEM/VAR machines
+    - detect/setup network
+      - on-line updating support
+        - driver modules
+        - kernel (via kexec) when possible
+        - hardware definitions
+    - video detection/setup
+    - use hald/dbus to help standardize
+  - media-specific fixups
+    - opengl configuration
+    - auto-login on consoles
+      - setup serial console
+    - prevent rc system from unmounting incorrectly