diff mbox series

[bug#36477,v3,48/48] wip: tools.

Message ID 20190902153333.11190-49-m.othacehe@gmail.com
State Accepted
Headers show
Series Add --target support to guix system | expand

Commit Message

Mathieu Othacehe Sept. 2, 2019, 3:33 p.m. UTC
---
 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

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)))))))
diff mbox series

Patch

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)))))))