Annotation of /branches/mage-next/src/pkgbuild_dir.in
Parent Directory | Revision Log
Revision 1271 -
(hide annotations)
(download)
(as text)
Wed Apr 27 08:42:24 2011 UTC (13 years, 5 months ago) by niro
Original Path: trunk/mage/usr/lib/mage/pkgbuild_dir.sh
File MIME type: application/x-sh
File size: 5219 byte(s)
Wed Apr 27 08:42:24 2011 UTC (13 years, 5 months ago) by niro
Original Path: trunk/mage/usr/lib/mage/pkgbuild_dir.sh
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 | * |