/[clonezilla-sysresccd]/trunk/create-clonezilla-sysresccd/files/imginfo
ViewVC logotype

Annotation of /trunk/create-clonezilla-sysresccd/files/imginfo

Parent Directory Parent Directory | Revision Log Revision Log


Revision 47 - (hide annotations)
Thu May 20 12:12:53 2010 UTC (13 years, 11 months ago) by sng
File size: 9707 byte(s)
adding release scripts

1 sng 47 #!/bin/bash
2     ##############################################################################
3     # #
4     # imginfo, (C) 2007-2010 S. Georgaras <sng@hellug.gr> #
5     # #
6     # This file is part of Clonezilla-SysRescCD. #
7     # #
8     # Clonezilla-SysRescCD is free software: you can redistribute it and/or #
9     # modify it under the terms of the GNU General Public License as published #
10     # by the Free Software Foundation, either version 2 of the License, or #
11     # (at your option) any later version. #
12     # #
13     # Clonezilla-SysRescCD is distributed in the hope that it will be useful, #
14     # but WITHOUT ANY WARRANTY; without even the implied warranty of #
15     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
16     # GNU General Public License for more details. #
17     # #
18     # You should have received a copy of the GNU General Public License along #
19     # with Clonezilla-SysRescCD. If not, see <http://www.gnu.org/licenses/>. #
20     # #
21     ##############################################################################
22     # DEBUG=true
23     versionNumber='0.1'
24    
25     function readImage(){
26     # set -x
27     # n="${partElm[$oCount]}"
28     n="$1"
29     tmp="$(dirname "$n")"
30     validateImage "$tmp" || {
31     ((oCount++))
32     return 1
33     }
34     img[$count]="$(basename "$tmp")"
35    
36     [ -r "$(dirname "$n")"/disk ] && {
37     hasDisk=1
38     type[$count]=disk
39     tmp="$(dirname "$n")"/disk
40     activeItem[$count]=$(cat "$tmp")
41     partCount=$(cat "$(dirname "$n")"/parts | awk '{print NF}')
42     tmp=$(dirname "$n")
43     diskSizeFromImage[$count]=$(getDiskSizeFromImage "$tmp")
44     id[$count]="Image: ${img[$count]}, ${type[$count]}: ${activeItem[$count]}"", size: ${diskSizeFromImage[$count]}, parts: $partCount"
45     # scan parts
46     pCount=1
47     tmpImg="${img[$count]}"
48     while [ $pCount -le $partCount ];do
49     ((count++))
50     img[$count]="$tmpImg"
51     type[$count]=part
52     activeItem[$count]=$(cat "$n" | awk '{for(i=1;i<=NF;i++) print $i}' | sed -n ""$pCount"p")
53     calcInputSize "$tmp" "${activeItem[$count]}"
54     imagePartitionSize[$count]="$THIS_INPUT_SIZE"
55     partitionIdName[$count]=$(getPartitionIdNameFromImage "$tmp" "${activeItem[$count]}")
56     ((pCount++))
57     id[$count]=" ${type[$count]}: ${activeItem[$count]}, size: ${imagePartitionSize[$count]}, type: ${partitionIdName[$count]}"
58     done
59     } || {
60     type[$count]=part
61     activeItem[$count]=$(cat "$n")
62     partCount=1
63     calcInputSize /"$tmp" "${activeItem[$count]}"
64     imagePartitionSize[$count]="$THIS_INPUT_SIZE"
65     partitionIdName[$count]=$(getPartitionIdNameFromImage "$tmp" "${activeItem[$count]}")
66     id[$count]="Image: ${img[$count]}, ${type[$count]}: ${activeItem[$count]}, size: ${imagePartitionSize[$count]}, type: ${partitionIdName[$count]}"
67     }
68     imgCount="$count"
69     ((count++))
70     ((oCount++))
71     }
72    
73    
74     function findImages(){
75     # <- folder to scan
76     #
77     # -> selectedInputImage - Number (index) in img array
78     # -> selectedInputImageSize - Size of disk / partition
79     # -> selectedInputImageID - Number - Partition ID (if user selected partition)
80     #
81     # -> imgCount - Number of images found
82     # -> partCount - Number of partitions found
83     #
84     # -> img - image name
85     # -> type - image type (partition/disk)
86     # -> activeItem - name of partition/disk
87     # -> imagePartitionSize - size of partition
88     # -> diskSizeFromImage - disk size
89     # -> partitionIdName - partition id in words
90     # -> id - description
91    
92     imgCount=0
93     partCount=0
94    
95     local count=1
96     local n
97     local tmp
98     local pCount
99     local tmpImg
100     local hasDisk=0
101     # set -x
102    
103     allParts="$(find -L "$1" -mindepth 2 -maxdepth 2 -name parts | sed 's|^\./||' 2>/dev/null)"
104    
105     psCount=1
106     partElm[$psCount]="$(echo "$allParts" | sed -n ""$psCount"p")"
107     while [ -n "${partElm[$psCount]}" ];do
108     ((psCount++))
109     partElm[$psCount]="$(echo "$allParts" | sed -n ""$psCount"p")"
110     done
111    
112     oCount=1
113     while [ "$oCount" -lt "$psCount" ];do
114     readImage "${partElm[$oCount]}"
115     done
116     # exit
117     [ $imgCount -eq 0 ] &&{
118     local msgType
119     [ -z "${CD[$selectedInputPartitionNumber]}" ] && msgType=Partition || msgType=CD-ROM
120     if [ -n "$(echo "$selectedInputPartition" | grep '/')" ];then
121     msgType=Folder
122     selectedInputPartition=/"$selectedInputPartition"
123     fi
124    
125     if [ -z "$onSubDirs" ];then
126     setterm -bold on
127     echo -n "No image files found in: "
128     setterm -foreground magenta
129     echo -n "$startDir"
130     setterm -foreground white
131     setterm -bold off
132     echo ' '
133     fi
134     exit 1
135     }
136    
137    
138     setterm -bold on
139     echo -n "Image files found in: "
140     setterm -foreground magenta
141     echo "$startDir"
142     setterm -foreground white
143     setterm -bold off
144     count=1
145     until [ -z "${id[$count]}" ];do
146     echo " ${id[$count]}"
147     ((count++))
148     done
149     }
150    
151     function getPartitionIdNameFromImage(){
152     local id=$(grep "$2" "$1"/*pt.sf | sed 's|.*Id= *||' | sed 's|,.*$||')
153     sfdisk -T |sed 's|^[ ]||' | grep -e "^$id[ \t]" | sed "s|^$id *||"
154     }
155    
156     function getDiskSizeFromImage(){
157     local lin=$(awk 'BEGIN{FS="="
158     count=0}
159     {if (count==0) b=$2
160     else{
161     b=b" * "
162     b=b$2
163     }
164     count++}
165     END{print b}' "$1"/*chs.sf | bc)
166     local size=$(echo "$lin * 512" | bc)
167     toMGByte "$size"
168     }
169    
170     function getDiskSizeFromDisk(){
171     local size=$(fdisk -l /dev/"$1" | grep -e '^Disk /dev/' | sed 's|.*, *||' | sed 's| *bytes||')
172     toMGByte "$size"
173     }
174    
175     function toMGByte(){
176     if [ $(expr length "$1") -le 9 ];then
177     echo $(expr substr "$1" 1 3 )"MB"
178     elif [ $(expr length "$1") -eq 10 ];then
179     echo $(expr substr "$1" 1 2 | sed 's|\([0-9]\)$|.\1|')"GB"
180     elif [ $(expr length "$1") -lt 12 ];then
181     echo $(expr substr "$1" 1 3 | sed 's|\([0-9]\)$|.\1|')"GB"
182     else
183     echo $(expr substr "$1" 1 4 | sed 's|\([0-9]\)$|.\1|')"GB"
184     fi
185     }
186    
187     function validateImage(){
188     #########################################
189     # accept only disk images #
190     #########################################
191     # [ -r "$(dirname "$n")"/disk ] && return 0
192     #########################################
193     [ -d "$1"/parts ] && return 1
194     local sf=$(find "$1" -name "*-chs.sf" 2>/dev/null | wc -l)
195     [ $sf -eq 0 ] && return 1
196     local pt=$(find "$1" -name "*-pt.sf" 2>/dev/null | wc -l)
197     [ $pt -eq 0 ] && return 1
198     # modification to read unsplited images
199     # thanks to Viking (24/11/2008)
200     # local aa=$(find "$1" -name "*.aa" 2>/dev/null | wc -l)
201     # [ $aa -eq 0 ] && return 1
202     return 0
203     }
204    
205     function calcInputID(){
206     THIS_INPUT_ID=$(sed -n "/$2/p" "$1"/*-pt.sf | sed 's|.*Id= *||' | sed 's|,.*$||')
207     }
208    
209     function calcInputSize(){
210     # set -x
211     local bytesPerSector=512
212     local l
213     local pSize
214     local cylinders
215     local heads
216     local sectors
217     if [ -z "$2" ];then
218     cylinders=$(sed -n '/cylinders=/p' "$1"/*-chs.sf | sed 's|cylinders=||')
219     heads=$(sed -n '/heads=/p' "$1"/*-chs.sf | sed 's|heads=||')
220     sectors=$(sed -n '/sectors=/p' "$1"/*-chs.sf | sed 's|sectors=||')
221     THIS_INPUT_SIZE=$(echo "scale=2; $cylinders * $heads * $sectors * $bytesPerSector" | bc)
222     else
223     pSize=$(sed -n "/$2/p" "$1"/*-pt.sf | sed 's|.*size= *||' | sed 's|,.*||')
224     THIS_INPUT_SIZE=$(echo "scale=2; $pSize * $bytesPerSector" | bc)
225     fi
226    
227     l=$(expr length $THIS_INPUT_SIZE)
228     if [ $l -gt 9 ];then
229     THIS_INPUT_SIZE=$(echo "scale=2; $THIS_INPUT_SIZE / 1024 / 1024 / 1024" | bc)GB
230     else
231     THIS_INPUT_SIZE=$(echo "scale=3; $THIS_INPUT_SIZE / 1024 / 1024" | bc | sed 's|\.000|.00|')MB
232     fi
233     # set +x
234     }
235    
236     function testRoot(){
237     if [ "$(whoami)" != "root" ];then
238     printVersion
239     echo "Error: This script must be executed by root..."
240     exit
241     fi
242     }
243    
244     function printVersion(){
245     echo "Clonezilla Live Image Information
246     $(basename $0) v. $versionNumber - (C) 2009 S. Georgaras <sng@hellug.gr>
247     "
248     }
249    
250     function printHelp(){
251     printVersion
252     echo "Usage: $(basename $0) <options> <directory>
253    
254     Available options:
255     s Search in sub-directories too
256     i [name] Pring info for image [name]
257     v Print version info and exit
258     h Print this screen and exit"
259    
260     }
261    
262     #
263     #
264     # Script starts here
265     #
266     #
267     # set -x
268     while getopts hvdsi: opt
269     do
270     case "$opt" in
271     i)
272     testRoot
273     imgOnly=1
274     startDir="$OPTARG"
275     ;;
276     s)
277     testRoot
278     subDirs=1
279     ;;
280     d)
281     testRoot
282     onSubDirs=1
283     ;;
284     v)
285     printVersion
286     exit;;
287     h)
288     printHelp
289     exit;;
290     esac
291     done
292     shift $(( OPTIND - 1 ))
293    
294     testRoot
295     # set -x
296     [ -z "$startDir" ] && startDir="$1"
297     if [ -z "$startDir" ];then
298     startDir="$PWD"
299     fi
300    
301     # remove ending /
302     startDir="$(echo "$startDir" | sed 's|/$||')"
303    
304     # convert ./xxx -> /sss/ddd/xxx
305     # xxx -> /sss/ddd/xxx
306     if [ "$(echo "$startDir" |sed -n '/^\.\//p')" != "" ] || [ "$(echo "$startDir" | sed -n '/^\//p')" = "" ];then
307     if [ -d "$PWD"/`echo "$startDir" | sed 's|\.*/||'` ];then
308     startDir="$PWD"/`echo "$startDir" | sed 's|\.*/||'`
309     pathFixed=1
310     elif [ -d /home/partimag/`echo "$startDir" | sed 's|\.*/||'` ];then
311     startDir=/home/partimag/`echo "$startDir" | sed 's|\.*/||'`
312     pathFixed=1
313     fi
314     fi
315    
316     if [ ! -d "$startDir" ];then
317     printVersion
318     echo "Error: Folder \"$( basename "$startDir")\" not found!!!"
319     exit 1
320     fi
321    
322     if [ -z "$imgOnly" ];then
323     findImages "$startDir"
324     if [ ! -z "$subDirs" ];then
325     for n in "$startDir"/*;do
326     if [ -d "$n" ] && [ -r "$n" ];then
327     "$0" -d "$n"
328     fi
329     done
330     fi
331     else
332     readImage "$startDir"/parts
333     count=0
334     if [ -z "${id[$count]}" ];then
335     printVersion
336     echo "Error: Image \"$startDir\" does not exist!!!"
337     exit 1
338     fi
339     until [ -z "${id[$count]}" ];do
340     echo " ${id[$count]}"
341     ((count++))
342     done
343     fi

Properties

Name Value
svn:executable *

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26