aboutsummaryrefslogtreecommitdiff
path: root/gnu/system/images/unmatched.scm
blob: d40a32f1840f4e0df1448ad5d63a3796433fb12d (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu system images unmatched)
  #:use-module (gnu bootloader)
  #:use-module (gnu bootloader u-boot)
  #:use-module (gnu image)
  #:use-module (gnu packages linux)
  #:use-module (gnu services)
  #:use-module (gnu services base)
  #:use-module (gnu services networking)
  #:use-module (gnu system)
  #:use-module (gnu system file-systems)
  #:use-module (gnu system image)
  #:use-module (guix platforms riscv)
  #:use-module (srfi srfi-26)
  #:export (unmatched-barebones-os
            unmatched-image-type
            unmatched-barebones-raw-image))

(define unmatched-barebones-os
  (operating-system
    (host-name "unmatched")
    (timezone "Asia/Jerusalem")
    (locale "en_US.utf8")
    (bootloader (bootloader-configuration
                 (bootloader u-boot-sifive-unmatched-bootloader)
                 (targets '("/dev/vda"))))
    (initrd-modules '())
    (kernel linux-libre-riscv64-generic)
    (file-systems (cons (file-system
                          (device (file-system-label "my-root"))
                          (mount-point "/")
                          (type "ext4"))
                        %base-file-systems))
    (services
      (append (list (service agetty-service-type
                             (agetty-configuration
                              (extra-options '("-L")) ; no carrier detect
                              (baud-rate "115200")
                              (term "vt100")
                              (tty "ttySIF0")))
                    (service dhcp-client-service-type))
              %base-services))))

(define unmatched-disk-image
  (image-without-os
   (format 'disk-image)
   (partition-table-type 'gpt)
   ;; https://source.denx.de/u-boot/u-boot/-/blob/master/doc/board/sifive/unmatched.rst
   ;; The boot process goes:
   ;; * zero-stage bootloader (ZSBL) in ROM and first-stage bootloader (FSBL)
   ;;   together perform the SoC initialization and hand off to the next stage.
   ;; * BBL (Berkeley bootloader) takes the device-tree and brings up the rest
   ;;   of the board, then boots the desired operating system.
   (partitions (list
                (partition
                 ;; Special UUID for HiFive first-stage bootloader (FSBL).
                 (size (* 1 (expt 2 20)))
                 (label "spl")
                 (offset (* 34 512))
                 (file-system "unformatted")
                 (uuid (uuid "5b193300-fc78-40cd-8002-e86c45580b47")))
                (partition
                 ;; Specific offset for compatibility with the defaults for
                 ;; u-boot SPL.  Special UUID for HiFive BBL (Berkeley bootloader).
                 (size (* 4 (expt 2 20)))
                 (label "uboot")
                 (offset (* 2082 512))
                 (file-system "unformatted")
                 (uuid (uuid "2e54b353-1271-4842-806f-e436d6af6985")))
                root-partition))))

(define unmatched-image-type
  (image-type
   (name 'unmatched-raw)
   (constructor (cut image-with-os unmatched-disk-image <>))))

(define unmatched-barebones-raw-image
  (image
   (inherit
    (os+platform->image unmatched-barebones-os riscv64-linux
                        #:type unmatched-image-type))
   (name 'unmatched-barebones-raw-image)))

;; Return the default image.
unmatched-barebones-raw-image
"clamav-config-llvm-libs.patch")))) (build-system gnu-build-system) (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake) ("check" ,check) ; for tests ("libtool" ,libtool) ("pkg-config" ,pkg-config))) (inputs `(("bzip2" ,bzip2) ("libcurl" ,curl) ("libjson" ,json-c) ("libltdl" ,libltdl) ("libmspack" ,libmspack) ("llvm" ,llvm-3.6) ; requires <3.7, for JIT/verifier ("ncurses" ,ncurses) ("openssl" ,libressl) ("pcre2" ,pcre2) ("sasl" ,cyrus-sasl) ; for linking curl with libtool ("tomsfastmath" ,tomsfastmath) ("xml" ,libxml2) ("zlib" ,zlib))) (arguments `(#:configure-flags (let-syntax ((with (syntax-rules () ((_ name) (string-append "--with-" name "=" (assoc-ref %build-inputs name)))))) (list "--disable-unrar" "--enable-llvm" "--with-system-llvm" "--with-system-libmspack" "--without-included-ltdl" (with "xml") (with "openssl") (with "libjson") (with "pcre2") (with "zlib") (with "libcurl") ;; For sanity, specifying --enable-* flags turns ;; "support unavailable" warnings into errors. "--enable-bzip2" "--enable-check" "--sysconfdir=/etc/clamav" ;; Default database directory needs to be writeable "--with-dbdir=/var/db/clamav")) ;; install sample .conf files to %output/etc rather than /etc/clamav #:make-flags (list (string-append "sysconfdir=" %output "/etc")) #:phases (modify-phases %standard-phases ;; Regenerate configure script. Without this we don't get ;; the correct value for LLVM linker variables. (add-after 'unpack 'reconf (lambda _ (invoke "autoreconf" "-vfi"))) (add-before 'configure 'patch-llvm-config (lambda _ (substitute* '("libclamav/c++/detect.cpp" "libclamav/c++/ClamBCRTChecks.cpp" "libclamav/c++/bytecode2llvm.cpp") (("llvm/Config/config.h") "llvm/Config/llvm-config.h")) ;; `llvm-config --libfiles` inappropriately lists lib*.a ;; libraries, rather than the lib*.so's that our llvm ;; contains. They're used only for listing extra build ;; dependencies, so ignore them until that's fixed. (substitute* "libclamav/c++/Makefile.in" (("@LLVMCONFIG_LIBFILES@") "")) #t)) (add-before 'check 'skip-clamd-tests ;; XXX: The check?_clamd tests fail inside the build ;; chroot, but pass outside. (lambda _ (substitute* "unit_tests/Makefile" (("check2_clamd.sh.*check4_clamd.sh") "")) #t))))) (home-page "https://www.clamav.net") (synopsis "Antivirus engine") (description "Clam AntiVirus is an anti-virus toolkit, designed especially for e-mail scanning on mail gateways. It provides a number of utilities including a flexible and scalable multi-threaded daemon, a command line scanner, and advanced tool for automatic database updates. The core of the package is an anti-virus engine available in the form of a shared library.") (license (list license:gpl2+ ;ClamAV itself license:lgpl2.1 ;libclamav/mspack.[ch] license:public-domain ;libclamav/7z/*, libclamav/rijndael.[ch], etc... (package-license bzip2) ;modified bzip2 source in libclamav/nsis license:bsd-2 ;several files in libclamav license:bsd-3 ;libclamav/{regex,qsort.c,swf.[ch] license:ncsa ;libclamav/c++/PointerTracking.cpp license:zlib ;libclamav/inf*.h license:x11 ;libclamav/lzw (license:non-copyleft "libclamav/strlcat.c") ;"OpenBSD" license license:asl2.0 ;libclamav/yara* license:expat)))) ;shared/getopt.[ch]