From 28caf5dec8dee4fe358d0982f5fea2a6ebe200db Mon Sep 17 00:00:00 2001 From: jow Date: Thu, 7 Oct 2010 15:06:15 +0000 Subject: [PATCH] [backfire] merge r23256, r23257 and r23258 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@23295 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- include/package-ipkg.mk | 15 ++++++++++++ package/base-files/Makefile | 4 +++- package/base-files/files/etc/sysupgrade.conf | 5 ++++ .../lib/upgrade/keep.d/base-files-essential | 10 ++++++++ package/base-files/files/sbin/sysupgrade | 5 ++-- .../patches/170-resolve_conffiles.patch | 23 +++++++++++++++++++ 6 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 package/base-files/files/etc/sysupgrade.conf create mode 100644 package/base-files/files/lib/upgrade/keep.d/base-files-essential create mode 100644 tools/ipkg-utils/patches/170-resolve_conffiles.patch diff --git a/include/package-ipkg.mk b/include/package-ipkg.mk index b3b8f2bf6..0ef440d4a 100644 --- a/include/package-ipkg.mk +++ b/include/package-ipkg.mk @@ -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 diff --git a/package/base-files/Makefile b/package/base-files/Makefile index 2b986049e..1478d8a19 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -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 index 000000000..e06fd5e33 --- /dev/null +++ b/package/base-files/files/etc/sysupgrade.conf @@ -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 index 000000000..e35aae509 --- /dev/null +++ b/package/base-files/files/lib/upgrade/keep.d/base-files-essential @@ -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 diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade index bf00aaa5f..cae59dc6b 100755 --- a/package/base-files/files/sbin/sysupgrade +++ b/package/base-files/files/sbin/sysupgrade @@ -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 index 000000000..31faf30a0 --- /dev/null +++ b/tools/ipkg-utils/patches/170-resolve_conffiles.patch @@ -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