[bug#36477,v3,00/48] Add --target support to guix system
mbox series

Message ID 20190902153333.11190-1-m.othacehe@gmail.com
Headers show
Series
  • Add --target support to guix system
Related show

Message

Mathieu Othacehe Sept. 2, 2019, 3:32 p.m. UTC
Hello,

Here's a v3. The only difference with v2, is that I pushed all the patches
from v2 that were reviewed and I rebased the serie on top of
core-updates-next.

Thanks,

Mathieu

Mathieu Othacehe (39):
  gnu: libgpg-error: Fix cross compilation.
  gnu: openssl: Fix cross-compilation.
  gnu: texinfo: Fix cross-compilation.
  gnu: cmake: Fix cross-compilation.
  gnu: libpaper: Fix aarch64 cross-compilation.
  gnu: groff: Fix cross compilation.
  gnu: bc: Fix cross-compilation.
  gnu: indent: Fix aarch64 cross-compilation.
  gnu: libsamplerate: Fix aarch64 cross-compilation.
  gnu: cyrus-sasl: Fix cross-compilation.
  gnu: mkfontdir: Fix aarch64 cross-compilation.
  gnu: icu4c: Fix cross-compilation.
  gnu: glibc-utf8-locales: Fix cross-compilation.
  gnu: boost: Fix cross-compilation.
  gnu: eudev: Fix cross-compilation.
  gnu: lvm2: Fix cross-compilation.
  gnu: bdb: Fix cross-compilation.
  gnu: openldap: Fix cross-compilation.
  gnu: swig: Fix cross-compilation.
  gnu: git: Fix cross-compilation.
  gnu: make-linux-libre: Fix cross-compilation.
  gnu: procps: Fix cross-compilation.
  gnu: doxygen: Fix cross-compilation.
  gnu: guile-sqlite3: Fix cross-compilation.
  gnu: guile-gcrypt: Fix cross-compilation.
  packages: Set outputs field as thunked.
  gnu: console-setup: Fix cross-compilation.
  gnu: mdadm: Fix cross-compilation.
  gnu: grub: Fix cross-compilation.
  linux-initrd: Use native gzip.
  gnu: linux-libre: Enable built-in ext4 support.
  gexp: Use cross extensions when cross-compiling.
  gexp: Pass target to compiled-modules in lower-gexp.
  utils: Use target-arm64? and target-arm? helpers.
  build: vm: Fix arm32 support.
  system: vm: Add arm64 support.
  system: vm: Support cross-compilation.
  scripts: system: Add --target option.
  wip: tools.

Pierre-Moana Levesque (9):
  gnu: texinfo-5: Fix cross-compilation.
  gnu: nghttp2: Fix cross-compilation.
  gnu: libtool: Fix cross-compilation.
  gnu: texinfo-4: Fix cross compilation
  gnu: libnl: Fix cross-compilation.
  gnu: crda: Fix cross-compilation
  gnu: guile-xcb: Fix cross-compilation.
  gnu: guile-wm: Fix cross-compilation.
  gnu: cmake: Fix cross-compilation.

 build-sorted-ok-ko-packages.sh                | 354 ++++++++++++++
 deps.scm                                      | 184 ++++++++
 gnu/build/vm.scm                              |  30 +-
 gnu/local.mk                                  |   5 +
 gnu/packages/algebra.scm                      |  15 +-
 gnu/packages/autotools.scm                    |  10 +-
 .../aux-files/linux-libre/5.2-arm64.conf      |   2 +-
 gnu/packages/base.scm                         |   4 +-
 gnu/packages/boost.scm                        |  59 ++-
 gnu/packages/bootloaders.scm                  |   6 +-
 gnu/packages/cmake.scm                        |  14 +-
 gnu/packages/code.scm                         |  18 +-
 gnu/packages/commencement.scm                 |  11 +-
 gnu/packages/cyrus-sasl.scm                   |  17 +-
 gnu/packages/dbm.scm                          |   6 +-
 gnu/packages/documentation.scm                |  12 +-
 gnu/packages/ghostscript.scm                  |  19 +
 gnu/packages/gnupg.scm                        |  47 +-
 gnu/packages/groff.scm                        |  40 +-
 gnu/packages/guile-wm.scm                     |   8 +-
 gnu/packages/guile.scm                        |   7 +-
 gnu/packages/icu4c.scm                        |  35 +-
 gnu/packages/linux.scm                        | 157 ++++---
 gnu/packages/openldap.scm                     |  38 +-
 .../patches/bc-fix-cross-compilation.patch    | 171 +++++++
 gnu/packages/patches/boost-dumpversion.patch  |  24 +
 .../patches/cyrus-sasl-ac-try-run-fix.patch   |  12 +
 .../guile-gcrypt-fix-cross-compilation.patch  | 431 ++++++++++++++++++
 .../guile-sqlite3-fix-cross-compilation.patch |  55 +++
 gnu/packages/pulseaudio.scm                   |  22 +-
 gnu/packages/swig.scm                         |   1 +
 gnu/packages/texinfo.scm                      |  63 ++-
 gnu/packages/tls.scm                          |  62 ++-
 gnu/packages/version-control.scm              |  23 +-
 gnu/packages/web.scm                          |   8 +-
 gnu/packages/xorg.scm                         |  32 +-
 gnu/system.scm                                |  15 +-
 gnu/system/examples/mini-beaglebone.scm       |  61 +++
 gnu/system/examples/mini.scm                  |  54 +++
 gnu/system/linux-initrd.scm                   |   2 +-
 gnu/system/vm.scm                             |  42 +-
 guix/build-system/cmake.scm                   |   9 +-
 guix/gexp.scm                                 |   5 +-
 guix/packages.scm                             |   4 +-
 guix/scripts/system.scm                       |  15 +-
 guix/utils.scm                                |   8 +
 46 files changed, 2039 insertions(+), 178 deletions(-)
 create mode 100755 build-sorted-ok-ko-packages.sh
 create mode 100644 deps.scm
 create mode 100644 gnu/packages/patches/bc-fix-cross-compilation.patch
 create mode 100644 gnu/packages/patches/boost-dumpversion.patch
 create mode 100644 gnu/packages/patches/cyrus-sasl-ac-try-run-fix.patch
 create mode 100644 gnu/packages/patches/guile-gcrypt-fix-cross-compilation.patch
 create mode 100644 gnu/packages/patches/guile-sqlite3-fix-cross-compilation.patch
 create mode 100644 gnu/system/examples/mini-beaglebone.scm
 create mode 100644 gnu/system/examples/mini.scm

Comments

Mathieu Othacehe Sept. 2, 2019, 3:35 p.m. UTC | #1
Not for review, sorry!

Mathieu

Mathieu Othacehe writes:

> ---
>  build-sorted-ok-ko-packages.sh          | 354 ++++++++++++++++++++++++
>  deps.scm                                | 184 ++++++++++++
>  gnu/system/examples/mini-beaglebone.scm |  61 ++++
>  gnu/system/examples/mini.scm            |  54 ++++
>  4 files changed, 653 insertions(+)
>  create mode 100755 build-sorted-ok-ko-packages.sh
>  create mode 100644 deps.scm
>  create mode 100644 gnu/system/examples/mini-beaglebone.scm
>  create mode 100644 gnu/system/examples/mini.scm
>
> diff --git a/build-sorted-ok-ko-packages.sh b/build-sorted-ok-ko-packages.sh
> new file mode 100755
> index 0000000000..a2a13dcdfc
> --- /dev/null
> +++ b/build-sorted-ok-ko-packages.sh
> @@ -0,0 +1,354 @@
> +#!/bin/bash -
> +
> +set -o nounset                              # Treat unset variables as an error
> +
> +mngt_dir()
> +{
> +    local dirname=$1
> +
> +    rm -rf ${dirname}.bk
> +    if [ -e $dirname ]; then
> +        mv $dirname ${dirname}.bk
> +    fi
> +    mkdir ${dirname}
> +}
> +
> +DEPENDENCIES_DIR="packages-dependencies"
> +KO_OUT_LOG_DIR="ko-out-log-dir"
> +OUT_FILE_NAME_BASE="packages-status"
> +OUT_FILE_NAME_EXT="wiki"
> +OUT_FILE_NAME=${OUT_FILE_NAME_BASE}.${OUT_FILE_NAME_EXT}
> +
> +rm -f ${OUT_FILE_NAME}.bk
> +if [ -e $OUT_FILE_NAME ]; then
> +    mv $OUT_FILE_NAME ${OUT_FILE_NAME}.bk
> +fi
> +
> +mngt_dir ${DEPENDENCIES_DIR}
> +mngt_dir ${KO_OUT_LOG_DIR}
> +
> +NB_OK=0
> +NB_KO=0
> +NB_UNKNOWN=0
> +
> +file_header()
> +{
> +    local title="Packages status"
> +
> +    echo ""
> +    echo "start file $OUT_FILE_NAME"
> +    echo ""
> +
> +    echo "" >> $OUT_FILE_NAME
> +    echo "= $title =" >> $OUT_FILE_NAME
> +    echo "" >> $OUT_FILE_NAME
> +}
> +
> +section_header()
> +{
> +    local title=$1
> +
> +    echo ""
> +    echo ""
> +    echo "start section \"$title\""
> +
> +    echo "" >> $OUT_FILE_NAME
> +    echo "== $title ==" >> $OUT_FILE_NAME
> +    echo "" >> $OUT_FILE_NAME
> +    echo "| package | status | nb dependencies |" >> $OUT_FILE_NAME
> +
> +    NB_OK=0
> +    NB_KO=0
> +    NB_UNKNOWN=0
> +}
> +
> +section_footer()
> +{
> +    echo "" >> $OUT_FILE_NAME
> +    echo "nb packages OK in section: $NB_OK" >> $OUT_FILE_NAME
> +    echo "" >> $OUT_FILE_NAME
> +    echo "nb packages *KO* in section: $NB_KO" >> $OUT_FILE_NAME
> +    echo "" >> $OUT_FILE_NAME
> +    echo "nb packages UNKNOWN in section: $NB_UNKNOWN" >> $OUT_FILE_NAME
> +    echo "" >> $OUT_FILE_NAME
> +    echo "" >> $OUT_FILE_NAME
> +}
> +
> +add_package_status()
> +{
> +    local package=$1
> +    local status=$2
> +    local nb_deps=$3
> +
> +    if [ "$status" = "OK" ]; then
> +        NB_OK=$(($NB_OK+1))
> +    elif [ "$status" = "KO" ]; then
> +        status="*KO*"
> +        NB_KO=$(($NB_KO+1))
> +    else
> +        NB_UNKNOWN=$(($NB_UNKNOWN+1))
> +    fi
> +
> +    echo "| $package | $status | $nb_deps |" >> $OUT_FILE_NAME
> +}
> +
> +LIST_PACK_SUPPOSED_OK=""
> +
> +LIST_PACK_SUPPOSED_OK+=" xz"
> +LIST_PACK_SUPPOSED_OK+=" tk"
> +LIST_PACK_SUPPOSED_OK+=" m4"
> +LIST_PACK_SUPPOSED_OK+=" ed"
> +LIST_PACK_SUPPOSED_OK+=" bc"
> +LIST_PACK_SUPPOSED_OK+=" tcl"
> +LIST_PACK_SUPPOSED_OK+=" sed"
> +LIST_PACK_SUPPOSED_OK+=" mpc"
> +LIST_PACK_SUPPOSED_OK+=" lzo"
> +LIST_PACK_SUPPOSED_OK+=" isl"
> +LIST_PACK_SUPPOSED_OK+=" gss"
> +LIST_PACK_SUPPOSED_OK+=" gmp"
> +LIST_PACK_SUPPOSED_OK+=" bdb"
> +LIST_PACK_SUPPOSED_OK+=" acl"
> +LIST_PACK_SUPPOSED_OK+=" zlib"
> +LIST_PACK_SUPPOSED_OK+=" sudo"
> +LIST_PACK_SUPPOSED_OK+=" perl"
> +LIST_PACK_SUPPOSED_OK+=" pcre"
> +LIST_PACK_SUPPOSED_OK+=" mpfr"
> +LIST_PACK_SUPPOSED_OK+=" make"
> +LIST_PACK_SUPPOSED_OK+=" lzip"
> +LIST_PACK_SUPPOSED_OK+=" gzip"
> +LIST_PACK_SUPPOSED_OK+=" grep"
> +LIST_PACK_SUPPOSED_OK+=" gdbm"
> +LIST_PACK_SUPPOSED_OK+=" gawk"
> +LIST_PACK_SUPPOSED_OK+=" fuse"
> +LIST_PACK_SUPPOSED_OK+=" flex"
> +LIST_PACK_SUPPOSED_OK+=" flac"
> +LIST_PACK_SUPPOSED_OK+=" file"
> +LIST_PACK_SUPPOSED_OK+=" fftw"
> +LIST_PACK_SUPPOSED_OK+=" bash"
> +LIST_PACK_SUPPOSED_OK+=" attr"
> +LIST_PACK_SUPPOSED_OK+=" which"
> +LIST_PACK_SUPPOSED_OK+=" unzip"
> +LIST_PACK_SUPPOSED_OK+=" rhash"
> +LIST_PACK_SUPPOSED_OK+=" libuv"
> +LIST_PACK_SUPPOSED_OK+=" libgc"
> +LIST_PACK_SUPPOSED_OK+=" libev"
> +LIST_PACK_SUPPOSED_OK+=" guile"
> +LIST_PACK_SUPPOSED_OK+=" groff"
> +LIST_PACK_SUPPOSED_OK+=" gperf"
> +LIST_PACK_SUPPOSED_OK+=" glibc"
> +LIST_PACK_SUPPOSED_OK+=" expat"
> +LIST_PACK_SUPPOSED_OK+=" bzip2"
> +LIST_PACK_SUPPOSED_OK+=" bison"
> +LIST_PACK_SUPPOSED_OK+=" xtrans"
> +LIST_PACK_SUPPOSED_OK+=" tzdata"
> +LIST_PACK_SUPPOSED_OK+=" sqlite"
> +LIST_PACK_SUPPOSED_OK+=" shishi"
> +LIST_PACK_SUPPOSED_OK+=" shadow"
> +LIST_PACK_SUPPOSED_OK+=" python"
> +LIST_PACK_SUPPOSED_OK+=" nettle"
> +LIST_PACK_SUPPOSED_OK+=" libxft"
> +LIST_PACK_SUPPOSED_OK+=" libxcb"
> +LIST_PACK_SUPPOSED_OK+=" libxau"
> +LIST_PACK_SUPPOSED_OK+=" libx11"
> +LIST_PACK_SUPPOSED_OK+=" libpng"
> +LIST_PACK_SUPPOSED_OK+=" libogg"
> +LIST_PACK_SUPPOSED_OK+=" libidn"
> +LIST_PACK_SUPPOSED_OK+=" libffi"
> +LIST_PACK_SUPPOSED_OK+=" libelf"
> +LIST_PACK_SUPPOSED_OK+=" libcap"
> +LIST_PACK_SUPPOSED_OK+=" libbsd"
> +LIST_PACK_SUPPOSED_OK+=" indent"
> +LIST_PACK_SUPPOSED_OK+=" gnutls"
> +LIST_PACK_SUPPOSED_OK+=" c-ares"
> +LIST_PACK_SUPPOSED_OK+=" texinfo"
> +LIST_PACK_SUPPOSED_OK+=" python2"
> +LIST_PACK_SUPPOSED_OK+=" psutils"
> +LIST_PACK_SUPPOSED_OK+=" ncurses"
> +LIST_PACK_SUPPOSED_OK+=" libxslt"
> +LIST_PACK_SUPPOSED_OK+=" libxml2"
> +LIST_PACK_SUPPOSED_OK+=" libxext"
> +LIST_PACK_SUPPOSED_OK+=" libtool"
> +LIST_PACK_SUPPOSED_OK+=" libtiff"
> +LIST_PACK_SUPPOSED_OK+=" libssh2"
> +LIST_PACK_SUPPOSED_OK+=" libltdl"
> +LIST_PACK_SUPPOSED_OK+=" libjpeg"
> +LIST_PACK_SUPPOSED_OK+=" libidn2"
> +LIST_PACK_SUPPOSED_OK+=" jansson"
> +LIST_PACK_SUPPOSED_OK+=" shepherd"
> +LIST_PACK_SUPPOSED_OK+=" net-base"
> +LIST_PACK_SUPPOSED_OK+=" libxdmcp"
> +LIST_PACK_SUPPOSED_OK+=" libtasn1"
> +LIST_PACK_SUPPOSED_OK+=" libpaper"
> +LIST_PACK_SUPPOSED_OK+=" jemalloc"
> +LIST_PACK_SUPPOSED_OK+=" jbig2dec"
> +LIST_PACK_SUPPOSED_OK+=" gs-fonts"
> +LIST_PACK_SUPPOSED_OK+=" freetype"
> +LIST_PACK_SUPPOSED_OK+=" elfutils"
> +LIST_PACK_SUPPOSED_OK+=" binutils"
> +LIST_PACK_SUPPOSED_OK+=" automake"
> +LIST_PACK_SUPPOSED_OK+=" autoconf"
> +LIST_PACK_SUPPOSED_OK+=" alsa-lib"
> +LIST_PACK_SUPPOSED_OK+=" xorgproto"
> +LIST_PACK_SUPPOSED_OK+=" xcb-proto"
> +LIST_PACK_SUPPOSED_OK+=" linux-pam"
> +LIST_PACK_SUPPOSED_OK+=" libvorbis"
> +LIST_PACK_SUPPOSED_OK+=" libgcrypt"
> +LIST_PACK_SUPPOSED_OK+=" inetutils"
> +LIST_PACK_SUPPOSED_OK+=" findutils"
> +LIST_PACK_SUPPOSED_OK+=" e2fsprogs"
> +LIST_PACK_SUPPOSED_OK+=" diffutils"
> +LIST_PACK_SUPPOSED_OK+=" coreutils"
> +LIST_PACK_SUPPOSED_OK+=" util-linux"
> +LIST_PACK_SUPPOSED_OK+=" libxrender"
> +LIST_PACK_SUPPOSED_OK+=" libsndfile"
> +LIST_PACK_SUPPOSED_OK+=" libsigsegv"
> +LIST_PACK_SUPPOSED_OK+=" libfontenc"
> +LIST_PACK_SUPPOSED_OK+=" guile-json"
> +LIST_PACK_SUPPOSED_OK+=" fontconfig"
> +LIST_PACK_SUPPOSED_OK+=" util-macros"
> +LIST_PACK_SUPPOSED_OK+=" mkfontscale"
> +LIST_PACK_SUPPOSED_OK+=" linux-libre"
> +LIST_PACK_SUPPOSED_OK+=" ghostscript"
> +LIST_PACK_SUPPOSED_OK+=" docbook-xsl"
> +LIST_PACK_SUPPOSED_OK+=" docbook-xml"
> +LIST_PACK_SUPPOSED_OK+=" bash-static"
> +LIST_PACK_SUPPOSED_OK+=" libunistring"
> +LIST_PACK_SUPPOSED_OK+=" libgpg-error"
> +LIST_PACK_SUPPOSED_OK+=" bash-minimal"
> +LIST_PACK_SUPPOSED_OK+=" libsamplerate"
> +LIST_PACK_SUPPOSED_OK+=" libatomic-ops"
> +LIST_PACK_SUPPOSED_OK+=" e2fsck-static"
> +LIST_PACK_SUPPOSED_OK+=" wireless-regdb"
> +LIST_PACK_SUPPOSED_OK+=" python-wrapper"
> +LIST_PACK_SUPPOSED_OK+=" python-minimal"
> +LIST_PACK_SUPPOSED_OK+=" guile-readline"
> +LIST_PACK_SUPPOSED_OK+=" guile-gdbm-ffi"
> +LIST_PACK_SUPPOSED_OK+=" gettext-minimal"
> +LIST_PACK_SUPPOSED_OK+=" libpthread-stubs"
> +LIST_PACK_SUPPOSED_OK+=" openfwwf-firmware"
> +LIST_PACK_SUPPOSED_OK+=" glibc-utf8-locales"
> +LIST_PACK_SUPPOSED_OK+=" ath9k-htc-firmware"
> +LIST_PACK_SUPPOSED_OK+=" linux-libre-headers"
> +LIST_PACK_SUPPOSED_OK+=" guile-static-stripped"
> +LIST_PACK_SUPPOSED_OK+=" python-minimal-wrapper"
> +LIST_PACK_SUPPOSED_OK+=" pkg-config"
> +LIST_PACK_SUPPOSED_OK+=" libarchive"
> +LIST_PACK_SUPPOSED_OK+=" cyrus-sasl"
> +LIST_PACK_SUPPOSED_OK+=" tcsh"
> +LIST_PACK_SUPPOSED_OK+=" xmlto"
> +LIST_PACK_SUPPOSED_OK+=" icu4c" # ?
> +LIST_PACK_SUPPOSED_OK+=" mit-krb5" # ok ?
> +LIST_PACK_SUPPOSED_OK+=" help2man"
> +LIST_PACK_SUPPOSED_OK+=" mkfontdir"
> +LIST_PACK_SUPPOSED_OK+=" lvm2"
> +LIST_PACK_SUPPOSED_OK+=" eudev"
> +LIST_PACK_SUPPOSED_OK+=" procps"
> +LIST_PACK_SUPPOSED_OK+=" alsa-utils"
> +LIST_PACK_SUPPOSED_OK+=" boost"
> +LIST_PACK_SUPPOSED_OK+=" swig"
> +LIST_PACK_SUPPOSED_OK+=" doxygen"
> +LIST_PACK_SUPPOSED_OK+=" curl"
> +LIST_PACK_SUPPOSED_OK+=" nghttp2"
> +LIST_PACK_SUPPOSED_OK+=" openldap"
> +LIST_PACK_SUPPOSED_OK+=" git-minimal"
> +
> +
> +LIST_PACK_SUPPOSED_KO=""
> +
> +LIST_PACK_SUPPOSED_KO+=" libnl"
> +LIST_PACK_SUPPOSED_KO+=" crda" # depends on libnl
> +LIST_PACK_SUPPOSED_KO+=" cmake"
> +LIST_PACK_SUPPOSED_KO+=" guile-wm"
> +LIST_PACK_SUPPOSED_KO+=" guile-xcb"
> +
> +count_dependencies()
> +{
> +    local pack="$1"
> +    local depsfile="$DEPENDENCIES_DIR/${pack}.dot"
> +    guix graph -t bag-emerged $pack > $depsfile
> +    count=$(cat $depsfile | grep "\->" | wc -l)
> +    echo $count
> +}
> +
> +build_pack()
> +{
> +    local pack="$1"
> +    local out_file=$(mktemp /tmp/test-guix.XXXXX)
> +    local result=0
> +
> +    ./pre-inst-env guix build --target=aarch64-linux-gnu $pack > $out_file 2>&1
> +    result=$?
> +
> +    if [ $result -eq 0 ]; then
> +        rm -f $out_file
> +    else
> +        mv $out_file ${KO_OUT_LOG_DIR}/${pack}.log
> +    fi
> +
> +    return $result
> +}
> +
> +build_all_in_list()
> +{
> +    local list_pack="$@"
> +    local status=unknown
> +
> +    for pack in $list_pack; do
> +        echo ""
> +        echo ""
> +        echo "--------------- package $pack ---------------"
> +        echo ""
> +        build_pack $pack
> +        if [ $? -eq 0 ]; then
> +            status="OK"
> +        else
> +            status="KO"
> +        fi
> +
> +        nb_deps="$(count_dependencies $pack)"
> +        echo "  package $pack is $status (and has $nb_deps dependencies)"
> +        echo ""
> +        echo ""
> +
> +        add_package_status $pack $status $nb_deps
> +    done
> +}
> +
> +if [ $# -ge 1 ]; then
> +    EXEC_SUPPOSED_OK=0
> +    EXEC_SUPPOSED_KO=0
> +    while [ $# -ge 1 ]; do
> +        case "$1" in
> +            "--ok")
> +                EXEC_SUPPOSED_OK=1
> +                ;;
> +            "--ko")
> +                EXEC_SUPPOSED_KO=1
> +                ;;
> +            *)
> +                echo "Unknown argument $1"
> +                exit 1
> +                ;;
> +        esac
> +        shift
> +    done
> +else
> +    EXEC_SUPPOSED_OK=1
> +    EXEC_SUPPOSED_KO=1
> +fi
> +
> +file_header
> +
> +if [ $EXEC_SUPPOSED_OK -eq 1 ]; then
> +    section_header "Supposed OK Packages"
> +    build_all_in_list $LIST_PACK_SUPPOSED_OK
> +    section_footer
> +fi
> +
> +if [ $EXEC_SUPPOSED_KO -eq 1 ]; then
> +    section_header "Supposed KO Packages"
> +    build_all_in_list $LIST_PACK_SUPPOSED_KO
> +    section_footer
> +fi
> +
> +
> diff --git a/deps.scm b/deps.scm
> new file mode 100644
> index 0000000000..75e8f106fe
> --- /dev/null
> +++ b/deps.scm
> @@ -0,0 +1,184 @@
> +(use-modules (guix)
> +             (guix scripts build)
> +             (gnu)
> +             (ice-9 receive))
> +
> +(define deps
> +  '("sudo"
> +    "guile-xcb"
> +    "guile-wm"
> +    "tzdata"
> +    "guile-gdbm-ffi"
> +    "gzip"
> +    "expat"
> +    "attr"
> +    "gettext-minimal"
> +    "m4"
> +    "perl"
> +    "gmp"
> +    "acl"
> +    "libcap"
> +    "libsigsegv"
> +    "pkg-config"
> +    "zlib"
> +    "libffi"
> +    "glibc"
> +    "bash-static"
> +    "bison"
> +    "texinfo"
> +    "lzip"
> +    "ed"
> +    "libatomic-ops"
> +    "libltdl"
> +    "libunistring"
> +    "libgc"
> +    "linux-libre-headers"
> +    "bzip2"
> +    "bash-minimal"
> +    "diffutils"
> +    "binutils"
> +    "findutils"
> +    "guile"
> +    "sed"
> +    "make"
> +    "gawk"
> +    "xz"
> +    "grep"
> +    "file"
> +    "coreutils"
> +    "glibc-utf8-locales"
> +    "libpng"
> +    "freetype"
> +    "libfontenc"
> +    "mkfontdir"
> +    "mkfontscale"
> +    "guile-readline"
> +    "lzo"
> +    "rhash"
> +    "libuv"
> +    "libarchive"
> +    "cmake"
> +    "ath9k-htc-firmware"
> +    "openfwwf-firmware"
> +    "inetutils"
> +    "tcsh"
> +    "pcre"
> +    "boost"
> +    "swig"
> +    "libnl"
> +    "wireless-regdb"
> +    "flac"
> +    "libsndfile"
> +    "libvorbis"
> +    "libogg"
> +    "xmlto"
> +    "fftw"
> +    "alsa-lib"
> +    "alsa-utils"
> +    "libsamplerate"
> +    "lvm2"
> +    "fuse"
> +    "crda"
> +    "which"
> +    "help2man"
> +    "indent"
> +    "flex"
> +    "gdbm"
> +    "mit-krb5"
> +    "openldap"
> +    "cyrus-sasl"
> +    "curl"
> +    "icu4c"
> +    "bdb"
> +    "libev"
> +    "jemalloc"
> +    "jansson"
> +    "c-ares"
> +    "linux-pam"
> +    "shishi"
> +    "xtrans"
> +    "libbsd"
> +    "python-minimal-wrapper"
> +    "xcb-proto"
> +    "python-minimal"
> +    "gs-fonts"
> +    "fontconfig"
> +    "libxrender"
> +    "libxft"
> +    "tk"
> +    "xorgproto"
> +    "libpthread-stubs"
> +    "util-macros"
> +    "libxau"
> +    "libxext"
> +    "libxcb"
> +    "sqlite"
> +    "libxdmcp"
> +    "libx11"
> +    "libpaper"
> +    "jbig2dec"
> +    "tcl"
> +    "libjpeg"
> +    "libtiff"
> +    "psutils"
> +    "ghostscript"
> +    "groff"
> +    "libgpg-error"
> +    "libtasn1"
> +    "libssh2"
> +    "python2"
> +    "gss"
> +    "libgcrypt"
> +    "nettle"
> +    "libidn"
> +    "nghttp2"
> +    "libidn2"
> +    "git-minimal"
> +    "gnutls"
> +    "guile-json"
> +    "unzip"
> +    "autoconf"
> +    "automake"
> +    "docbook-xml"
> +    "libtool"
> +    "python"
> +    "python-wrapper"
> +    "libxslt"
> +    "libxml2"
> +    "docbook-xsl"
> +    "gperf"
> +    "eudev"
> +    "shadow"
> +    "bash"
> +    "shepherd"
> +    "isl"
> +    "net-base"
> +    "procps"
> +    "util-linux"
> +    "e2fsprogs"
> +    "e2fsck-static"
> +    "guile-static-stripped"
> +    "libelf"
> +    "ncurses"
> +    "mpc"
> +    "bc"
> +    "elfutils"
> +    "mpfr"
> +    "linux-libre"))
> +
> +(define store (open-connection))
> +
> +(define arguments
> +  (map (lambda (spec)
> +         `(argument . ,spec))
> +       deps))
> +
> +(run-with-store store
> +  (mlet %store-monad
> +      ((derivations ->
> +        ((@@ (guix scripts build) options->derivations)
> +         store
> +         `((target . "aarch64-linux-gnu")
> +           ,@arguments))))
> +    (mbegin %store-monad
> +      (built-derivations derivations))))
> diff --git a/gnu/system/examples/mini-beaglebone.scm b/gnu/system/examples/mini-beaglebone.scm
> new file mode 100644
> index 0000000000..6ce0ab1b1c
> --- /dev/null
> +++ b/gnu/system/examples/mini-beaglebone.scm
> @@ -0,0 +1,61 @@
> +;; This is an operating system configuration template
> +;; for a "bare bones" setup, with no X11 display server.
> +
> +(use-modules (gnu) (gnu bootloader u-boot))
> +(use-service-modules networking ssh)
> +(use-package-modules bootloaders linux screen)
> +
> +(operating-system
> +  (host-name "komputilo")
> +  (timezone "Europe/Berlin")
> +  (locale "en_US.utf8")
> +
> +  ;; Boot in "legacy" BIOS mode, assuming /dev/sdX is the
> +  ;; target hard disk, and "my-root" is the label of the target
> +  ;; root file system.
> +  (bootloader (bootloader-configuration
> +               (bootloader u-boot-beaglebone-black-bootloader)
> +               (target "/dev/vda")))
> +
> +  (kernel linux-libre-arm-omap2plus)
> +
> +  ;; This module is required to mount the SD card.
> +  (initrd-modules (cons "omap_hsmmc" %base-initrd-modules))
> +
> +  (file-systems (cons (file-system
> +                        (device (file-system-label "my-root"))
> +                        (mount-point "/")
> +                        (type "ext4"))
> +                      %base-file-systems))
> +
> +  ;; This is where user accounts are specified.  The "root"
> +  ;; account is implicit, and is initially created with the
> +  ;; empty password.
> +  (users (cons (user-account
> +                (name "alice")
> +                (comment "Bob's sister")
> +                (group "users")
> +
> +                ;; Adding the account to the "wheel" group
> +                ;; makes it a sudoer.  Adding it to "audio"
> +                ;; and "video" allows the user to play sound
> +                ;; and access the webcam.
> +                (supplementary-groups '("wheel"
> +                                        "audio" "video")))
> +               %base-user-accounts))
> +
> +  ;; Globally-installed packages.
> +  (packages '())
> +
> +  ;; Add services to the baseline: a DHCP client and
> +  ;; an SSH server.
> +  (services (list
> +             (service udev-service-type
> +                      (udev-configuration
> +                       (rules (list lvm2 fuse alsa-utils crda))))
> +             (agetty-service
> +              (agetty-configuration
> +               (extra-options '("-L"))
> +               (baud-rate "115200")
> +               (term "vt100")
> +               (tty "ttyO0"))))))
> diff --git a/gnu/system/examples/mini.scm b/gnu/system/examples/mini.scm
> new file mode 100644
> index 0000000000..f7c7b63308
> --- /dev/null
> +++ b/gnu/system/examples/mini.scm
> @@ -0,0 +1,54 @@
> +;; This is an operating system configuration template
> +;; for a "bare bones" setup, with no X11 display server.
> +
> +(use-modules (gnu))
> +(use-service-modules networking ssh)
> +(use-package-modules linux screen)
> +
> +(define dummy-bootloader
> +  (bootloader
> +   (inherit grub-bootloader)
> +   (installer #f)))
> +
> +(operating-system
> +  (host-name "komputilo")
> +  (timezone "Europe/Berlin")
> +  (locale "en_US.utf8")
> +
> +  ;; Boot in "legacy" BIOS mode, assuming /dev/sdX is the
> +  ;; target hard disk, and "my-root" is the label of the target
> +  ;; root file system.
> +  (bootloader (bootloader-configuration
> +                (bootloader dummy-bootloader)
> +                (target "/dev/sdX")))
> +  (file-systems (cons (file-system
> +                        (device (file-system-label "my-root"))
> +                        (mount-point "/")
> +                        (type "ext4"))
> +                      %base-file-systems))
> +
> +  ;; This is where user accounts are specified.  The "root"
> +  ;; account is implicit, and is initially created with the
> +  ;; empty password.
> +  (users (cons (user-account
> +                (name "alice")
> +                (comment "Bob's sister")
> +                (group "users")
> +
> +                ;; Adding the account to the "wheel" group
> +                ;; makes it a sudoer.  Adding it to "audio"
> +                ;; and "video" allows the user to play sound
> +                ;; and access the webcam.
> +                (supplementary-groups '("wheel"
> +                                        "audio" "video")))
> +               %base-user-accounts))
> +
> +  ;; Globally-installed packages.
> +  (packages '())
> +
> +  ;; Add services to the baseline: a DHCP client and
> +  ;; an SSH server.
> +  (services (list
> +             (service udev-service-type
> +                      (udev-configuration
> +                       (rules (list lvm2 fuse alsa-utils crda)))))))