diff options
-rw-r--r-- | ChangeLog | 20 | ||||
-rw-r--r-- | TODO | 2 | ||||
-rw-r--r-- | flx/Makefile | 3 | ||||
-rw-r--r-- | ifenslave/Makefile | 4 | ||||
-rw-r--r-- | include/rules.make | 7 | ||||
-rw-r--r-- | mii/Makefile | 2 | ||||
-rw-r--r-- | mktmp/Makefile | 2 | ||||
-rwxr-xr-x | scripts/pkg | 299 | ||||
-rw-r--r-- | wd/install-wdd-nice.scr | 296 | ||||
-rw-r--r-- | wd/install-wdd.scr | 95 | ||||
-rw-r--r-- | wd/wdd.c | 56 |
11 files changed, 747 insertions, 39 deletions
@@ -43,3 +43,23 @@ - fix compilation of ifenslave - release 0.1.21 +2003/12/31 + - updates to pkg (0.4.0) : + - automatically prepare many arch-specific GCC compile options + - added the '=' feature to newpkg + - differentiate FLXPMAKE and FLXMAKE + - now FLXARCH and other options are known to the script + - improved and packaged wdd (WatchDog Daemon) + +2004/01/11 + - updates to pkg (0.4.1) : implemented do_release and do_changelog + +2004/01/27 + - changed some makefiles to make use of new GCC options provided by pkg-0.4 + +2004/02/01 + - changed pkg (0.4.3) to use 'readlink' instead of 'file' ; newpkg now + differentiates between (R)eleased, (P)ackaged, and (D)evel versions. + - wdd now also does a 'stat("/")' which is useful in case of broken NFSROOT. + - a new deployment script for wdd + @@ -0,0 +1,2 @@ +- finish "pkg release" : problems when releasing a package which is + already released in another arch. diff --git a/flx/Makefile b/flx/Makefile index 214385f..0da663e 100644 --- a/flx/Makefile +++ b/flx/Makefile @@ -31,7 +31,8 @@ SRC=main.c arg.c utils.c md5.c flx.c fct1.c check.c sign.c \ input.c input_fs.c input_file.c \ output.c output_file.c OBJ=$(SRC:.c=.o) -CFLAGS= -Wall -O2 -DMEM_OPTIM -DPROGRAM_NAME=\"$(NAME)\" -DPROGRAM_VERSION=\"$(VERSION)\" +COPTS="-O2" +CFLAGS= -Wall $(COPTS) -DMEM_OPTIM -DPROGRAM_NAME=\"$(NAME)\" -DPROGRAM_VERSION=\"$(VERSION)\" LDFLAGS=-L. $(NAME): $(OBJ) diff --git a/ifenslave/Makefile b/ifenslave/Makefile index 40e94af..09c0e35 100644 --- a/ifenslave/Makefile +++ b/ifenslave/Makefile @@ -1,7 +1,9 @@ OBJS=ifenslave-1.0.11 ifenslave-1.0.12 ifenslave # include ../../include/rules.make +include ../include/rules.make CC=gcc -CFLAGS+=-Wstrict-prototypes -I/usr/src/linux/include -momit-leaf-frame-pointer +CFLAGS+=-Wstrict-prototypes -I/usr/src/linux/include +#CFLAGS+=-Wstrict-prototypes -I/usr/src/linux/include -momit-leaf-frame-pointer all: $(OBJS) diff --git a/include/rules.make b/include/rules.make index 14ccdee..b2b6336 100644 --- a/include/rules.make +++ b/include/rules.make @@ -1,5 +1,6 @@ CC=diet gcc -CFLAGS=-mpreferred-stack-boundary=2 -malign-jumps=0 -malign-loops=0 -malign-functions=0 -Os -march=i386 -mcpu=i386 +CFLAGS=$(GCC_ARCH_SMALL) $(GCC_CPU_SMALL) $(GCC_OPT_SMALL) +#-mpreferred-stack-boundary=2 -malign-jumps=0 -malign-loops=0 -malign-functions=0 -Os -march=i386 -mcpu=i386 LDFLAGS=-s all: $(OBJS) @@ -8,12 +9,14 @@ all: $(OBJS) $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $< strip -R .comment -R .note $@ objdump -h $@ | grep -q '\.data[ ]*00000000' && strip -R .data $@ || true - sstrip $@ + objdump -h $@ | grep -q '\.sbss[ ]*00000000' && strip -R .sbss $@ || true + -sstrip $@ %-debug: %.c $(CC) $(LDFLAGS) $(CFLAGS) -DDEBUG -o $@ $< strip -R .comment -R .note $@ objdump -h $@ | grep -q '\.data[ ]*00000000' && strip -R .data $@ || true + objdump -h $@ | grep -q '\.sbss[ ]*00000000' && strip -R .sbss $@ || true clean: @rm -f *.[ao] *~ core diff --git a/mii/Makefile b/mii/Makefile index 6ef0a2e..9f06237 100644 --- a/mii/Makefile +++ b/mii/Makefile @@ -1,7 +1,7 @@ OBJS=starfire-diag tulip-diag mii-diag include ../include/rules.make CC=gcc -CFLAGS+=-momit-leaf-frame-pointer +#CFLAGS+=-momit-leaf-frame-pointer all: $(OBJS) diff --git a/mktmp/Makefile b/mktmp/Makefile index d915af2..e4e9ccc 100644 --- a/mktmp/Makefile +++ b/mktmp/Makefile @@ -1,6 +1,6 @@ OBJS=mktmp include ../include/rules.make -CFLAGS+=-momit-leaf-frame-pointer +#CFLAGS+=-momit-leaf-frame-pointer %: %.c $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $< diff --git a/scripts/pkg b/scripts/pkg index 460b8f7..271fc81 100755 --- a/scripts/pkg +++ b/scripts/pkg @@ -1,6 +1,6 @@ #!/bin/bash -# pkg - Formilux package builder - version 0.3.18 - 2003-11-11 +# pkg - Formilux package builder - version 0.4.3 - 2004-01-23 # # Copyright (C) 2001-2003 Benoit Dolez & Willy Tarreau # mailto: benoit@ant-computing.com,willy@ant-computing.com @@ -15,6 +15,7 @@ # pkg <action> [ pkg [ pkg2 ] ] # # pkg newpkg [ new_pkg [ old_pkg ] ] +# [new_pkg]=[old_pkg] # ex: pkg newpkg openssl-0.9.6g-flx0.1 openssl-0.9.6d-flx0.1 # pkg newpkg apache apache-1.3 # pkg newpkg bash @@ -511,11 +512,17 @@ function do_newpkg { if [ $# -gt 0 ]; then # the user has specified an explicit version string - new_name=$1 + # either it's the complete name, or it's the complete name followed + # by an '=' sign preceding the old name. + new_name=${1%%=*} if [ $# -gt 1 ]; then pkg_name=$2 + elif [ "$new_name" != "$1" ]; then + pkg_name=${1##*=} fi - else + fi + + if [ -z "$new_name" ]; then # the user has not specified any version string, we'll use the directory # name. new_name=$(basename $(pwd)) @@ -554,9 +561,12 @@ function do_newpkg { local i=0 echo; echo ">>> Please select the name of the package to create :";echo while [ $i -lt ${#sort_list[*]} ]; do - # we'll display an 'R' in front of released names, or a 'D' for dev. - if [ "${rel_list[*]/${sort_list[$i]}/}" != "${rel_list[*]}" ]; then + # we'll display an 'R' in front of released names, 'P' + # in front of packaged ones, or a 'D' for dev. + if [ -e "$PKGROOT/${sort_list[$i]}/RELEASED" ]; then printf " %5d : [R] %s\n" $[$i+1] ${sort_list[$i]} + elif [ "${rel_list[*]/${sort_list[$i]}/}" != "${rel_list[*]}" ]; then + printf " %5d : [P] %s\n" $[$i+1] ${sort_list[$i]} else printf " %5d : [D] %s\n" $[$i+1] ${sort_list[$i]} fi @@ -636,9 +646,11 @@ function do_newpkg { fi rm -f ${LINKNAME} && mkdir -p $new_name && ln -s $new_name ${LINKNAME} && \ - tar -C $pkg_name --exclude='./compiled/*' --exclude='./released.*' --exclude='./pkg.*' \ + tar -C $pkg_name --exclude='./compiled/*' --exclude='./RELEASED*' --exclude='./pkg.*' \ --exclude='./CFLAGS' --exclude='./.dep' --exclude='./.lst' --exclude='./.tgz' \ -cplf - . | tar -C $new_name -xf - || (rmdir $new_name ; rm -f ${LINKNAME}) + chmod u+rw $new_name/build.cfg + echo "A new package '$(basename $new_name)' has been created as '$new_name', based on '$(basename $pkg_name)'." echo "The link '${LINKNAME}' now points to it." echo @@ -652,8 +664,13 @@ function do_newpkg { function do_edit { - echo "Editing $CFGFILE..." - vi $CFGFILE + if [ -e "$PKGDIR/RELEASED" ]; then + echo "Editing $CFGFILE in read-only mode..." + vi -R $CFGFILE + else + echo "Editing $CFGFILE..." + vi $CFGFILE + fi } function do_cat { @@ -685,7 +702,24 @@ function pre_info { else echo "does not exist yet." fi - [ -n "${PATCH_LIST}" ] && echo " Patches list : ${PATCH_LIST}" + if [ -n "${PATCH_LIST}" ]; then + echo " Patches list : ${PATCH_LIST}" + else + echo " Empty patch list." + fi + + if [ -e "$PKGDIR/ChangeLog" ]; then + echo " Last ChangeLog : $(grep -m 1 '^[0-9]\{4\}' $PKGDIR/ChangeLog)" + else + echo " No ChangeLog." + fi + + if [ -e "$PKGDIR/RELEASED" ]; then + echo " Tagged as RELEASED" + else + echo " UNRELEASED." + fi + return 0 } @@ -909,7 +943,7 @@ function _do_pack_files { get_perl_depend $REPLY ;; *:\ symbolic\ link*) - echo "$REPLY $(echo $flr | cut -f5 -d' ')" >> $DEP_FILE + echo "$REPLY $(readlink $REPLY)" >> $DEP_FILE ;; *\ ELF\ [0-9][0-9]-bit\ *dynamically\ linked*) echo "$REPLY $(ldd $REPLY 2>/dev/null | grep -v 'statically linked' | awk '{print $1}' | tr '\012' ' ')" >> $DEP_FILE @@ -1057,7 +1091,7 @@ function do_pack { get_perl_depend $REPLY ;; *:\ symbolic\ link*) - echo "$REPLY $(echo $flr | cut -f5 -d' ')" >> $DEP_FILE + echo "$REPLY $(readlink $REPLY)" >> $DEP_FILE ;; *\ ELF\ [0-9][0-9]-bit\ *dynamically\ linked*) echo "$REPLY $(ldd $REPLY 2>/dev/null | grep -v 'statically linked' | awk '{print $1}' | tr '\012' ' ')" >> $DEP_FILE @@ -1090,20 +1124,133 @@ function do_pack { return 0 } +# this function sets all needed compiler options +function set_compiler_options { + # now we'll set default ARCH and CPU for the current FLXARCH if none is set. + case "$FLXARCH" in + i686) arch=${arch:-i686} cpu=${cpu:-i686} basearch=${basearch:-i386} ;; + i586) arch=${arch:-i586} cpu=${cpu:-i686} basearch=${basearch:-i386} ;; + i486) arch=${arch:-i486} cpu=${cpu:-i486} basearch=${basearch:-i386} ;; + i386) arch=${arch:-i386} cpu=${cpu:-i386} basearch=${basearch:-i386} ;; + ev[456]*) arch=${arch:-$FLXARCH} cpu=${cpu:-$FLXARCH} basearch=${basearch:-$FLXARCH} ;; + parisc) arch=${arch:-1.1} cpu=${cpu:-7100LC} basearch=${basearch:-1.1} ;; + sparc) arch=${arch:-sparc} cpu=${cpu:-sparc} basearch=${basearch:-sparc} ;; + sparc64) arch=${arch:-ultrasparc} cpu=${cpu:-ultrasparc} basearch=${basearch:-ultrasparc} ;; + *) arch=${arch:-i586} cpu=${cpu:-i686} basearch=${basearch:-i386} ;; + esac + + case "$FLXARCH" in + *86) + CC=${CC:-gcc} + FLX_ARCH_CURRENT="$FLXARCH" + FLX_ARCH_COMMON="i586" + FLX_ARCH_SMALL="$basearch" + GCC_ARCH_CURRENT="-march=$arch" + GCC_ARCH_COMMON="-march=$FLX_ARCH_COMMON" + GCC_ARCH_SMALL="-march=$FLX_ARCH_SMALL" + GCC_CPU_CURRENT="-mcpu=$cpu" + GCC_CPU_COMMON="-mcpu=$FLX_ARCH_COMMON" + GCC_CPU_SMALL="-mcpu=$FLX_ARCH_SMALL" + GCC_OPT_FASTEST="-O3 -fomit-frame-pointer" + GCC_OPT_FAST="-O2 -momit-leaf-frame-pointer -mpreferred-stack-boundary=2 -malign-jumps=0" + GCC_OPT_SMALL="-Os -momit-leaf-frame-pointer -mpreferred-stack-boundary=2 -malign-jumps=0 -malign-loops=0 -malign-functions=0" + if [ $TESTGCC -gt 0 ] && $CC -falign-loops=0 -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then + GCC_OPT_FASTEST="-O3 -fomit-frame-pointer" + GCC_OPT_FAST="-O2 -momit-leaf-frame-pointer -mpreferred-stack-boundary=2 -falign-jumps=0" + GCC_OPT_SMALL="-Os -momit-leaf-frame-pointer -mpreferred-stack-boundary=2 -falign-jumps=0 -falign-loops=0 -falign-functions=0" + fi + ;; + + parisc*) + CC=${CC:-gcc} + FLX_ARCH_CURRENT="${FLXARCH##parisc}" ; FLX_ARCH_CURRENT="${FLX_ARCH_CURRENT:-1.1}" + FLX_ARCH_COMMON="1.0" + FLX_ARCH_SMALL="1.0" + GCC_ARCH_CURRENT="-march=$FLX_ARCH_CURRENT" + GCC_ARCH_COMMON="-march=$FLX_ARCH_COMMON" + GCC_ARCH_SMALL="-march=$FLX_ARCH_SMALL" + GCC_CPU_CURRENT="-mschedule=7100LC" + GCC_CPU_COMMON="-mschedule=7100" + GCC_CPU_SMALL="-mschedule=7100" + GCC_OPT_FASTEST="-O3 -fomit-frame-pointer" + GCC_OPT_FAST="-O2 -falign-jumps=0" + GCC_OPT_SMALL="-Os -falign-jumps=0 -falign-loops=0 -falign-functions=0" + ;; + + sparc*) + CC=${CC:-gcc} + FLX_ARCH_CURRENT="$FLXARCH" + FLX_ARCH_COMMON="$FLXARCH" + FLX_ARCH_SMALL="$FLXARCH" + GCC_ARCH_CURRENT="-mcpu=$arch" + GCC_ARCH_COMMON="-mcpu=$arch" + GCC_ARCH_SMALL="-mcpu=$arch" + GCC_CPU_CURRENT="-mtune=$cpu" + GCC_CPU_COMMON="-mtune=$cpu" + GCC_CPU_SMALL="-mtune=$cpu" + GCC_OPT_FASTEST="-O3 -fomit-frame-pointer" + GCC_OPT_FAST="-O2 -falign-jumps=0" + GCC_OPT_SMALL="-Os -falign-jumps=0 -falign-loops=0 -falign-functions=0" + ;; + + ev[456]*) + CC=${CC:-gcc} + FLX_ARCH_CURRENT="$FLXARCH" + FLX_ARCH_COMMON="$FLXARCH" + FLX_ARCH_SMALL="$FLXARCH" + GCC_ARCH_CURRENT="-mcpu=$arch" + GCC_ARCH_COMMON="-mcpu=$arch" + GCC_ARCH_SMALL="-mcpu=$arch" + GCC_CPU_CURRENT="-mtune=$cpu" + GCC_CPU_COMMON="-mtune=$cpu" + GCC_CPU_SMALL="-mtune=$cpu" + GCC_OPT_FASTEST="-O3 -fomit-frame-pointer" + GCC_OPT_FAST="-O2 -falign-jumps=0" + GCC_OPT_SMALL="-Os -falign-jumps=0 -falign-loops=0 -falign-functions=0" + ;; + + *) + CC=${CC:-gcc} + FLX_ARCH_CURRENT="$FLXARCH" + FLX_ARCH_COMMON="$FLXARCH" + FLX_ARCH_SMALL="$FLXARCH" + GCC_OPT_FASTEST="-O3 -fomit-frame-pointer" + GCC_OPT_FAST="-O2 -malign-jumps=0" + GCC_OPT_SMALL="-Os -malign-jumps=0 -malign-loops=0 -malign-functions=0" + if [ $TESTGCC -gt 0 ] && $CC -falign-loops=0 -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then + GCC_OPT_FASTEST="-O3 -fomit-frame-pointer" + GCC_OPT_FAST="-O2 -falign-jumps=0" + GCC_OPT_SMALL="-Os -falign-jumps=0 -falign-loops=0 -falign-functions=0" + fi + ;; + esac + + export FLX_ARCH_CURRENT FLX_ARCH_COMMON FLX_ARCH_SMALL + export CC GCC_ARCH_CURRENT GCC_ARCH_COMMON GCC_ARCH_SMALL + export GCC_CPU_CURRENT GCC_CPU_COMMON GCC_CPU_SMALL + export GCC_OPT_FASTEST GCC_OPT_FAST GCC_OPT_SMALL + + return 0 +} + function usage { + # this is needed to present current options to the user + set_compiler_options + echo "Usage:" echo " pkg [-options]* <action> [ pkg [ pkg2 ] ]" echo echo " pkg newpkg [ new_pkg [ old_pkg ] ]" + echo " pkg newpkg [ newpkg ]=[ old_pkg ]" echo " ex: pkg newpkg openssl-0.9.6g-${BUILDSFX}${BUILDVER}.1 openssl-0.9.6d-${BUILDSFX}${BUILDVER}.1" - echo " pkg newpkg apache apache-1.3" + echo " pkg newpkg =apache-1.3" echo " pkg newpkg bash" echo " pkg newpkg gcc gcc-3*${BUILDSFX}*.1" echo echo " pkg setpkg [ new_pkg ]" echo " ex: pkg setpkg openssl-0.9.6g-${BUILDSFX}${BUILDVER}.1" echo - echo " pkg { info | cat | edit | unpack } [ pkg ]" + echo " pkg { info | cat | edit | unpack | changelog } [ pkg ]" echo " ex: pkg info" echo " pkg info bash" echo " pkg edit modutils-2.4" @@ -1122,6 +1269,16 @@ function usage { echo "ROOTDIR : base directory for package installation (not source), <$ROOTDIR>" echo "FLXARCH : architecture to use for the package, <$FLXARCH>" echo "KERNDIR : kernel sources location, if needed, <$KERNDIR>" + echo + echo "Architecture-specific variables :" + echo -e " CURRENT\t|COMMON\t|SMALL" + echo -e "FLX_ARCH_ : $FLX_ARCH_CURRENT\t| $FLX_ARCH_COMMON\t| $FLX_ARCH_SMALL" + echo -e "GCC_ARCH_ : $GCC_ARCH_CURRENT\t| $GCC_ARCH_COMMON\t| $GCC_ARCH_SMALL" + echo -e "GCC_CPU_ : $GCC_CPU_CURRENT\t| $GCC_CPU_COMMON\t| $GCC_CPU_SMALL" + echo "GCC_OPT_FASTEST=$GCC_OPT_FASTEST" + echo "GCC_OPT_FAST=$GCC_OPT_FAST" + echo "GCC_OPT_SMALL=$GCC_OPT_SMALL" + # Those two are not user-settable anymore # echo "CFGFILE : force to use of a .pkg, <$CFGFILE>" # echo "DISTVER : build version (${BUILDSFX}${BUILDVER}.1)" @@ -1134,11 +1291,80 @@ function do_help { return 0 } +# creates a new changelog entry and prompts the user to add information. +function do_changelog { + # Let's create a new changelog entry + (echo '0a'; date +"%Y/%m/%d %H:%M $LOGNAME@$HOSTNAME"; + echo ''; echo $'\t* '; echo ''; echo '.' ; + echo '1,$wq') | ed $PKGDIR/ChangeLog >/dev/null + + # we'll ask the user to fill the changelog + vi -c ":3" $PKGDIR/ChangeLog + return 0 +} + +# marks the current package as released function do_release { + local last_pkg + echo "#####################################################" echo "# Release command not implemented yet ! Aborting... #" echo "#####################################################" - exit 1 + #exit 1 + # some important checks before things get wrong + if [ -z "$PKGROOT" -o -z "$PKGDIR" -o -z "$EXACTPKG" ]; then + echo "Critical error : PKGROOT, PKGDIR and EXACTPKG must be set !" + exit 1 + fi + + if ! [ -s "$PKGDIR/.lst" -a -e "$PKGDIR/.dep" -a -s "$PKGDIR/.tgz" ]; then + echo "Nothing to be released in this package." + echo "Please ensure that .lst, .dep and .tgz exist." + exit 1 + fi + + # first, the destination directory must not exist + if [ -d "$PKGROOT/$EXACTPKG" ]; then + if [ -e "$PKGROOT/$EXACTPKG/RELEASED" ]; then + echo "Error: This package already exists." + else + echo "Error: The package directory $PKGROOT/$EXACTPKG already exists." + fi + exit 1 + fi + + # identify last changelog entry + last_pkg="" + if [ -e "$PKGDIR/ChangeLog" ]; then + last_pkg=$(grep -m 1 $'^[\t ]*\* released' "$PKGDIR/ChangeLog") + last_pkg=${last_pkg##*released } + fi + + if [ "$last_pkg" != "$EXACTPKG" ]; then + # Let's create a new changelog entry + touch $PKGDIR/ChangeLog # avoid error message in case it doesn't exist + (echo '0a'; date +"%Y/%m/%d %H:%M $LOGNAME@$HOSTNAME"; + echo ''; echo $'\t'"* released $EXACTPKG"; + echo ''; echo '.' ; echo '1,$wq') | ed $PKGDIR/ChangeLog >/dev/null + fi + + # we'll ask the user to fill the changelog + vi -c ":4" $PKGDIR/ChangeLog + +#<FIXME.WTA> +#traiter le cas où PKGROOT/PKGDIR existe déjà mais pour d'autres archi +#</FIXME> + + if ! mv $PKGDIR $PKGROOT/ ; then + echo "Error: cannot move the package to the released directory. Cancelling." + # the mv here fails atomically, so nothing's lost in PKGDIR, but we have + # to clean a possible partial copy + rm -rf $PKGROOT/$EXACTPKG + exit 2 + fi + + touch $PKGROOT/$EXACTPKG/RELEASED + return 0 } @@ -1162,6 +1388,7 @@ function known_cmd { release_only=0 force=0 +TESTGCC=0 PRINTUSAGE=0 ARGLIST=( ) ACTION= @@ -1207,7 +1434,7 @@ done while [ $CHAINCMD -gt 0 -a ${#ARGLIST[@]} -gt 0 ]; do set -o noglob ACTION=${ARGLIST[0]} - + TESTGCC=0 # unset ARGLIST[0] ### doesn't work in scripts with this shitty bash !!! ARGLIST[0]= ; ARGLIST=( ${ARGLIST[*]} ) # gets expanded with shitty bash ! @@ -1222,7 +1449,7 @@ while [ $CHAINCMD -gt 0 -a ${#ARGLIST[@]} -gt 0 ]; do KNOWNCMD=1 get_name $1 %P default ;; - info|edit|cat|unpack) + info|edit|cat|unpack|changelog) CHAINCMD=0 KNOWNCMD=1 get_name ${ARGLIST[0]} %L %P %D @@ -1231,17 +1458,27 @@ while [ $CHAINCMD -gt 0 -a ${#ARGLIST[@]} -gt 0 ]; do CHAINCMD=0 KNOWNCMD=1 REPLY=$(basename $(readlink ${LINKNAME}) 2>/dev/null) + PKGDIR=$(readlink ${LINKNAME} 2>/dev/null) # get_name %L ;; - compile_only|config|config_only|compile|build|prepack|strip|pack|delpack|release|clean) + compile_only|config|config_only|compile|build) KNOWNCMD=1 REPLY=$(basename $(readlink ${LINKNAME}) 2>/dev/null) + PKGDIR=$(readlink ${LINKNAME} 2>/dev/null) + TESTGCC=1 + # get_name %L + ;; + prepack|strip|pack|delpack|release|clean) + KNOWNCMD=1 + REPLY=$(basename $(readlink ${LINKNAME}) 2>/dev/null) + PKGDIR=$(readlink ${LINKNAME} 2>/dev/null) # get_name %L ;; *) CHAINCMD=0 KNOWNCMD=0 REPLY=$(basename $(readlink ${LINKNAME}) 2>/dev/null) + PKGDIR=$(readlink ${LINKNAME} 2>/dev/null) # get_name %L ;; esac @@ -1256,10 +1493,12 @@ while [ $CHAINCMD -gt 0 -a ${#ARGLIST[@]} -gt 0 ]; do fi EXACTPKG=$REPLY - if [ -e "$PKGROOT/$EXACTPKG/build.cfg" ]; then - PKGDIR=$PKGROOT/$EXACTPKG - else - PKGDIR=$DEVROOT/$EXACTPKG + if [ -z "$PKGDIR" ]; then + if [ -e "$PKGROOT/$EXACTPKG/build.cfg" ]; then + PKGDIR=$PKGROOT/$EXACTPKG + else + PKGDIR=$DEVROOT/$EXACTPKG + fi fi CFGFILE=$PKGDIR/build.cfg PKGRADIX=$(get_pkg_radix $EXACTPKG) @@ -1271,22 +1510,18 @@ while [ $CHAINCMD -gt 0 -a ${#ARGLIST[@]} -gt 0 ]; do # for compatibility with old functions. Not used anywhere outside this script. packver=$EXACTPKG pack=$PKGRADIX - - . $CFGFILE fi - case "$FLXARCH" in - i686) arch=i686 cpu=i686 basearch=i386 ;; - i486) arch=i486 cpu=i486 basearch=i386 ;; - i386) arch=i386 cpu=i386 basearch=i386 ;; - ev6) arch=ev6 cpu=ev6 basearch=ev6 ;; - *) arch=i586 cpu=i686 basearch=i386 ;; - esac + set_compiler_options - if [ -z "$FLXMAKE" ]; then - FLXMAKE=make + if [ "$ACTION" != "newpkg" ]; then + . $CFGFILE fi + # FLXMAKE is used for sequential make and FLXPMAKE for parallel make + FLXMAKE=${FLXMAKE:-make} + FLXPMAKE=${FLXPMAKE:-$FLXMAKE} + export DISTVER PKGRADIX PKGVER FLXMAKE PATCH_LIST FILE_LIST # echo "ACTION=$ACTION, KNOWNCMD=$KNOWNCMD, CHAINCMD=$CHAINCMD" diff --git a/wd/install-wdd-nice.scr b/wd/install-wdd-nice.scr new file mode 100644 index 0000000..31e8405 --- /dev/null +++ b/wd/install-wdd-nice.scr @@ -0,0 +1,296 @@ +#!/bin/bash + +# ce script peut également être exécuté comme ceci: +# ssh -t access@na root@remote 'zcat|bash' < $SCRIPT.gz +# + +echo "###### checking /bin/nice ######" +if [ ! -x /bin/nice ]; then + echo "WARNING ! nice absent. Installation en cours !" + remountw + # this block was generated with : "od -An -tx1 -vw32|tr -d ' '" + (sed -e 's/../x\0/g' | while read; do printf "${REPLY//x/\x}"; done | tar -C / -zxUpvf -) <<EOF +1f8b0800057d1d400203ed5a7d7014c7959ffd905884606510b66c6333261248 +0164890f632cc002b1186c0b1609812f20c44a1a69565eed2abbb39270901159 +6458c69bd339a44c2e291bd9179bdca56cee2ae5c89060f171e05c3989627389 +52a672c4c657a3ac6c2b81c26b23b3f77b3dbdab41809354eef2c7d5b6eae9cd +eb7efddeebd7af5ff7ec74addb7bafd75d2709ff87a5a8b8a868d1c262a1482f +1c2fe078dea2e2fb8a04b0142d9ab7e8bef9f31610ffa285f7096291f03728c1 +80e2f28ba2e0f7f9942fe273d5370bff0fcb4ec7a3ab4c265392360b1681a82c +d56a5b007cf8cb7afd024114d2857c2147b80d9868402778007d782648035801 +16c02502b4114cc1f314de66e2c00ada08b6e50b0201f517b2f47656d78b36c0 +4154e442683a6f3703ed47fb7eb411bc099a209deb20b0a18f6d97d546208216 +0d6df77adcb5f77aeae77adcde607b61c057384fafcfe2b63db4b68afb42afa7 +920720577c093081cb13f858a9cce0b880cb99c2e90cc034c0ad80dbc7f83e9f +eb9bc9e94c8e2703a603eee0f45d80bbf9f33d805bb86db9dcae2f2a697fa23d +31be7180f137e1990ac801dc66a8b303ee1cc397cdf124c0449a033e27b36e22 +770ef184adb6597ccc01382307f471934eef02ce07bd9bfb97e6f87ed011ce4f +31b7dad07f39e031d066de7f354006bd94b7a7a1be1df47f72fa0ed07b415767 +e8f4f3a00f802ee5edc5a00f81cee6741ba097e49b75fad76413e8e9dcbe2e1a +d411abcdcae6e856162756039d4b3169a09f061e40ff57b9bd3e8006dacde927 +8063a0cf717a05f5df67b54de4f63c43f302ba80d32ef217e87fe5f465f217e8 +73dcdee3e413d07378fb14f03f067a09974f312d83be8fb76fe3f314e2e3fb3e +a01dedb7f3f697c97fa0cf727a03e0006827a75f001c02fd1baeffdbe43fd032 +6fbf4afe33d08b680d18fcf32ce40fa07d2a6f27d0403bf8f393b4d60cfc15e0 +af7f3e41db85d9e43ff0ff03e7ff9862d4c0ff83d1b4a7af67e4853aca07f709 +01a5de17548496a0525713f47a7c758f4bf542a3a4f85a941a8fcfdb28d4d434 +b448de7a377bac53b6b74835b5c420795b8580a4b4f8dd3ebf5bd94e55c96730 +b6bb6a1adc5e97c7fd842434d7fa155f5b9dd0ecf2408100d12e7f2321c9ef17 +5cb53ebf0233c0e211dc813608f12a429dce9ad008e135cdb53575417f4db3ab +5d68604c0dc04125306a764d4dbde4971add0108ae69f0bb9aa51ab7b7c1479a +dcde7ac12fe9429ba566180e6e572020f9959a0697db2334d4797c0189460416 +974722c79079009f1fbcc05e5f0db5296e9f576860f506d56bd6d5a087db5b13 +0c304bc8c335b4e3c27097db4b03ac9321ae5daa6b6d41fb8dec6cae0db8bd6e +85bbcfa548ed8c686cf679b9a81ae1a147d7ac28ab9957585c387ff439f95494 +7c9a97d8e32cc87c96e45f9ae1f9fa3feb4d394cecbfc0f2b855df37793c05a6 +bbc753f63d6ad2eb6e71bb2752b63dc3e92c465b845f727a32a3cdc2bb3c2647 +5eb7dad20bf47c923649cf2369763d7fa465e9eb246d861eff69797a5ca76143 +6947bf7190b18330d65d276198b89b30027f2f616c0a4f134672ee268ce4bf9f +3012f601c2b0fcbb8491170f124622fb27c2d8a00e1186a53f208c8de830612c +ae1f12c6a6d74b1809f3c784b170fb0863f33b45181bc89b84b199bc451889a4 +9f3036bab384b1510e10c686778e3036bdf38491602f10c622d50863131c228c +cd78983036c24b84b11154853fa8d4c8819b779dfc260e90da3a3821d22a6847 +81b519b064f34f4fa239beb0053de2790afe137b3c8f3c479948183c1f47c923 +0fcad436d8cf68f2a44c5335d8c768f2a84cdbe2e061469367654a238307194d +1e96698b1fec6634795aa623ed6027a3c9e3f2fd44b7309a3c2fd3d633b88dd1 +3403326d61834e46d34cc8945a074b194d33223f467411a36966644ad98322a3 +6986641ad06016a369a6e416a20546d38cc9ed440f5f259a664eee64e36734cd +a0bc978d9fd1349372371b3fa36946e5036cfc8ca699950fb2f1339a66583ec4 +c6cf689a69f9301b3fa369c6e55e367e46d3cccb7d6cfc8ca60890df64e36734 +4582dccfc6cf688a0879808d9fd11419f279367e465384c81a1b3fa32952e461 +367e4653c4c83136fecfe3f1c43e50fce1d6f0ef4217869d1b2ae4d2e749e35e +ab6dfd46b9e569ab4dfb041d2f852f1b63ecde42415043e496ae3ec51cef4774 +75a33db4d48383a9102c894eee91f114715ac353e94115e2fdac2674bf10bcd0 +4bc70774cc90bb51a52d82fc3369d493b24078a89ac94ae0de7c9dd92ee71ca1 +a9a01e124c1fcb171acaae54ab6d5def2a337a3a8f42d3a911670fe50db90f03 +726aebd127fa78e487ecd8c939624e593808790b61410fe51a56554a55933f4f +56897a6d0f6a47468c8c9d5435882a9d477e0db4fc16555ef89c2ab342a72e55 +6a3910ceec9bb66963a55a9579c63142269c71c498e72fa3a76a7e910c92df47 +dfa674edbf99c84bf24837d98634c3e48fc8fd783b912f90924bf42f46ffd25f +8077cb33d7ab0e8cd18154f70639111d4a3a6cf6c8774040a53aed4867c95c7b +d707f4f6f135d3dc608dfd589939d4d71f8a8d6fabd48e21492c7d75a245d8f9 +10a9252b228e11675346931029333bb51376261193705ba53c010a9b84269376 +581f63774499498321b5d156ee5f680b7e0d3a4cba8ed6c9d03a3be83668add6 +5627b5ae67ada6b2eb959b30a6a4f2c906e5f375e5dc89c7d8fbcbe0780478e4 +35aa8047222b5f1f3993461b043bcc9dbad424c89d14dad321c309779516c49c +da66b83a7c92fc7b25ae6c0d5d79501917bae255ecd10aea61d25e4c4e64d2b2 +1eda7cc83ca7f6fd4949c7b05aa7fca58481cf8c5c67600f1913d9717f1cbaec +5d5b1016a18e98a0583ea91ee9ba1c1c87b8a0d726cc5bb0adebb27237cd78a9 +2e4ed0caf49080e05b9845a2f6bbcf60f9e933e9fae8628ceb2757f4d1644143 +f08ed03241994a521ea7184977a2f3c8153e9c58a5bc13b55ac9155daea07d15 +4fdad337102aff29a12f27848e58aa472a591feb67ac0a8eb9837843a4aa0875 +aa401d5af50e084ce888588f385580b64defa3d9c8861347e9981b7ac01c4c3b +ba539f50d5faba537e96b49a9d5051ac5b5ea9f57ec6d75776e5d1820c0b4db5 +7c9014fa3e254164c6db8ad8f980a0dc095b9a32680e2bb4c94c8bea18e94446 +3287dfd97585c276c7ade181a588a29d4f4eee25149da0c71325ec4eb55aa364 +43f1aeaeccb5bed8825474327c993d171d61cfcc8e2c2cf3a08da7894b4eedd9 +4fd9c08adfedeac368681742929a3adade164b38eb2ba395fff669a2729c7619 +0c6a4ed7bb3b1ee8213d470ebfc032e274305630e6c519345d594ef9c768a9dc +a84dc5e0a2132be4933a990e3222699bb7eab9b2870c2743754dabe37a32d547 +1a7983fe27c7e1b0a94151bd8bce6367d284c4628a998375fa8a7a131ae4b417 +31298e4c6793599bf0a99e0d6371657928266335c55a95cce842c61dff15cdba +631aa9551d39806c4096938d1a7e1acf331d85e37b187398eb4d2c62c318c8be +cc4dccd1daaf3fa100552d61c708f5cdd566c01d585169c74a9154c367465ea7 +57fc8bdf53ab46c253988c1a1242f34633d24b5caa7052dd00faed60da1146af +ccb585cd2749c3a3b95968cad9b725377bef409f96667fadeff87973d74f958c +c80e93359a41f110e95d499d1685de9f1e1e0effe69d58e8bc29f49ea9f8c43b +ef15ff2abc081a4f7693bed08e5c5b3a54b6c36327713e63e358022d671c43fa +a6a0e9e80221ed6718592866b2efef83d2b0e33c9c56fc6ea8ef6a2866b5efa1 +808de77675425477497566600226ebb43083e5633a7f93141d0d91bac153a355 +8334c96a550e965f85fc041ab51a04815a9e133e8daaf5f20eaa7a94e2e24438 +388439e9c4aa9fa62b090ea9e5b67de97bad13cae28e2190680b5e0857a17a88 +8b0ff787ce5b945b9fb0235094b4fb6728b357e0df4cfa77cf0ad5bc1b5961f7 +05652a5eace382323174c24aafd8f1e007a1df5b56ac28f88f709516bd87948d +c7ec9e4e9f053ff1f10c9161f0914e0db363eb6738e677873a2e084a71a84313 +94d9aa63d8e2d04a1cd96da21acc523b862cc161b55c1b39245c7c293891e48e +234f592d5bcad4aa2cb57c785ff62d7babced95f7b3bf4d993f63d7b4ce4d66f +ed8726926adfbd070af8d0d16bfe16f26f195564e8628a601fa7ab404f61f469 +c7b9a2c169e8a9afaa50478ec9befb350b7bb2d8bbcc164a69c3a1e3e692f26c +7be822b64215563ab23a7714991eb477bd878a7d1b8acc9115ff653fd6178add +65dff30b339beeeeef21a42fc3de70f9b03e16a6f44166014e0220266ce926ca +1e22d5bad10f0efe33fdaae98aced7ed395c1b2d38dc10cd3bec8dde46e339ec +8fda0f2bd109875ba3b710bdcf714e37d9c24c26377442ff5ec7b9c1c7cdccdf +c382bd6b89393132faad65702ebd73e8fbbf5e7b5a6f37dbbb269b751f72cfcf +32fa6bcba8ff98f534df6583e74dd4f7bca02c38e31860bb27bdfbd97f6475e6 +09785db0ff08ebe1ece0dd68d1cf1f6759304c4ad2317d1df1a3d6808eceb2b3 +5147763cb816be46b01bc374a6327b15fecda47ff7ac52d3c786e9e964987e64 +59b50afd0b4e8783d93c6b56c5c2556f55a81d98c36c4bc7008e166a7996e9d3 +7079fffa88034936709136564ae897154fe86adcbe7b0d9657e8ead5e097b9ed +251dd9810a35d84f4bede170ac34ee18400c071e448c76c2d1c18fa20b54c725 +96b12f5fe47b031d1aceeae79db74cc10134aed73e4d34da7737908a8e01535b +b63e853f61a33f8b99fb3a5bffc396aa81447c62fd3c426d41873e4f7aacb379 +994c0bde71ae4f4bcf2cc2b24fc67f169858bd25771cb5cc2f03953bce5a8430 +c1222c5d7ca2756d6219ef2b3fb737737e59d881a598b5cf6a034b741fd33a9b +894056eda79da1cfaa5abbc11cfaddf47762874ccac4ebac198fa84197bdd629 +c83fc36c3261206c19ee5c320943fb03ce05d14c4cc362c7b0bdeb7d3a25740c +094a815a354467807b587ed4d773f910596622cb29953986e82c70c1b0aa84f0 +40345b8fa71cfae979b08a7652caf7522fdf45f89eafef4539c95d475bf1074c +f819157b746c238e4989ad8eb649765437d3f963fae86e6494d361d32c7fa0c3 +1276b4ae78479a96076af15205dbb67d0ffd2c196933852f1e7fdf121e38ae59 +169f56d2b42b306fd7d24e70b4038279b411dab4dbb17ac3c77ba84a9dba8376 +fd89c4123685d75bf931b0872a9cda144a48534943f838671a2ee8c779e9f879 +0b4e5b91ec5f56687f4f435a483cd811583f685117c4d42d312b1b5f5556058d +6f63a5a65dd58f5ee2e25fb53dc458237e5378418cbc51dcb7eb4a29d6b2620e +0f38b57f84e1e1138c25fc8e5a951d86303ad7306755655640d877e8a47caa48 +fbf863f8047b785678e03abfd93061d02d93ef9be238dfbd72553fd524db1dec +9d0d278bb7f8792734b460d346ececa5d898578657e6664676e46615f78dbc4e +678d8bff12fe7544c9cd4c9c1dc2fd5b6b42a7169cb00afad9638e3e4f50893d +26527d8e64576adfa705770a67e0f8c64dda9cab74ea7af35a3b593f74ea40c0 +6627fb7d95f7dbb889c5c61f3f37f6348e8f5e6a2b3086763e865199d536fb31 +4766a4e31c0bbf84d974e0353923c1731bb5629c253636c5713ed79eb9917ce6 +9fa6079cdaa19b9d07d9fb35bd4d62b539b271a8be9db2d1fa0ab9e2251c33b5 +e10fd9d12f3a05f9dbb95edeca2adffd503fea3b72c874596295a75965acb229 +43dbfc71e2edb9b267378bc46f8f362e1b6d943bd153eb405be214ae6f34911f +b3cf2c3d4fa3af3e10fd07899ebdbdf4bbd4cbf857fc32bd433935e1e3c42bd4 +531f6184c6b8404e7de1c3444e4dd35e898f891deefb18e2eab324df04eda9e4 +fbe6f5f344bccb3e1a95f9956bbc5a45538603a5aae4e6a813c2bfb0bf7a351c +fbf62757c3ffbe7830981e2e29ee8ba6f5d26685391a9b1bd460a65a9df508bd +b0de45eb6913b397bf2bb04ed171a1a829f07e71dfe832499c35d96f101d59a1 +786eeb9d72297966a7bc9abcb40dffb4eaa1789ce547e8402a1b1f098ee8f66a +81213a639fb1e82f8623583814a83fa35a478c524909522f7d8951d34b1cb6e0 +83d8f69173914f955cd8683f266031e75468df8d262c9d98f8c980e55766f6e0 +0293e1bc84fdea0e260f42ecbbed26f642ca0439728e0a891f3a9cda9a6872bf +fb397f6b2da2970bad28a96b8e7aebbe15a6252b95db77a62f59a14c89deb9c4 +1dbcadf309f38ae02d6fd090a2194735e03728c7abe9fb04eb3176ea5ad8b613 +27aebd2fb39f7b64faf8187d84db47346c889624e891a6f4a8839025ba2c7c99 +ad3b7aeb196932470b753a2d9a47c81abd9be8589339e288e96b3d3a8b1a6cd1 +3442e32a597d06b247d4ae3a629413cdbd6459f43636c3cce04cd3b2441b4df3 +009fe66ebe2cd469b927d9ef75380cc4779ddc7907fd5c471fde8adfa6f5a166 +2189b019547f4f2b6a84c76fe5d12daf63b04be97f5cc9542df1fed0c9915049 +3c7869f3d8dfdb92bf057e09c2b5389cadffc49cfc3e6c625f6b6f5c0e3eafff +d847c57bc36b074dc180d22c796f723961837fbbb82d2f20ce9d2b4b9e965962 +83cf2f36fbfc92489f4efccdecb34c61c6cdbfff56055c8dd20322246c5ee7dc +b066ddda6a7173d9baf2f2e56b578a9b97573c545d585858fd05fd2b825e31c1 +dfe65664d1e515759ba57a3150274bf5418fdbdb28263e8215666c222eaf2fd1 +6b8ec8be5a898a2c897541bf1f23bd613f515cbef2e1aaca0da23b20161765d4 +6e17eba50657d0a3a0a5c2e56d94c4469f14101bfcbe6671eebc22315f7637ca +5240494a2810159f58bc58ccf7f8da505f509891218a73bd73e0ba51272fe54a +44f8afce2f51555280089dbcb9c1ed0f28cc2b222bbaf7d963bd3bd0e2716dc7 +786028ab7579eb45fa6675432f26fab74afe00a64a147d41a525a88809da308d +0641b5c1c6b97598e5a0e2f6044a1bbdc1429fbf51c8a8905a7c7e45446b8006 +bb242fb08ce67ea5abd55d2f96bbea1e91bc4fb82561217d105b5b25262508ec +0690dbdbeaf28091be0b421ba26a9630dbfb40b23ee907d692884f48696e26cb +9ae142b116d3e06e95bc636281c56f9dcbebf52962a334ea5221af3e23511fb8 +a63ec0e5d738d755ae796c5ecd46474525a2536843b324ea9f1ff30214b89cf7 +45fd97112af4d123f6c228dd7a03bf73ff0a3443c26c41a844ff724029601960 +11a00890cfe5d6f1ef9f1c49813a578b24d4090108f0cc7579da5cdb033a2178 +60a1dfe511f87741fdae8685dfb548e377226608dbd8bd8817be69b5f53f63b5 +c500d66fea3073bfd5f6d2b76e0c97d1260067036c801c801590f5ad9bf7f94b +e161039472fcd4b33ade36a69deaff1a78788cfc163ef6bf56ee5fa25f34e837 +e2bfa50d84c9d77dfb6fcc43f509185b6fc47f091865de2cbf97f95ab6fb9149 +1531bfac409c5754345f5ce59724b1d2d7a0b4b9b0cfacf205bdf52c3fcd11d7 +78eb0ab11cc5fcbc40015666063d13da8445ab20292081e605aedd8d36509a74 +53de86d000175a826420b11d21e00bfaeb24b6abd5c112da11ea7cde7a37e90b +20f36f9025daeb02e2da7519e8e9777995ed2522a51389b210f52b775494ad5e +be76c3f2156b1e5db3e1ef4454ad5ab361ada3b2525cb5ae425c2e3a97576c58 +5356f5e8f20ad15955817ce33098d82c6137dd8eb42bbbd89e369a99f4d2ceaf +68705c5837f6eea3b864a9a8b7d5d4ba02923873e635245ae7d37d9bd2e7acb6 +431c9c1c6f32d4116ce3b8d150d73286a76d0c4dd00d78f606f54628029c1853 +f7e7e83ff405fa3b9f33e464fe9d3d79ff0fffe8dd97dec8c59746cf40461eba +0f479f5fe9be5329bfd793bfcb6aa31c9ad965b5511ef57cdd6aa3d9fac0a4df +cbcbe2f7d512672f0ff49ab9d06c7e778eeeb1f5efb1dae8f90030dd0dba9fdf +d9232371e0f4ad463d4e8c3eb26318f88f4fdd7c8ddcacd0070e23a6bb8a89b6 +4961abed6e40216019602d602bc00b7812f00dc073805700c7003f07fc16f011 +e02a60d23ef40714029601d602b602bc802701df003c077805700cf073c06f01 +1f01ae02ea13b61406648a4757ad50886398e46f110ab17ca4422c97b98aab51 +28945d015928acdfee0d6c6fd6b1e2170ae9cc91d8438d440ddafc92a7b0d1a7 +e80fb58180fed0e25148851bff15a91dff1b40a0c987ece18260f65f92f59b3f +4c91abd95d2714d6293e3f44d433f467970986bd97dd4335dcc9140c7750a7f0 +bb8fc4c7ee8b9a46ef761aef47dec3f76e338fc17cf0ad348db627ee96cee2ba +cd3c363d783868d6fb9a84d17ba6f7f2f834f358ce4cd36378ac7d8bf4f8f111 +1fc5e01fd3f57b76d6e47d5d1d56f2b8a5678addd5189453b8562f954a7ecfd3 +cc63ffc0383de6ad7cdd58f91ad862e03b08be83e02be2edb71af824031fada9 +fe71ba422b5fbf093e2fb7239dafe97edbb5775713f6b90d7c31f0c5c09765be +968f4031f0d15de52c38bd287b942f710feb09031fe590d2e9fa5dd6b17a3b0d +f1b20d7cdba65f7b213611137b391fcd1dbb9f9caffb65acbc6f18f8e8a64677 +fe689b91ef00b7cdc2f303dd6b7ed3706f37e1bf1e833c7a29dd52a0d78f9577 +c8c0570fbefa9bf06d32f0518ef4806fbf70bd9fb771fd167eb7952e41ef365d +ef1793e12e342be07bf506eb2d55522555522555522555522555522555522555 +522555522555522555522555522555522555522555522555522555fef7cbff00 +b7513dc600500000 +EOF +fi + +echo "###### Modprobe softdog #######" +if ! modprobe softdog soft_margin=30 nowayout=1; then + echo "ERREUR de chargement de softdog. Fin de l'installation !" + exit 1 +fi + +echo "###### remontage R/W #######" + +remountw + +echo "###### extraction sbin/wdd #######" +# this block was generated with : "od -An -tx1 -vw32|tr -d ' '" +(sed -e 's/../x\0/g' | while read; do printf "${REPLY//x/\x}"; done | tar -C / -zxUpvf -) <<EOF +1f8b0800de741d400203ed934148146114c7bf5967dd3d986e60e1c16aa1ed54 +b1b3dbae8b8521b575296a646b2d82c45cc92652d09995a252fa9a6a9836840e +754c2528baeca9ec12c3ae641d82e8e425ea627d834451627b10a7f7cdace2a9 +5b1ee2fd868f37efbdfff7defbbe6186ce5de88f0ee772e41f22c52429959088 +e451b589153f968c250948a4543cbe27d912e7fa544b8a8425b20e68436af760 +384c060706d4bfe9ba7397c87fc8c8a1a387054158f57da486704f1d15838935 +ba040943ce63550d1abeda6b08e1cbcf63212fefc6ee430ed606f077c1aaade6 +4f1b5f3a0ae97ba29ced9894216f94628bb424b60e2e691573afeea81b692948 +9db0f6d3bcb264b4f1122c085b65d603a517c64e1a739dd90c1b0747b7ae0762 +96bd0f5e5ff1f1b28cc22b9d168f5d5ee8db4f61e345f0d92d2f48971d6db3e2 +eb9378428198f19a4e0721aa6e5704379a6543aeb48e5604b53ecb92bcb003c0 +6ec5ab63940b949f4266b22b0dea961a50043603ed8d4f4b2f8948c8af671916 +f77a56b34f21cbbe73c98cee5ce39107e0e88e1680b277e15581a7937d236ef7 +d68abb4975e32ce4753dd82eb38f646dcb13d596300d6fe91d78c293d00aaf2d +30fe1365d863b27698665e576022d4b5e7961da7d0bb70e66cd7db72214f1a5e +58f3fea2d0f0dc822b36be9a5d21f378a3d9d9640e379b23616713ff18b47233 +5fff7bd628b37e3e40137de3c0f6f2bbd1b2b158acb32db8aeb162ad3de55a9f +5d74addf7ee2da03f623d72af643d706ec31d78af61d6e1d3522b2dbdeb49369 +6816fbc04fe2334ac67b3edfd42988419f6cc6542375b48d4b88560fb754f2be +926e5ddda12f6a81719e99df666ee1b6206e95d9f8aa403466e7fd7c3c981b6a +99e9087c5cd9f82ccbac115a83dfb8331d09d2e950b9b8dbfeb1cce79bb019b7 +d15c6f3e3adcadf6f4e506ce93283972430caefc130241100441100441100441 +10044110044110044110044110044190f5e50f548527e700280000 +EOF + +echo "###### modif startup.rc #######" + +### startup.rc ### +ed -s /etc/startup.rc << "EOF" +1 +g/\/sbin\/wdd/d +$a +/bin/nice -n 10 /sbin/wdd +. +wq +EOF + +echo "###### modif config.rc #######" + +### config.rc ### +ed -s /etc/config.rc << "EOF" +1 +/^\(service\|section\)[ ]*system/ +kb +# on supprime une éventuelle occurence de modprobe softdog +'b+1,/^\(service\|section\|no service\|no section\)/g/^[ ]*modprobe.*softdog/d +# on supprime toutes les lignes vides jusqu'à la section suivante +'b+1,/^\(service\|section\|no service\|no section\)/g/^[ ]*$/d +'b +# et on recherche la dernière ligne autre qu'un commentaire avant la section suivante +/^\(service\|section\|no service\|no section\)/ +?^[^#]? +a + modprobe softdog soft_margin=30 nowayout=1 + +. +wq +EOF + +echo "###### démarrage du watchdog ######" + +killall wdd +/bin/nice -n -10 /sbin/wdd + +echo "###### remontage R/O #######" + +sync +remountr + +echo "###### terminé #######" diff --git a/wd/install-wdd.scr b/wd/install-wdd.scr new file mode 100644 index 0000000..602bf27 --- /dev/null +++ b/wd/install-wdd.scr @@ -0,0 +1,95 @@ +#!/bin/bash + +# ce script peut également être exécuté comme ceci: +# ssh -t access@na root@remote bash < $SCRIPT +# + +echo "###### checking /bin/nice ######" +if [ ! -x /bin/nice ]; then + echo "ERREUR : nice absent. Fin de l'installation !" + exit 1 +fi + +echo "###### Modprobe softdog #######" +if ! modprobe softdog soft_margin=30 nowayout=1; then + echo "ERREUR de chargement de softdog. Fin de l'installation !" + exit 1 +fi + +echo "###### remontage R/W #######" + +remountw + +echo "###### extraction sbin/wdd #######" +# this block was generated with : "od -An -tx1 -vw32|tr -d ' '" +(sed -e 's/../x\0/g' | while read; do printf "${REPLY//x/\x}"; done | tar -C / -zxUpvf -) <<EOF +1f8b0800de741d400203ed934148146114c7bf5967dd3d986e60e1c16aa1ed54 +b1b3dbae8b8521b575296a646b2d82c45cc92652d09995a252fa9a6a9836840e +754c2528baeca9ec12c3ae641d82e8e425ea627d834451627b10a7f7cdace2a9 +5b1ee2fd868f37efbdfff7defbbe6186ce5de88f0ee772e41f22c52429959088 +e451b589153f968c250948a4543cbe27d912e7fa544b8a8425b20e68436af760 +384c060706d4bfe9ba7397c87fc8c8a1a387054158f57da486704f1d15838935 +ba040943ce63550d1abeda6b08e1cbcf63212fefc6ee430ed606f077c1aaade6 +4f1b5f3a0ae97ba29ced9894216f94628bb424b60e2e691573afeea81b692948 +9db0f6d3bcb264b4f1122c085b65d603a517c64e1a739dd90c1b0747b7ae0762 +96bd0f5e5ff1f1b28cc22b9d168f5d5ee8db4f61e345f0d92d2f48971d6db3e2 +eb9378428198f19a4e0721aa6e5704379a6543aeb48e5604b53ecb92bcb003c0 +6ec5ab63940b949f4266b22b0dea961a50043603ed8d4f4b2f8948c8af671916 +f77a56b34f21cbbe73c98cee5ce39107e0e88e1680b277e15581a7937d236ef7 +d68abb4975e32ce4753dd82eb38f646dcb13d596300d6fe91d78c293d00aaf2d +30fe1365d863b27698665e576022d4b5e7961da7d0bb70e66cd7db72214f1a5e +58f3fea2d0f0dc822b36be9a5d21f378a3d9d9640e379b23616713ff18b47233 +5fff7bd628b37e3e40137de3c0f6f2bbd1b2b158acb32db8aeb162ad3de55a9f +5d74addf7ee2da03f623d72af643d706ec31d78af61d6e1d3522b2dbdeb49369 +6816fbc04fe2334ac67b3edfd42988419f6cc6542375b48d4b88560fb754f2be +926e5ddda12f6a81719e99df666ee1b6206e95d9f8aa403466e7fd7c3c981b6a +99e9087c5cd9f82ccbac115a83dfb8331d09d2e950b9b8dbfeb1cce79bb019b7 +d15c6f3e3adcadf6f4e506ce93283972430caefc130241100441100441100441 +10044110044110044110044110044190f5e50f548527e700280000 +EOF + +echo "###### modif startup.rc #######" + +### startup.rc ### +ed -s /etc/startup.rc << "EOF" +1 +g/\/sbin\/wdd/d +$a +/bin/nice -n 10 /sbin/wdd +. +wq +EOF + +echo "###### modif config.rc #######" + +### config.rc ### +ed -s /etc/config.rc << "EOF" +1 +/^\(service\|section\)[ ]*system/ +kb +# on supprime une éventuelle occurence de modprobe softdog +'b+1,/^\(service\|section\|no service\|no section\)/g/^[ ]*modprobe.*softdog/d +# on supprime toutes les lignes vides jusqu'à la section suivante +'b+1,/^\(service\|section\|no service\|no section\)/g/^[ ]*$/d +'b +# et on recherche la dernière ligne autre qu'un commentaire avant la section suivante +/^\(service\|section\|no service\|no section\)/ +?^[^#]? +a + modprobe softdog soft_margin=30 nowayout=1 + +. +wq +EOF + +echo "###### démarrage du watchdog ######" + +killall wdd +/bin/nice -n -10 /sbin/wdd + +echo "###### remontage R/O #######" + +sync +remountr + +echo "###### terminé #######" @@ -1,5 +1,5 @@ /* - * wdd - simple watchdog daemon - 2003 - willy tarreau + * wdd - simple watchdog daemon - 2003-2004 - willy tarreau */ #include <stdio.h> @@ -10,6 +10,57 @@ const char dev_wd_str[] = "/dev/watchdog"; const char root_str[] = "/"; +/* + * This function checks if the system can allocate memory + * In case of failure, we exit so that the watchdog device + * notices it and can reboot. + */ +static inline void try_malloc() { + void *heap; + + heap = (void*)sbrk(NULL); + if (brk(heap + 4096)) + exit(1); + memset(heap, 0, 4096); + if (brk(heap)) + exit(1); +} + +/* + * This function checks if the system can fork + * In case of failure, we exit so that the watchdog device + * notices it and can reboot. + */ +static inline void try_fork() { + int pid; + pid = fork(); + if (pid < 0) /* exit on error */ + exit(1); + else if (pid == 0) /* child returns cleanly */ + exit(0); + if (waitpid(pid, NULL, 0) != pid) /* father checks child */ + exit(1); +} + + +/* + * This function checks if the system can access its root FS + * In case of failure, we exit so that the watchdog device + * notices it and can reboot. + */ +static inline void try_stat() { + void *heap; + + heap = (void*)sbrk(NULL); + if (brk(heap + sizeof (struct stat))) + exit(1); + memset(heap, 0, sizeof (struct stat)); + if (stat(root_str, heap) == -1) + exit(1); + if (brk(heap)) + exit(1); +} + int main (void) { int dev; @@ -29,6 +80,9 @@ int main (void) { close(dev); dev = -1; } + try_malloc(); + try_fork(); + try_stat(); /* avoid a fast loop */ sleep(1); } |