From 91dd4bc6d8f52d62171e721839505f1a80c5a83a Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Mon, 28 Dec 2009 15:01:16 +0100 Subject: 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. --- mk/build.mk | 18 ++++++++++++++++-- mk/vars.mk | 2 +- package/busybox/config/archival/Config.in | 1 + scripts/tarpkg | 18 +++++++++++++++++- target/Config.in | 15 ++++++++++----- 5 files changed, 45 insertions(+), 9 deletions(-) diff --git a/mk/build.mk b/mk/build.mk index 6397d78bb..e8309afba 100644 --- a/mk/build.mk +++ b/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 \ diff --git a/mk/vars.mk b/mk/vars.mk index 7661ebb71..cfc1d2632 100644 --- a/mk/vars.mk +++ b/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 diff --git a/package/busybox/config/archival/Config.in b/package/busybox/config/archival/Config.in index 124f5887c..fa08ebd42 100644 --- a/package/busybox/config/archival/Config.in +++ b/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. diff --git a/scripts/tarpkg b/scripts/tarpkg index 818f99ea7..f2e5def9e 100755 --- a/scripts/tarpkg +++ b/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 diff --git a/target/Config.in b/target/Config.in index 71a44b11d..47bdd6541 100644 --- a/target/Config.in +++ b/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 -- cgit v1.2.3