[arch-commits] Commit in mkinitcpio-nfs-utils/repos (5 files)

Jelle van der Waa jelle at archlinux.org
Wed May 30 19:04:21 UTC 2018


    Date: Wednesday, May 30, 2018 @ 19:04:21
  Author: jelle
Revision: 325165

archrelease: copy trunk to testing-x86_64

Added:
  mkinitcpio-nfs-utils/repos/testing-x86_64/
  mkinitcpio-nfs-utils/repos/testing-x86_64/PKGBUILD
    (from rev 325164, mkinitcpio-nfs-utils/trunk/PKGBUILD)
  mkinitcpio-nfs-utils/repos/testing-x86_64/initcpio-hook-net
    (from rev 325164, mkinitcpio-nfs-utils/trunk/initcpio-hook-net)
  mkinitcpio-nfs-utils/repos/testing-x86_64/initcpio-install-net
    (from rev 325164, mkinitcpio-nfs-utils/trunk/initcpio-install-net)
  mkinitcpio-nfs-utils/repos/testing-x86_64/nfsmount-fix-wrong-umount-path.patch
    (from rev 325164, mkinitcpio-nfs-utils/trunk/nfsmount-fix-wrong-umount-path.patch)

--------------------------------------+
 PKGBUILD                             |   36 +++++++++++
 initcpio-hook-net                    |   90 +++++++++++++++++++++++++++
 initcpio-install-net                 |  108 +++++++++++++++++++++++++++++++++
 nfsmount-fix-wrong-umount-path.patch |   14 ++++
 4 files changed, 248 insertions(+)

Copied: mkinitcpio-nfs-utils/repos/testing-x86_64/PKGBUILD (from rev 325164, mkinitcpio-nfs-utils/trunk/PKGBUILD)
===================================================================
--- testing-x86_64/PKGBUILD	                        (rev 0)
+++ testing-x86_64/PKGBUILD	2018-05-30 19:04:21 UTC (rev 325165)
@@ -0,0 +1,36 @@
+# $Id$
+# Maintainer: Thomas Bächler <thomas at archlinux.org>
+
+pkgname=mkinitcpio-nfs-utils
+pkgver=0.3
+pkgrel=6
+pkgdesc="ipconfig and nfsmount tools for NFS root support in mkinitcpio"
+arch=('x86_64')
+url="http://www.archlinux.org/"
+license=('GPL2')
+depends=('glibc')
+source=("https://sources.archlinux.org/other/mkinitcpio/$pkgname-$pkgver.tar.xz"
+        'nfsmount-fix-wrong-umount-path.patch'
+        'initcpio-install-net'
+        'initcpio-hook-net')
+sha256sums=('d290d489844fae100ca7b848b8eef40078124ff373203086bacc07329d1e8939'
+            '6edb239f3d541b8ddee816e2d18bfb3ee1d3f5f8827769674cc8bf2a7ce38f21'
+            'ce9f021763c020b9b62a761974437fd1e9e894df3effc58e71671bf83b061255'
+            '29a5a4a9ebd61bfa1afbb8dcaf2187e487ee1f34b1979a85a853fa2acbeb510e')
+
+build() {
+  cd "$pkgname-$pkgver"
+
+  # upstream commit 029622dfbfe25203275a385a5bf33d44c2409b00
+  patch -Np1 < "$srcdir/nfsmount-fix-wrong-umount-path.patch"
+
+  make
+}
+
+package() {
+  make -C "$pkgname-$pkgver" DESTDIR="$pkgdir" install
+
+  # override hooks, they need updates
+  install -m644 "$srcdir/initcpio-install-net" "$pkgdir/usr/lib/initcpio/install/net"
+  install -m644 "$srcdir/initcpio-hook-net" "$pkgdir/usr/lib/initcpio/hooks/net"
+}

