[et-mgmt-tools] Cobbler reposync cron script
Michael DeHaan
mdehaan at redhat.com
Fri Jun 13 13:30:49 UTC 2008
Adrian Revill wrote:
> Not sure where to post this.
>
> I think i have found a problem in cobbler reposync.
>
> Sometimes if a rpm is partially downloaded and /usr/bin/reposync is stopped,
> say by a collegue rebooting the server, grrr.
> /usr/bin/reposync wont continue and throws an error untill the file is
> deleted. e.g.
> Traceback (most recent call last):
> File "/usr/bin/reposync", line 264, in ?
> main()
> File "/usr/bin/reposync", line 245, in main
> path = repo.getPackage(pkg)
> File "/usr/lib/python2.4/site-packages/yum/yumRepo.py", line 652, in
> getPackage
> cache=cache
> File "/usr/lib/yum-plugins/rhnplugin.py", line 299, in _getFile
> raise yum.Errors.RepoError, \
> yum.Errors.RepoError: failed to retrieve
> getPackage/openoffice.org-impress-2.0.4
> -5.4.17.1.x86_64.rpm from rhel-x86_64-server-productivity-5
> error was [Errno 9] Requested Range Not Satisfiable
> cobbler reposync failed
>
>
> This is not caught by my script because cobbler terminates with a return
> code of 0, but cobbler knows it has failed.
>
> Looking at action_reposync.py
>
> rc = sub_process.call(cmd, shell=True)
> if rc !=0:
> raise CX(_("cobbler reposync failed"))
>
> The return code from /usr/bin/reposync is being caught, but it looks like
> what ever handles the exception raised does not pass it on.
> Sorry my python is non existant so i cant follow it any further, any one
> know how to make a quick fix?
>
>
>
>
>
>
>
>
> Adrian Revill wrote:
>
>> Yes feel free to add it.
>>
>> I tried the change to use "cobbler list repo" and it works fine.
>>
>>
>> Michael DeHaan wrote:
>>
>>> Adrian Revill wrote:
>>>
>>>> Just in case anyone needs a script to run cobbler reposync from cron,
>>>> here is one i have written. It runs each repo in turn, and gives each
>>>> a number of tries (10) to over come problems with failing syncs.
>>>>
>>>> #!/bin/bash
>>>>
>>>> TRIES=10 # number of times to try and run reposync
>>>> LOGFILE="/var/log/cobbler/cobbler_reposync.log"
>>>>
>>>> function running {
>>>> PID=$(ps ax| awk '/cobbler reposync/ && !/awk/ {print ($1)}')
>>>> if [ -z $PID ]
>>>> then
>>>> log "cobbler reposync is not running"
>>>> return 1
>>>> fi
>>>> log "cobbler reposync is running PID=$PID"
>>>> return 0
>>>> }
>>>>
>>>> function log {
>>>> logger -t "COBBLER_REPOSYNC" -- $1
>>>> }
>>>>
>>>> function run {
>>>> try=1
>>>> ret=1
>>>> while [ $try -le $TRIES ]
>>>> do
>>>> running
>>>> ok=$?
>>>> if [ $ok -eq 0 ]
>>>> then
>>>> log "Already running, aborting"
>>>> break
>>>> fi
>>>> log "Attempt $try for $1"
>>>> cobbler reposync --only=$1 2>&1 >> $LOGFILE
>>>> ret=$?
>>>> if [ $ret -eq 0 ]
>>>> then
>>>> break
>>>> fi
>>>> log "Attempt $try failed"
>>>> try=$[ $try + 1 ]
>>>> done
>>>> if [ $ret -eq 0 ]
>>>> then
>>>> log "Compleated $1"
>>>> else
>>>> log "Too many trys or already running, giving up on $1"
>>>>
>>>> fi
>>>> }
>>>>
>>>> log "Starting"
>>>> mv $LOGFILE $LOGFILE.1
>>>>
>>>> for name in $(awk '/name:/ {print($2)}' /var/lib/cobbler/repos)
>>>> do
>>>> run $name
>>>> done
>>>>
>>>> _______________________________________________
>>>> et-mgmt-tools mailing list
>>>> et-mgmt-tools at redhat.com
>>>> https://www.redhat.com/mailman/listinfo/et-mgmt-tools
>>>>
>>> Nice! Do you mind if I put this in a 'contrib' directory in cobbler's
>>> version control so other people can find it later?
>>>
>>> We can mention this on the Wiki too.
>>>
>>> One small change I'd make is to make the last awk line run 'cobbler repo
>>> list' instead of grepping the file, that way
>>> it works regardless of the storage backend -- though everyone pretty
>>> much uses the stock one.
>>>
>>> --Michael
>>>
>>> _______________________________________________
>>> et-mgmt-tools mailing list
>>> et-mgmt-tools at redhat.com
>>> https://www.redhat.com/mailman/listinfo/et-mgmt-tools
>>>
>>>
>>>
>>
>
>
Please file bugs in Trac here: https://fedorahosted.org/cobbler, and
I'll take a look at it.
--Michael
More information about the et-mgmt-tools
mailing list