nimectos <tt4g-x...@dea.spamcon.org> wrote: >Steffen Schwigon <s...@renormalist.net> wrote: > >>nimectos <tt4g-x...@dea.spamcon.org> writes: >>> I want to point CPAN or some tool to the module .tar.gz files I want >>> to add, and get them installed. >> >>If you already have the .tgz files,then you just need to unpack them by >>yourself and then use cpan . inside such a subdir: >> >> cd /tmp/ >> tar xzf Some-Lib.tar.gz # or -Z/-j for unzip/bunzip2 etc. >> cd /tmp/Some-Lib >> cpan . >> >>Kind regards, >>Steffen > >Thank you SO much - that's the solution I needed! I did see "cpan ." in >the man CPAN page but it immediately talks about downloading dependencies >so I'd skipped it thinking it was little different than regular cpan use. > >I came up with this for my current simple needs of a handful of packages, >with no dependencies I don't already have installed, all are .tar.gz, and >I only need installs, not upgrades: > >for MOD_ARCHIVE in *.tar.gz >do > ARCH_CONTENT=`tar -xzvf $MOD_ARCHIVE 2> /dev/null` > [ $? -ne 0 ] && echo "ERROR: Could not extract $MOD_ARCHIVE, >skipping." && continue > ARCH_DIR=`echo "$ARCH_CONTENT" | head -1 | sed -r 's_^([^/]+)/.*_\1_'` > [ $? -ne 0 -o "$ARCH_DIR" == "" ] && echo "ERROR: Could not determine >archive dir for $MOD_ARCHIVE, skipping." && continue > pushd $ARCH_DIR &> /dev/null > MOD_NAME=`grep -hP "^[ \t]+'*NAME'*[ \t]*=>" * 2> /dev/null | sed -r >"s/.*NAME.*[^']+'([^']+)'.*/\1/" | sed -r >"s/.*NAME.*.*q\[([^]]+)\].*/\1/"` > [ $? -ne 0 -o "$MOD_NAME" == "" ] && echo "ERROR: Could not determine >module name for $MOD_ARCHIVE, skipping." && popd &> /dev/null && continue > CHECK_CMD="use $MOD_NAME; exit 0;" > perl -e '$CHECK_CMD' &> /dev/null > if [ $? -eq 0 ] > then > echo "Already installed: $MOD_NAME" > else > echo "Installing: $MOD_NAME from $MOD_ARCHIVE ..." > nice cpan . >> ../cpan-stdout.log 2>>../cpan-stderr.log > [ $? -ne 0 ] && echo "ERROR: 'cpan .' returned error doing >$MOD_NAME, see *.log." > fi > popd &> /dev/null >done > > >
Correcting myself: change two CHECK lines to this: CHECK_CMD="perl -e 'use $MOD_NAME; exit 0;' &> /dev/null" eval $CHECK_CMD