Using pkg updating without /usr/ports [SOLVED]

Miroslav Lachman 000.fbsd at quip.cz
Sat Jan 2 09:31:36 UTC 2016


Miroslav Lachman wrote on 12/20/2015 09:30:
> olli hauer wrote on 12/19/2015 20:48:
>> On 2015-12-19 17:54, Miroslav Lachman wrote:
>>> David Wolfskill wrote on 12/19/2015 14:46:
>>>> On Sat, Dec 19, 2015 at 02:26:47PM +0100, Miroslav Lachman wrote:
>> ...
>>> pkg update and pkg upgrade works fine for me too, but pkg updating
>>> not. pkg updating is intended to read /usr/ports/UPDATING file and
>>> compare its content to installed packages and show important messages
>>> before running `pkg upgrade`.
>>> But UPDATING file is not automatically synchronised between build
>>> server and 'client' (machine where I need to run `pkg updating`).
>>>
>>
>> Absolute crude hack, but maybe works for you.
>> Please note the port is absolute not supported and breaks many porting
>> rules ...
>> Instead installing the file on the servers to /usr/ports it can be
>> installed anywhere and then use `pkg updating -f $file'
>> It should be also the first port that is updated before all other ports
>>
>>
>> on you build host:
>> $ mkdir /usr/ports/misc/updating
>>
>> cat > /usr/ports/misc/updating/Makefile << _EOF
>> PORTNAME=       updating
>> PORTVERSION!=   /bin/date -j "+%Y%m%d.%H%M"
>> CATEGORIES=     misc
>> MASTER_SITES=   # none
>> DISTFILES=      # none
>>
>> MAINTAINER=     updating at example.org
>> COMMENT=        UPDATING info
>>
>> LICENSE=        BSD2
>>
>> NO_BUILD=       yes
>> WRKSRC=         ${WRKDIR}/UPDATING
>> SRC=            ${PORTSDIR}/UPDATING
>>
>> PLIST_FILES=    ${PORTSDIR}/UPDATING
>> PLIST_DIRS=     ${PORTSDIR}
>>
>> do-extract:
>>          @${DO_NADA}
>>
>> do-install:
>>          @${MKDIR} ${STAGEDIR}/${PORTSDIR}
>>          ${INSTALL_DATA} ${PORTSDIR}/UPDATING ${STAGEDIR}/${PORTSDIR}
>>
>> .include <bsd.port.mk>
>> _EOF
>>
>>
>> cat > /usr/ports/misc/updating/pkg-descr << _EOF
>> ports UPDATING file
>> _EOF
>
> Really nice hack! :) Maybe I will give it a try.
> The only other workaround I found is copy UPDATING by scp or rsync from
> build servers to "clients" periodically by cron job.
>
> Miroslav Lachman

I solved it by poudriere hook in /usr/local/etc/poudriere.d/hooks/bulk.sh

---------------------------
event=$1

if [ "$event" == "done" ]; then
         ports_tree=$(poudriere ports -l -q | awk '$1 == "'$PTNAME'" { 
print $5 }')

         cp "$ports_tree/UPDATING" $PACKAGES_ROOT/

fi
---------------------------

This part of script just puts the copy of UPDATING in to web accessible 
directory with packages after build is done.

Then on client machines I have to run pkg_updating.sh manually or from cron:

---------------------------
#!/bin/sh

repo_conf="/usr/local/etc/pkg/repos/codelab.conf"
ports_dir="/usr/ports"

url_base=$(awk '{ if ($1 == "url:") { gsub(/[",]/, ""); print $2 } }' 
$repo_conf)

if [ ! -d "$ports_dir" ]; then
         mkdir $ports_dir
fi

fetch -q -r -o "$ports_dir/UPDATING" "$url_base/UPDATING"
---------------------------

So `pkg updating` is working for me now.

Miroslav Lachman


More information about the freebsd-ports mailing list