Browse Source

use tar archive as default package backend

it saves more than 200 kb on minimal setup for AG241 target.
Normally reflashing or complete updates are recommended.
Partial updates via ipkg are not supported right now.
(we have a read-only root filesystem without any writable
partition for any data outside /etc)
If someone likes ipkg, it still can be selected and used.
Waldemar Brodkorb 14 years ago
parent
commit
91dd4bc6d8
5 changed files with 45 additions and 9 deletions
  1. 16 2
      mk/build.mk
  2. 1 1
      mk/vars.mk
  3. 1 0
      package/busybox/config/archival/Config.in
  4. 17 1
      scripts/tarpkg
  5. 10 5
      target/Config.in

+ 16 - 2
mk/build.mk

@@ -44,16 +44,20 @@ noconfig_targets:=	menuconfig \
 			distclean \
 			tags
 
-MAKECLEAN_SYMBOLS=	ADK_TARGET_LIB_UCLIBC \
+MAKECLEANDIR_SYMBOLS=	ADK_TARGET_LIB_UCLIBC \
 			ADK_TARGET_LIB_GLIBC \
 			ADK_TARGET_LIB_ECLIBC \
 			ADK_DEBUG
 
+MAKECLEAN_SYMBOLS=	ADK_TARGET_PACKAGE_IPKG \
+			ADK_TARGET_PACKAGE_RPM \
+			ADK_TARGET_PACKAGE_TGZ
+
 POSTCONFIG=		-@ \
 	if [ -f .config.old ];then \
 	if [ -d .cfg ];then \
 	what=cleantarget; \
-	for symbol in ${MAKECLEAN_SYMBOLS}; do \
+	for symbol in ${MAKECLEANDIR_SYMBOLS}; do \
 		newval=$$(grep -e "^$$symbol=" -e "^\# $$symbol " .config); \
 		oldval=$$(cat .cfg/"$$symbol" 2>&-); \
 		[[ $$newval = $$oldval ]] && continue; \
@@ -62,6 +66,16 @@ POSTCONFIG=		-@ \
 		    "$$what' might be required!"; \
 		break; \
 	done; \
+	what=clean; \
+	for symbol in ${MAKECLEAN_SYMBOLS}; do \
+		newval=$$(grep -e "^$$symbol=" -e "^\# $$symbol " .config); \
+		oldval=$$(cat .cfg/"$$symbol" 2>&-); \
+		[[ $$newval = $$oldval ]] && continue; \
+		echo; \
+		echo >&2 "WARNING: Package backend related options have changed, 'make" \
+		    "$$what' might be required!"; \
+		break; \
+	done; \
 	fi; \
 	if [ "$$(grep ^BUSYBOX .config|md5sum)" != "$$(grep ^BUSYBOX .config.old|md5sum)" ];then \
 		if [ -f build_*/w-busybox*/busybox*/.configure_done ];then \

+ 1 - 1
mk/vars.mk

@@ -84,7 +84,7 @@ PKG_INSTALL:=		IPKG_TMP=$(BUILD_DIR)/tmp \
 PKG_STATE_DIR:=		$(TARGET_DIR)/usr/lib/ipkg
 else
 PKG_BUILD:=		${BASH} ${SCRIPT_DIR}/tarpkg build
-PKG_INSTALL:=		INSTROOT=$(TARGET_DIR) \
+PKG_INSTALL:=		PKG_INSTROOT=$(TARGET_DIR) \
 			${BASH} ${SCRIPT_DIR}/tarpkg install
 PKG_STATE_DIR:=		$(TARGET_DIR)/usr/lib/pkg
 endif

+ 1 - 0
package/busybox/config/archival/Config.in

@@ -188,6 +188,7 @@ config BUSYBOX_IPKG
 	default n
 	select BUSYBOX_MD5SUM
 	select BUSYBOX_WGET
+	depends on ADK_TARGET_PACKAGE_IPKG
 	help
 	  ipkg is the itsy package management system.
 

+ 17 - 1
scripts/tarpkg

@@ -1,5 +1,6 @@
 #!/usr/bin/env bash
 # create/install compressed tar balls
+#set -x
 
 if [ "$1" = "build" ];then
 	if [ ! -d $2 ];then
@@ -9,10 +10,25 @@ if [ "$1" = "build" ];then
 	pkgname=$(grep "^Package:" $2/CONTROL/control | sed -e "s/^[^:]*:[[:space:]]*//")
 	version=$(grep "^Version:" $2/CONTROL/control | sed -e "s/^[^:]*:[[:space:]]*//")
 	arch=$(grep "^Architecture:" $2/CONTROL/control | sed -e "s/^[^:]*:[[:space:]]*//")
+	mkdir -p ${2}/usr/lib/pkg
+	for file in preinst postinst prerm postrm; do
+	  [ ! -f $2/CONTROL/$file ] || ( cp $2/CONTROL/$file \
+		${2}/usr/lib/pkg/${pkgname}.$file && \
+		chmod +x ${2}/usr/lib/pkg/${pkgname}.$file )
+	done
 	rm -rf $2/CONTROL 
 	(cd $2 && tar -czf $3/${pkgname}_${version}_${arch}.tar.gz .)
 elif [ "$1" = "install" ];then
-	tar -xzpf $2 -C ${INSTROOT}
+	pkg=$(echo $(basename $2)|sed -e "s#_.*##")
+	if [ -x ${PKG_INSTROOT}/usr/lib/pkg/${pkg}.preinst ]; then
+   	  IPKG_INSTROOT="$PKG_INSTROOT" ${PKG_INSTROOT}/usr/lib/pkg/${pkg}.preinst
+	  rm ${PKG_INSTROOT}/usr/lib/pkg/${pkg}.preinst
+	fi
+	tar -xzpf $2 -C ${PKG_INSTROOT}
+	if [ -x ${PKG_INSTROOT}/usr/lib/pkg/${pkg}.postinst ]; then
+   	  IPKG_INSTROOT="$PKG_INSTROOT" ${PKG_INSTROOT}/usr/lib/pkg/${pkg}.postinst
+	  rm ${PKG_INSTROOT}/usr/lib/pkg/${pkg}.postinst
+	fi
 else
 	echo "unknown command"
 	exit 1

+ 10 - 5
target/Config.in

@@ -769,26 +769,31 @@ config ADK_PACKAGE_SUFFIX
 
 choice
 prompt "Package backend format"
-	default ADK_TARGET_PACKAGE_IPKG
+	default ADK_TARGET_PACKAGE_TGZ
 
 config ADK_TARGET_PACKAGE_IPKG
 	boolean
 	prompt "ipkg package format"
 	select BUSYBOX_IPKG
 	help
-	  Create ipkg packages.
+	  Create ipkg packages and use ipkg package management on
+          the target.
 
 config ADK_TARGET_PACKAGE_TGZ
 	boolean
-	prompt "gzip compressed tar archive"
+	prompt "tar archive (no package manager)"
 	help
-	  Create compressed tar archives.
+	  Create compressed tar archives of packages.
+	  Pre- and post install scripts will be executed in the target
+	  directory. There will be no package manager installed onto the target.
+	  
 
 config ADK_TARGET_PACKAGE_RPM
 	boolean
 	prompt "rpm package format"
 	help
-	  Create rpm packages.
+	  Create rpm packages and use rpm package management on the
+          target.
 
 endchoice