[pacman-dev] multiple extraction from package

Andrew Fyfe andrew at neptune-one.net
Fri Jul 13 15:47:02 EDT 2007


Aaron Griffin wrote:
> On 7/11/07, Xavier <shiningxc at gmail.com> wrote:
>> On Wed, Jul 11, 2007 at 09:53:49PM +0100, Andrew Fyfe wrote:
>>> But back to the point, I think we need a temporary directory
>>> (mkdtemp(/tmp/XXXXXXX)) where we put install and changelog before we
>>> commit a package to the database. Looking at this from the point of view
>>> of a normal db I would never enter the install file before I've actual
>>> created a valid entry for the package (the desc file).
>>>
>> Initially, I wanted to try avoiding extracting stuff to /tmp/ , influenced by
>> the following comment in package.c :
>> 544   /* TODO there is no reason to make temp files to read
>> 545    * from a libarchive archive, it can be done by reading
>> 546    * directly from the archive
>> 547    * See: archive_read_data_into_buffer
>> 548    * requires changes 'parse_descfile' as well
>> 549    * */
>>
>> But since these files are used again later, I think I would prefer what you
>> just said, keeping files like install and changelog somewhere in /tmp/ , and
>> then moving them only when the entry is created. I agree totally :)
> 
> The comment above is not taking into account that it's done multiple
> times.  I think extracting to a temp dir might be subtly problematic,
> but may open up more opportunities for us later.
> 
> For instance, if we extract to /tmp/foo/ first, we get the benefit of
> not having to run entirely through the archive twice to check tarball
> integrity.  In addition, it allows us to stay slightly more
> transactional in the sense that we can extract to /tmp, do all the
> fs-to-fs comparisons and then simply dump the temp extraction to the
> root dir.
> 
> Actually, this could (hah) clean up some of the directory-symlink issues too.
> 
> Just some food for thought.
> 
> _______________________________________________
> pacman-dev mailing list
> pacman-dev at archlinux.org
> http://archlinux.org/mailman/listinfo/pacman-dev

My original idea for the temp dir was to only use it for the meta data 
files. But thinking about it extracting the whole package to a tmp dir 
means we wouldn't need to extend .FILELIST (pacman could generate a more 
detailed filelist at install time). If I remember correctly this is how 
dpkg installs a package, it 1st extracts the package to a temp dir, 
checks conflicts, then copies the new files into place.

I've started writing do a detailed list/description of how pacman should 
install a package, I'll try and get it finished this weekend and post it 
here.

Andrew




More information about the pacman-dev mailing list