Subject: bug#35640: Make USB modems just work on Guix

From: Ludovic Courtès <[email-masked]>
Date: Fri, 24 May 2019 17:37:01 +0200

Hello,

"pelzflorian (Florian Pelz)" <[email-masked]> skribis:

> Tring to put the packages in gnu/packages/libusb.scm and not in their
> own file gnu/packages/usb-modeswitch.scm again resulted in
>
> [ 11%] LOAD     guix/scripts/search.scm
> [ 11%] LOAD     guix/scripts/gc.scm
> [ 11%] LOAD     guix/scripts/hash.scm
> [ 11%] LOAD     guix/scripts/pack.scm
> Backtrace:
> In ice-9/boot-9.scm:
>    222:29 19 (map1 (((guix utils)) ((guix store)) ((guix #) # (#)) …))
>    222:29 18 (map1 (((guix store)) ((guix status) #:select (#)) (#) …))
>    222:29 17 (map1 (((guix status) #:select (#)) ((guix grafts)) # …))
>    222:29 16 (map1 (((guix grafts)) ((guix monads)) ((guix #)) (#) …))
>    222:29 15 (map1 (((guix monads)) ((guix modules)) ((guix #)) (#) …))
>    222:29 14 (map1 (((guix modules)) ((guix packages)) ((guix #)) # …))
>    222:29 13 (map1 (((guix packages)) ((guix profiles)) ((guix #)) …))
>    222:29 12 (map1 (((guix profiles)) ((guix describe)) ((guix #)) …))
>    222:29 11 (map1 (((guix describe)) ((guix derivations)) ((# #)) …))
>    222:29 10 (map1 (((guix derivations)) ((guix search-paths)) (#) …))
>    222:29  9 (map1 (((guix search-paths)) ((guix build-system #)) # …))
>    222:29  8 (map1 (((guix build-system gnu)) ((guix scripts #)) # …))
>    222:29  7 (map1 (((guix scripts build)) ((guix self) #:select …) …))
>    222:29  6 (map1 (((guix self) #:select (make-config.scm)) ((…)) …))
>    222:29  5 (map1 (((gnu packages)) ((gnu packages bootstrap)) (…) …))
>    222:29  4 (map1 (((gnu packages bootstrap)) ((gnu packages …) …) …))
>    222:17  3 (map1 (((gnu packages compression) #:hide (zip)) ((…)) …))
>   2830:10  2 (resolve-interface (gnu packages compression) #:select _ …)
>    260:13  1 (for-each #<procedure 52470e0 at ice-9/boot-9.scm:2830…> …)
> In unknown file:
>            0 (scm-error misc-error #f "~A" ("no binding `zip' to h…") …)
>
> ERROR: In procedure scm-error:
> no binding `zip' to hide in module (gnu packages compression)

You cannot use #:hide on (gnu packages …) modules, for unfortunate and
obscure reasons.  The trick would be to hide the other ‘zip’ binding,
the one from (srfi srfi-1).

> As for the packaging, I hope it is correct to still refer to %outputs
> in the trivial-build-system for usb-modeswitch-data.

Yes.

> Should I also make the usb-modeswitch-data package install the license
> file of usb-modeswitch-data?
>
> Or should I use gnu-build-system instead of trivial-build-system?
> trivial works now though.

In general we should install license files.  If ‘trivial’ works for you,
that’s OK; an additional line to install the license would be welcome,
but not blocking.

> The file dispatcher.c of usb-modeswitch is licensed bsd-2 and not
> gpl2+.  Should I list both licenses or just gpl2+?

I think it’s enough to mark it as ‘gpl2+’ because, IIUC, the combination
of all this is GPLv2+.  If you think that needs clarification, you can
just add a comment about the ‘license’ field.

> I have checked the license of the files of usb-modeswitch-data and
> usb-modeswitch by going through each of them with the `less` program
> and reading its header while assuming that no license header means the
> file has the license described in the README file, by diff’ing the
> license files with a license downloaded from gnu.org, and that nothing
> looked like a program blob (there only are very small hex strings for
> the messages USB_ModeSwitch sends like
>
> MessageContent="55534243123456782400000080000612000024000000000000000000000000"
>
> that seem harmless).  Is this the usual procedure?

Yes.  I often just scan a few source file headers, not necessarily all
of them, but of course doing an exhaustive search is even better!

> Currently I also install the UDEV rule shipped with
> usb-modeswitch-data; I hope this is correct.

Yep.

> Currently I install the usb_modeswitch_dispatcher that is needed by
> the udev rule in a separate output called “dispatcher”.  I am unsure
> if this usb_modeswitch_dispatcher would need the usb_modeswitch
> program from the “out” output.  Is it OK when one output only works
> when the “out” output is installed too?

I’d say no.  :-)  In general, we want “guix install foo:bar” to provide
something that Just Works.

> What is still missing is adding a service type for usb-modeswitch that
> extends the udev service type by the rules file and that calls the
> usb-modeswitch dispatcher once every reboot.  I can try making one,
> but I am not sure if this is the right approach.  I am also unsure if
> this service should be part of %desktop-services; many modems need it
> though and modem-manager-service-type.

We’ll see that later.  :-)

Let me know if you want to send an updated patch if you we should
proceed with the one you sent.

Thanks!

Ludo’.