Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1271 - (show 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 #!/bin/bash
2
3 #
4 # builds packages from given dir
5 #
6
7 # $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
9 # set default user mage.rc
10 : ${MAGERC="/etc/mage.rc"}
11
12 PKGSUFFIX="mpk"
13 PKGNAME="$1"
14 SEARCHDIRS="$2"
15 MLIBDIR=/usr/lib/mage
16
17 ## only for tests -> normally in /etc/rc.d/init.d/functions
18 COLRED="\033[1;6m\033[31m"
19 COLGREEN="\033[1;6m\033[32m"
20 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 COLDEFAULT="\033[0m"
27
28 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 # export default C locale
42 export LC_ALL=C
43
44 [[ -z $1 ]] && echo "No package name given. Aborting." && exit 1
45 [[ -z $2 ]] && echo "No source dir given. Aborting." && exit 1
46
47 source /etc/mage.rc.global
48 [[ -f ${MAGERC} ]] && source ${MAGERC}
49 source ${MLIBDIR}/mage4.functions.sh
50
51 # set PKGDIR and BUILDDIR and BINDIR to MROOT
52 if [[ -n ${MROOT} ]]
53 then
54 export PKGDIR=${MROOT}/${PKGDIR}
55 export BUILDDIR=${MROOT}/${BUILDDIR}
56 export BINDIR=${MROOT}/${BINDIR}
57 fi
58
59 build_preinstall()
60 {
61 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 touch ${BUILDDIR}/${PKGNAME}/.fifo
73 }
74
75 build_postinstall()
76 {
77 echo -e "${COLBLUE}===${COLGREEN} fetching files for package '${PKGNAME}' ...${COLDEFAULT}"
78
79 # 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 M_MTIME=$(stat -c %Y ${BINDIR})
84
85 # install mtime to package (needed for later checks)
86 echo "${M_MTIME}" > ${BUILDDIR}/${PKGNAME}/.mtime
87
88 # !! we use § as field seperator !!
89 # doing so prevent us to get errors by filenames with spaces
90 BUILD_TODELFILES=$(find ${SEARCHDIRS} -printf %p§)
91
92 # sets fieldseperator to "§" instead of " "
93 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 [[ ${FILEOWNER} = UNKNOWN ]] && FILEOWNER="root"
107 [[ ${FILEGROUP} = UNKNOWN ]] && FILEGROUP="root"
108
109 case "${FILETYPE}" in
110 "directory")
111 if [[ $I != ${SEARCHDIRS} ]]
112 then
113 echo "${I#${SEARCHDIRS}*}§${FILEPOSIX}§${FILEOWNER}§${FILEGROUP}" >> ${BUILDDIR}/${PKGNAME}/.dirs
114 fi
115 ;;
116
117 "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
141 "block special file")
142 # 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 ;;
148
149 "character special file")
150 # 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 echo "${I#${SEARCHDIRS}*}§${FILEPOSIX}§${CHAR_MAJOR}§${CHAR_MINOR}§${FILEOWNER}§${FILEGROUP}" >> ${BUILDDIR}/${PKGNAME}/.char
155 ;;
156
157 "fifo")
158 echo "${I#${SEARCHDIRS}*}§${FILEPOSIX}§${FILEOWNER}§${FILEGROUP}" >> ${BUILDDIR}/${PKGNAME}/.fifo
159 ;;
160
161 *)
162 echo "What I am ? -- $I"
163 echo "$0 paused ... Press Enter"
164 read
165 ;;
166 esac
167 fi
168 done
169
170 # very important: unsetting the '§' fieldseperator
171 unset IFS
172
173 # forcing mtime to same value
174 echo -e "${COLBLUE}===${COLGREEN} forcing mtime to the same value ...${COLDEFAULT}"
175 find ${BUILDDIR}/${PKGNAME}/binfiles -exec touch -m -r ${BUILDDIR}/${PKGNAME}/.mtime '{}' ';'
176 }
177
178 build_rmtimestamp()
179 {
180 rm /var/tmp/timestamp
181 }
182
183 build_package()
184 {
185 echo -e "${COLBLUE}===${COLGREEN} building package tarball ...${COLDEFAULT}"
186 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 *