Received: (at 70239) by debbugs.gnu.org; 8 Apr 2024 12:29:18 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Apr 08 08:29:18 2024
Received: from localhost ([127.0.0.1]:45529 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1rto7h-0004fk-QA
for submit <at> debbugs.gnu.org; Mon, 08 Apr 2024 08:29:18 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:48532)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <ludo@HIDDEN>) id 1rto7f-0004el-5Z
for 70239 <at> debbugs.gnu.org; Mon, 08 Apr 2024 08:29:16 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <ludo@HIDDEN>)
id 1rto7R-0008IS-EJ; Mon, 08 Apr 2024 08:29:01 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
s=fencepost-gnu-org; h=MIME-Version:Date:References:In-Reply-To:Subject:To:
From; bh=DxgB5U0hVoaN4N0Hi78QUaofpV4Ylp+Uf2KlAYUDzXk=; b=FiOjKmbYFgA+FwVPBDIH
0WwFmEEGLrHvJ1p/1uUr7kybdtoCVxRtbPvziJnPT/KuSZkQpWKGbkKvDxeeCe7mjSjptNmoIQokF
6DKP8obuj54K59mj1INrag89yNQiRloKBD1/LNuRgkXOPulxpOMcpNliMLSAp+saWfAqUGW+OCqVk
WhfT5NpjdAHhqnlj0a2sNFB4/tGPU/v1KKHl+LgT3q/AU6KUrriAUhE2+u0X66CWT+VXZ3uU4nV0s
8KEWyHa7txOhRLHFJmCX/+JFTYK2O4A99Rkqg4W0KAcfnUR3iy4PgUtbuf3uQ4C/MxddJbOAuNq2T
jJGwkKRAN0ZS4Q==;
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: Tomas Volf <~@wolfsden.cz>
Subject: Re: bug#70239: (operating-system) structure requires a kernel
In-Reply-To: <ZhFhfu_fcTyfxjeV@ws> (Tomas Volf's message of "Sat, 6 Apr 2024
16:51:42 +0200")
References: <ZhFhfu_fcTyfxjeV@ws>
Date: Mon, 08 Apr 2024 14:28:58 +0200
Message-ID: <87cyr0qbqt.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70239
Cc: 70239 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)
--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Hi,
Tomas Volf <~@wolfsden.cz> skribis:
> (operating-system
> (host-name "guix")
> ;; Servers usually use UTC regardless of the location.
> (timezone "Etc/UTC")
> (locale "en_US.utf8")
> (firmware '())
> (initrd-modules '())
> ; (kernel %ct-dummy-kernel)
> (kernel #f)
[...]
> In gnu/services.scm:
> 1031:29 7 (linux-builder-configuration->system-entry _)
> In guix/profiles.scm:
> 439:4 6 (packages->manifest _)
> In srfi/srfi-1.scm:
> 586:17 5 (map1 (#f))
> In guix/inferior.scm:
> 549:2 4 (loop #f "out" #<promise #<procedure 7f8c96627f98 at gu=
=E2=80=A6>)
> 529:4 3 (inferior-package-input-field #f _)
> 473:18 2 (inferior-package-field #f (compose (lambda (#) (=E2=80=
=A6)) #))
> In ice-9/boot-9.scm:
> 1685:16 1 (raise-exception _ #:continuable? _)
> 1685:16 0 (raise-exception _ #:continuable? _)
>
> ice-9/boot-9.scm:1685:16: In procedure raise-exception:
> In procedure struct-vtable: Wrong type argument in position 1 (expect=
ing struct): #f
Indeed, =E2=80=98linux-builder-configuration->system-entry=E2=80=99 is not =
prepared for
that, but we can fix it.
> The (kernel (plain-file "fake-kernel" "")) leads to a different error:
>
> building /gnu/store/idy2sylx9zbvphzlqvhnldjvg242hd2a-linux-modules.dr=
v...
> find-files: /gnu/store/jfcbq6djya5pi54yhpvzj66r18h4mp09-dummy-kernel-=
1/lib/modules: Not a directory
> Backtrace:
> 4 (primitive-load "/gnu/store/sckm34nzvmkcynhgn6zs5aq6xfs?=
")
> In ice-9/eval.scm:
> 619:8 3 (_ #f)
> 626:19 2 (_ #<directory (guile-user) 7ffff77f7c80>)
> 159:9 1 (_ #<directory (guile-user) 7ffff77f7c80>)
> In unknown file:
> 0 (car ())
>
> ERROR: In procedure car:
> In procedure car: Wrong type (expecting pair): ()
I believe this one is a regression introduced in
8f8ec56052766aa5105d672b77ad9eaca5c1ab3c. I believe this is fixed by
this patch:
--=-=-=
Content-Type: text/x-patch
Content-Disposition: inline
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index 561cfe2fd0..40ff2dc808 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -134,18 +134,23 @@ (define (flat-linux-module-directory linux modules)
(guix build utils)
(rnrs io ports)
(srfi srfi-1)
- (srfi srfi-26))
+ (srfi srfi-26)
+ (ice-9 match))
(define module-dir
(string-append #$linux "/lib/modules"))
(define builtin-modules
- (call-with-input-file
- (first (find-files module-dir "modules.builtin$"))
- (lambda (port)
- (map file-name->module-name
- (string-tokenize
- (get-string-all port))))))
+ (match (find-files module-dir (lambda (file stat)
+ (string=? (basename file)
+ "modules.builtin")))
+ ((file . _)
+ (call-with-input-file file
+ (lambda (port)
+ (map file-name->module-name
+ (string-tokenize (get-string-all port))))))
+ (_
+ '())))
(define modules-to-lookup
(lset-difference string=? '#$modules builtin-modules))
--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Could you confirm?
> I think it would be best to just support (kernel #f) for container deploy=
ments,
> since that would simplify it and keep it manageable.
Yes, let=E2=80=99s do that too.
Thanks,
Ludo=E2=80=99.
--=-=-=--
bug-guix@HIDDEN:bug#70239; Package guix.
Full text available.
Received: (at submit) by debbugs.gnu.org; 6 Apr 2024 14:52:08 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Apr 06 10:52:08 2024
Received: from localhost ([127.0.0.1]:40565 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1rt7Oo-0000qy-93
for submit <at> debbugs.gnu.org; Sat, 06 Apr 2024 10:52:07 -0400
Received: from lists.gnu.org ([2001:470:142::17]:33726)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <~@wolfsden.cz>) id 1rt7Oj-0000q0-5e
for submit <at> debbugs.gnu.org; Sat, 06 Apr 2024 10:52:04 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <~@wolfsden.cz>) id 1rt7OX-0008PO-CA
for bug-guix@HIDDEN; Sat, 06 Apr 2024 10:51:49 -0400
Received: from wolfsden.cz ([37.205.8.62])
by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <~@wolfsden.cz>) id 1rt7OU-0006TB-Vi
for bug-guix@HIDDEN; Sat, 06 Apr 2024 10:51:49 -0400
Received: by wolfsden.cz (Postfix, from userid 104)
id B36C42A6EE5; Sat, 6 Apr 2024 14:51:43 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=wolfsden.cz; s=mail;
t=1712415103; bh=Dhb0zkSO1qx0jADvO4L9AEI+gBbqUqj4sB3YuPIDWfg=;
h=Date:From:To:Subject;
b=wmU5pc9jYkZVVEXtGDdAAuVCDAnGBOOQtFtiITkJvR7sQoeXV/vB9kRMlZwr3c7jI
g563fZaXGJoK3q5hFzi2SrABEqYdbVps0RMcmm9zR4WES7hGFowkFNOyljo0jCTWOk
XIQyk5Nu2kpnFbJ0/pKXVUanYI7XetqS4ptfqlasZaQRgtKAzRIXSR4mdvF7rMa0AC
miQDPIi66g/pLNNPfVM/k6t1Qt8+wGCCkSEz1Hkx9jAHSSLNMkuBOtjYUAxQY9xMoy
UiRN4l0LPy1sDoqCkrsY5Kf92WGMbTevmTU7xsScp7AiJa16E26yRkhKaHwaKMZp1d
oxXCXdX8LFgJQj6smVWP3CtphnQu2Fd+IfoOe1S0cAD8KFmjjIHMwtmTxmDTr3LHmV
Ezpqn1FBs1t8kj0H1kYEt9VkOOX3hg90YFT+04wtZXfspbJjXCdGyMcTv1f5s5Wwzb
6BWT7h5YlpNA2gDTsrWkntSzMGU7D7FEsyOOJJu/+wVc/3jM8vboyGokeb5d2gjrrd
cTi3w7tW2Zl4krPGRE3nYpdAdPWWTncQr+o1Omr4RYdhhLrDf8ej8QQrQ1bXS/14SH
2qPb0ogIEmRAE8Gc+nOcsCX0pfJUbQNKRITeUw0/9h2X2FJPPkbkHFrNe+WAY9WDsT
9PlCdBTb9Cc7RdTObvDUm0Xo=
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on wolfsden
X-Spam-Level:
X-Spam-Status: No, score=-1.2 required=5.0 tests=ALL_TRUSTED,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,URIBL_BLOCKED
autolearn=unavailable autolearn_force=no version=3.4.6
Received: from localhost (unknown [193.32.127.157])
by wolfsden.cz (Postfix) with ESMTPSA id D44A02A5FFC
for <bug-guix@HIDDEN>; Sat, 6 Apr 2024 14:51:42 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=wolfsden.cz; s=mail;
t=1712415102; bh=Dhb0zkSO1qx0jADvO4L9AEI+gBbqUqj4sB3YuPIDWfg=;
h=Date:From:To:Subject;
b=fXmtd4GT7uS4GQhec9+z4kG2Fwlll9ysAdXG9RmOtQcG6x0SaNPUGm04ZwEjNmnk5
RCIOmBsZfDGzw81e3eybeZRY5h2BpbO8Z9g5QO2R6JnoL7O6yW4h1drZamQI4t/yzm
dxcleqe1jfiUkbiMPiGln4gQ7rqshwuKD0r20NlXg0tAdnKIcPyvq7mhojP9PM2hSc
x1sCI8jIQHhCM9TbNHs0wGy2mwaoF2lZn+mjUvVjV3VvSRMCQvM089A0AekZOVyAqQ
frOcW8UaLA2pH8mtlF+PDODSk7vr1IU3PGt32qL1B7yL0xOAyptyaGfgAwnlvrspcf
BG1ZQN/WGZzyxa427rWYFP+Sh6jATtYawzUk4LGjRJiwMxL7QtmxTr+tXFeVN3+Nft
YDEE3iK/biFCCgvIfRDutwRj161o+usoGI37E33yjv979CeBf7nGZY4zrNbDffb/4R
3P0tmrmkVCHtWp8lRJw1aur028QJHozP8PsnHjOo2OAWv6ML+76xLuDD/XN48y0y4P
GJaUmgwCqYMZikVfPhC6lZ0ds/ZI3of20Q4TnmSfXiBwc4rIEl/AeNiUpPxMEDgz78
a8LGt0dvNObvx3J+3IXsuaTVM2ww9jWdsKSHWKT+7S1hOTFmnmvgUrD4x4AXX4s7Ll
qLtW81Hqu8wKkx5i8g68wGHA=
Date: Sat, 6 Apr 2024 16:51:42 +0200
From: Tomas Volf <~@wolfsden.cz>
To: bug-guix@HIDDEN
Subject: (operating-system) structure requires a kernel
Message-ID: <ZhFhfu_fcTyfxjeV@ws>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
protocol="application/pgp-signature"; boundary="OMPTKsyEvWMxU2J+"
Content-Disposition: inline
Received-SPF: pass client-ip=37.205.8.62; envelope-from=~@wolfsden.cz;
helo=wolfsden.cz
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001,
SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)
--OMPTKsyEvWMxU2J+
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Hello,
I am deploying Guix into a LXC container, therefore I have no need for a ke=
rnel
(it is provided by the host). So I would like to limit both storage and co=
mpute
cost by not providing any in the `operating-system' record.
Historically I was using a dummy empty package for that purpose, but that h=
ave
stopped working, so after short discussion with civodul on IRC I decided to
bug-report this problem.
2024-04-06 14:45:10 civodul can=E2=80=99t you make it (kernel #f)?
2024-04-06 14:45:34 civodul or maybe (kernel (plain-file "fake-kernel" ""))?
=2E..
2024-04-06 14:49:52 civodul actually i think =E2=80=98guix system container=
=E2=80=99 could/should do that: replace =E2=80=98kernel=E2=80=99 with a fak=
e kernel or #f
2024-04-06 14:51:05 civodul so yes, sounds like a bug to me
I tried the suggested options, here is #f:
(operating-system
(host-name "guix")
;; Servers usually use UTC regardless of the location.
(timezone "Etc/UTC")
(locale "en_US.utf8")
(firmware '())
(initrd-modules '())
; (kernel %ct-dummy-kernel)
(kernel #f)
(packages (cons* nss-certs
%base-packages))
(essential-services (modify-services
(operating-system-default-essential-services
this-operating-system)
(delete firmware-service-type)
(delete (service-kind %linux-bare-metal-service=
))))
(bootloader %ct-bootloader)
(file-systems %ct-file-systems)
(services (cons* (service openssh-service-type
(openssh-configuration
(openssh openssh-sans-x)
(permit-root-login #t)
(password-authentication? #t)))
%ct-services)))
Which leads to:
Backtrace:
In guix/store.scm:
661:37 19 (thunk)
1300:8 18 (call-with-build-handler #<procedure 7f8c92c5f4b0 at g=E2=
=80=A6> =E2=80=A6)
2180:25 17 (run-with-store #<store-connection 256.99 7f8c946de370> =
=E2=80=A6)
In guix/scripts/system.scm:
847:2 16 (_ _)
721:8 15 (_ #<store-connection 256.99 7f8c946de370>)
In gnu/system.scm:
1301:19 14 (operating-system-derivation _)
In gnu/services.scm:
1220:36 13 (_ _)
In srfi/srfi-1.scm:
586:29 12 (map1 (#<<service> type: #<service-type profile 7f8c=E2=80=
=A6> =E2=80=A6))
586:29 11 (map1 (#<<service> type: #<service-type etc 7f8c9691=E2=80=
=A6> =E2=80=A6))
586:29 10 (map1 (#<<service> type: #<service-type activate 7f8=E2=80=
=A6> =E2=80=A6))
586:29 9 (map1 (#<<service> type: #<service-type boot 7f8c969=E2=80=
=A6> =E2=80=A6))
586:17 8 (map1 (#<<service> type: #<service-type linux-builde=E2=80=
=A6> =E2=80=A6))
In gnu/services.scm:
1031:29 7 (linux-builder-configuration->system-entry _)
In guix/profiles.scm:
439:4 6 (packages->manifest _)
In srfi/srfi-1.scm:
586:17 5 (map1 (#f))
In guix/inferior.scm:
549:2 4 (loop #f "out" #<promise #<procedure 7f8c96627f98 at gu=E2=
=80=A6>)
529:4 3 (inferior-package-input-field #f _)
473:18 2 (inferior-package-field #f (compose (lambda (#) (=E2=80=A6=
)) #))
In ice-9/boot-9.scm:
1685:16 1 (raise-exception _ #:continuable? _)
1685:16 0 (raise-exception _ #:continuable? _)
ice-9/boot-9.scm:1685:16: In procedure raise-exception:
In procedure struct-vtable: Wrong type argument in position 1 (expectin=
g struct): #f
The (kernel (plain-file "fake-kernel" "")) leads to a different error:
building /gnu/store/idy2sylx9zbvphzlqvhnldjvg242hd2a-linux-modules.drv.=
=2E.
find-files: /gnu/store/jfcbq6djya5pi54yhpvzj66r18h4mp09-dummy-kernel-1/=
lib/modules: Not a directory
Backtrace:
4 (primitive-load "/gnu/store/sckm34nzvmkcynhgn6zs5aq6xfs?")
In ice-9/eval.scm:
619:8 3 (_ #f)
626:19 2 (_ #<directory (guile-user) 7ffff77f7c80>)
159:9 1 (_ #<directory (guile-user) 7ffff77f7c80>)
In unknown file:
0 (car ())
ERROR: In procedure car:
In procedure car: Wrong type (expecting pair): ()
For the record, before the pull I was successfully using this "kernel" pack=
age:
(define %ct-dummy-kernel
(package
(name "dummy-kernel")
(version "1")
(source #f)
(build-system trivial-build-system)
(arguments
(list
#:builder #~(mkdir #$output)))
(synopsis "Dummy kernel")
(description
"In container environment, the kernel is provided by the host. Ho=
wever we
still need to specify a kernel in the operating-system definition, henc=
e this
package.")
(home-page #f)
(license #f)))
Even if I adjust it to create the /lib/modules subdirectory, it just chokes=
down
the line on something else.
I think it would be best to just support (kernel #f) for container deployme=
nts,
since that would simplify it and keep it manageable.
Have a nice day,
Tomas Volf
--
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.
--OMPTKsyEvWMxU2J+
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCgAdFiEEt4NJs4wUfTYpiGikL7/ufbZ/wakFAmYRYX4ACgkQL7/ufbZ/
wakuuA/+Ir0/NFGzlo4+3IwZ0b6Yjv9GOoKu884tpW1nFnrwBF7Ctl1yDdcbbeHW
uff5Ge9TED6cf71kIhDoPLehA5Yktbt4QoqXquk1jgDBH5e7uJ6eKhh7ls6n9Xnp
DgfxPReKl6DQFqvA9pspkIuIgA20w8AH6hzsrtzvbuAl2+GhssQIDy6gQyfI6InM
opfJA9Po/wQOFHtd2tMUSBOpOm5+bpYgT4MK0AMQqPN7fUpAXdis7FFGznWAm1E/
ISNCIRzeGSGPJB7uTZf9tkT09OqmXQT9h8eIQFTpGohiDnkJ09Cy0GXfQSALzU8c
ne0Rb6ipCbYA25LXO56mG54bIYZ04ARzKWBLlE9FBIpqtrPN5j/9Uj522F5dayoR
WQul3mDDlMt+Kr8LBfujLUMJo17nyLQR6ByCh18rXJQPQsMoHp28xL793K6epKEt
rAu6ES/nNIgsUEqVlKOE3Iu/6lrtvQmyYRlSjLBcuxg3xOd08oKzwj4F8qYUm7q6
pUJBDW9L4XPM7mEz4pRgWAaw5rIdjeeVNIbxba7Scpu5RppL/r7l5gLnrB9e31ka
qpyaBuk5FDeCHg0j70P5lIeH4KJfCQTGCnkifUazAFwxE6NYOaCzHbUu4NlhXq4b
TIBFWJBhJ0JUd2+wO6b7qFASN3QDUGPtJj6hCx4Z2IOZdENjS8s=
=3UQK
-----END PGP SIGNATURE-----
--OMPTKsyEvWMxU2J+--
Tomas Volf <~@wolfsden.cz>:bug-guix@HIDDEN.
Full text available.bug-guix@HIDDEN:bug#70239; Package guix.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.