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 15 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 \
 			distclean \
 			tags
 			tags
 
 
-MAKECLEAN_SYMBOLS=	ADK_TARGET_LIB_UCLIBC \
+MAKECLEANDIR_SYMBOLS=	ADK_TARGET_LIB_UCLIBC \
 			ADK_TARGET_LIB_GLIBC \
 			ADK_TARGET_LIB_GLIBC \
 			ADK_TARGET_LIB_ECLIBC \
 			ADK_TARGET_LIB_ECLIBC \
 			ADK_DEBUG
 			ADK_DEBUG
 
 
+MAKECLEAN_SYMBOLS=	ADK_TARGET_PACKAGE_IPKG \
+			ADK_TARGET_PACKAGE_RPM \
+			ADK_TARGET_PACKAGE_TGZ
+
 POSTCONFIG=		-@ \
 POSTCONFIG=		-@ \
 	if [ -f .config.old ];then \
 	if [ -f .config.old ];then \
 	if [ -d .cfg ];then \
 	if [ -d .cfg ];then \
 	what=cleantarget; \
 	what=cleantarget; \
-	for symbol in ${MAKECLEAN_SYMBOLS}; do \
+	for symbol in ${MAKECLEANDIR_SYMBOLS}; do \
 		newval=$$(grep -e "^$$symbol=" -e "^\# $$symbol " .config); \
 		newval=$$(grep -e "^$$symbol=" -e "^\# $$symbol " .config); \
 		oldval=$$(cat .cfg/"$$symbol" 2>&-); \
 		oldval=$$(cat .cfg/"$$symbol" 2>&-); \
 		[[ $$newval = $$oldval ]] && continue; \
 		[[ $$newval = $$oldval ]] && continue; \
@@ -62,6 +66,16 @@ POSTCONFIG=		-@ \
 		    "$$what' might be required!"; \
 		    "$$what' might be required!"; \
 		break; \
 		break; \
 	done; \
 	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; \
 	fi; \
 	if [ "$$(grep ^BUSYBOX .config|md5sum)" != "$$(grep ^BUSYBOX .config.old|md5sum)" ];then \
 	if [ "$$(grep ^BUSYBOX .config|md5sum)" != "$$(grep ^BUSYBOX .config.old|md5sum)" ];then \
 		if [ -f build_*/w-busybox*/busybox*/.configure_done ];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
 PKG_STATE_DIR:=		$(TARGET_DIR)/usr/lib/ipkg
 else
 else
 PKG_BUILD:=		${BASH} ${SCRIPT_DIR}/tarpkg build
 PKG_BUILD:=		${BASH} ${SCRIPT_DIR}/tarpkg build
-PKG_INSTALL:=		INSTROOT=$(TARGET_DIR) \
+PKG_INSTALL:=		PKG_INSTROOT=$(TARGET_DIR) \
 			${BASH} ${SCRIPT_DIR}/tarpkg install
 			${BASH} ${SCRIPT_DIR}/tarpkg install
 PKG_STATE_DIR:=		$(TARGET_DIR)/usr/lib/pkg
 PKG_STATE_DIR:=		$(TARGET_DIR)/usr/lib/pkg
 endif
 endif

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

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

+ 17 - 1
scripts/tarpkg

@@ -1,5 +1,6 @@
 #!/usr/bin/env bash
 #!/usr/bin/env bash
 # create/install compressed tar balls
 # create/install compressed tar balls
+#set -x
 
 
 if [ "$1" = "build" ];then
 if [ "$1" = "build" ];then
 	if [ ! -d $2 ];then
 	if [ ! -d $2 ];then
@@ -9,10 +10,25 @@ if [ "$1" = "build" ];then
 	pkgname=$(grep "^Package:" $2/CONTROL/control | sed -e "s/^[^:]*:[[:space:]]*//")
 	pkgname=$(grep "^Package:" $2/CONTROL/control | sed -e "s/^[^:]*:[[:space:]]*//")
 	version=$(grep "^Version:" $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:]]*//")
 	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 
 	rm -rf $2/CONTROL 
 	(cd $2 && tar -czf $3/${pkgname}_${version}_${arch}.tar.gz .)
 	(cd $2 && tar -czf $3/${pkgname}_${version}_${arch}.tar.gz .)
 elif [ "$1" = "install" ];then
 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
 else
 	echo "unknown command"
 	echo "unknown command"
 	exit 1
 	exit 1

+ 10 - 5
target/Config.in

@@ -769,26 +769,31 @@ config ADK_PACKAGE_SUFFIX
 
 
 choice
 choice
 prompt "Package backend format"
 prompt "Package backend format"
-	default ADK_TARGET_PACKAGE_IPKG
+	default ADK_TARGET_PACKAGE_TGZ
 
 
 config ADK_TARGET_PACKAGE_IPKG
 config ADK_TARGET_PACKAGE_IPKG
 	boolean
 	boolean
 	prompt "ipkg package format"
 	prompt "ipkg package format"
 	select BUSYBOX_IPKG
 	select BUSYBOX_IPKG
 	help
 	help
-	  Create ipkg packages.
+	  Create ipkg packages and use ipkg package management on
+          the target.
 
 
 config ADK_TARGET_PACKAGE_TGZ
 config ADK_TARGET_PACKAGE_TGZ
 	boolean
 	boolean
-	prompt "gzip compressed tar archive"
+	prompt "tar archive (no package manager)"
 	help
 	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
 config ADK_TARGET_PACKAGE_RPM
 	boolean
 	boolean
 	prompt "rpm package format"
 	prompt "rpm package format"
 	help
 	help
-	  Create rpm packages.
+	  Create rpm packages and use rpm package management on the
+          target.
 
 
 endchoice
 endchoice