]> git.pld-linux.org Git - projects/geninitrd.git/blame - mod-nfs.sh
Mount rootfs from initramfs with rootfsflags options.
[projects/geninitrd.git] / mod-nfs.sh
CommitLineData
74d45ce1
ER
1#!/bin/sh
2#
3# geninitrd mod: nfs
4
5# if we should init NFS at boot
6have_nfs=no
7
8# return true if node is nfs
9# @param string $node device node to be examined
10# @access public
11is_nfs() {
12 local node="$1"
13
864391c7
ER
14 if is_yes "$(awk -vnode="$node" 'BEGIN { if (node ~ /^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:|\/dev\/nfs)/) print "yes" }')"; then
15 return 0
74d45ce1
ER
16 fi
17
864391c7 18 return 1
74d45ce1
ER
19}
20
21# find modules for for nfs
22# @access public
23find_modules_nfs() {
24 local devpath="$1"
25
26 if [ ! -x /usr/bin/pcidev -a -z "$NFS_ETH_MODULES" ]; then
27 die "root on NFS but /usr/bin/pcidev not found. Please install correct pci-database package and rerun $PROGRAM."
28 fi
29
30 if [ ! -f /proc/bus/pci/devices ]; then
31 warn "Remember to add network card modules in /etc/sysconfig/geninitrd, example:"
32 warn "BASICMODULES=\"e1000 ne2k-pci mii 8139too 3c59x\""
33 else
34 local m
35 [ -z "$NFS_ETH_MODULES" ] && NFS_ETH_MODULES=$(/usr/bin/pcidev /m net | xargs)
864391c7 36 msg "NOTE: Network card(s) module(s) $NFS_ETH_MODULES is for this machine"
74d45ce1
ER
37 for m in $NFS_ETH_MODULES; do
38 find_module "$m"
39 done
40 fi
41 find_module "-ipv4"
42 find_module "nfs"
43
44 have_nfs=yes
45 warn "Remember to use \`root=/dev/ram0 init=/linuxrc' when starting kernel"
46 warn "or you will have problems like init(xx) being child process of swapper(1)."
47}
48
49# generate initrd fragment
50# @access public
51initrd_gen_nfs() {
1b481849
ER
52 if ! is_yes "$have_nfs"; then
53 return
54 fi
55
74d45ce1
ER
56 # use root=/dev/ram0 init=/linuxrc when starting kernel or you will
57 # have problems like init(XX) being child process of swapper(1).
58 debug "Adding rootfs on NFS support to initrd (dhcp)"
59 mknod "$DESTDIR/dev/urandom" c 1 9
60 mkdir "$DESTDIR/newroot"
61 add_linuxrc <<-'EOF'
62 ifconfig lo 127.0.0.1 up
63 route add -net 127.0.0.0 mask 255.0.0.0 lo
64 ifconfig eth0 up
65 udhcpc -i eth0 -f -q -s /bin/setdhcp
66
67 cd /newroot
68 pivot_root . initrd
69 [ -x /sbin/chroot ] && exec /sbin/chroot . /sbin/init -i < dev/console > dev/console 2>&1
74d45ce1
ER
70 EOF
71
72 cat <<-'EOF' > "$DESTDIR/bin/setdhcp"
73 #!/bin/sh
74 [ "$1" != "bound" ] && exit
75 [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
76 [ -n "$subnet" ] && NETMASK="netmask $subnet"
77 ifconfig $interface $ip $BROADCAST $NETMASK up
78 if [ -n "$router" ]; then
79 for r in $router; do
80 route add default gw $r dev $interface
81 done
82 fi
83
736620da 84 if [ -n "$hostname" ]; then
d14a228d 85 hostname $hostname
86 fi
87
74d45ce1
ER
88 for o in $CMDLINE; do
89 case $o in
90 nfsroot=*)
91 rootpath=${o#nfsroot=}
92 ;;
93 esac
94 done
95
96 if [ -n "$rootpath" ]; then
97 mount -n -t nfs -o ro,nolock,posix,tcp,wsize=8192,rsize=8192 $rootpath /newroot
98 else
99 echo "Missing rootpath in what DHCP server sent to us. Failing..."
100 echo "All seen variables are listed below:"
101 set
102 fi
103 EOF
104
105 chmod 755 "$DESTDIR/bin/setdhcp"
106}
This page took 0.042899 seconds and 4 git commands to generate.