Magellan Linux

Annotation of /trunk/mage/usr/lib/mage/pkgbuild_dir.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1271 - (hide annotations) (download) (as text)
Wed Apr 27 08:42:24 2011 UTC (13 years ago) by niro
File MIME type: application/x-sh
File size: 5219 byte(s)
-fix handling of character devices
1 niro 24 #!/bin/bash
2    
3     #
4     # builds packages from given dir
5     #
6    
7 niro 443 # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/pkgbuild_dir.sh,v 1.15 2007-03-19 19:24:46 niro Exp $
8 niro 24
9 niro 419 # set default user mage.rc
10     : ${MAGERC="/etc/mage.rc"}
11    
12 niro 24 PKGSUFFIX="mpk"
13     PKGNAME="$1"
14     SEARCHDIRS="$2"
15     MLIBDIR=/usr/lib/mage
16    
17 niro 443 ## only for tests -> normally in /etc/rc.d/init.d/functions
18 niro 24 COLRED="\033[1;6m\033[31m"
19     COLGREEN="\033[1;6m\033[32m"
20 niro 443 COLYELLOW="\033[1;6m\033[33m"
21     COLBLUE="\033[1;6m\033[34m"
22     COLMAGENTA="\033[1;6m\033[35m"
23     COLWHITE="\033[1;6m\033[37m"
24     COLGRAY="\033[0;6m\033[37m"
25     COLBOLD="\033[1m"
26 niro 24 COLDEFAULT="\033[0m"
27    
28 niro 443 if [[ ${NOCOLORS} = true ]]
29     then
30     COLRED=""
31     COLGREEN=""
32     COLYELLOW=""
33     COLBLUE=""
34     COLMAGENTA=""
35     COLWHITE=""
36     COLGRAY=""
37     COLBOLD=""
38     COLDEFAULT=""
39     fi
40    
41 niro 169 # export default C locale
42     export LC_ALL=C
43    
44 niro 272 [[ -z $1 ]] && echo "No package name given. Aborting." && exit 1
45     [[ -z $2 ]] && echo "No source dir given. Aborting." && exit 1
46 niro 24
47 niro 440 source /etc/mage.rc.global
48 niro 443 [[ -f ${MAGERC} ]] && source ${MAGERC}
49 niro 272 source ${MLIBDIR}/mage4.functions.sh
50 niro 24
51 niro 312 # set PKGDIR and BUILDDIR and BINDIR to MROOT
52 niro 347 if [[ -n ${MROOT} ]]
53     then
54     export PKGDIR=${MROOT}/${PKGDIR}
55     export BUILDDIR=${MROOT}/${BUILDDIR}
56     export BINDIR=${MROOT}/${BINDIR}
57     fi
58 niro 312
59 niro 272 build_preinstall()
60     {
61 niro 24 if [ -d ${BUILDDIR}/${PKGNAME} ]
62     then
63     rm -rf ${BUILDDIR}/${PKGNAME}
64     fi
65    
66     install -d ${BUILDDIR}/${PKGNAME}/binfiles
67     touch ${BUILDDIR}/${PKGNAME}/.dirs
68     touch ${BUILDDIR}/${PKGNAME}/.symlinks
69     touch ${BUILDDIR}/${PKGNAME}/.files
70     touch ${BUILDDIR}/${PKGNAME}/.pipes
71     touch ${BUILDDIR}/${PKGNAME}/.char
72 niro 1215 touch ${BUILDDIR}/${PKGNAME}/.fifo
73 niro 24 }
74    
75 niro 272 build_postinstall()
76     {
77 niro 440 echo -e "${COLBLUE}===${COLGREEN} fetching files for package '${PKGNAME}' ...${COLDEFAULT}"
78 niro 24
79 niro 272 # md5sums will only be generated for files: $M_MD5SUM
80    
81     # sets mtime to same value of the $BINDIR: $M_MTIME
82     # only needed for files and symlinks
83 niro 24 M_MTIME=$(stat -c %Y ${BINDIR})
84 niro 272
85     # install mtime to package (needed for later checks)
86 niro 24 echo "${M_MTIME}" > ${BUILDDIR}/${PKGNAME}/.mtime
87    
88 niro 272 # !! we use § as field seperator !!
89 niro 24 # doing so prevent us to get errors by filenames with spaces
90     BUILD_TODELFILES=$(find ${SEARCHDIRS} -printf %p§)
91 niro 272
92     # sets fieldseperator to "§" instead of " "
93 niro 24 IFS=§
94    
95     for I in $BUILD_TODELFILES
96     do
97     CHECK_SRCDIR="$(echo ${I#${SEARCHDIRS}*}|grep $BUILDDIR)"
98    
99     if [ -z "$CHECK_SRCDIR" ]
100     then
101     FILETYPE="$(stat -c %F $I)"
102     FILEPOSIX="$(stat -c %a $I)"
103     FILEOWNER="$(stat -c %U $I)"
104     FILEGROUP="$(stat -c %G $I)"
105    
106 niro 272 [[ ${FILEOWNER} = UNKNOWN ]] && FILEOWNER="root"
107     [[ ${FILEGROUP} = UNKNOWN ]] && FILEGROUP="root"
108 niro 24
109     case "${FILETYPE}" in
110     "directory")
111 niro 272 if [[ $I != ${SEARCHDIRS} ]]
112 niro 24 then
113     echo "${I#${SEARCHDIRS}*}§${FILEPOSIX}§${FILEOWNER}§${FILEGROUP}" >> ${BUILDDIR}/${PKGNAME}/.dirs
114     fi
115     ;;
116 niro 272
117 niro 24 "symbolic link")
118     LNKDEST="$(readlink $I)"
119     echo "${I#${SEARCHDIRS}*}§${FILEPOSIX}§${LNKDEST#${SEARCHDIRS}*}§${M_MTIME}" >> ${BUILDDIR}/${PKGNAME}/.symlinks
120     ;;
121    
122    
123     "regular empty file")
124     FILEDIR="$(dirname $I)"
125     FILEDIR="${FILEDIR#${SEARCHDIRS}*}"
126     M_MD5SUM="$(md5sum ${I}|cut -d' ' -f1)"
127     echo "${I#${SEARCHDIRS}*}§${FILEPOSIX}§${FILEOWNER}§${FILEGROUP}§${M_MTIME}§${M_MD5SUM}" >> ${BUILDDIR}/${PKGNAME}/.files
128     install -d ${BUILDDIR}/${PKGNAME}/binfiles/${FILEDIR}
129     cp ${I} ${BUILDDIR}/${PKGNAME}/binfiles/${FILEDIR}
130     ;;
131    
132     "regular file" )
133     FILEDIR="$(dirname $I)"
134     FILEDIR="${FILEDIR#${SEARCHDIRS}*}"
135     M_MD5SUM="$(md5sum ${I}|cut -d' ' -f1)"
136     echo "${I#${SEARCHDIRS}*}§${FILEPOSIX}§${FILEOWNER}§${FILEGROUP}§${M_MTIME}§${M_MD5SUM}" >> ${BUILDDIR}/${PKGNAME}/.files
137     install -d ${BUILDDIR}/${PKGNAME}/binfiles/${FILEDIR}
138     cp ${I} ${BUILDDIR}/${PKGNAME}/binfiles/${FILEDIR}
139     ;;
140 niro 272
141 niro 24 "block special file")
142 niro 1271 # convert hex2dec
143     # printf '%d' 0x12 -> 18
144     local CHAR_MAJOR="$(printf 0x$(stat -c %t $I))"
145     local CHAR_MINOR="$(printf 0x$(stat -c %T $I))"
146     echo "${I#${SEARCHDIRS}*}§${FILEPOSIX}§${FILEPOSIX}§${CHAR_MAJOR}§${FILEOWNER}§${FILEGROUP}" >> ${BUILDDIR}/${PKGNAME}/.pipes
147 niro 24 ;;
148    
149     "character special file")
150 niro 315 # convert hex2dec
151     # printf '%d' 0x12 -> 18
152     local CHAR_MAJOR="$(printf 0x$(stat -c %t $I))"
153     local CHAR_MINOR="$(printf 0x$(stat -c %T $I))"
154 niro 1208 echo "${I#${SEARCHDIRS}*}§${FILEPOSIX}§${CHAR_MAJOR}§${CHAR_MINOR}§${FILEOWNER}§${FILEGROUP}" >> ${BUILDDIR}/${PKGNAME}/.char
155 niro 24 ;;
156 niro 272
157 niro 1208 "fifo")
158     echo "${I#${SEARCHDIRS}*}§${FILEPOSIX}§${FILEOWNER}§${FILEGROUP}" >> ${BUILDDIR}/${PKGNAME}/.fifo
159     ;;
160    
161 niro 24 *)
162     echo "What I am ? -- $I"
163     echo "$0 paused ... Press Enter"
164     read
165     ;;
166     esac
167     fi
168     done
169 niro 272
170     # very important: unsetting the '§' fieldseperator
171 niro 24 unset IFS
172 niro 272
173     # forcing mtime to same value
174 niro 440 echo -e "${COLBLUE}===${COLGREEN} forcing mtime to the same value ...${COLDEFAULT}"
175     find ${BUILDDIR}/${PKGNAME}/binfiles -exec touch -m -r ${BUILDDIR}/${PKGNAME}/.mtime '{}' ';'
176 niro 24 }
177    
178 niro 272 build_rmtimestamp()
179     {
180 niro 24 rm /var/tmp/timestamp
181     }
182    
183 niro 272 build_package()
184     {
185 niro 440 echo -e "${COLBLUE}===${COLGREEN} building package tarball ...${COLDEFAULT}"
186 niro 24 cd ${BUILDDIR}
187     tar cvjf ${PKGNAME}.tar.bz2 ./${PKGNAME}
188     install -d ${PKGDIR}
189     mv ${PKGNAME}.tar.bz2 ${PKGDIR}/${PKGNAME}.${PKGSUFFIX}
190     }
191    
192     build_preinstall
193     build_postinstall
194     build_package

Properties

Name Value
svn:executable *