Copied: mkinitcpio-nfs-utils/repos/testing-x86_64/initcpio-hook-net (from rev 325164, mkinitcpio-nfs-utils/trunk/initcpio-hook-net)
===================================================================
--- testing-x86_64/initcpio-hook-net	                        (rev 0)
+++ testing-x86_64/initcpio-hook-net	2018-05-30 19:04:21 UTC (rev 325165)
@@ -0,0 +1,90 @@
+# vim: set ft=sh:
+run_hook() {
+    local line i net_mac bootif_mac bootif_dev defaultrootpath defaultserver
+    # These variables will be parsed from /tmp/net-*.conf generated by ipconfig
+    local DEVICE
+    local IPV4ADDR IPV4BROADCAST IPV4NETMASK IPV4GATEWAY IPV4DNS0 IPV4DNS1
+    local HOSTNAME DNSDOMAIN NISDOMAIN ROOTSERVER ROOTPATH
+    local filename
+    # /tmp/net-*.conf
+
+    if [ -z "${ip}" -a -n "${nfsaddrs}" ]; then
+        ip="${nfsaddrs}"
+    fi
+
+    if [ -n "${ip}" ]; then
+        if [ -n "${BOOTIF}" ]; then
+            bootif_mac=${BOOTIF#01-}
+            bootif_mac=${bootif_mac//-/:}
+            for i in /sys/class/net/*/address; do
+                read net_mac < ${i}
+                if [ "${bootif_mac}" == "${net_mac}" ]; then
+                    bootif_dev=${i#/sys/class/net/}
+                    bootif_dev=${bootif_dev%/address}
+                    break
+                fi
+            done
+            ip="${ip}::${bootif_dev}"
+        fi
+
+        # setup network and save some values
+        ipconfig "ip=${ip}"
+
+        for conf in /tmp/net-*.conf; do
+            [ -f "$conf" ] && . "$conf"
+        done
+
+        # calculate nfs_server, nfs_path and nfs_option for later nfs mount
+        if [ "${root}" = "/dev/nfs" -o "${nfsroot}" != "" ]; then
+            # parse ROOTPATH if defined by dhcp server
+            if [ -n "${ROOTPATH}" ]; then
+                line="${ROOTPATH}"
+                nfs_server="${line%%:*}"
+                [ "${nfs_server}" = "${line}" ] && nfs_server="${ROOTSERVER}"
+                defaultserver="${nfs_server}"
+                line="${line#*:}"
+                nfs_path="${line}"
+                defaultrootpath="${nfs_path}"
+            else
+                # define a default ROOTPATH
+                if [ "${ROOTPATH}" = "" ]; then
+                    defaultrootpath="/tftpboot/${IPV4ADDR}"
+                fi
+            fi
+
+            # parse nfsroot if present (overrides ROOTPATH)
+            if [ -n "${nfsroot}" ]; then
+                line="${nfsroot}"
+                nfs_server="${line%%:*}"
+                [ -z "${nfs_server}" ] && nfs_server="${defaultserver}"
+                line="${line#*:}"
+                nfs_path="${line%%,*}"
+                line="${line#"${nfs_path}"}"
+                [ -z "${nfs_path}" ] && nfs_path="${defaultrootpath}"
+                nfs_option="${line#","}"
+            fi
+
+            # ensure root and filesystem type are set proper for nfs boot
+            root="/dev/nfs"
+            rootfstype="nfs"
+
+            echo "NFS-Mount: ${nfs_server}:${nfs_path}"
+
+            # set mount handler for NFS
+            mount_handler="nfs_mount_handler"
+        fi
+    fi
+}
+
+nfs_mount_handler() {
+    if [ -z "$nfs_server" -o -z "$nfs_path" ]; then
+        err "Unable to mount root filesystem over NFS: wrong parameters."
+        echo "You are being dropped to a recovery shell"
+        echo "    Type 'exit' to try and continue booting"
+        launch_interactive_shell
+        msg "Trying to continue (this will most likely fail) ..."
+    fi
+    nfsmount ${nfs_option:+-o ${nfs_option}} "${nfs_server}:${nfs_path}" "$1"
+}
+
+# vim: set ft=sh ts=4 sw=4 et:

Copied: mkinitcpio-nfs-utils/repos/testing-x86_64/initcpio-install-net (from rev 325164, mkinitcpio-nfs-utils/trunk/initcpio-install-net)
===================================================================
--- testing-x86_64/initcpio-install-net	                        (rev 0)
+++ testing-x86_64/initcpio-install-net	2018-05-30 19:04:21 UTC (rev 325165)
@@ -0,0 +1,108 @@
+#!/bin/bash
+
+build() {
+    add_checked_modules '/drivers/net/'
+    add_module nfsv3?
+
+    add_binary "/usr/lib/initcpio/ipconfig" "/bin/ipconfig"
+    add_binary "/usr/lib/initcpio/nfsmount" "/bin/nfsmount"
+
+    add_runscript
+}
+
+help() {
+    cat <<HELPEOF
+This hook loads the necessary modules for a network device.
+Detection will take place at runtime. To minimize the modules
+in the image, add the autodetect hook too.
+For pcmcia net devices please use pcmcia hook too.
+
+Kernel Parameters:
+An interface spec can be either short form, which is just the name of
+an interface (eth0 or whatever), or long form.  The long form consists
+of up to seven elements, separated by colons:
+
+ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
+nfsaddrs= is an alias to ip= and can be used too.
+
+<client-ip>   IP address of the client. If empty, the address will
+              either be determined by RARP/BOOTP/DHCP. What protocol
+              is used de- pends on the <autoconf> parameter. If this
+              parameter is not empty, autoconf will be used.
+
+<server-ip>   IP address of the NFS server. If RARP is used to
+              determine the client address and this parameter is NOT
+              empty only replies from the specified server are
+              accepted. To use different RARP and NFS server,
+              specify your RARP server here (or leave it blank), and
+              specify your NFS server in the 'nfsroot' parameter
+              (see above). If this entry is blank the address of the
+              server is used which answered the RARP/BOOTP/DHCP
+              request.
+
+<gw-ip>       IP address of a gateway if the server is on a different
+              subnet. If this entry is empty no gateway is used and the
+              server is assumed to be on the local network, unless a
+              value has been received by BOOTP/DHCP.
+
+<netmask>     Netmask for local network interface. If this is empty,
+              the netmask is derived from the client IP address assuming
+              classful addressing, unless overridden in BOOTP/DHCP reply.
+
+<hostname>    Name of the client. If empty, the client IP address is
+              used in ASCII notation, or the value received by
+              BOOTP/DHCP.
+
+<device>      Name of network device to use. If this is empty, all
+              devices are used for RARP/BOOTP/DHCP requests, and the
+              first one we receive a reply on is configured. If you
+              have only one device, you can safely leave this blank.
+
+<autoconf>    Method to use for autoconfiguration. If this is either
+              'rarp', 'bootp', or 'dhcp' the specified protocol is
+              used.  If the value is 'both', 'all' or empty, all
+              protocols are used.  'off', 'static' or 'none' means
+              no autoconfiguration.
+Examples:
+ip=127.0.0.1:::::lo:none  --> Enable the loopback interface.
+ip=192.168.1.1:::::eth2:none --> Enable static eth2 interface.
+ip=:::::eth0:dhcp --> Enable dhcp protcol for eth0 configuration.
+
+nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
+
+If the 'nfsroot' parameter is NOT given on the command line, the default
+"/tftpboot/%s" will be used.
+
+<server-ip>   Specifies the IP address of the NFS server. If this field
+              is not given, the default address as determined by the
+              'ip' variable (see below) is used. One use of this
+              parameter is for example to allow using different servers
+              for RARP and NFS. Usually you can leave this blank.
+
+<root-dir>    Name of the directory on the server to mount as root. If
+              there is a "%s" token in the string, the token will be
+              replaced by the ASCII-representation of the client's IP
+              address.
+
+<nfs-options> Standard NFS options. All options are separated by commas.
+              If the options field is not given, the following defaults
+              will be used:
+                      port            = as given by server portmap daemon
+                      rsize           = 1024
+                      wsize           = 1024
+                      timeo           = 7
+                      retrans         = 3
+                      acregmin        = 3
+                      acregmax        = 60
+                      acdirmin        = 30
+                      acdirmax        = 60
+                      flags           = hard, nointr, noposix, cto, ac
+
+root=/dev/nfs
+
+If you don't use nfsroot= parameter you need to set root=/dev/nfs
+to boot from a nfs root by autoconfiguration.
+HELPEOF
+}
+
+# vim: set ft=sh ts=4 sw=4 et:

Copied: mkinitcpio-nfs-utils/repos/testing-x86_64/nfsmount-fix-wrong-umount-path.patch (from rev 325164, mkinitcpio-nfs-utils/trunk/nfsmount-fix-wrong-umount-path.patch)
===================================================================
--- testing-x86_64/nfsmount-fix-wrong-umount-path.patch	                        (rev 0)
+++ testing-x86_64/nfsmount-fix-wrong-umount-path.patch	2018-05-30 19:04:21 UTC (rev 325165)
@@ -0,0 +1,14 @@
+--- a/nfsmount/mount.c	2012-11-10 20:16:31.894540497 -0500
++++ b/nfsmount/mount.c	2012-11-10 20:16:39.957369011 -0500
+@@ -358,9 +358,9 @@
+       bail:
+ 	if (mounted) {
+ 		if (data->flags & NFS_MOUNT_VER3) {
+-			umount_v3(path, clnt);
++			umount_v3(rem_path, clnt);
+ 		} else {
+-			umount_v2(path, clnt);
++			umount_v2(rem_path, clnt);
+ 		}
+ 	}
+ 



More information about the arch-commits mailing list