Message ID | 20190902153333.11190-49-m.othacehe@gmail.com |
---|---|
State | Accepted |
Headers | show |
Series | Add --target support to guix system | expand |
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 --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)))))))