From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 470C21395F0 for ; Tue, 4 Aug 2015 19:32:36 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 2AA0C1413B; Tue, 4 Aug 2015 19:32:31 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 36E8A1413B for ; Tue, 4 Aug 2015 19:32:30 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id DA51E340939 for ; Tue, 4 Aug 2015 19:32:26 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id B3608C3 for ; Tue, 4 Aug 2015 19:32:21 +0000 (UTC) From: "Anthony G. Basile" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Anthony G. Basile" Message-ID: <1438716922.85b44d605e6a85095a16f81b5eee9c380567acae.blueness@gentoo> Subject: [gentoo-commits] proj/grss:master commit in: / X-VCS-Repository: proj/grss X-VCS-Files: README X-VCS-Directories: / X-VCS-Committer: blueness X-VCS-Committer-Name: Anthony G. Basile X-VCS-Revision: 85b44d605e6a85095a16f81b5eee9c380567acae X-VCS-Branch: master Date: Tue, 4 Aug 2015 19:32:21 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 262e57eb-335d-4808-a126-2df585e9a61e X-Archives-Hash: 751cf89ddecdfb45339e9668a3a860c7 commit: 85b44d605e6a85095a16f81b5eee9c380567acae Author: Anthony G. Basile gentoo org> AuthorDate: Tue Aug 4 19:35:22 2015 +0000 Commit: Anthony G. Basile gentoo org> CommitDate: Tue Aug 4 19:35:22 2015 +0000 URL: https://gitweb.gentoo.org/proj/grss.git/commit/?id=85b44d60 README: bring in line with wiki page. README | 171 +++++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 87 insertions(+), 84 deletions(-) diff --git a/README b/README index 626f80d..8bd1b7f 100644 --- a/README +++ b/README @@ -1,89 +1,92 @@ - -What is this? - -The Gentoo Reference System (GRS) Suite is a set of utilities for producing and -maintaining identical Gentoo systems from a series of configuration files housed -on a central git repository. As a 'from source' distribution, Gentoo allows -a large degree of customization. The space of all possible packages and USE flags -is vast, not to speak of more radical choices such as different kernels (eg. Gentoo -on FreeBSD), different C Standard Libraries (eg. glibc, uClibc or musl) and different -providers of core userland utilities (eg. busybox vs. coreutils). In contrast -to other distributions where each instance of an installed system is nearly identical -to another, the large array of choice in Gentoo means that any two systems are -unlikely to be sufficiently similar that executables or libraries from one will -"just work" on the other, even if the architecture and other hardware factors are -the same; assuming, of course, there is no conscious effort to build identical -Gentoo systems. This is where the Gentoo Release System (GRS) suite comes in. -It does precisely this, namely, it provides an automated method for repeatedly -and predicably generating identical Gentoo systems. - -GRS is designed to work roughly as follows: Periodic release tarballs are generated -which are "polished". For example, releases can provide preconfigured display -managers, windowing systems, user accounts and home directories. Installation -should be as simple as unpacking the release tarball on pre-formated partitions -with minimal or no further configuration. There is no need to build any packages -or a kernel and everything is ready to go out of the box. A release tarball can -be downloaded from some server or alternatively can be built locally. While may -not be identical because they were build at different times, after updating, both -approaches should yield identical systems. - -Updating a GRS system can proceed by either building packages localy, or downloading -prebuilt binpkgs. As long as one does not deviate from the GRS defined set of USE -flags, maskings and other configuration parameters, both approaches should yield -identical systems. A GRS system is always a Gentoo system, so at any time, one can -elect to part ways from GRS and venture out on one's own! The GRS suite provides a -utilities to make sure that configurations in /etc/portage are properly in a -manner consistant with GRS, but emerge and other portage utilities will always work. -Even if one does deviate from the GRS defined parameters, it should be possible to -return to strict GRS using the GRS utilities, provided one has not deviated too far. - -GRS is provided by app-portage/grs. The same package is installed on either a -server responsible for building the release tarballs and binpkgs, or on an actual -GRS system. On the server, a daemon called grsrun will either do a release run, -in which case it builds the release tarballs, or it will do an update run where -it either builds or updates a bunch of extra binpkgs. For example, for GRS = -desktop-amd64-uclibc-hardened, the release run builds a little under 900 packages,x -while the update builds/updates about 5700 packages. he first update run after a -new release is very time consuimgin becuase some 5700 new packages must be built, -but subsequent update runs need only build packages which were bumped since the last -update run. - -On the client, a utility called grsup acts as a wrapper to emerge. grsup will both -manage the configuration files in /etc/portage as well as either builds or download -the binpkg from a PORTAGE_BINHOST. After the initial installation of a GRS system, -one need only run grsup to update it up to date. While releases tarballs will be -pushed out periodically, these are not used to update an existing GRS system, only -to start new one. Rather, one GRS release should smoothly update to the next; in -other words, each GRS release is equivalent to the previous release plus any updates -since. The only reason to push out a new release tarball is to avoid having to -subsequently push out a download a large number of updates for each new installation. - -CAVEAT: This is work in progress. A few of the above point are marginally working -or implemented. This warning will disappear after this whole project moves past -being experimental. - +Description + +The Gentoo Reference System (GRS) Suite is a set of tools for building and +maintaining a well defined Gentoo system in which all choices in building the +system are predefined in configuration files housed on a central git +repository. All systems built according to a particular GRS spec should be +identical. As a "from source" distribution, Gentoo allows a large degree of +customization. The space of all possible packages and USE flags is vast, not to +speak of more radical choices such as different kernels (eg. Linux or FreeBSD), +executable formats (eg. ELF or Mach-O), different C Standard Libraries (eg. +glibc, uClibc or musl) and different providers of core userland utilities (eg. +busybox or coreutils). In contrast to other distributions where each instance +of an installed system is nearly identical to another, the large array of +choice in Gentoo means that any two systems are unlikely to be sufficiently +similar that executables or libraries from one will "just work" on the other, +even if the architecture and other hardware factors are the same; assuming, of +course, there is no conscious effort to build identical systems. This is where +the Gentoo Release System (GRS) Suite comes in. It does precisely this, namely, +it provides an automated method for repeatedly and predictably generating +identical Gentoo systems. + +GRS is designed to work roughly as follows: Periodic release tarballs are +generated which are "polished". For example, releases can provide +pre-configured display managers, windowing systems and desktop themes, even +user accounts and home directories. Installation should be as simple as +unpacking the release tarball on pre-formated partitions with minimal or no +further configuration. There is no need to build any packages or a kernel and +everything is ready to go out of the box. A release tarball can be downloaded +from some server or alternatively can be built locally. While these may not +initially be identical because they were build at different times, after +updating, both approaches should yield identical systems. + +Updating a GRS system can proceed by either building packages locally, or +downloading pre-built binpkgs. As long as one does not deviate from the GRS +defined set of USE flags, maskings and other configuration parameters, both +approaches should yield identical systems. A GRS system is always a Gentoo +system, so at any time, one can elect to part ways from GRS and venture out on +one's own! The GRS Suite provides a utilities to make sure that configurations +in /etc/portage are properly maintained in a manner consistent with GRS, but +emerge and other portage utilities will always work. Even if one does deviate +from the GRS specs, it should be possible to return to strict GRS using the +Suite's utilities, provided one has not deviated too far. + +GRS is provided by the app-portage/grs package. The same package is installed +on either a server responsible for building the release tarballs and binpkgs, +or on an actual GRS system. On the server, a daemon called grsrun will either +do a release run, in which case it builds the release tarballs, or it will do +an update run where it either builds or updates a bunch of extra binpkgs. For +example, for GRS = desktop-amd64-uclibc-hardened, the release run builds a +little under 900 packages and produces the polished release tarball, while the +update run builds/updates about 5700 packages. The first update run after a new +release is time consuming because some 5700 new packages must be built, but +subsequent update runs need only build packages which were bumped since the +last update run. + +On the client, a utility called grsup acts as a wrapper to emerge. grsup will +both manage the configuration files in /etc/portage as well as either builds or +download the binpkg from a PORTAGE_BINHOST. After the initial installation of a +GRS system, one need only run grsup to bring it up to date. While releases +tarballs will be pushed out periodically, these are not used to update an +existing GRS system, only to start new one. Rather, one GRS release should +smoothly update to the next; in other words, each GRS release is equivalent to +the previous release plus any updates since. The only reason to push out a new +release tarball is to avoid having to subsequently push out a large number of +updates for each new installation. + +CAVEAT: This is work in progress. A few of the above point are marginally +working or implemented. This warning will disappear after this whole project +moves past being experimental. Features: - * The GRS suite does not hard code any steps for the release or update runs. - Rather, a build script on the git repo describes the steps for building each - particular GRS system. This makes GRS runs highly flexible. One need only - transcribe the steps one would manually take in a chroot in build the system - into the build script, and grsrun will automatically repeat them. - - * It is possible to script a GRS system to do the equivalent of catalyst runs. - [TODO: there is still one more build script directive required here, pivot_chroot.] - - * The use of Linux cgroup make management easy. There is no need to trap or - propagate signals when writing the scripts that are to be run in the chroot. - A simple SIGTERM to grsrun will ensure that all children process are properly - terminated and that any bind-mounted filesystems are unmounted. - - * A GRS system acts as a "tinderbox-lite" in that build failures are reported. - So as a GRS system evolves over time, as package are bumped, any breakages that - are introduced will be caught and reported. - +* The GRS suite does not hard code any steps for the release or update runs. +Rather, a build script on the git repository describes the steps for building +each particular GRS system. This makes GRS runs highly flexible. One need only +transcribe the steps one would manually make in a chroot to build the system +into build script directives, and grsrun will automatically repeat them. +* It is possible to script a GRS system to do the equivalent of catalyst runs. +* The use of Linux cgroup make management easy. There is no need to trap or +propagate signals when writing the scripts that are to be run in the chroot. A +simple SIGTERM to grsrun will ensure that all children process no matter how +deep are properly terminated and that any bind-mounted filesystems are +unmounted. +* A GRS system acts as a "tinderbox lite" in that build failures are reported. +So as a GRS system evolves over time, as package are bumped, any breakages that +are introduced will be caught and reported. [TODO: get these reports +automatically into bugzilla.] Authors: - * Anthony G. Basile - +* Anthony G. Basile +Homepage: +* https://wiki.gentoo.org/wiki/Project:RelEng_GRS