Package: yaird
Version: 0.0.12-8asd5
Followup-For: Bug #337279

The attached patch, suitable for inclusion in debian/patches, tests if
there are less than 1024 free inodes on the target and, if so, switches
to using /tmp to build the initrd instead.

An additional dependency on libfilesys-statvfs-perl needs to be added to
debian/control.

PS: Honestly, despite writing this patch, I suggest that you just change
it to always use /tmp.

[The asd5 is my local rebuild including this patch ]

-- System Information:
Debian Release: 3.1
  APT prefers stable
  APT policy: (500, 'stable'), (100, 'unstable')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.15-1-686-smp
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)

Versions of packages yaird depends on:
ii  cpio                       2.5-1.3       GNU cpio -- a program to manage ar
ii  dash                       0.5.2-5       The Debian Almquist Shell
ii  libc6                      2.3.2.ds1-22  GNU C Library: Shared libraries an
ii  libhtml-template-perl      2.6-2         HTML::Template : A module for usin
ii  libparse-recdescent-perl   1.94-4        Generates recursive-descent parser
ii  perl                       5.8.4-8sarge3 Larry Wall's Practical Extraction 

yaird recommends no packages.

-- no debconf information
Index: yaird-0.0.12/perl/Pack.pm
===================================================================
--- yaird-0.0.12.orig/perl/Pack.pm      2006-03-22 14:45:44.000000000 -0500
+++ yaird-0.0.12/perl/Pack.pm   2006-03-22 14:53:29.000000000 -0500
@@ -33,6 +33,8 @@
 use strict;
 use warnings;
 use File::Temp;
+use Filesys::Statvfs ();
+use File::Basename ();
 use Base;
 use Image;
 
@@ -60,11 +62,12 @@
                Base::fatal ("there were errors in this run, aborting now 
without output");
        }
 
-       #
-       # Temp based on destination,to increase likelyhood
-       # of rename being atomic.
-       #
-       my $template = "$destination.XXXXXXXXXXXXXXXX";
+       # If there are enough free inodes on the destination file system
+       # (we'll assume 1024 to be enough), use the destination file system
+       # to facilitate atomic moves. Otherwise, use /tmp.
+       my $dest_dir = File::Basename::dirname($destination);
+       my $template = ((Filesys::Statvfs::statvfs($dest_dir))[7] < 1024)
+               ? "/tmp/yaird.XXXXXXXXXXXXXXXX" : 
"$destination.XXXXXXXXXXXXXXXX";
        my $tempdir = File::Temp::tempdir ($template, CLEANUP => 1);
        $image->buildHere ($tempdir);
 

Reply via email to