When dhclient-script starts, the client script first defines a shell
function, make_resolv_conf , which is later used to create the
/etc/resolv.conf file.

But the read-only filesystem didn't permit the modification, so override
the default behaviour and redefine this function in the enter hook script.

http://linux.about.com/library/cmd/blcmdl8_dhclient-script.htm
[YOCTO #5624]
Signed-off-by: Hongxu Jia <hongxu....@windriver.com>
---
 meta/recipes-connectivity/dhcp/dhcp.inc            |  6 ++++-
 .../dhcp/files/readonly-dhclient-enter-hooks       | 31 ++++++++++++++++++++++
 2 files changed, 36 insertions(+), 1 deletion(-)
 create mode 100644 
meta/recipes-connectivity/dhcp/files/readonly-dhclient-enter-hooks

diff --git a/meta/recipes-connectivity/dhcp/dhcp.inc 
b/meta/recipes-connectivity/dhcp/dhcp.inc
index d8376aa..58715be 100644
--- a/meta/recipes-connectivity/dhcp/dhcp.inc
+++ b/meta/recipes-connectivity/dhcp/dhcp.inc
@@ -16,6 +16,7 @@ SRC_URI = "ftp://ftp.isc.org/isc/dhcp/${PV}/dhcp-${PV}.tar.gz 
\
            file://site.h \
           file://init-relay file://default-relay \
           file://init-server file://default-server \
+          file://readonly-dhclient-enter-hooks \
           file://dhclient-script-let-resolv.conf-and-resolv.conf.dhcl.patch \
           file://dhclient.conf file://dhcpd.conf"
 
@@ -52,6 +53,7 @@ do_install_append () {
                mv ${D}${sbindir}/dhclient ${D}${base_sbindir}/
        fi
        install -m 0755 ${S}/client/scripts/linux 
${D}${base_sbindir}/dhclient-script
+       install -m 0755 ${WORKDIR}/readonly-dhclient-enter-hooks 
${D}${sysconfdir}/dhclient-enter-hooks
 }
 
 PACKAGES += "dhcp-server dhcp-server-config dhcp-client dhcp-relay 
dhcp-omshell"
@@ -67,7 +69,9 @@ FILES_dhcp-server-config = "${sysconfdir}/default/dhcp-server 
${sysconfdir}/dhcp
 
 FILES_dhcp-relay = "${sbindir}/dhcrelay ${sysconfdir}/init.d/dhcp-relay 
${sysconfdir}/default/dhcp-relay"
 
-FILES_dhcp-client = "${base_sbindir}/dhclient ${base_sbindir}/dhclient-script 
${sysconfdir}/dhcp/dhclient.conf"
+FILES_dhcp-client = "${base_sbindir}/dhclient ${base_sbindir}/dhclient-script 
${sysconfdir}/dhcp/dhclient.conf \
+                     ${sysconfdir}/dhclient-enter-hooks \
+"
 RDEPENDS_dhcp-client = "bash"
 
 FILES_dhcp-omshell = "${bindir}/omshell"
diff --git a/meta/recipes-connectivity/dhcp/files/readonly-dhclient-enter-hooks 
b/meta/recipes-connectivity/dhcp/files/readonly-dhclient-enter-hooks
new file mode 100644
index 0000000..c43e81f
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/files/readonly-dhclient-enter-hooks
@@ -0,0 +1,31 @@
+is_on_read_only_partition () {
+    FILE=$1
+    dir=`dirname $(readlink -f "$FILE")`
+    while true; do
+        if [ ! -d "$dir" ]; then
+            echo "ERROR: $dir is not a directory"
+            exit 1
+        else
+            for flag in `awk -v dir=$dir '{ if ($2 == dir) { print "FOUND"; 
split($4,FLAGS,",") } }; \
+                END { for (f in FLAGS) print FLAGS[f] }' < /proc/mounts`; do
+                [ "$flag" = "FOUND" ] && partition="read-write"
+                [ "$flag" = "ro" ] && { partition="read-only"; break; }
+            done
+            if [ "$dir" = "/" -o -n "$partition" ]; then
+                break
+            else
+                dir=`dirname $dir`
+            fi
+        fi
+    done
+    [ "$partition" = "read-only" ] && echo "yes" || echo "no"
+}
+
+# If resolv.conf on the readonly partition, we should override make_resolv_conf
+if [ `is_on_read_only_partition /etc/resolv.conf` = "no" ]; then
+    return
+fi
+
+make_resolv_conf(){
+    :
+}
-- 
1.8.1.2

_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to