guix-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug#45403] [PATCH] gnu: zfs: Split into packages specific for each of o


From: raid5atemyhomework
Subject: [bug#45403] [PATCH] gnu: zfs: Split into packages specific for each of our major supported kernel versions.
Date: Mon, 04 Jan 2021 16:07:08 +0000

Here's another alternative:

* Remove the separate "module" output and put the `.ko` file in the "out" 
output.
* Create a separate `zfs-guix-tools` which provides `zpool`, `zfs`, `zed`, 
`arc_summary`, `arcstat`, `dbufstat`, `raidz_test`, `zgenhostid`, `zvol_wait`, 
`fsck.zfs`, `mount.zfs`, `zdb`, `zhack`, `zinject`, `zstreamdump`, `ztest`.
  * What the provided binaries do is:
    * It looks at `/run/booted-system/kernel/manifest` and looks for a `"zfs"` 
package.
    * It `exec`s into the corresponding file in the `/gnu/store` for that 
package.

This way, we can have a separate package for ZFS userspace tools, which just 
calls the corresponding tools in the actual ZFS that gets installed.
It's somewhat magical, though.

Thanks
raid5atemyhomework

> This doesn't work, for two reasons:
>
> -   The kernel-module is in the output "module" of the `zfs` package. The 
> code specifically checks for `(package? module)`, but we have to specify it 
> as `(list system-zfs "module")`.
> -   ZFS is primarily managed via userspace tools, that's what ZFS users know 
> how to use, and we should support that so that Guix users can ask non-Guix 
> ZFS users for help with their ZFS problems. The userspace tools are included 
> in the package. If the base `zfs` package cannot compile because it's 
> incompatible with the default kernel, then the userspace tools are 
> nonexistent and there is no way to manage ZFS.
>     -   So, for example we can't just remove the "module" output and have the 
> `.ko` installed in the default "out" output, our core problem is we need to 
> compile a ZFS module and userspace tools.
>     -   We can try to split the compilation to separate the ZFS module from 
> the userspace tool, but that risks brittleness and subtle incompatibilities 
> between a ZFS module compiled for your local kernel (which cannot be the 
> latest and greatest kernel since the kernel does not maintain interface 
> compatibility with kernel modules and the ZFS module is always having to 
> catch up), and ZFS userspace tool compiled for the default 
> latest-and-greatest kernel (even if we somehow manage to compile just the 
> userspace tools with the latest kernel, there may be implicit assumptions 
> about kernel constants and so on passed from the userspace tools to the 
> kernel module, which may cause problems and birttleness).
>
>         So it's just safer to always override the `zfs` `#:linux` with the 
> system kernel, and install it in `(packages ...)` and in 
> `(kernel-loadable-modules ...)`.
>
> -   We get compileability as long as older kernel is used.
> -   We ensure that the userspace tool is built for the same kernel module for 
> a compatible kernel, at all generations of the `guix system`.
>
>     Thanks
>     raid5atemyhomework
>
>
> > Why is this needed? KERNEL-LOADABLE-MODULES are already automatically
> > adapted in this way.
> > See this in gnu/system.scm :
> > (define* (operating-system-directory-base-entries os)
> > "Return the basic entries of the 'system' directory of OS for use as the
> > value of the SYSTEM-SERVICE-TYPE service."
> > (let* ((locale (operating-system-locale-directory os))
> > (kernel (operating-system-kernel os))
> > (hurd (operating-system-hurd os))
> > (modules (operating-system-kernel-loadable-modules os))
> > (kernel (if hurd
> > kernel
> > (profile
> > (content (packages->manifest
> >
> >                                  (cons kernel
> >                                        (map (lambda (module)
> >                                               (if (package? module)
> >                                                   (package-for-kernel 
> > kernel    <-----
> >                                                                       
> > module)
> >                                                   module))
> >                                             modules))))
> >                        (hooks (list linux-module-database)))))
> >          (initrd  (and (not hurd) (operating-system-initrd-file os)))
> >          (params  (operating-system-boot-parameters-file os)))
> >     `(("kernel" ,kernel)
> >       ,@(if hurd `(("hurd" ,hurd)) '())
> >       ("parameters" ,params)
> >       ,@(if initrd `(("initrd" ,initrd)) '())
> >       ("locale" ,locale))))   ;used by libc
> >







reply via email to

[Prev in Thread] Current Thread [Next in Thread]