How to remove the large directory after build ?

Jian Lee lijian.gnu at gmail.com
Tue Jun 23 02:34:56 UTC 2009


Mike McLean <mikem at redhat.com> writes:

There were much work to do recently, I haven't resolved this question. I
just remove those large rootdir manually. It's too silly. :)

I've see the kojid source code :

-----------------------------------------------------------------------------------------
 741                 #note: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=192153)
 742                 #If rpmlib is installing in this chroot, removing it entirely
 743                 #can lead to a world of hurt.
 744                 #We remove the rootdir contents but leave the rootdir unless it
 745                 #is really old
 746                 if age > 3600*24:
 747                     #dir untouched for a day
 748                     self.logger.info("Removing buildroot: %s" % desc)
 749                     if topdir and safe_rmtree(topdir, unmount=True, strict=False) != 0:
 750                         continue
 751                     #also remove the config
 752                     try:
 753                         os.unlink(data['cfg'])
 754                     except OSError, e:
 755                         self.logger.warn("%s: can't remove config: %s" % (desc, e))
 756                 elif age > 120:
 757                     if rootdir:
 758                         try:
 759                             flist = os.listdir(rootdir)
 760                         except OSError, e:
 761                             self.logger.warn("%s: can't list rootdir: %s" % (desc, e))
 762                             continue
 763                         if flist:                                                                                    
 764                             self.logger.info("%s: clearing rootdir" % desc)                                          
 765                         for fn in flist:                                                                             
 766                             safe_rmtree("%s/%s" % (rootdir,fn), unmount=True, strict=False)
 767                 else:
 768                     self.logger.debug("Recent buildroot: %s: %i seconds" % (desc,age))
==============================================================================================

The 3600*24 must be mean 24 hours, but the 120 mean what ?

and , There are code following:

-----------------------------------
 801             # see if there's a dir for the buildroot                                               
 802             vardir = "/var/lib/mock/%s" % name                                                   
 803             #XXX
 804             buildroots[id] = {}
 805             buildroots[id]['name'] = name
 806             buildroots[id]['cfg'] = fn
 807             buildroots[id]['dir'] = None
 808             if os.path.isdir(vardir):
 809                 buildroots[id]['dir'] = vardir
 810         return buildroots
===============================================================

I've not use the /var/lib/mock, and I's not a link to /dist/mock. My
kojid.conf have following configure:

--------------------------------
; The directory root where work data can be found from the koji hub
topdir=/data/koji

; The directory root for temporary storage
workdir=/tmp/koji

; The directory root for mock
mockdir=/dist/mock

; The user to run as when doing builds
mockuser=kojibuilder
==============================================

Is the /var/lib/mock must exits and point to the mockdir ? And wheather
the kojid remove chrootdir use mockuser privilige ?


Thanks,


> 李建 wrote:
>> Now ,the directory is:
>> -----------------------------------------
>> [root at localhost mock]# du -hs *
>> 651M    gtes11.2-build-10-9
>> 18M     gtes11.2-build-13-10
>> 5.6M    gtes11.2-build-15-15
>> 549M    gtes11.2-build-1-6
>> 5.5M    gtes11.2-build-16-15
>> 18M     gtes11.2-build-18-18
>> 18M     gtes11.2-build-19-18
>
> Due to a potentially dangerous bug in rpmlib [1], kojid removes the
> mockdir directories in two stages.
>
> First the buildroot (e.g. gtes11.2-build-16-15/root)is cleared of
> content, but the directory itself (as well the mock results dir)
> remains. This clearing occurs almost immediately after most builds,
> but is delayed four hours for failed builds.
>
> After 24 hours, the entire mock directory for the chroot is removed.
> This allows any stray rpm transactions plenty of time to exit. This
> may seem like an extreme wait, but the consequences of triggering the
> rpm bug are very, very bad.
>
> [1] https://bugzilla.redhat.com/show_bug.cgi?id=192153
>
> It appears that at least some of these directories (e.g. the 18M ones)
> are still in that 24 hour wait. As for the others, I cannot be sure
> from this small amount of data.
>
> ...
>> Why ? Because I use a special disk space,and I use Selinux, So I modified
>> the /var/lib/mock to /dist/mock on kojihub and kojiweb and kojibuilder3
>> host. but the kojibuilder2's mock directory is /var/lib/mock ,a link to
>> /dist/mock on it's host.
>>
>> the kojihub and kojiweb and kojibuilder3's /mnt/koji directory is modified
>> to /data/koji also . but the other kojibuilder*'s directory is /mnt/koji by
>> nfs mount.
>>
>> Why ? It isn't change or removed after 1 days.
>
> As pointed out above, it is normal for koji's mock directories to
> survive (in a stripped form) for up to 24 hours. If the problem
> persists, I recommend cranking up the debugging on kojid and watching
> the logs (look for lines containing rootdir or buildroot).
>
> --
> Fedora-buildsys-list mailing list
> Fedora-buildsys-list at redhat.com
> https://www.redhat.com/mailman/listinfo/fedora-buildsys-list
>

-- 

Jian Lee
MSN : lijian.gnu at gmail.com




More information about the Fedora-buildsys-list mailing list