[backfire] merge r23256, r23257 and r23258
authorjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Thu, 7 Oct 2010 15:06:15 +0000 (15:06 +0000)
committerjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Thu, 7 Oct 2010 15:06:15 +0000 (15:06 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@23295 3c298f89-4303-0410-b956-a3cf2f4a3e73

include/package-ipkg.mk
package/base-files/Makefile
package/base-files/files/etc/sysupgrade.conf [new file with mode: 0644]
package/base-files/files/lib/upgrade/keep.d/base-files-essential [new file with mode: 0644]
package/base-files/files/sbin/sysupgrade
tools/ipkg-utils/patches/170-resolve_conffiles.patch [new file with mode: 0644]

index b3b8f2bf6d2134b9b71b0df7e1908b30f5f8e321..0ef440d4a6080447d7514eadb34002bf7c155a70 100644 (file)
@@ -49,6 +49,7 @@ ifeq ($(DUMP),)
     IPKG_$(1):=$(PACKAGE_DIR)/$(1)_$(VERSION)_$(PKGARCH).ipk
     IDIR_$(1):=$(PKG_BUILD_DIR)/ipkg-$(PKGARCH)/$(1)
     INFO_$(1):=$(IPKG_STATE_DIR)/info/$(1).list
+    KEEP_$(1):=$(strip $(call Package/$(1)/conffiles))
 
     ifeq ($(if $(VARIANT),$(BUILD_VARIANT)),$(VARIANT))
     ifdef Package/$(1)/install
@@ -115,6 +116,20 @@ ifeq ($(DUMP),)
        $(RSTRIP) $$(IDIR_$(1))
        SIZE=`cd $$(IDIR_$(1)); du -bs --exclude=./CONTROL . 2>/dev/null | cut -f1`; \
        $(SED) "s|^\(Installed-Size:\).*|\1 $$$$SIZE|g" $$(IDIR_$(1))/CONTROL/control
+
+    ifneq ($$(KEEP_$(1)),)
+               @( \
+                       keepfiles=""; \
+                       for x in $$(KEEP_$(1)); do \
+                               [ -f "$$(IDIR_$(1))/$$$$x" ] || keepfiles="$$$${keepfiles:+$$$$keepfiles }$$$$x"; \
+                       done; \
+                       [ -z "$keepfiles" ] || { \
+                               mkdir -p $$(IDIR_$(1))/lib/upgrade/keep.d; \
+                               for x in $$$$keepfiles; do echo $$$$x >> $$(IDIR_$(1))/lib/upgrade/keep.d/$(1); done; \
+                       }; \
+               )
+    endif
+
        $(IPKG_BUILD) $$(IDIR_$(1)) $(PACKAGE_DIR)
        @[ -f $$(IPKG_$(1)) ] || false 
 
index 2b986049eeb3873b0e4c399e56b5e935e425aef8..1478d8a194a2c21b776f45972602fa94482fb7df 100644 (file)
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=base-files
-PKG_RELEASE:=43.7
+PKG_RELEASE:=43.8
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
 PKG_BUILD_DEPENDS:=opkg/host
@@ -54,6 +54,8 @@ define Package/base-files/conffiles
 /etc/shells
 /etc/sysctl.conf
 /etc/rc.local
+/etc/config/
+/etc/dropbear/
 $(call $(TARGET)/conffiles)
 endef
 
diff --git a/package/base-files/files/etc/sysupgrade.conf b/package/base-files/files/etc/sysupgrade.conf
new file mode 100644 (file)
index 0000000..e06fd5e
--- /dev/null
@@ -0,0 +1,5 @@
+## This file contains files and directories that should
+## be preserved during an upgrade.
+
+# /etc/example.conf
+# /etc/openvpn/
diff --git a/package/base-files/files/lib/upgrade/keep.d/base-files-essential b/package/base-files/files/lib/upgrade/keep.d/base-files-essential
new file mode 100644 (file)
index 0000000..e35aae5
--- /dev/null
@@ -0,0 +1,10 @@
+# Essential files that will be always kept
+/etc/banner
+/etc/hosts
+/etc/inittab
+/etc/group
+/etc/passwd
+/etc/profile
+/etc/shells
+/etc/sysctl.conf
+/etc/rc.local
index bf00aaa5f811f7b61fb1f43bf46e092e1a695443..cae59dc6b85e4f227d6e6c0328a734cbad63581d 100755 (executable)
@@ -51,8 +51,9 @@ EOF
 
 add_uci_conffiles() {
        local file="$1"
-       ( find /etc/config /etc/passwd /etc/group /etc/dropbear \
-               /etc/firewall.user /etc/rc.local -type f;
+       ( find $(sed -ne '/^[[:space:]]*$/d; /^#/d; p' \
+               /etc/sysupgrade.conf /lib/upgrade/keep.d/* 2>/dev/null) \
+               -type f 2>/dev/null;
          opkg list-changed-conffiles ) | sort -u > "$file"
        return 0
 }
diff --git a/tools/ipkg-utils/patches/170-resolve_conffiles.patch b/tools/ipkg-utils/patches/170-resolve_conffiles.patch
new file mode 100644 (file)
index 0000000..31faf30
--- /dev/null
@@ -0,0 +1,23 @@
+--- a/ipkg-build
++++ b/ipkg-build
+@@ -160,12 +160,15 @@ You probably want to chown these to a sy
+       done
+       if [ -f $CONTROL/conffiles ]; then
+-              for cf in `cat $CONTROL/conffiles`; do
+-                      if [ ! -f ./$cf ]; then
+-                              echo "*** Error: $CONTROL/conffiles mentions conffile $cf which does not exist" >&2
+-                              PKG_ERROR=1
+-                      fi
++              rm -f $CONTROL/conffiles.resolved
++
++              for cf in `$FIND $(sed -e "s!^/!$pkg_dir/!" $CONTROL/conffiles) -type f`; do
++                      echo "${cf#$pkg_dir}" >> $CONTROL/conffiles.resolved
+               done
++
++              rm $CONTROL/conffiles
++              mv $CONTROL/conffiles.resolved $CONTROL/conffiles
++              chmod 0644 $CONTROL/conffiles
+       fi
+       cd $owd