* [PATCH] add net-lib, nfs-lib, url-lib, and img-lib
@ 2012-02-14 17:38 Will Woods
[not found] ` <1329241090-26908-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 13+ messages in thread
From: Will Woods @ 2012-02-14 17:38 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
Hi all,
This set of patches adds a bunch of "libraries" to dracut:
- net-lib adds some utility functions to module 40network
- nfs-lib provides the special nfs handling that was in 95nfs/nfsroot
- url-lib is a new module for handling http{s}/ftp URLs with curl
- img-lib is a new module for dealing with archives & fs images.
They might need tweaking for style/GPL headers/etc - just let me know and
I'll fix up the patches.
Only patch 3 and 5 change existing code - the rest should be very low-risk.
Patch 3 ports the existing nfsroot to nfs-lib. This is kind of a
proof-of-concept (look how short it is! whee!) but it *has not been tested*.
Feel free to take or leave that patch - but if someone could apply it and
help test it, I would be *very* thankful!
Patch 5 moves 90livenet to url-lib, and I *have* tested this to confirm that
it works.
If these are accepted, some next steps might be:
- move things out of dracut-lib.sh to net-lib or nfs-lib
(wait_for_if_up, nfs_root_to_var, ip_to_var, etc.)
- add rpm/deb support to img-lib
(is there a way to do optional dependencies, specified in dracut.conf?)
- add support for live "updates" images to livenet
Thanks for looking these over,
-w
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/9] 40network: add net-lib.sh
[not found] ` <1329241090-26908-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2012-02-14 17:38 ` Will Woods
[not found] ` <1329241090-26908-2-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-02-14 17:38 ` [PATCH 2/9] 95nfs: add nfs-lib.sh Will Woods
` (8 subsequent siblings)
9 siblings, 1 reply; 13+ messages in thread
From: Will Woods @ 2012-02-14 17:38 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
net-lib.sh is a library of useful functions for network stuff.
More things may get added/moved here in the future.
Signed-off-by: Will Woods <wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
modules.d/40network/module-setup.sh | 1 +
modules.d/40network/net-lib.sh | 33 +++++++++++++++++++++++++++++++++
2 files changed, 34 insertions(+), 0 deletions(-)
create mode 100644 modules.d/40network/net-lib.sh
diff --git a/modules.d/40network/module-setup.sh b/modules.d/40network/module-setup.sh
index ef7818a..2f4d93d 100755
--- a/modules.d/40network/module-setup.sh
+++ b/modules.d/40network/module-setup.sh
@@ -76,6 +76,7 @@ install() {
inst "$moddir/ifup" "/sbin/ifup"
inst "$moddir/netroot" "/sbin/netroot"
inst "$moddir/dhclient-script" "/sbin/dhclient-script"
+ inst "$moddir/net-lib.sh" "/lib/net-lib.sh"
inst_simple "$moddir/dhclient.conf" "/etc/dhclient.conf"
inst_hook pre-udev 50 "$moddir/ifname-genrules.sh"
inst_hook pre-udev 60 "$moddir/net-genrules.sh"
diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
new file mode 100644
index 0000000..0ed80b8
--- /dev/null
+++ b/modules.d/40network/net-lib.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+get_ip() {
+ local iface="$1" ip=""
+ ip=$(ip -o -f inet addr show $iface)
+ ip=${ip%%/*}
+ ip=${ip##* }
+}
+
+iface_for_remote_addr() {
+ set -- $(ip -o route get to $1)
+ echo $5
+}
+
+iface_for_mac() {
+ local interface="" mac="$(echo $1 | tr '[:upper:]' '[:lower:]')"
+ for interface in /sys/class/net/*; do
+ if [ $(cat $interface/address) = "$mac" ]; then
+ echo ${interface##*/}
+ fi
+ done
+}
+
+iface_has_link() {
+ local interface="$1" flags=""
+ [ -n "$interface" ] || return 2
+ interface="/sys/class/net/$interface"
+ [ -d "$interface" ] || return 2
+ flags=$(cat $interface/flags)
+ echo $(($flags|0x41)) > $interface/flags # 0x41: IFF_UP|IFF_RUNNING
+ [ "$(cat $interface/carrier)" = 1 ] || return 1
+ # XXX Do we need to reset the flags here? anaconda never bothered..
+}
--
1.7.7.6
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 2/9] 95nfs: add nfs-lib.sh
[not found] ` <1329241090-26908-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-02-14 17:38 ` [PATCH 1/9] 40network: add net-lib.sh Will Woods
@ 2012-02-14 17:38 ` Will Woods
2012-02-14 17:38 ` [PATCH 3/9] port nfsroot to nfs-lib Will Woods
` (7 subsequent siblings)
9 siblings, 0 replies; 13+ messages in thread
From: Will Woods @ 2012-02-14 17:38 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
nfs-lib.sh contains a bunch of functions used to parse NFS "url"s of
various types, pull nfs information out of dhcp info, and actually
perform nfs mounts sanely.
Signed-off-by: Will Woods <wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
modules.d/95nfs/module-setup.sh | 1 +
modules.d/95nfs/nfs-lib.sh | 139 +++++++++++++++++++++++++++++++++++++++
2 files changed, 140 insertions(+), 0 deletions(-)
create mode 100755 modules.d/95nfs/nfs-lib.sh
diff --git a/modules.d/95nfs/module-setup.sh b/modules.d/95nfs/module-setup.sh
index 0e921ff..19d618c 100755
--- a/modules.d/95nfs/module-setup.sh
+++ b/modules.d/95nfs/module-setup.sh
@@ -60,6 +60,7 @@ install() {
inst_hook pre-udev 99 "$moddir/nfs-start-rpc.sh"
inst_hook pre-pivot 99 "$moddir/nfsroot-cleanup.sh"
inst "$moddir/nfsroot" "/sbin/nfsroot"
+ inst "$moddir/nfs-lib.sh" "/lib/nfs-lib.sh"
mkdir -m 0755 -p "$initdir/var/lib/nfs/rpc_pipefs"
mkdir -m 0755 -p "$initdir/var/lib/rpcbind"
mkdir -m 0755 -p "$initdir/var/lib/nfs/statd/sm"
diff --git a/modules.d/95nfs/nfs-lib.sh b/modules.d/95nfs/nfs-lib.sh
new file mode 100755
index 0000000..4f3d184
--- /dev/null
+++ b/modules.d/95nfs/nfs-lib.sh
@@ -0,0 +1,139 @@
+#!/bin/sh
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+# ex: ts=8 sw=4 sts=4 et filetype=sh
+
+type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
+. /lib/net-lib.sh
+
+# TODO: make these things not pollute the calling namespace
+
+# nfs_to_var NFSROOT [NETIF]
+# use NFSROOT to set $nfs, $server, $path, and $options.
+# NFSROOT is something like: nfs[4]:<server>:/<path>[:<options>|,<options>]
+# NETIF is used to get information from DHCP options, if needed.
+nfs_to_var() {
+ # Unfortunately, there's multiple styles of nfs "URL" in use, so we need
+ # extra functions to parse them into $nfs, $server, $path, and $options.
+ # FIXME: local netif=${2:-$netif}?
+ case "$1" in
+ nfs://*) rfc2224_nfs_to_var "$1" ;;
+ nfs:*:*:/*) anaconda_nfs_to_var "$1" ;;
+ *) nfsroot_to_var "$1" ;;
+ esac
+ # if anything's missing, try to fill it in from DHCP options
+ if [ -z "$server" ] || [ -z "$path" ]; then nfsroot_from_dhcp $2; fi
+ # if there's a "%s" in the path, replace it with the hostname/IP
+ if strstr "$path" "%s"; then
+ local node=""
+ read node < /proc/sys/kernel/hostname
+ [ "$node" = "(none)" ] && node=$(get_ip $2)
+ path=${path%%%s*}$node${path#*%s} # replace only the first %s
+ fi
+}
+
+# root=nfs:[<server-ip>:]<root-dir>[:<nfs-options>]
+# root=nfs4:[<server-ip>:]<root-dir>[:<nfs-options>]
+nfsroot_to_var() {
+ # strip nfs[4]:
+ local arg="$@:"
+ nfs="${arg%%:*}"
+ arg="${arg##$nfs:}"
+
+ # check if we have a server
+ if strstr "$arg" ':/*' ; then
+ server="${arg%%:/*}"
+ arg="/${arg##*:/}"
+ fi
+
+ path="${arg%%:*}"
+
+ # rest are options
+ options="${arg##$path}"
+ # strip leading ":"
+ options="${options##:}"
+ # strip ":"
+ options="${options%%:}"
+
+ # Does it really start with '/'?
+ [ -n "${path%%/*}" ] && path="error";
+
+ #Fix kernel legacy style separating path and options with ','
+ if [ "$path" != "${path#*,}" ] ; then
+ options=${path#*,}
+ path=${path%%,*}
+ fi
+}
+
+# RFC2224: nfs://<server>[:<port>]/<path>
+rfc2224_nfs_to_var() {
+ nfs="nfs"
+ server="${1#nfs://}"
+ path="/${server#*/}"
+ server="${server%%/*}"
+ server="${server%%:}" # anaconda compat (nfs://<server>:/<path>)
+ local port="${server##*:}"
+ [ "$port" != "$server" ] && options="port=$port"
+}
+
+# Anaconda-style path with options: nfs:<options>:<server>:/<path>
+# (without mount options, anaconda is the same as dracut)
+anaconda_nfs_to_var() {
+ nfs="nfs"
+ options="${1#nfs:}"
+ server="${options#*:}"
+ server="${server%:/*}"
+ options="${options%%:*}"
+ path="/${1##*:/}"
+}
+
+# nfsroot_from_dhcp NETIF
+# fill in missing server/path from DHCP options.
+nfsroot_from_dhcp() {
+ local f
+ for f in /tmp/net.$1.override /tmp/dhclient.$1.dhcpopts; do
+ [ -f $f ] && . $f || return
+ done
+ [ -n "$new_root_path" ] && nfsroot_to_var "$nfs:$new_root_path"
+ [ -z "$path" ] && [ "$(getarg root=)" == "/dev/nfs" ] && path=/tftpboot/%s
+ [ -z "$server" ] && server=$new_dhcp_server_identifier
+ [ -z "$server" ] && server=$new_dhcp_next_server
+ [ -z "$server" ] && server=${new_root_path%%:*}
+}
+
+# Look through $options, fix "rw"/"ro", move "lock"/"nolock" to $nfslock
+munge_nfs_options() {
+ local f="" flags="" nfsrw="ro" OLDIFS="$IFS"
+ IFS=,
+ for f in $options; do
+ case $f in
+ ro|rw) nfsrw=$f ;;
+ lock|nolock) nfslock=$f ;;
+ *) flags=${flags:+$flags,}$f ;;
+ esac
+ done
+ IFS="$OLDIFS"
+
+ # Override rw/ro if set on cmdline
+ getarg ro >/dev/null && nfsrw=ro
+ getarg rw >/dev/null && nfsrw=rw
+
+ options=$nfsrw${flags:+,$flags}
+}
+
+# mount_nfs NFSROOT MNTDIR [NETIF]
+mount_nfs() {
+ local nfsroot="$1" mntdir="$2" netif="$3"
+ local nfs="" server="" path="" options=""
+ nfs_to_var $nfsroot $netif
+ munge_nfs_options
+ if [ "$nfs" = "nfs4" ]; then
+ options=$options${nfslock+,$nfslock}
+ else
+ # NFSv{2,3} doesn't support using locks as it requires a helper to
+ # transfer the rpcbind state to the new root
+ [ "$nfslock" = "lock" ] \
+ && warn "Locks unsupported on NFSv{2,3}, using nolock" 1>&2
+ options=$options,nolock
+ fi
+ mount -t $nfs -o$options $server:$path $mntdir
+}
--
1.7.7.6
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 3/9] port nfsroot to nfs-lib
[not found] ` <1329241090-26908-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-02-14 17:38 ` [PATCH 1/9] 40network: add net-lib.sh Will Woods
2012-02-14 17:38 ` [PATCH 2/9] 95nfs: add nfs-lib.sh Will Woods
@ 2012-02-14 17:38 ` Will Woods
2012-02-14 17:38 ` [PATCH 4/9] add module 45url-lib Will Woods
` (6 subsequent siblings)
9 siblings, 0 replies; 13+ messages in thread
From: Will Woods @ 2012-02-14 17:38 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
Rewrite nfsroot to use nfs-lib. The functionality should be unchanged.
Signed-off-by: Will Woods <wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
modules.d/95nfs/nfsroot | 91 ++--------------------------------------------
1 files changed, 4 insertions(+), 87 deletions(-)
diff --git a/modules.d/95nfs/nfsroot b/modules.d/95nfs/nfsroot
index 764971b..589d4ed 100755
--- a/modules.d/95nfs/nfsroot
+++ b/modules.d/95nfs/nfsroot
@@ -3,17 +3,9 @@
# ex: ts=8 sw=4 sts=4 et filetype=sh
type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
+. /lib/nfs-lib.sh
-PATH=/usr/sbin:/usr/bin:/sbin:/bin
-
-# Huh? Empty $1?
-[ -z "$1" ] && exit 1
-
-# Huh? Empty $2?
-[ -z "$2" ] && exit 1
-
-# Huh? Empty $3?
-[ -z "$3" ] && exit 1
+[ "$#" = 3 ] || exit 1
# root is in the form root=nfs[4]:[server:]path[:options], either from
# cmdline or dhcp root-path
@@ -21,85 +13,10 @@ netif="$1"
root="$2"
NEWROOT="$3"
-# Continue if nfs prefix
-case "${root%%:*}" in
- nfs|nfs4);;
- *) return;;
-esac
-
-nfsroot_to_var $root
-
-#Load other data that might provide info
-[ -f /tmp/net.$netif.override ] && . /tmp/net.$netif.override
-[ -f /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts
-
-#Empty path means try dhcp root-path, this is ok here since parse-nfsroot.sh
-#already takes care of nfs:... formatted root-path
-[ -z "$path" ] && nfsroot_to_var $nfs:$new_root_path
-
-#Empty path defaults to "/tftpboot/%s" only in nfsroot.txt legacy mode
-[ -z "$path" ] && [ "$(getarg root=)" = "/dev/nfs" ] && path="/tftpboot/%s"
-
-if [ -z "$server" ] ; then
- # XXX new_dhcp_next_server is unconfirmed this is an assumption
- for var in $srv $new_dhcp_server_identifier $new_dhcp_next_server $new_root_path '' ; do
- [ -n "$var" ] && server=$var && break;
- done
-
- # XXX This blindly assumes that if new_root_path has to used that
- # XXX it really can be used as server
- server=${server%%:*}
-fi
-
+nfs_to_var $root $netif
[ -z "$server" ] && die "Required parameter 'server' is missing"
-# Kernel replaces first %s with host name, and falls back to the ip address
-# if it isn't set. Only the first %s is substituted.
-if [ "${path#*%s}" != "$path" ]; then
- ip=$(ip -o -f inet addr show $netif)
- ip=${ip%%/*}
- ip=${ip##* }
- read node < /proc/sys/kernel/hostname
- [ "$node" = "(none)" ] && node=$ip
- path=${path%%%s*}$node${path#*%s}
-fi
-
-# Look through the options and remove rw/locking options
-OLDIFS="$IFS"
-IFS=,
-for f in $options ; do
- [ "$f" = "ro" -o "$f" = "rw" ] && nfsrw=$f && continue
- [ "$f" = "lock" -o "$f" = "nolock" ] && nfslock=$f && continue
- flags=${flags:+$flags,}$f
-done
-IFS="$OLDIFS"
-options=$flags
-
-# Override rw/ro if set on cmdline
-getarg ro && nfsrw=ro
-getarg rw && nfsrw=rw
-
-# Default to ro if unset
-[ -z "$nfsrw" ] && nfsrw=ro
-
-options=${options:+$options,}$nfsrw
-
-if [ "$nfs" = "nfs4" ]; then
- # XXX Should we loop here?
- mount -t nfs4 -o$options${nfslock+,$nfslock} \
- $server:$path $NEWROOT \
- && { [ -e /dev/root ] || >/dev/root ; }
-else
- # NFSv{2,3} doesn't support using locks as it requires a helper to transfer
- # the rpcbind state to the new root
- [ "$nfslock" = "lock" ] && \
- warn "Locks unsupported on NFSv{2,3}, using nolock" 1>&2
-
- # XXX Should we loop here?
- { mount -t nfs -o$options${options:+,}nolock,nfsvers=3 $server:$path $NEWROOT || \
- mount -t nfs -o$options${options:+,}nolock,nfsvers=2 $server:$path $NEWROOT ; } \
- && { [ -e /dev/root ] || >/dev/root ; }
-fi
+mount_nfs $root $NEWROOT $netif && { [ -e /dev/root ] || >/dev/root ; }
# inject new exit_if_exists
echo 'settle_exit_if_exists="--exit-if-exists=/dev/root"; rm "$job"' > $hookdir/initqueue/nfs.sh
--
1.7.7.6
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 4/9] add module 45url-lib
[not found] ` <1329241090-26908-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
` (2 preceding siblings ...)
2012-02-14 17:38 ` [PATCH 3/9] port nfsroot to nfs-lib Will Woods
@ 2012-02-14 17:38 ` Will Woods
2012-02-14 17:38 ` [PATCH 5/9] 90livenet: port to url-lib Will Woods
` (5 subsequent siblings)
9 siblings, 0 replies; 13+ messages in thread
From: Will Woods @ 2012-02-14 17:38 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
url-lib adds some functions for dealing with URLs (mostly for fetching
files, for the moment).
It uses curl to handle http/https/ftp URLs, but it can be extended by other
modules at runtime by using the "add_url_handler" function.
Signed-off-by: Will Woods <wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
modules.d/45url-lib/module-setup.sh | 24 +++++++++++++
modules.d/45url-lib/url-lib.sh | 66 +++++++++++++++++++++++++++++++++++
2 files changed, 90 insertions(+), 0 deletions(-)
create mode 100755 modules.d/45url-lib/module-setup.sh
create mode 100755 modules.d/45url-lib/url-lib.sh
diff --git a/modules.d/45url-lib/module-setup.sh b/modules.d/45url-lib/module-setup.sh
new file mode 100755
index 0000000..eab9f25
--- /dev/null
+++ b/modules.d/45url-lib/module-setup.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+# module-setup for url-lib
+
+check() {
+ command -v curl >/dev/null || return 1
+ return 255
+}
+
+depends() {
+ echo network
+ return 0
+}
+
+install() {
+ inst "$moddir/url-lib.sh" "/lib/url-lib.sh"
+ dracut_install curl
+ mkdir -m 0755 -p "$initdir/etc/ssl/certs"
+ if ! inst_any -t /etc/ssl/certs/ca-bundle.crt \
+ /etc/ssl/certs/ca-bundle.crt \
+ /etc/ssl/certs/ca-certificates.crt; then
+ dwarn "Couldn't find SSL CA cert bundle; HTTPS won't work."
+ fi
+}
+
diff --git a/modules.d/45url-lib/url-lib.sh b/modules.d/45url-lib/url-lib.sh
new file mode 100755
index 0000000..51340d5
--- /dev/null
+++ b/modules.d/45url-lib/url-lib.sh
@@ -0,0 +1,66 @@
+#!/bin/bash
+# url-lib.sh - functions for handling URLs (file fetching etc.)
+#
+# Authors:
+# Will Woods <wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
+
+type mkuniqdir >/dev/null 2>&1 || . /lib/dracut-lib.sh
+
+# fetch_url URL [OUTFILE]
+# fetch the given URL to a locally-visible location.
+# if OUTFILE is given, the URL will be fetched to that filename,
+# overwriting it if present.
+# the return values are as follows:
+# 0: success
+# 253: unknown error (file missing)
+# 254: unhandled URL scheme / protocol
+# 255: bad arguments / unparseable URLs
+# other: fetch command failure (whatever curl/mount/etc return)
+fetch_url() {
+ local url="$1" outloc="$2"
+ local handler="$(get_url_handler $url)"
+ [ -n "$handler" ] || return 254
+ [ -n "$url" ] || return 255
+ $handler "$url" "$outloc"
+}
+
+# get_url_handler URL
+# returns the first HANDLERNAME corresponding to the URL's scheme
+get_url_handler() {
+ local scheme="${1%%:*}" item=""
+ for item in $url_handler_map; do
+ [ "$scheme" = "${item%%:*}" ] && echo "${item#*:}" && return 0
+ done
+ return 1
+}
+
+# add_url_handler HANDLERNAME SCHEME [SCHEME...]
+# associate the named handler with the named scheme(s).
+add_url_handler() {
+ local handler="$1"; shift
+ local schemes="$@" scheme=""
+ set --
+ for scheme in $schemes; do
+ set -- "$@" "$scheme:$handler"
+ done
+ set -- $@ $url_handler_map # add new items to *front* of list
+ url_handler_map="$@"
+}
+
+curl_args="--location --retry 3 --fail --show-error"
+curl_fetch_url() {
+ local url="$1" outloc="$2"
+ if [ -n "$outloc" ]; then
+ curl $curl_args --output "$outloc" "$url" || return $?
+ else
+ local outdir="$(mkuniqdir /tmp curl_fetch_url)"
+ local cwd="$(pwd)"
+ cd "$outdir"
+ curl $curl_args --remote-name "$url" || return $?
+ cd "$cwd"
+ outloc="$(echo $outdir/*)"
+ fi
+ [ -f "$outloc" ] || return 253
+ echo "$outloc"
+}
+add_url_handler curl_fetch_url http https ftp
--
1.7.7.6
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 5/9] 90livenet: port to url-lib
[not found] ` <1329241090-26908-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
` (3 preceding siblings ...)
2012-02-14 17:38 ` [PATCH 4/9] add module 45url-lib Will Woods
@ 2012-02-14 17:38 ` Will Woods
2012-02-14 17:38 ` [PATCH 6/9] url-lib: add support for NFS Will Woods
` (4 subsequent siblings)
9 siblings, 0 replies; 13+ messages in thread
From: Will Woods @ 2012-02-14 17:38 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
This makes the livenetroot module use url-lib for fetching its root
image/filesystem. There's also some minor tweaks for POSIX compliance.
Signed-off-by: Will Woods <wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
modules.d/90livenet/livenetroot | 37 ++++++++++-----------------------
modules.d/90livenet/module-setup.sh | 13 +-----------
modules.d/90livenet/parse-livenet.sh | 19 ++++++++++-------
3 files changed, 23 insertions(+), 46 deletions(-)
diff --git a/modules.d/90livenet/livenetroot b/modules.d/90livenet/livenetroot
index 1e8e34e..bc62760 100755
--- a/modules.d/90livenet/livenetroot
+++ b/modules.d/90livenet/livenetroot
@@ -1,41 +1,26 @@
#!/bin/bash
# livenetroot - fetch a live image from the network and run it
-#
-# TODO:
-# * HTTPS: arg to use --no-check-certificate with https (boo)
-# args for --certificate, --ca-certificate
-# * NFS support?
type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
[ -f /tmp/root.info ] && . /tmp/root.info
+. /lib/url-lib.sh
+
PATH=/usr/sbin:/usr/bin:/sbin:/bin
# args get passed from 40network/netroot
-netroot=$2
-
-liveurl=${netroot#livenet:}
-
-if [ ${liveurl##*.} == "iso" ]; then
- imgfile="/run/live.iso"
-else
- imgfile="/run/rootfs.img"
-fi
-
-
-case "$liveurl" in
- http://*|https://*|ftp://*)
- wget -O $imgfile "$liveurl"
- ;;
- *) die "don't know how to handle URL: $liveurl" ;;
-esac
-[ $? == 0 ] || die "failed to download live image"
-
-
-if [ ${imgfile##*.} == "iso" ]; then
+netroot="$2"
+liveurl="${netroot#livenet:}"
+info "fetching $liveurl"
+imgfile=$(fetch_url "$liveurl")
+[ $? = 0 ] || die "failed to download live image: error $?"
+
+# TODO: couldn't dmsquash-live-root handle this?
+if [ ${imgfile##*.} = "iso" ]; then
root=$(losetup -f)
losetup $root $imgfile
else
root=$imgfile
fi
+
exec /sbin/dmsquash-live-root $root
diff --git a/modules.d/90livenet/module-setup.sh b/modules.d/90livenet/module-setup.sh
index 5cfbb75..31164fd 100755
--- a/modules.d/90livenet/module-setup.sh
+++ b/modules.d/90livenet/module-setup.sh
@@ -2,26 +2,15 @@
# module-setup.sh for livenet
check() {
- # a live, host-only image doesn't really make a lot of sense
- [[ $hostonly ]] && return 1
- command -v wget >/dev/null || return 1
return 255
}
depends() {
- echo network dmsquash-live
+ echo network url-lib dmsquash-live
return 0
}
install() {
- dracut_install wget
- mkdir -m 0755 -p "$initdir/etc/ssl/certs"
- if ! inst_any -t /etc/ssl/certs/ca-bundle.crt \
- /etc/ssl/certs/ca-bundle.crt \
- /etc/ssl/certs/ca-certificates.crt; then
- dwarn "Couldn't find SSL CA cert bundle; HTTPS won't work."
- fi
-
inst_hook cmdline 29 "$moddir/parse-livenet.sh"
inst "$moddir/livenetroot" "/sbin/livenetroot"
}
diff --git a/modules.d/90livenet/parse-livenet.sh b/modules.d/90livenet/parse-livenet.sh
index 2e6bc4b..042cc51 100755
--- a/modules.d/90livenet/parse-livenet.sh
+++ b/modules.d/90livenet/parse-livenet.sh
@@ -3,17 +3,20 @@
# root=live:[url-to-backing-file]
[ -z "$root" ] && root=$(getarg root=)
+. /lib/url-lib.sh
-str_starts $root "live:" && liveurl=$root
-str_starts $liveurl "live:" || return
+str_starts "$root" "live:" && liveurl="$root"
+str_starts "$liveurl" "live:" || return
liveurl="${liveurl#live:}"
# setting netroot to "livenet:..." makes "livenetroot" get run after ifup
-case "$liveurl" in
- http://*|https://*|ftp://*)
- netroot="livenet:$liveurl"
- root="livenet" # quiet complaints from init
- rootok=1 ;;
-esac
+if get_url_handler "$liveurl" >/dev/null; then
+ info "livenet: root image at $liveurl"
+ netroot="livenet:$liveurl"
+ root="livenet" # quiet complaints from init
+ rootok=1
+else
+ info "livenet: no url handler for $liveurl"
+fi
wait_for_dev /dev/root
--
1.7.7.6
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 6/9] url-lib: add support for NFS
[not found] ` <1329241090-26908-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
` (4 preceding siblings ...)
2012-02-14 17:38 ` [PATCH 5/9] 90livenet: port to url-lib Will Woods
@ 2012-02-14 17:38 ` Will Woods
2012-02-14 17:38 ` [PATCH 7/9] add set_http_header to url-lib Will Woods
` (3 subsequent siblings)
9 siblings, 0 replies; 13+ messages in thread
From: Will Woods @ 2012-02-14 17:38 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
This adds nfs_fetch_url to allow fetching arbitrary files from NFS.
This means that livenet can now run using an NFS-mounted live image,
which reduces memory usage by a lot.
Signed-off-by: Will Woods <wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
modules.d/45url-lib/url-lib.sh | 28 ++++++++++++++++++++++++++++
1 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/modules.d/45url-lib/url-lib.sh b/modules.d/45url-lib/url-lib.sh
index 51340d5..03ee8d1 100755
--- a/modules.d/45url-lib/url-lib.sh
+++ b/modules.d/45url-lib/url-lib.sh
@@ -10,6 +10,8 @@ type mkuniqdir >/dev/null 2>&1 || . /lib/dracut-lib.sh
# fetch the given URL to a locally-visible location.
# if OUTFILE is given, the URL will be fetched to that filename,
# overwriting it if present.
+# If the URL is something mountable (e.g. nfs://) and no OUTFILE is given,
+# the server will be left mounted until pre-pivot.
# the return values are as follows:
# 0: success
# 253: unknown error (file missing)
@@ -47,6 +49,8 @@ add_url_handler() {
url_handler_map="$@"
}
+### HTTP, HTTPS, FTP #################################################
+
curl_args="--location --retry 3 --fail --show-error"
curl_fetch_url() {
local url="$1" outloc="$2"
@@ -64,3 +68,27 @@ curl_fetch_url() {
echo "$outloc"
}
add_url_handler curl_fetch_url http https ftp
+
+### NFS ##############################################################
+
+. /lib/nfs-lib.sh
+
+nfs_fetch_url() {
+ local url="$1" outloc="$2" nfs="" server="" path="" options=""
+ nfs_to_var "$url" || return 255
+ local filepath="${path%/*}" filename="${path##*/}"
+
+ # TODO: check to see if server:/filepath is already mounted
+ local mntdir="$(mkuniqdir /run nfs_mnt)"
+ mount_nfs $nfs:$server:$path${options:+:$options} $mntdir
+ # FIXME: schedule lazy unmount during pre-pivot hook
+
+ if [ -z "$outloc" ]; then
+ outloc="$mntdir/$filename"
+ else
+ cp -f "$mntdir/$filename" "$outloc" || return $?
+ fi
+ [ -f "$outloc" ] || return 253
+ echo "$outloc"
+}
+add_url_handler nfs_fetch_url nfs nfs4
--
1.7.7.6
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 7/9] add set_http_header to url-lib
[not found] ` <1329241090-26908-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
` (5 preceding siblings ...)
2012-02-14 17:38 ` [PATCH 6/9] url-lib: add support for NFS Will Woods
@ 2012-02-14 17:38 ` Will Woods
2012-02-14 17:38 ` [PATCH 8/9] add img-lib: a library for handling filesystem images Will Woods
` (2 subsequent siblings)
9 siblings, 0 replies; 13+ messages in thread
From: Will Woods @ 2012-02-14 17:38 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
This allows you to set custom headers for curl to send with HTTP
requests.
Signed-off-by: Will Woods <wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
modules.d/45url-lib/url-lib.sh | 34 +++++++++++++++++++++++++++++-----
1 files changed, 29 insertions(+), 5 deletions(-)
diff --git a/modules.d/45url-lib/url-lib.sh b/modules.d/45url-lib/url-lib.sh
index 03ee8d1..dd473d4 100755
--- a/modules.d/45url-lib/url-lib.sh
+++ b/modules.d/45url-lib/url-lib.sh
@@ -51,6 +51,8 @@ add_url_handler() {
### HTTP, HTTPS, FTP #################################################
+export CURL_HOME="/run/initramfs/url-lib"
+mkdir -p $CURL_HOME
curl_args="--location --retry 3 --fail --show-error"
curl_fetch_url() {
local url="$1" outloc="$2"
@@ -69,19 +71,41 @@ curl_fetch_url() {
}
add_url_handler curl_fetch_url http https ftp
+set_http_header() {
+ echo "header = \"$1: $2\"" >> $CURL_HOME/.curlrc
+}
+
### NFS ##############################################################
. /lib/nfs-lib.sh
+nfs_already_mounted() {
+ local server="$1" path="$2" localdir="" s="" p=""
+ cat /proc/mounts | while read src mnt rest; do
+ splitsep ":" "$src" s p
+ if [ "$server" = "$s" ]; then
+ if [ "$path" = "$p" ]; then
+ echo $mnt
+ elif str_starts "$path" "$p"; then
+ echo $mnt/${path#$p/}
+ fi
+ fi
+ done
+}
+
nfs_fetch_url() {
local url="$1" outloc="$2" nfs="" server="" path="" options=""
nfs_to_var "$url" || return 255
- local filepath="${path%/*}" filename="${path##*/}"
+ local filepath="${path%/*}" filename="${path##*/}" mntdir=""
- # TODO: check to see if server:/filepath is already mounted
- local mntdir="$(mkuniqdir /run nfs_mnt)"
- mount_nfs $nfs:$server:$path${options:+:$options} $mntdir
- # FIXME: schedule lazy unmount during pre-pivot hook
+ # skip mount if server:/filepath is already mounted
+ mntdir=$(nfs_already_mounted $server $path)
+ if [ -z "$mntdir" ]; then
+ local mntdir="$(mkuniqdir /run nfs_mnt)"
+ mount_nfs $nfs:$server:$path${options:+:$options} $mntdir
+ # lazy unmount during pre-pivot hook
+ inst_hook --hook pre-pivot --name 99url-lib-umount-nfs umount -l $mntdir
+ fi
if [ -z "$outloc" ]; then
outloc="$mntdir/$filename"
--
1.7.7.6
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 8/9] add img-lib: a library for handling filesystem images
[not found] ` <1329241090-26908-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
` (6 preceding siblings ...)
2012-02-14 17:38 ` [PATCH 7/9] add set_http_header to url-lib Will Woods
@ 2012-02-14 17:38 ` Will Woods
2012-02-14 17:38 ` [PATCH 9/9] skiproot - script for network setup without network root Will Woods
2012-02-15 16:56 ` [PATCH] add net-lib, nfs-lib, url-lib, and img-lib Harald Hoyer
9 siblings, 0 replies; 13+ messages in thread
From: Will Woods @ 2012-02-14 17:38 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
img-lib handles identifying and unpacking archives (uncompressed or
compressed) and filesystem images.
Currently tar and gzip are required; cpio and xz are optional, and bzip2
is supported but unused.
Signed-off-by: Will Woods <wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
modules.d/99img-lib/img-lib.sh | 72 +++++++++++++++++++++++++++++++++++
modules.d/99img-lib/module-setup.sh | 23 +++++++++++
2 files changed, 95 insertions(+), 0 deletions(-)
create mode 100755 modules.d/99img-lib/img-lib.sh
create mode 100755 modules.d/99img-lib/module-setup.sh
diff --git a/modules.d/99img-lib/img-lib.sh b/modules.d/99img-lib/img-lib.sh
new file mode 100755
index 0000000..582b416
--- /dev/null
+++ b/modules.d/99img-lib/img-lib.sh
@@ -0,0 +1,72 @@
+#!/bin/bash
+# img-lib.sh: utilities for dealing with archives and filesystem images.
+#
+# TODO: identify/unpack rpm, deb?
+
+
+# super-simple "file" that only identifies archives.
+# works with stdin if $1 is not set.
+det_archive() {
+ local bz="BZh" xz="$(echo -e '\xfd7zXZ')" gz="$(echo -e '\x1f\x8b')"
+ local headerblock="$(dd ${1:+if=$1} bs=262 count=1 2>/dev/null)"
+ case "$headerblock" in
+ $xz*) echo "xz" ;;
+ $gz*) echo "gzip" ;;
+ $bz*) echo "bzip2" ;;
+ 07070*) echo "cpio" ;;
+ *ustar) echo "tar" ;;
+ esac
+}
+
+# determine filesystem type for a filesystem image
+det_fs_img() {
+ local dev=$(losetup --find --show "$1") rv=""
+ det_fs $dev; rv=$?
+ losetup -d $dev
+ return $rv
+}
+
+# unpack_archive ARCHIVE OUTDIR
+# unpack a (possibly compressed) cpio/tar archive
+unpack_archive() {
+ local img="$1" outdir="$2" archiver="" decompr=""
+ local ft="$(det_archive $img)"
+ case "$ft" in
+ xz|gzip|bzip2) decompr="$decompr -dc" ;;
+ cpio|tar) decompr="cat";;
+ *) return 1 ;;
+ esac
+ ft="$($decompr $img | det_archive)"
+ case "$ft" in
+ cpio) archiver="cpio -iumd" ;;
+ tar) archiver="tar -xf -" ;;
+ *) return 2 ;;
+ esac
+ mkdir -p $outdir
+ ( cd $outdir; $decompr | $archiver 2>/dev/null ) < $img
+}
+
+# unpack_fs FSIMAGE OUTDIR
+# unpack a filesystem image
+unpack_fs() {
+ local img="$1" outdir="$2" mnt="$(mkuniqdir /tmp unpack_fs.)"
+ mount -o loop $img $mnt || { rmdir $mnt; return 1; }
+ mkdir -p $outdir; outdir="$(cd $outdir; pwd)"
+ ( cd $mnt; cp -a -t $outdir . )
+ umount $mnt
+ rmdir $mnt
+}
+
+# unpack an image file - compressed/uncompressed cpio/tar, filesystem, whatever
+# unpack_img IMAGEFILE OUTDIR
+unpack_img() {
+ local img="$1" outdir="$2"
+ [ -r "$img" ] || { warn "can't read img!"; return 1; }
+ [ -n "$outdir" ] || { warn "unpack_img: no output dir given"; return 1; }
+
+ if [ "$(det_img $img)" ]; then
+ unpack_archive "$@" || { warn "can't unpack archive file!"; return 1; }
+ else
+ unpack_fs "$@" || { warn "can't unpack filesystem image!"; return 1; }
+ fi
+}
diff --git a/modules.d/99img-lib/module-setup.sh b/modules.d/99img-lib/module-setup.sh
new file mode 100755
index 0000000..eead2ab
--- /dev/null
+++ b/modules.d/99img-lib/module-setup.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+# module-setup for img-lib
+
+check() {
+ for cmd in tar gzip dd; do
+ command -v $cmd >/dev/null || return 1
+ done
+ return 255
+}
+
+depends() {
+ return 0
+}
+
+install() {
+ # NOTE/TODO: we require bash, but I don't know how to specify that..
+ dracut_install tar gzip dd
+ dracut_install -o cpio xz
+ # TODO: make this conditional on a cmdline flag / config option
+ # dracut_install -o bzip2
+ inst "$moddir/img-lib.sh" "/lib/img-lib.sh"
+}
+
--
1.7.7.6
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 9/9] skiproot - script for network setup without network root
[not found] ` <1329241090-26908-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
` (7 preceding siblings ...)
2012-02-14 17:38 ` [PATCH 8/9] add img-lib: a library for handling filesystem images Will Woods
@ 2012-02-14 17:38 ` Will Woods
[not found] ` <1329241090-26908-10-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-02-15 16:56 ` [PATCH] add net-lib, nfs-lib, url-lib, and img-lib Harald Hoyer
9 siblings, 1 reply; 13+ messages in thread
From: Will Woods @ 2012-02-14 17:38 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
This allows you to set up the network for non-netroot things (like
fetching updates for live images, etc).
The other parse-*.sh script can set 'netroot=skip', and anything that
should happen when the network comes up can be put into the 'netroot'
hook, something like this:
echo "fetch-liveupdate $update_url" >> $hookdir/netroot/liveupdates.sh
Signed-off-by: Will Woods <wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
modules.d/40network/module-setup.sh | 1 +
modules.d/40network/skiproot | 14 ++++++++++++++
2 files changed, 15 insertions(+), 0 deletions(-)
create mode 100755 modules.d/40network/skiproot
diff --git a/modules.d/40network/module-setup.sh b/modules.d/40network/module-setup.sh
index 2f4d93d..a224bc5 100755
--- a/modules.d/40network/module-setup.sh
+++ b/modules.d/40network/module-setup.sh
@@ -75,6 +75,7 @@ install() {
dracut_install -o brctl ifenslave
inst "$moddir/ifup" "/sbin/ifup"
inst "$moddir/netroot" "/sbin/netroot"
+ inst "$moddir/skiproot" "/sbin/skiproot"
inst "$moddir/dhclient-script" "/sbin/dhclient-script"
inst "$moddir/net-lib.sh" "/lib/net-lib.sh"
inst_simple "$moddir/dhclient.conf" "/etc/dhclient.conf"
diff --git a/modules.d/40network/skiproot b/modules.d/40network/skiproot
new file mode 100755
index 0000000..86793c7
--- /dev/null
+++ b/modules.d/40network/skiproot
@@ -0,0 +1,14 @@
+#!/bin/bash
+# skiproot - a netroot handler that doesn't do anything.
+#
+# useful if you want the network up for non-root things (like fetching
+# updates, kickstarts, drivers, etc.) but you're not actually using a
+# network root device.
+#
+# Your other parse-*.sh script should set "netroot=skip", and anything
+# that you want to happen when the network comes up should be put into
+# the "netroot" hook, e.g.:
+#echo "fetch-liveupdate $updateurl" > $hookdir/netroot/fetch-updates.sh
+
+# do nothing!
+true
--
1.7.7.6
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 9/9] skiproot - script for network setup without network root
[not found] ` <1329241090-26908-10-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2012-02-14 18:42 ` Will Woods
0 siblings, 0 replies; 13+ messages in thread
From: Will Woods @ 2012-02-14 18:42 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
On Tue, 2012-02-14 at 12:38 -0500, Will Woods wrote:
> This allows you to set up the network for non-netroot things (like
> fetching updates for live images, etc).
>
> The other parse-*.sh script can set 'netroot=skip', and anything that
> should happen when the network comes up can be put into the 'netroot'
> hook, something like this:
>
> echo "fetch-liveupdate $update_url" >> $hookdir/netroot/liveupdates.sh
This patch can be ignored - I like the rd.neednet solution better,
although I wish it ran through the setup in netroot and ran the
'netroot' hooks..
-w
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/9] 40network: add net-lib.sh
[not found] ` <1329241090-26908-2-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2012-02-15 8:28 ` Harald Hoyer
0 siblings, 0 replies; 13+ messages in thread
From: Harald Hoyer @ 2012-02-15 8:28 UTC (permalink / raw)
To: Will Woods; +Cc: initramfs-u79uwXL29TY76Z2rM5mHXA
Am 14.02.2012 18:38, schrieb Will Woods:
> diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
> +#!/bin/bash
Does it have to be bash?
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] add net-lib, nfs-lib, url-lib, and img-lib
[not found] ` <1329241090-26908-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
` (8 preceding siblings ...)
2012-02-14 17:38 ` [PATCH 9/9] skiproot - script for network setup without network root Will Woods
@ 2012-02-15 16:56 ` Harald Hoyer
9 siblings, 0 replies; 13+ messages in thread
From: Harald Hoyer @ 2012-02-15 16:56 UTC (permalink / raw)
To: Will Woods; +Cc: initramfs-u79uwXL29TY76Z2rM5mHXA
Am 14.02.2012 18:38, schrieb Will Woods:
> Hi all,
>
> This set of patches adds a bunch of "libraries" to dracut:
> - net-lib adds some utility functions to module 40network
> - nfs-lib provides the special nfs handling that was in 95nfs/nfsroot
> - url-lib is a new module for handling http{s}/ftp URLs with curl
> - img-lib is a new module for dealing with archives & fs images.
>
> They might need tweaking for style/GPL headers/etc - just let me know and
> I'll fix up the patches.
>
> Only patch 3 and 5 change existing code - the rest should be very low-risk.
>
> Patch 3 ports the existing nfsroot to nfs-lib. This is kind of a
> proof-of-concept (look how short it is! whee!) but it *has not been tested*.
> Feel free to take or leave that patch - but if someone could apply it and
> help test it, I would be *very* thankful!
>
> Patch 5 moves 90livenet to url-lib, and I *have* tested this to confirm that
> it works.
>
> If these are accepted, some next steps might be:
> - move things out of dracut-lib.sh to net-lib or nfs-lib
> (wait_for_if_up, nfs_root_to_var, ip_to_var, etc.)
> - add rpm/deb support to img-lib
> (is there a way to do optional dependencies, specified in dracut.conf?)
> - add support for live "updates" images to livenet
>
> Thanks for looking these over,
>
> -w
>
Pushed all of them and corrected nfs-lib.sh
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2012-02-15 16:56 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-14 17:38 [PATCH] add net-lib, nfs-lib, url-lib, and img-lib Will Woods
[not found] ` <1329241090-26908-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-02-14 17:38 ` [PATCH 1/9] 40network: add net-lib.sh Will Woods
[not found] ` <1329241090-26908-2-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-02-15 8:28 ` Harald Hoyer
2012-02-14 17:38 ` [PATCH 2/9] 95nfs: add nfs-lib.sh Will Woods
2012-02-14 17:38 ` [PATCH 3/9] port nfsroot to nfs-lib Will Woods
2012-02-14 17:38 ` [PATCH 4/9] add module 45url-lib Will Woods
2012-02-14 17:38 ` [PATCH 5/9] 90livenet: port to url-lib Will Woods
2012-02-14 17:38 ` [PATCH 6/9] url-lib: add support for NFS Will Woods
2012-02-14 17:38 ` [PATCH 7/9] add set_http_header to url-lib Will Woods
2012-02-14 17:38 ` [PATCH 8/9] add img-lib: a library for handling filesystem images Will Woods
2012-02-14 17:38 ` [PATCH 9/9] skiproot - script for network setup without network root Will Woods
[not found] ` <1329241090-26908-10-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-02-14 18:42 ` Will Woods
2012-02-15 16:56 ` [PATCH] add net-lib, nfs-lib, url-lib, and img-lib Harald Hoyer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox