overnight upgrade interrupted by questions

Chris Whitehouse cwhiteh at onetel.com
Tue Apr 15 20:46:27 UTC 2008


Mel wrote:
> On Tuesday 15 April 2008 15:26:42 Edward Ruggeri wrote:
>> A lot of people would reply that they'd like to configure the ports
>> themselves before launching the installation, leading people to
>> suggest scripts such as:
>>
>> #!/bin/sh
>> plist=`pkg_version -ovl'<' |awk '{ print $1 }'`
>> for porg in $plist ; do
>>     cd  /usr/ports/${porg} && make config-recursive
>> done
> 
> Sorry to disappoint you, but that wont work for two reasons:
> 1) make config-recursive is flawed by design, because it makes a dependency 
> list based on current settings and if you alter dependencies during your 
> recursive configuring, it will not update the list.
> 
> 2) If you hit an interactive configure (not config, configure) target, then 
> you will still end up with a dialog. Prime example: print/ghostscript-gpl.
> 
> If you wanted to script the first case, you'd do the following in every origin 
> that needs updating:
> #!/bin/sh
> 
> VISITED=
> 
> config_port() {
>         local ldeps rdeps bdeps
>         ldeps=`make -V LIB_DEPENDS`
>         rdeps=`make -V RUN_DEPENDS`
>         bdeps=`make -V BUILD_DEPENDS`
> 
>         make config-conditional
>         for dep in ${ldeps} ${rdeps} ${bdeps}; do
>                 dir=${dep##*:}
>                 case ${VISITED} in
>                         *" ${dir}"*)
>                         ;;
>                         *)
>                         echo "---> $dir"
>                         VISITED="${VISITED} ${dir}"
>                         cd ${dir}
>                         config_port
>                 esac
>         done
> }
> 
> config_port
> 
This process has always worked for me upgrading a fairly standard 
desktop machine:

Get a list of status of installed ports
portmanager -s > somelist

Extract list of category/port needing updating, with vi, whatever

Do something like [sorry not exact syntax as I don't have access to a 
freebsd machine]:
foreach i (`cat portlist`)
foreach? cd /usr/ports/$i && make config
foreach? end

I've never installed print/ghostscript-gpl so I don't know if my method 
would break with it, but I do have to obviously treat java/jdk15 specially.

Chris


More information about the freebsd-questions mailing list