changeset 1237:479bcbb2775e 1.0

Screw it: cut a release and fix it all up later.
author Rob Landley <>
date Sun, 05 Sep 2010 00:47:04 -0500
parents 75ecd2cf6068
children 61b1511f806a
files www/news.html
diffstat 1 files changed, 248 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/www/news.html	Sun Sep 05 00:08:47 2010 -0500
+++ b/www/news.html	Sun Sep 05 00:47:04 2010 -0500
@@ -6,6 +6,254 @@
+<h2><a name="09-05-2010" />September 5, 2010</h2>
+<p>There's an old saying, "eventually you need to shoot the
+engineers and go into production".  Aboriginal Linux can now bootstrap a
+native development environment on an arbitrary target, and build packages
+under the result.  There's always more to do, but it does what it set
+out to do.  And thus:</p>
+<p><a href=downloads/aboriginal-1.0.0.tar.bz2>Aboriginal Linux 1.0</a> is out,
+based on <a href=>hg commit
+1192</a>, using Linux 2.6.35, uClibc 0.9.31, and BusyBox 1.17.1.</p>
+<p>Yes, it's been over five months since the last release.  I didn't want to
+ship yet another intermediate release before doing 1.0, but I was trying
+to run out of todo items before shipping.  (Yeah, I should know better.
+Sorry for the delay.)</p>
+<p>The following are release notes, not proper documentation.  Proper
+documentation (including a introduction to the whole thing) is the next
+big TODO item.</p>
+<p>The arm, mips, powerpc, and x86 targets all work.  Sparc works statically
+linked, but dynamic linking is still broken.  Khem Raj fixed mips64 dynamic
+linking, but the native compiler still doesn't work.  The m68k target builds
+again, although QEMU still doesn't emulate it.  The sh4 target and big endian
+arm are are still broken.</p>
+<p>The snapshots page needs updating.  The documentation needs updating.</p>
+<b><h3>System image updates</h3></b>
+<p>The script moved into each system image.  This means you
+can now download a system image tarball and a control image, then run a
+native build without any dependencies on the Aboriginal Linux build scripts.
+This script is a wrapper around which takes one argument,
+the name of the control image file.</p>
+<p>The build only puts and into a
+system image when the system image includes native development tools.</p>
+<b><h3>Control Images</h3></b>
+<p>This release adds prebuilt binary build control images, generated
+by more/ and shipped in the
+<a href=downloads/binaries/control-images>control-images</a> directory.
+These are squashfs filesystems containing source code and an init script to
+build it and upload it to the host (using the $FTP_SERVER and $FTP_PORT
+variables, set by</p>
+<p>If these
+images are loaded into /dev/hdc of the emulated system, the system image's
+init script will mount that on /mnt and run /mnt/init instead of a shell
+prompt, so the build is completely automated.</p>
+<p>Control images are provided to build hello world, build static dropbear
+and strace binaries, run the busybox test suite, and an in-progress script
+to bootstrapping Gentoo Stage 1 does about the first 2/3 of the job.</p>
+<b><h3>Root filesystem improvements</h3></b>
+<p>The root filesystem broke into two stages: simple-root-filesystem just
+contains a simple "defconfig busybox plus uClibc" system, enough to boot
+to a shell prompt.  The native-compiler stage is like cross-compiler only
+unprefixed, built to run on the target, and including make, bash, and
+distcc.  The root-filesystem stage combines the two into a single root
+filesystem with native development tools.</p>
+<p>If the root filesystem is mounted read only, the init script will now
+mount a tmpfs on /home if there's no /dev/hdb to provide writeable scratch
+space.  Chroot environments should now use Google's nameserver
+by default.  The distcc binaries moved out of /bin to the /distcc directory.</p>
+<p>The "oneit" binary became a standalone program, and uses the / directory
+as PID 1's working directory, allowing you to umount /home if necessary.
+Toybox's "patch" command went upstream into busybox, and busybox's defconfig
+once again supports netcat server mode, so toybox was removed.  We're now
+using a defconfig busybox, so configuring it properly is their problem.</p>
+<b><h3>Build scripts </h3></b>
+<p>The kernel configuration got collated to sources/baseconfig-linux (just
+like baseconfig-uClibc), and the various packages were migrated to use
+that.  The kernel config is now the baseconfig plus the settings
+entry $LINUX_CONFIG.  You can still supply a miniconfig-linux file to
+override this, and some architectures still do that.  The ones that have
+been migrated to use a shared baseconfig are a lot more regular now,
+and the differences between architectures broken out and isolated.</p>
+<p>The build stages were broken up to be more granular.  The
+stage now merely collates the output of two previous stages: (which produces just enough of a root filesystem
+to boot to a shell prompt, based on uClibc and busybox plus a few init scripts
+and config files), and (a portable native toolchain).</p>
+<p>The stage now generates the script.
+It only puts and scripts in the tarball
+when NO_NATIVE_COMPILER is blank (and thus the build includes native
+development tools), or if root-filesystem isn't available in which case
+it'll automatically use simple-root-filesystem.</p>
+<p>Several more package builds were moved to sources/sections.</p>
+<p>The new "more" subdirectory collects together all the user-runnable
+scripts that aren't build stages.  (Many of these were previously in
+sources/more.)  New scripts in this directory include:</p>
+<li>Scripts to run newly built system images out of the build directory
+(" $ARCH", " $ARCH",
+and "")</li>
+<li> - Wrapper script to run commands in the build environment, with
+read_arch_dir loaded.  Useful for things like
+"STAGE_NAME=simple-cross-compiler more/ sparc build_stage uClibc",
+or to dump the build context's environment variables ala "more/ env"</li>
+<li> $SECONDS command... - Wrapper to run a child process and
+kill it if it doesn't produce a line of output for $SECONDS seconds.</li>
+<li> - build all control images from sources/native-builds.</li>
+<li> - iterage through every defined target architecture
+and run a command.</li>
+<p>A new cron job is populating the
+<a href=downloads/binaries/snapshots>snapshots</a> directory.  Currently only
+the stable versions, but the unstable versions should wander back in
+eventually.  (When the bisectinate and migrate-kernel scripts catch up to
+what they need to do to properly test unstable packages.)</p>
+<p>More documentation: The "about" page got redone, and the FAQ was fluffed
+out with a new debugging section.  Michael S. Zick wrote up mips docs for the
+architecture page, and the build scripts grew even more comments.</p>
+<b><h3>General Infrastructure</h3></b>
+<p>The control image generation was upgraded so each control image
+source can have its own patch directory and file directory.  (This needs
+more work.)</p>
+<p>Environment variable sanitization: the sanitize_environment function
+unsets any environment variable it doesn't recognize, either from a whitelist
+or from config.  Clearing all unrecognized environment variables insulates
+the build from some of the strage environments out there.  To disable this
+behavior, export NO_SANITIZE_ENVIRONMENT=1.</p>
+<p>New config variables:</p>
+<li>STATIC_CC_HOST became CROSS_HOST_ARCH, set that and second stage cross
+compiler gets built.</li>
+<li>The new ALLOW_PATCH_FAILURE=1 variable continues despite a patch failing to
+<li>NO_HOST_TOOLS=1 tells to skip the host tools step, which is seldom
+a good idea but there you have it.  The new HOST_EXTRA is an equally horrible
+idea, but if you feel the need it's a list of extra commands to pass through
+from the host $PATH.</p>
+<li>NO_CPLUSPLUS=1 tells it not to add C++ support in the toolchains it
+<li>NO_CLEANUP isn't a new variable, but you can now set this for entire
+builds and it should work.</li>
+<p>ccwrap improvements: Handle unexported $PATH better.  It doesn't need to
+search $PATH when argc[0] is a path (either absolute or relative to the current
+directory).  Also use Scrt1.o when building a shared library.  (Oddly this
+never caused a problem before, but do the right thing anyway.)</p>
+<p>Upgrades to BUILD_STATIC: it now takes a comma separated list of packages,
+with the special value "all" to build everything static, and "none" to build
+nothing static.  The default is to build static versions of busybox and the
+toolchain packages (gcc, binutils, make, and ccwrap) both due to the increased
+performance this provides under qemu (which has to repeatedly re-translate
+executable code pages that modify themselves, such as when dynamic linking
+patches per-process jump addresses), and also due to the increased portability
+this provides the native compiler tarball.</p>
+<p>(The host-tools stage always builds dynamic packages, because the glibc
+maintainer has a personal dislike of static linking, meaning glibc's static
+linking support (in addition to creating 400k "hello world" binaries) is both
+broken[LINK] and deprecated[LINK].  Some distros have even taken to breaking
+out the *.a format libraries used for static linking into a separate package,
+and not installing them by default.  The host-tools stage now tests for this,
+and refuses to continue in a dynamic-only build environment unless you set
+BUILD_STATIC=none.  You can rebuild under the resulting target system to
+natively compile static binaries, which uClibc supports quite well, but you
+can't generate them from the host.)</p>
+<p>The old FROM_ARCH is now HOST_ARCH, and the infrastructure using it
+( and has been cleaned up.  The
+HOST_UTILS variable was also removed, that's now built for the full
+cross and native compilers, but not the simple cross compiler.</p>
+<p>The more/ file no longer creates hdb.img.</p>
+<p>The host-tools stage has been upgraded to work around the utter stupidity of
+Ubuntu 10.04, which turned "gcc" into a perl script.  (Yes really.  No, I don't
+know what they were smoking.)</p>
+<p>Build zlib in host-tools (for squashfs) and in static-tools for dropbear's
+-C.  This is necessary for reproducing the build under a system-image, because
+the default system image type (squashfs) requires zlib to build.</p>
+<p>Update the command prompt in system images to show the amount of
+parallelism available via distcc.  (When it says 1 you haven't got
+distcc, and when it says a number greater than that you have.)
+The prompt now looks like:</p>
+<blockquote><pre>(powerpc:4) /home #</pre></blockquote>
+<p>The make, bash, and distcc builds are now part of the native-compiler stage
+(and their build scripts moved to sources/sections).  This means that a native
+toolchain now includes make, because it's hard to build make without make.
+This stage also records the uClibc and linux config files for posterity.</p>
+<p>The build was weaned off of toybox.  (Broke out oneit, sent patch upstream
+to busybox, and got netcat fixed in defconfig so could use
+<p>Several small bugfixes and cosmetic cleanups.  For example, we now delete
+empty build/temp-* directories when we're done with them, and several
+config options such as NO_NATIVE_COMPILER and NO_CLEANUP should be more
+reliable now.  Don't build hello-dynamic on a BUILD_STATIC=all system.
+Clean up debris files the kernel's headers_install leaves lying around.
+Minor upgrades to FORK=1 support, and QUIET is now part of FORK instead
+of a separate control.  Generating a package manifest should no
+longer produce error messages.  Empty temp directories get deleted on the
+way out.  Better support for building older tools as alt-packages (tested
+binutils 2.14 and gcc 3.4).  Comment out default UNSTABLE= URLs in,
+supply your own if you want that.  Binutils build now honors existing $CFLAGS
+(if any).  The dienow error message goes to stderr.  More reliably track
+package cache state when patches fail to apply.  Simplify system-image
+build (don't try to package root filesystem and build kernel in parallel
+anymore, squashfs and make both have internal SMP support).  BUILD_VERBOSE
+is now more verbose.  Reliability improvement for
+New shell functions blank_workdir and extract_package.  Consistently
+use name-name in scripts and name_name in functions.</p>
+<p>It's been a long 5 months...</p>
 <h2><a name="05-02-2010" />May 2, 2010</h2>
 <p>The name of the project is changing from Firmware Linux to Aboriginal
 Linux.  The new URL is "".</p>