From f2a3f87e18f0c7d97180f319cc9ee5c6b0c99298 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Thu, 8 Sep 2005 13:13:11 +0000 Subject: [PATCH] Clifford Wolf: More postinstall stuff: - better integration with rocket and Build-Pkg - some bugfixes and improvements (e.g. '-a' was horribly broken) - moved some stuff from 00-updates to a 'system' postinstall script - added a daily cron job for 'postinstall -a' to 00-updates [2005082415310406639] (https://www.rocklinux.net/submaster) git-svn-id: http://www.rocklinux.org/svn/rock-linux/trunk@6347 c5f82cb5-29bc-0310-9cd0-bff59a50e3bc --- package/base/cron/00-updates | 23 +---- package/base/mine/rocket-rev73.patch | 44 +++++++++ package/base/mine/rocket-rev74.patch | 45 +++++++++ package/base/postinstall/postinstall.conf | 8 +- .../{postinstall => postinstall.sh} | 94 ++++++++++--------- .../sysfiles/etc_postinstall_system.sh.txt | 50 ++++++++++ scripts/Build-Pkg | 21 +++-- scripts/Build-Target | 2 +- 8 files changed, 212 insertions(+), 75 deletions(-) create mode 100644 package/base/mine/rocket-rev73.patch create mode 100644 package/base/mine/rocket-rev74.patch rename package/base/postinstall/{postinstall => postinstall.sh} (55%) create mode 100644 package/base/sysfiles/etc_postinstall_system.sh.txt diff --git a/package/base/cron/00-updates b/package/base/cron/00-updates index f8aab54ee..4fa5d19fe 100644 --- a/package/base/cron/00-updates +++ b/package/base/cron/00-updates @@ -24,28 +24,13 @@ exec 2>&1 -kver=$(uname -r) -echo "Running depmod ($kver) ..." -depmod -a -F /boot/System.map-$kver $kver - -echo "Running ldconfig ..." -ldconfig - -echo "Running makewhatis ..." -makewhatis - echo "Running updatedb ..." updatedb --prunepaths='/tmp /var/tmp /root /proc /sys /dev /home /user /mnt' -echo "Recreate info dir ..." -rm -f /usr/share/info/dir -find /usr/share/info /opt/*/info/ -type f 2>/dev/null | -grep -v -E -e "/dir$|-[0-9]+$" | -while read x ; do - { install-info --info-dir=/usr/share/info $x 2>&1 ; } | - egrep -v 'no info dir entry in|already exists, for file' -done +echo -echo "Running depmod -a ..." `depmod -a 2>&1 | wc -l` "warnings" +echo "Running postinstall -a ..." +postinstall -a echo + diff --git a/package/base/mine/rocket-rev73.patch b/package/base/mine/rocket-rev73.patch new file mode 100644 index 000000000..66e5d172c --- /dev/null +++ b/package/base/mine/rocket-rev73.patch @@ -0,0 +1,44 @@ +--- ./rocket.sh (revision 72) ++++ ./rocket.sh (revision 73) +@@ -9,6 +9,8 @@ + The GEM Pools (install sources) are configured in /etc/rocket.conf + + rocket updsrc .............. update local rock source tree ++rocket which ....... search in the "provides" package information ++ + rocket build ......... build tar.bz2 and .gem from sources + rocket emerge ........ build and install a package + +@@ -22,7 +24,9 @@ + rocket search ...... search packge descriptions for this regex + rocket fsearch ..... search packge file list for this regex + rocket list ........ list all packages with a name matching the regex ++ + rocket info .......... print package details ++rocket flist ......... print package file list + + EOT + exit 1 +@@ -67,6 +71,11 @@ + ./scripts/Cleanup + ;; + ++ which) ++ cd /usr/src/rock-src || exit 1 ++ egrep -l "^\[PROVIDES\].* ($2)($| )" package/*/*/*.cache | cut -f3 -d/ ++ ;; ++ + build) + shift + "$0" emerge "$@"; rc=$? +@@ -195,6 +204,10 @@ + egrep '^\[[LS]\]' /var/adm/rocket/descs/$2 && echo + ;; + ++ flist) ++ cut -f3- -d' ' /var/adm/rocket/cksums/$2 ++ ;; ++ + install) + shift + deps=$( echo $( echo "$*" | tr ' ' '\n' | diff --git a/package/base/mine/rocket-rev74.patch b/package/base/mine/rocket-rev74.patch new file mode 100644 index 000000000..35758d907 --- /dev/null +++ b/package/base/mine/rocket-rev74.patch @@ -0,0 +1,45 @@ +--- ./rocket.sh (revision 73) ++++ ./rocket.sh (revision 74) +@@ -63,6 +63,15 @@ + ' < <( curl -s "$1/packages.db" | gunzip; ) + } + ++call_postinstall() { ++ if [ -n "$( /bin/ls /var/adm/postinstall/ | head -n1 )" ]; then ++ read -p "Do you want to run the postinstall scripts now? [Y/n] " yn ++ if [ "$yn" = "y" -o "$yn" = "Y" -o "$yn" = "" ]; then ++ postinstall ++ fi ++ fi ++} ++ + case "$1" in + + updsrc) +@@ -92,7 +101,9 @@ + cp -r /etc/ROCK-CONFIG/* config/rocket/ + ./scripts/Config -cfg rocket -oldconfig + fi +- exec -a "$0" ./scripts/Emerge-Pkg -cfg rocket "$@" ++ ./scripts/Emerge-Pkg -cfg rocket "$@"; rc=$? ++ call_postinstall ++ exit $rc + ;; + + create) +@@ -282,12 +293,15 @@ + echo "+ mine -i '$url'"; mine -i "$url" + fi + done ++ call_postinstall + exit 0 + ;; + + remove) + shift ++ echo "+ mine -rs $*" + mine -rs "$@" ++ call_postinstall + ;; + + index) diff --git a/package/base/postinstall/postinstall.conf b/package/base/postinstall/postinstall.conf index 02dd978ca..2e6978655 100644 --- a/package/base/postinstall/postinstall.conf +++ b/package/base/postinstall/postinstall.conf @@ -1,10 +1,8 @@ postinstall_main () { - mkdir -p /etc/postinstall - mkdir -p /etc/postinstall/postremove - cp -a $confdir/postinstall /usr/sbin/ - chmod +x /usr/sbin/postinstall - cp -a $confdir/postinstall-example.sh /etc/postinstall + mkdir -p $root/etc/postinstall/postremove + cp $confdir/postinstall.sh $root/usr/sbin/postinstall + chmod +x $root/usr/sbin/postinstall } mainfunction=postinstall_main diff --git a/package/base/postinstall/postinstall b/package/base/postinstall/postinstall.sh similarity index 55% rename from package/base/postinstall/postinstall rename to package/base/postinstall/postinstall.sh index 4dd0fe592..3fb34f991 100644 --- a/package/base/postinstall/postinstall +++ b/package/base/postinstall/postinstall.sh @@ -23,68 +23,76 @@ # --- ROCK-COPYRIGHT-NOTE-END --- # Helper functions -is_installed () +is_installed() { - if [ install_checks_true == 1 ]; then return 0; fi + if [ $install_checks_true == 1 ]; then return 0; fi [ -e "$1" ]; } -is_removed () +is_removed() { - if [ remove_checks_true == 1 ]; then return 0; fi + if [ $remove_checks_true == 1 ]; then return 0; fi [ ! -e "$1" ]; } -all_installed () { - for N in /var/adm/postinstall/*-install.??????; - do - #echo $N - if [ ! -e "$N" ]; then return 0; fi - grep "$1" "$N" | cut -f2 -d' ' | - while read M; do - if is_installed "/$M"; then echo "/$M"; fi; - done - done | sort -u +all_installed() { + while read dummy M; do + [ -e "/$M" ] && echo "/$M" + done < <( cat /var/adm/postinstall/*-install.?????? 2> /dev/null | grep "$1"; ) | sort -u } -all_removed () { - for N in /var/adm/postinstall/*-remove.??????; - do - if [ ! -e "$N" ]; then return 0; fi - grep "$1" "$N" | cut -f2 -d' ' | - while read M; do - if is_removed "/$M"; then echo "/$M"; fi; - done - done | sort -u +all_removed() { + while read dummy M; do + [ -e "/$M" ] || echo "/$M" + done < <( cat /var/adm/postinstall/*-remove.?????? 2> /dev/null | grep "$1"; ) | sort -u } -any_installed () { - if [ install_checks_true == 1 ]; then return 0; fi - # This is a hack. Simply returning 0 if a file is found does not work?! - if [ "`all_installed $1`" != "" ]; then return 0; else return 1; fi +all_touched() { + while read dummy M; do + [ -e "/$M" ] || echo "/$M" + done < <( cat /var/adm/postinstall/*-install.?????? /var/adm/postinstall/*-remove.?????? 2> /dev/null | grep "$1"; ) | sort -u } -any_removed () { - if [ remove_checks_true == 1 ]; then return 0; fi - # This is a hack. Simply returning 0 if a file is found does not work?! - if [ "`all_installed $1`" != "" ]; then return 0; else return 1; fi +any_installed() { + if [ $install_checks_true == 1 ]; then return 0; fi + cat /var/adm/postinstall/*-install.?????? 2> /dev/null | grep -q "$1" +} + +any_removed() { + if [ $remove_checks_true == 1 ]; then return 0; fi + cat /var/adm/postinstall/*-remove.?????? 2> /dev/null | grep -q "$1" +} + +any_touched() { + if [ $install_checks_true == 1 ]; then return 0; fi + if [ $remove_checks_true == 1 ]; then return 0; fi + cat /var/adm/postinstall/*-install.?????? /var/adm/postinstall/*-remove.?????? 2> /dev/null | grep -q "$1" } install_checks_true=0 remove_checks_true=0 -if [ "$1" == "-a" ]; then install_checks_true=1; shift; fi -if [ "$1" == "-r" ]; then remove_checks_true=1; shift; fi -if [ "$1" == "--help" ]; then - echo "Usage: $0 [ -a ] [ -r ] [ --help ]" - echo - echo " -a execute all postinstall actions" - echo " -r execute all postremove actions" - echo " --help show this help text" - echo - exit 0; -fi - +while [ "$#" -ge 1 ]; do + case "$1" in + -a) + install_checks_true=1 + shift + ;; + -r) + remove_checks_true=1 + shift + ;; + *) + echo + echo "Usage: $0 [ -a ] [ -r ]" + echo + echo " -a execute all postinstall actions" + echo " -r execute all postremove actions" + echo + exit 1 + ;; + esac +done # Backup postinstall scripts for postremove operation all_installed "etc/postinstall/.*\.sh" | while read M; diff --git a/package/base/sysfiles/etc_postinstall_system.sh.txt b/package/base/sysfiles/etc_postinstall_system.sh.txt new file mode 100644 index 000000000..de66bd38f --- /dev/null +++ b/package/base/sysfiles/etc_postinstall_system.sh.txt @@ -0,0 +1,50 @@ +# --- ROCK-COPYRIGHT-NOTE-BEGIN --- +# +# This copyright note is auto-generated by ./scripts/Create-CopyPatch. +# Please add additional copyright information _after_ the line containing +# the ROCK-COPYRIGHT-NOTE-END tag. Otherwise it might get removed by +# the ./scripts/Create-CopyPatch script. Do not edit this copyright text! +# +# ROCK Linux: rock-src/package/base/sysfiles/etc_postinstall_system.sh +# ROCK Linux is Copyright (C) 1998 - 2005 Clifford Wolf +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. A copy of the GNU General Public +# License can be found at Documentation/COPYING. +# +# Many people helped and are helping developing ROCK Linux. Please +# have a look at http://www.rocklinux.org/ and the Documentation/TEAM +# file for details. +# +# --- ROCK-COPYRIGHT-NOTE-END --- + +if any_touched '.*\.so$'; then + echo "dynamic libraries: running 'ldconfig' .." + ldconfig +fi + +if any_touched '^(boot|lib/modules)/'; then + for kver in $( ls /boot/System.map-* | cut -f2- -d-; ); do + echo "kernel and modules: running 'depmod -a -F /boot/System.map-$kver $kver' .." + depmod -a -F /boot/System.map-$kver $kver + done +fi + +if any_touched '/man/'; then + echo "manual pages: running 'makewhatis' .." + makewhatis +fi + +if any_touched '/info/'; then + echo "info pages: recreating info dir .." + rm -f /usr/share/info/dir + find /usr/share/info /opt/*/info/ -type f 2>/dev/null | + grep -v -E -e "/dir$|-[0-9]+$" | + while read x ; do + { install-info --info-dir=/usr/share/info $x 2>&1 ; } | + egrep -v 'no info dir entry in|already exists, for file' + done +fi + diff --git a/scripts/Build-Pkg b/scripts/Build-Pkg index 08df2c20a..5e5056321 100755 --- a/scripts/Build-Pkg +++ b/scripts/Build-Pkg @@ -31,6 +31,7 @@ config=default clear_src=1 norebuild=0 +nopostinst=0 update=0 make_tar='' @@ -57,12 +58,12 @@ help_msg() { spacer=" " echo echo "Usage: ./scripts/Build-Pkg" \ - "[ -0 | -1 | -2 ... | -8 | -9 ] \\" - echo "$spacer [ -v ] [ -xtrace ] [ -chroot ] \\" - echo "$spacer [ -root { | auto } ] \\" - echo "$spacer [ -cfg ] [ -update ] \\" - echo "$spacer [ -prefix ] [ -norebuild ] \\" - echo "$spacer [ -noclearsrc ] [ -pkgdir ] \\" + "[ -0 | -1 | -2 ... | -8 | -9 ] \\" + echo "$spacer [ -v ] [ -xtrace ] [ -chroot ] \\" + echo "$spacer [ -root { | auto } ] [ -update ] \\" + echo "$spacer [ -cfg ] [ -nopostinst ] \\" + echo "$spacer [ -prefix ] [ -norebuild ] \\" + echo "$spacer [ -noclearsrc ] [ -pkgdir ] \\" echo "$spacer [ -id ] [ -debug ] pkg-name(s)" echo echo " Build a single package. Warning: Re-building a package might overwrite or" @@ -77,8 +78,9 @@ help_msg() { echo " -chroot create and use a chroot environment" echo " -root { | auto } the root build directory to use;" echo " defaults to automatic setting" - echo " -cfg the build configuration to use" echo " -update backup/restore modified package files" + echo " -cfg the build configuration to use" + echo " -nopostinst do not create postinstall files" echo " -prefix the installation prefix for packages;" echo " defaults to automatic setting" echo " -norebuild don't rebuild a previously successfully built package;" @@ -120,6 +122,7 @@ while [ "$1" ] ; do -pkgdir) options="$options $1 $2" ; pkgdir="$2" ; shift ;; -noclearsrc) options="$options $1" ; clear_src=0 ;; -norebuild) options="$options $1" ; norebuild=1 ;; + -nopostinst) options="$options $1" ; nopostinst=1 ;; -download) options="$options $1" ; download=1 ;; -*) help_msg ; exit 1 ;; *) break ;; @@ -1054,6 +1057,10 @@ abort() { done } | sort -u > var/adm/flists/$spkg + if [ $stagelevel -ge 2 -a $nopostinst = 0 -a -d /var/adm/postinstall ]; then + cp var/adm/flists/$spkg "$(mktemp var/adm/postinstall/${spkg}-install.XXXXXX)" + fi + echo "<$spkg> Creating package dependencies file ..." sed "s,^[^ ]*,$spkg:," < $builddir/dependencies.txt > var/adm/dependencies/$spkg diff --git a/scripts/Build-Target b/scripts/Build-Target index 78b4e4eb0..024b19b25 100755 --- a/scripts/Build-Target +++ b/scripts/Build-Target @@ -322,7 +322,7 @@ pkgloop_package() { cmd_prefix="-prefix $pkg_prefix" else cmd_prefix="" ; fi - cmd_buildpkg="./scripts/Build-Pkg -$stagelevel -cfg $config" + cmd_buildpkg="./scripts/Build-Pkg -$stagelevel -cfg $config -nopostinst" cmd_buildpkg="$cmd_buildpkg $cmd_root $cmd_prefix $pkg_basename=$pkg_name" # Execute action handler