From: <ar...@sy...> - 2007-12-18 13:49:54
|
Author: arighi Date: 2007-12-18 07:49:44 -0600 (Tue, 18 Dec 2007) New Revision: 4369 Modified: trunk/initrd_source/skel/etc/init.d/functions Log: - fix: correctly auto-detect a staging directory for the BitTorrent tarball using the "df" implementation in BusyBox 1.8.1. The df included in BusyBox 1.8.1 is not able to get the statfs() informations of a mounted filesystem if a subdirectory is passed as argument, it requires the exact mountpoint instead. This fix extracts the mountpoints from the output of df and use them to find a valid directory to stage the BitTorrent tarball. Modified: trunk/initrd_source/skel/etc/init.d/functions =================================================================== --- trunk/initrd_source/skel/etc/init.d/functions 2007-12-17 13:21:12 UTC (rev 4368) +++ trunk/initrd_source/skel/etc/init.d/functions 2007-12-18 13:49:44 UTC (rev 4369) @@ -518,8 +518,9 @@ return fi - # List of preferred staging directory (/tmp = ramdisk staging) - preferred_dirs="/tmp /a/tmp `df 2>/dev/null | sed '1d' | sed 's/[[:space:]]\+/ /g' | cut -d' ' -f6`" + # List of preferred staging directory (first entry is / that means we're trying to stage in tmpfs) + preferred_dirs=`df -k 2>/dev/null | grep -v "^\/\|dev" | sed '1d' | sed 's/[[:space:]]\+/ /g' | cut -d' ' -f6` + fs_space=`df -k 2>/dev/null | grep -v "^\/\|dev" | sed '1d' | sed 's/[[:space:]]\+/ /g' | cut -d' ' -f4` # Use a breathing room of 100MB (this should be enough for a lot of cases) breathing_room=102400 @@ -528,8 +529,10 @@ torrent_size=$((`/bin/torrentinfo-console $torrent | sed -ne 's/^file size\.*: \([0-9]\+\).*$/\1/p'` / 1024 + $breathing_room)) # Find a directory to host the image tarball + i=1 for dir in $preferred_dirs; do - dir_space=`df $dir 2>/dev/null | sed '1d' | sed 's/[[:space:]]\+/ /g' | cut -d' ' -f4` + dir_space=`echo $fs_space | cut -d' ' -f$i` + i=$(($i + 1)) [ -z $dir_space ] && continue [ $torrent_size -lt $dir_space ] && echo $dir && return done |