From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:2:bcc0::]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id QJLMATJ7fGAkRgEAgWs5BA (envelope-from ) for ; Sun, 18 Apr 2021 20:32:18 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id lF1CODF7fGDecQAA1q6Kng (envelope-from ) for ; Sun, 18 Apr 2021 18:32:17 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 30B1D1A97D for ; Sun, 18 Apr 2021 20:32:17 +0200 (CEST) Received: from localhost ([::1]:39606 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lYCDP-0003mA-Tc for larch@yhetil.org; Sun, 18 Apr 2021 14:32:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58952) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lYCBG-0003lW-FS for bug-guix@gnu.org; Sun, 18 Apr 2021 14:30:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:36194) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lYCBG-0002xO-66 for bug-guix@gnu.org; Sun, 18 Apr 2021 14:30:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lYCBG-0006C0-11 for bug-guix@gnu.org; Sun, 18 Apr 2021 14:30:02 -0400 X-Loop: help-debbugs@gnu.org Subject: bug#47744: nfs-root-fs test is failing Resent-From: Stefan Original-Sender: "Debbugs-submit" Resent-CC: bug-guix@gnu.org Resent-Date: Sun, 18 Apr 2021 18:30:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 47744 X-GNU-PR-Package: guix X-GNU-PR-Keywords: To: Mathieu Othacehe , Danny Milosavljevic X-Debbugs-Original-Cc: bug-guix@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.161877059823771 (code B ref -1); Sun, 18 Apr 2021 18:30:01 +0000 Received: (at submit) by debbugs.gnu.org; 18 Apr 2021 18:29:58 +0000 Received: from localhost ([127.0.0.1]:47740 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lYCBC-0006BK-0M for submit@debbugs.gnu.org; Sun, 18 Apr 2021 14:29:58 -0400 Received: from lists.gnu.org ([209.51.188.17]:41154) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lYCBA-0006BC-0u for submit@debbugs.gnu.org; Sun, 18 Apr 2021 14:29:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58936) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lYCB9-0003jq-Q1 for bug-guix@gnu.org; Sun, 18 Apr 2021 14:29:55 -0400 Received: from smtpout2.vodafonemail.de ([145.253.239.133]:52294) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lYCB7-0002nq-22; Sun, 18 Apr 2021 14:29:55 -0400 Received: from smtp.vodafone.de (smtpa08.fra-mediabeam.com [10.2.0.39]) by smtpout2.vodafonemail.de (Postfix) with ESMTP id 237D91227CD; Sun, 18 Apr 2021 20:29:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-smtpout-mb-15sep; t=1618770584; bh=Xk5hRciEynZJuiJnObuzPxoDAB98kAKtNzmjKHfyF34=; h=Subject:From:In-Reply-To:Date:Cc:References:To; b=ii+M9+vFPi90jn40gWyluRs/vAKxlNNDMYBXdoDJgdOWr+O2V2DISqHlxuOEk1b02 7bf5UG9qERDUyhipCoNzFSbyf1fRlhvPbOZWilVwx/NaeEUGbcT2LOrsdgpNUiL/SR ig8tM7Uf7dmZ/4ni4QLw2kPUpuB+RyAfw434C74s= Received: from macbook-pro.kuh-wiese.my-router.de (dslb-002-206-141-053.002.206.pools.vodafone-ip.de [2.206.141.53]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id A599A140199; Sun, 18 Apr 2021 18:29:43 +0000 (UTC) Content-Type: multipart/mixed; boundary="Apple-Mail=_1D215A7F-01F1-49CB-AF19-6A2E63DFABB3" Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) From: Stefan In-Reply-To: <5D1C7300-09CB-49C6-8256-5CD25563FE20@vodafonemail.de> Date: Sun, 18 Apr 2021 20:29:40 +0200 Message-Id: References: <87zgy2r4e7.fsf@gnu.org> <5D1C7300-09CB-49C6-8256-5CD25563FE20@vodafonemail.de> X-Mailer: Apple Mail (2.3124) X-purgate-type: clean X-purgate-Ad: Categorized by eleven eXpurgate (R) http://www.eleven.de X-purgate: This mail is considered clean (visit http://www.eleven.de for further information) X-purgate: clean X-purgate-size: 27428 X-purgate-ID: 155817::1618770583-000008A0-944E632A/0/0 Received-SPF: pass client-ip=145.253.239.133; envelope-from=stefan-guix@vodafonemail.de; helo=smtpout2.vodafonemail.de X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 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, RCVD_IN_BL_SPAMCOP_NET=1.347, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-guix@gnu.org List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 47744@debbugs.gnu.org Errors-To: bug-guix-bounces+larch=yhetil.org@gnu.org Sender: "bug-Guix" X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1618770737; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:resent-cc:resent-from:resent-sender: resent-message-id:in-reply-to:in-reply-to:references:references: list-id:list-help:list-unsubscribe:list-subscribe:list-post: dkim-signature; bh=Xk5hRciEynZJuiJnObuzPxoDAB98kAKtNzmjKHfyF34=; b=qmWqhay2jPRUovXK3/qjl/YmBlEyhpNEpL3zwjEboygAGLfipSrJLJXByLsdU1TYnz+f+g x3EBsB4IKdcU0txWcy0u08P+bXyCJKj0ZWwZXcFlmNCH05kAYxGjVGT55zyUXMpMwXpk55 ZWodi92nRQ4wXF8zOAB7NhVIrcFH5XQzB8XO14pxYU78zai+Sq3RB5oYuZdBgAvG3YhP9N si/SFwpPqCrBGMHq4GIz0santZIwuJYb/wjb+IkJEX72iEuqt+LBSNnm3lmvpx25Suy98t DJymipFsmucWCoQNMPe+RaLtYVy8F3SFHkdodyazJM5WG19C3oY2d/WxTM3qeA== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1618770737; a=rsa-sha256; cv=none; b=LrIoEZYCQKntgG5e0aJe8d5UVCsCJq/XonYdzADnolr9k6tSoCATca92suVDvCRGJGFJNm 8+c9F2K6IpzHX+kajY7Ek3J5LVKm34j6aW/VQ88/doPuhwq8uoH5A+ly00tzJlaidjnma4 5Hw3TIvjRDmsl63iExp+onbsCkmu3WiX1fKXvUuwHFL0EwAI3imbQE7NrTysi/tEvvWaCu oZWHrojYc+akGmzd+QogBWvv7ZuklrajHGLQgLPDM81fUjA03E3ghnSYVE5aYkZtK47upv UdfI9T/cnZcjOq1H9GWkRFVW5q5wquDSq+WWuBgfGGIOjFZc2e8YkiNcBpel0w== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=vodafonemail.de header.s=vfde-smtpout-mb-15sep header.b=ii+M9+vF; spf=pass (aspmx1.migadu.com: domain of bug-guix-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=bug-guix-bounces@gnu.org X-Migadu-Spam-Score: -0.94 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=vodafonemail.de header.s=vfde-smtpout-mb-15sep header.b=ii+M9+vF; dmarc=none; spf=pass (aspmx1.migadu.com: domain of bug-guix-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=bug-guix-bounces@gnu.org X-Migadu-Queue-Id: 30B1D1A97D X-Spam-Score: -0.94 X-Migadu-Scanner: scn0.migadu.com X-TUID: rR6mDhryMv+Y --Apple-Mail=_1D215A7F-01F1-49CB-AF19-6A2E63DFABB3 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Hi Mathieu and Danny! I=E2=80=99m now sure that this test has never been working. To get it working, first of all we need a change in (gnu system vm) to = not discard a root file-system of type =E2=80=9Cnfs=E2=80=9D. I did this = change. I also cleaned up the test itself. See the attached patch. The test needs two virtual machines communicating over TCP. The NFS = client machine needs the linux command line argument =E2=80=9Cip=3Ddhcp=E2= =80=9C (or a static IP setting) or some other code inside the initrd to = bring the network interface up and running before mounting its root = file-system over NFS. And finally some QEMU networking needs to be setup = to have the NFS server and client talk to each other with proper IP = addresses. Unfortunately I have no clue how to achieve these two prerequisites. The = kernel argument =E2=80=9Cip=3Ddhcp=E2=80=9D does not help, as the driver = for the network interface is not part of the linux-libre kernel. And = also adding the initrd-module e1000 comes too late. On my Raspberry Pi = I=E2=80=99m using a modified kernel with a build-in network driver and = the =E2=80=9Cip=3Ddhcp=E2=80=9D argument. It seems to me that the base-initrd is missing an argument to add some = arbitrary expression, or an option to configure the network interface, = or the shepherd service which is provisioning 'networking. For network = booting the initrd in Guix currently seems to be useless =E2=80=93 = however, getting rid of it is not trivial either. With the attached changes, the NFS server side tests are passing, but = the NFS client is missing an own IP address when trying to mount its = root file-system, which results in this error when executing =E2=80=9Cmake= check-system TESTS=3Dnfs-root=E2=80=9D: Welcome, this is GNU's early boot Guile. Use '--repl' for an initrd REPL. loading kernel modules... [ 27.250034] e1000: Intel(R) PRO/1000 Network Driver [ 27.250975] e1000: Copyright (c) 1999-2006 Intel Corporation. [ 28.026651] PCI Interrupt Link [LNKC] enabled at IRQ 11 [ 28.377771] e1000 0000:00:03.0 eth0: (PCI:33MHz:32-bit) = 52:54:00:12:34:56 [ 28.388012] e1000 0000:00:03.0 eth0: Intel(R) PRO/1000 Network = Connection [ 28.706203] usbcore: registered new interface driver usb-storage [ 28.839354] usbcore: registered new interface driver uas [ 28.922481] hid: raw HID events driver (C) Jiri Kosina [ 28.942031] usbcore: registered new interface driver usbhid [ 28.943247] usbhid: USB HID core driver [ 29.425330] isci: Intel(R) C600 SAS Controller Driver - version 1.2.0 [ 30.100062] PCI Interrupt Link [LNKD] enabled at IRQ 10 [ 30.724003] PCI Interrupt Link [LNKA] enabled at IRQ 10 [ 31.335165] PCI Interrupt Link [LNKB] enabled at IRQ 11 [ 32.129714] virtio_blk virtio3: [vda] 143360 512-byte logical blocks = (73.4 MB/70.0 MiB) [ 32.167257] vda: vda1 vda2 [ 32.526742] random: crng init done [ 32.624351] FS-Cache: Loaded [ 32.675399] 9pnet: Installing 9P2000 support [ 32.692551] 9p: Installing v9fs 9p2000 file system support [ 32.695268] FS-Cache: Netfs '9p' registered for caching configuring QEMU networking... [ 32.842717] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow = Control: RX [ 32.859236] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready In gnu/build/linux-boot.scm: 599:12 3 (_) 423:8 2 (mount-root-file-system ":/export" "nfs" # _ #:flags _ # ?) In unknown file: 1 (mount ":/export" "/real-root" "nfs" 1 "addr=3D127.0.0.1") In ice-9/boot-9.scm: 1669:16 0 (raise-exception _ #:continuable? _) In procedure mount: No such device [ 33.616971] Kernel panic - not syncing: Attempted to kill init! = exitcode=3D0x00000000 Bye Stefan --Apple-Mail=_1D215A7F-01F1-49CB-AF19-6A2E63DFABB3 Content-Disposition: attachment; filename=0001-NFS-root-for-virtual-machines.patch Content-Type: application/octet-stream; name="0001-NFS-root-for-virtual-machines.patch" Content-Transfer-Encoding: quoted-printable =46rom=2076ef5ee8d5505bf82c3226398844224e22fa78e1=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Stefan=20=0ADate:=20= Sun,=2018=20Apr=202021=2019:32:55=20+0200=0ASubject:=20[PATCH]=20NFS=20= root=20for=20virtual=20machines.=0AMIME-Version:=201.0=0AContent-Type:=20= text/plain;=20charset=3DUTF-8=0AContent-Transfer-Encoding:=208bit=0A=0A= gnu:=20system:=20Allow=20a=20root=20file-system=20over=20NFS=20for=20= virtual=20machines.=0Agnu:=20tests:=20Improve=20the=20test=20for=20a=20= root=20file-system=20over=20NFS.=20=20However,=20the=0Atest=20is=20still=20= failing.=0A=0A*=20gnu/system/vm.scm=20(virtualized-operating-system):=20= Allow=20root=20file-systems=0Aover=20NFS.=0A= (system-qemu-image/shared-store-script):=20Respect=20the=20configured=20= root=0Afile-system-device.=0A*=20gnu/tests/nfs.scm=20= (run-nfs-root-fs-test):=20Renamed=20to=20=E2=80=A6=0A= (run-nfs-root-test):=20=E2=80=A6=20this.=20Cleanup=20and=20improvements.=0A= (%test-nfs-root-fs):=20Renamed=20to=20=E2=80=A6=0A(%test-nfs-root):=20= =E2=80=A6=20this.=20Renamed=20the=20test=20from=20"nfs-root-fs"=20to=20= "nfs-root".=0A---=0A=20gnu/system/vm.scm=20|=20=2030=20++++++---=0A=20= gnu/tests/nfs.scm=20|=20160=20= ++++++++++++++++++++--------------------------=0A=202=20files=20changed,=20= 92=20insertions(+),=2098=20deletions(-)=0A=0Adiff=20--git=20= a/gnu/system/vm.scm=20b/gnu/system/vm.scm=0Aindex=20= 97adfa12fa..be0a4695f2=20100644=0A---=20a/gnu/system/vm.scm=0A+++=20= b/gnu/system/vm.scm=0A@@=20-608,7=20+608,8=20@@=20environment=20with=20= the=20store=20shared=20with=20the=20host.=20=20MAPPINGS=20is=20a=20list=20= of=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let=20((target=20= (file-system-mount-point=20fs))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(source=20(file-system-device=20fs)))=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20(string=3D?=20target=20= (%store-prefix))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(string=3D?=20target=20"/")=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(and=20(string=3D?=20target=20"/")=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(not=20= (string=3D?=20(file-system-type=20fs)=20"nfs")))=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(and=20(string?=20source)=0A=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (string-prefix?=20"/dev/"=20source))=0A=20=0A@@=20-618,14=20+619,20=20@@=20= environment=20with=20the=20store=20shared=20with=20the=20host.=20=20= MAPPINGS=20is=20a=20list=20of=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(uuid?=20source))))))=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20(operating-system-file-systems=20= os)))=0A=20=0A-=20=20(define=20virtual-file-systems=0A-=20=20=20=20(cons=20= (file-system=0A-=20=20=20=20=20=20=20=20=20=20=20=20(mount-point=20"/")=0A= -=20=20=20=20=20=20=20=20=20=20=20=20(device=20"/dev/vda1")=0A-=20=20=20=20= =20=20=20=20=20=20=20=20(type=20"ext4"))=0A+=20=20(define=20= (add-missing-root-fs=20user-file-systems)=0A+=20=20=20=20(if=20(null?=20= (filter=20(lambda=20(fs)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(string=3D?=20(file-system-mount-point=20= fs)=20"/"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20user-file-systems))=0A+=20=20=20=20=20=20=20=20(cons=20= (file-system=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (mount-point=20"/")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (device=20"/dev/vda1")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (type=20"ext4"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= user-file-systems)=0A+=20=20=20=20=20=20=20=20user-file-systems))=0A=20=0A= -=20=20=20=20=20=20=20=20=20=20(append=20(map=20mapping->file-system=20= mappings)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= user-file-systems)))=0A+=20=20(define=20virtual-file-systems=0A+=20=20=20= =20(append=20(map=20mapping->file-system=20mappings)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20(add-missing-root-fs=20user-file-systems)))=0A=20=0A=20= =20=20(operating-system=20(inherit=20os)=0A=20=0A@@=20-754,7=20+761,12=20= @@=20it=20is=20mostly=20useful=20when=20FULL-BOOT?=20=20is=20true."=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20#:disk-image-size=20disk-image-size)))=0A=20=20=20=20= =20(define=20kernel-arguments=0A=20=20=20=20=20=20=20#~(list=20#$@(if=20= graphic?=20#~()=20#~("console=3DttyS0"))=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20#+@(operating-system-kernel-arguments=20os=20"/dev/vda1")))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #+@(operating-system-kernel-arguments=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20os=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(file-system-device=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(first=20(filter=20(lambda=20(fs)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(string=3D?=20(file-system-mount-point=20fs)=20"/"))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(operating-system-file-systems=20os)))))))=0A=20=0A=20=20= =20=20=20(define=20qemu-exec=0A=20=20=20=20=20=20=20#~(list=20= #+(file-append=20qemu=20"/bin/"=0Adiff=20--git=20a/gnu/tests/nfs.scm=20= b/gnu/tests/nfs.scm=0Aindex=209b2b785176..33c019da89=20100644=0A---=20= a/gnu/tests/nfs.scm=0A+++=20b/gnu/tests/nfs.scm=0A@@=20-27,6=20+27,7=20= @@=0A=20=20=20#:use-module=20(gnu=20bootloader=20grub)=0A=20=20=20= #:use-module=20(gnu=20system)=0A=20=20=20#:use-module=20(gnu=20system=20= file-systems)=0A+=20=20#:use-module=20(gnu=20system=20linux-initrd)=0A=20= =20=20#:use-module=20(gnu=20system=20shadow)=0A=20=20=20#:use-module=20= (gnu=20system=20vm)=0A=20=20=20#:use-module=20(gnu=20services)=0A@@=20= -40,7=20+41,7=20@@=0A=20=20=20#:use-module=20(guix=20monads)=0A=20=20=20= #:export=20(%test-nfs=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= %test-nfs-server=0A-=20=20=20=20=20=20=20=20=20=20=20=20= %test-nfs-root-fs))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= %test-nfs-root))=0A=20=0A=20(define=20%base-os=0A=20=20=20= (operating-system=0A@@=20-265,7=20+266,7=20@@=20directories=20can=20be=20= mounted.")=0A=20=20=20=20(value=20(run-nfs-server-test))))=0A=20=0A=20=0A= =0A-(define=20(run-nfs-root-fs-test)=0A+(define=20(run-nfs-root-test)=0A=20= =20=20"Run=20a=20test=20of=20an=20OS=20mounting=20its=20root=20file=20= system=20via=20NFS."=0A=20=20=20(define=20nfs-root-server-os=0A=20=20=20=20= =20(marionette-operating-system=0A@@=20-275,15=20+276,8=20@@=20= directories=20can=20be=20mounted.")=0A=20=20=20=20=20=20=20=20=20=20= (modify-services=20(operating-system-user-services=20%nfs-os)=0A=20=20=20= =20=20=20=20=20=20=20=20=20(nfs-service-type=20config=20=3D>=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20(nfs-configuration=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20(debug=20'(nfs=20nfsd=20mountd))=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20;;;=20Note:=20Adding=20the=20following=20line=20causes=20= Guix=20to=20hang.=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= ;(rpcmountd-port=2020001)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20;;;=20= Note:=20Adding=20the=20following=20line=20causes=20Guix=20to=20hang.=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20;(rpcstatd-port=2020002)=20;=20= FIXME:=20Set=20broadcast=20port=20AND=20listening=20port.=0A-=20=20=20=20= =20=20=20=20=20=20=20=20=20(nfsd-port=202049)=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20(nfs-versions=20'("4.2"))=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(exports=20'(("/export"=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20= "*(rw,insecure,no_subtree_check,crossmnt,fsid=3Droot,no_root_squash,insecu= re,async)"))))))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20= "*(rw,insecure,no_subtree_check,crossmnt,fsid=3Droot,no_root_squash,async)= "))))))))=0A=20=20=20=20=20=20#:requirements=20'(nscd)=0A=20=20=20=20=20=20= #:imported-modules=20'((gnu=20services=20herd)=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(guix=20= combinators))))=0A@@=20-292,13=20+286,23=20@@=20directories=20can=20be=20= mounted.")=0A=20=20=20=20=20(marionette-operating-system=0A=20=20=20=20=20= =20(operating-system=0A=20=20=20=20=20=20=20=20(inherit=20= (simple-operating-system=20(service=20dhcp-client-service-type)))=0A+=20=20= =20=20=20=20=20(host-name=20"nfs-client")=0A=20=20=20=20=20=20=20=20= (kernel-arguments=20'("ip=3Ddhcp"))=0A+=20=20=20=20=20=20=20= (initrd-modules=0A+=20=20=20=20=20=20=20=20=20(cons=20"e1000"=20= %base-initrd-modules))=0A+=20=20=20=20=20=20=20(initrd=20(lambda=20= (file-systems=20.=20rest)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20;;=20Create=20a=20standard=20initrd=20but=20set=20up=20networking=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20with=20the=20= parameters=20QEMU=20expects=20by=20default.=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(apply=20base-initrd=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20file-systems=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #:qemu-networking?=20#t=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20rest)))=0A=20=20=20=20=20=20=20=20(file-systems=20= (cons=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(file-system=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(type=20"nfs")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(mount-point=20"/")=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(device=20= ":/export")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(options=20"addr=3D127.0.0.1,vers=3D4.2"))=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(options=20= "addr=3D127.0.0.1"))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20%base-file-systems)))=0A=20=20=20=20=20=20#:requirements=20= '(nscd)=0A=20=20=20=20=20=20#:imported-modules=20'((gnu=20services=20= herd)=0A@@=20-313,102=20+317,80=20@@=20directories=20can=20be=20= mounted.")=0A=20=20=20=20=20=20=20=20=20=20=20(mkdir=20#$output)=0A=20=20= =20=20=20=20=20=20=20=20=20(chdir=20#$output)=0A=20=0A-=20=20=20=20=20=20= =20=20=20=20(test-begin=20"start-nfs-boot-test")=0A-=0A-=20=20=20=20=20=20= =20=20=20=20;;;=20Start=20up=20NFS=20server=20host.=0A+=20=20=20=20=20=20= =20=20=20=20(test-begin=20"start=20nfs-root=20server")=0A=20=0A=20=20=20=20= =20=20=20=20=20=20=20(mkdir=20"/tmp/server")=0A=20=20=20=20=20=20=20=20=20= =20=20(define=20server-marionette=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= (make-marionette=20(list=20#$(virtual-machine=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20nfs-root-server-os=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;(operating-system=20nfs-root-server-os)=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;(port-forwardings=20'(=20;=20(111=20.=20111)=0A-=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(2049=20.=202049)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(20001=20.=20= 20001)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(20002=20.=2020002)))=0A-))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20nfs-root-server-os))=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #:socket-directory=20"/tmp/server"))=0A=20=0A-=20=20=20=20=20=20=20=20=20= =20(marionette-eval=0A-=20=20=20=20=20=20=20=20=20=20=20'(begin=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(use-modules=20(gnu=20services=20= herd))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20(current-output-port=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(open-file=20= "/dev/console"=20"w0"))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= FIXME:=20Instead=20statfs=20"/"=20and=20"/export"=20and=20wait=20until=20= they=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20are=20different=20= file=20systems.=20=20But=20Guile=20doesn't=20seem=20to=20have=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20statfs.=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(sleep=205)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (chmod=20"/export"=20#o777)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (symlink=20"/gnu"=20"/export/gnu")=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(start-service=20'nscd)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (start-service=20'networking)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (start-service=20'nfs))=0A-=20=20=20=20=20=20=20=20=20=20=20= server-marionette)=0A-=0A-=20=20=20=20=20=20=20=20=20=20;;;=20Wait=20for=20= the=20NFS=20services=20to=20be=20up=20and=20running.=0A+=20=20=20=20=20=20= =20=20=20=20(test-assert=20"nfs-root=20server=20boots"=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(marionette-eval=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20'(begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (use-modules=20(gnu=20services=20herd))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(current-output-port=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(open-file=20"/dev/console"=20"w0"))=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(chmod=20"/export"=20#o777)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(symlink=20"/gnu"=20= "/export/gnu")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (start-service=20'nscd)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (start-service=20'networking)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(start-service=20'nfs)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#t)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20server-marionette))=0A= =20=0A=20=20=20=20=20=20=20=20=20=20=20(test-assert=20"nfs=20services=20= are=20running"=0A-=20=20=20=20=20=20=20=20=20=20=20(wait-for-file=20= "/var/run/rpc.statd.pid"=20server-marionette))=0A-=0A-=20=20=20=20=20=20=20= =20=20=20(test-assert=20"NFS=20port=20is=20ready"=0A-=20=20=20=20=20=20=20= =20=20=20=20=20(wait-for-tcp-port=202049=20server-marionette))=0A-=0A-=20= =20=20=20=20=20=20=20=20=20(test-assert=20"NFS=20statd=20port=20is=20= ready"=0A-=20=20=20=20=20=20=20=20=20=20=20=20(wait-for-tcp-port=2020002=20= server-marionette))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(and=20= (wait-for-file=20"/var/run/rpc.statd.pid"=20server-marionette)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(marionette-eval=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20'(zero?=20(system*=20= (string-append=20#$nfs-utils=20"/sbin/showmount")=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20"-e"=20"nfs-server"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20server-marionette)))=0A=20=0A-=20=20=20=20=20=20=20=20=20=20= (test-assert=20"NFS=20mountd=20port=20is=20ready"=0A-=20=20=20=20=20=20=20= =20=20=20=20=20(wait-for-tcp-port=2020001=20server-marionette))=0A-=0A-=20= =20=20=20=20=20=20=20=20=20;;;=20FIXME:=20(test-assert=20"NFS=20= portmapper=20port=20is=20ready"=0A-=20=20=20=20=20=20=20=20=20=20;;;=20= FIXME:=20=20(wait-for-tcp-port=20111=20server-marionette))=0A+=20=20=20=20= =20=20=20=20=20=20(test-end)=0A=20=0A-=20=20=20=20=20=20=20=20=20=20;;;=20= Start=20up=20NFS=20client=20host.=0A+=20=20=20=20=20=20=20=20=20=20= (test-begin=20"start=20nfs-root=20client")=0A=20=0A+=20=20=20=20=20=20=20= =20=20=20(mkdir=20"/tmp/client")=0A=20=20=20=20=20=20=20=20=20=20=20= (define=20client-marionette=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= (make-marionette=20(list=20#$(virtual-machine=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20nfs-root-client-os=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;(port-forwardings=20'((111=20.=20111)=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20;=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (2049=20.=202049)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(20001=20.=2020001)=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(20002=20.=2020002)))=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ))))=0A-=0A-=20=20=20=20=20=20=20=20=20=20(marionette-eval=0A-=20=20=20=20= =20=20=20=20=20=20=20'(begin=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (use-modules=20(gnu=20services=20herd))=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(use-modules=20(rnrs=20io=20ports))=0A-=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(current-output-port=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(open-file=20"/dev/console"=20"w0"))=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(let=20((content=20(call-with-input-file=20= "/proc/mounts"=20get-string-all)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(call-with-output-file=20"/mounts.new"=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(lambda=20(port)=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(display=20content=20port))))=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(chmod=20"/mounts.new"=20#o777)=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20(rename-file=20"/mounts.new"=20= "/mounts"))=0A-=20=20=20=20=20=20=20=20=20=20=20client-marionette)=0A-=0A= -=20=20=20=20=20=20=20=20=20=20(test-assert=20"nfs-root-client=20= booted")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nfs-root-client-os))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20#:socket-directory=20"/tmp/client"))=0A=20=0A-=20=20=20=20= =20=20=20=20=20=20;;;=20Check=20whether=20NFS=20client=20host=20= communicated=20with=20NFS=20server=20host.=0A-=0A-=20=20=20=20=20=20=20=20= =20=20(test-assert=20"nfs=20client=20deposited=20file"=0A-=20=20=20=20=20= =20=20=20=20=20=20(wait-for-file=20"/export/mounts"=20= server-marionette))=0A-=20=20=20=20=20=20=20=20=20=20(marionette-eval=0A= -=20=20=20=20=20=20=20=20=20=20=20'(begin=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(current-output-port=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(open-file=20"/dev/console"=20"w0"))=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(call-with-input-file=20"/export/mounts"=20display))=0A-=20= =20=20=20=20=20=20=20=20=20=20server-marionette)=0A+=20=20=20=20=20=20=20= =20=20=20(test-assert=20"nfs-root=20client=20boots"=0A+=20=20=20=20=20=20= =20=20=20=20=20=20(marionette-eval=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20'(begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (use-modules=20(gnu=20services=20herd))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(use-modules=20(rnrs=20io=20ports))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(current-output-port=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(open-file=20"/dev/console"=20"w0"))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let=20((content=20= (call-with-input-file=20"/proc/mounts"=20get-string-all)))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(display=20content)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(newline)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(call-with-output-file=20= "/mounts"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (lambda=20(port)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(display=20content=20port)))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20content))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20client-marionette))=0A+=0A+=20=20=20=20=20=20=20=20=20=20(test-assert=20= "wait=20nfs-root=20client=20booted=20and=20deposited=20mounts=20file"=0A= +=20=20=20=20=20=20=20=20=20=20=20=20(and=20(wait-for-file=20= "/export/mounts"=20server-marionette)))=0A+=20=20=20=20=20=20=20=20=20=20= (test-assert=20"nfs-root=20client=20booted=20and=20deposited=20mounts=20= file"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (marionette-eval=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= '(begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (current-output-port=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(open-file=20"/dev/console"=20"w0"))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(call-with-input-file=20= "/export/mounts"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20get-string-all))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20server-marionette))=0A=20=0A=20=20=20=20=20=20= =20=20=20=20=20(test-end)=0A=20=20=20=20=20=20=20=20=20=20=20(exit=20(=3D=20= (test-runner-fail-count=20(test-runner-current))=200)))))=0A=20=0A-=20=20= (gexp->derivation=20"nfs-root-fs-test"=20test))=0A+=20=20= (gexp->derivation=20"nfs-root-test"=20test))=0A=20=0A-(define=20= %test-nfs-root-fs=0A+(define=20%test-nfs-root=0A=20=20=20(system-test=0A= -=20=20=20(name=20"nfs-root-fs")=0A+=20=20=20(name=20"nfs-root")=0A=20=20= =20=20(description=20"Test=20that=20an=20NFS=20server=20can=20be=20= started=20and=20the=20exported=0A-directory=20can=20be=20used=20as=20= root=20file=20system.")=0A-=20=20=20(value=20(run-nfs-root-fs-test))))=0A= +directory=20can=20be=20used=20as=20root=20file=20system=20of=20an=20NFS=20= client.")=0A+=20=20=20(value=20(run-nfs-root-test))))=0A--=20=0A2.31.1=0A= --Apple-Mail=_1D215A7F-01F1-49CB-AF19-6A2E63DFABB3--