Alternc  latest
Alternc logiel libre pour l'hébergement
mchroot.sh
Go to the documentation of this file.
1 #! /bin/bash
2 
3 #Le repertoire racine
4 ROOT_DIR="/root/compilation"
5 
6 #Les systeme à compiler
7 CHROOT_DIR="$ROOT_DIR/chroot"
8 #repertoire cible des compilations
9 BUILD_AREA="$ROOT_DIR/build-area"
10 #le repertoire contenant les sources
11 SRC_DIR="/root/vcs"
12 #repertoire local (dans chroot) contenant les builds area
13 LOCAL_BUILD_AREA="/root/build-area"
14 #Le depôt formaté pour le web
15 DEPOT_DIR="$ROOT_DIR/depot"
16 
17 
18 #SOURCES[x]='vcs url_ressource target_directory_in_chroot'
19 SOURCES[0]='svn https://www.alternc.org/svn/ /root/vcs/'
20 
21 function prepare_chroot() {
22 
23  #Traiter dans les chroot
24  for dir in $(ls $CHROOT_DIR); do
25  if [[ ! -d $CHROOT_DIR/$dir ]]; then
26  continue
27  fi
28  dist=$(echo $dir | sed 's/-.*//' )
29  arch=$(echo $dir | sed 's/.*-//' )
30 
31  #Ouvrir un chroot
32  SCHROOT_SESSION=$(schroot -b -c $dir)
33  if [[ ! $SCHROOT_SESSION ]]; then
34  continue
35  fi
36 
37  #Nettoyer les chroot
38  chroot_run $SCHROOT_SESSION "find /tmp/ -type f -exec rm {} \;" "./"
39  done;
40 
41  #Nettoyer les build-area dans les sources
42 # find $SRC_DIR -iname build-area -exec rm -r {} \;
43 
44  #Purger le depot de transition
45  rm -r $DEPOT_DIR
46 }
47 
48 function get_sources() {
49 
50  for CHROOT in $(ls $CHROOT_DIR); do
51  #CHROOT=${1:-"etch-i386"}
52  ELEMENTS=${#SOURCES[@]}
53  for ((i=0;i<$ELEMENTS;i++)); do
54  SOURCE=( `echo ${SOURCES[${i}]}` )
55  VCS=${SOURCE[0]}
56  SOURCE=${SOURCE[1]}
57  TARGET=${SOURCE[2]}
58  chroot_run $CHROOT "mkdir -p $TARGET" '/root/'
59  get_$VCS $CHROOT $SOURCE $TARGET
60  done
61  done;
62 }
63 
64 function get_svn() {
65  chroot_run ${1} "svn cleanup ${3}" ${3}
66  command="echo t |svn --force --no-auth-cache co ${2} ${3}"
67  chroot_run "$1" "$command" '/root/'
68 }
69 
70 function chroot_run() {
71  SCHROOT_SESSION="${1}"
72  COMMAND="${2}"
73  DIR="${3}"
74 
75  echo "$COMMAND" | \
76  schroot \
77  -p \
78  -r \
79  --chroot $SCHROOT_SESSION \
80  -d $DIR \
81 }
82 
83 function create_packages() {
84  rm -r $BUILD_AREA
85  rm -r $DEPOT_DIR
86 
87  for dir in $(ls $CHROOT_DIR); do
88  if [[ ! -d $CHROOT_DIR/$dir ]]; then
89  continue
90  fi
91  dist=$(echo $dir | sed 's/-.*//' )
92  arch=$(echo $dir | sed 's/.*-//' )
93 
94  #Ouvrir un chroot
95  SCHROOT_SESSION=$(schroot -b -c $dir)
96  if [[ ! $SCHROOT_SESSION ]]; then
97  continue
98  fi
99 
100  CHROOT_SRC=$CHROOT_DIR/$dist-$arch$SRC_DIR
101  CHROOT_BUILD_AREA=$CHROOT_DIR/$dist-$arch/$LOCAL_BUILD_AREA
102 
103  mkdir -p $BUILD_AREA/$dist-$arch
104  mkdir -p $CHROOT_SRC
105  mkdir -p $CHROOT_BUILD_AREA
106 
107  umount $CHROOT_BUILD_AREA
108  mount --bind $BUILD_AREA/$dist-$arch $CHROOT_BUILD_AREA
109 
110  #Trouver les paquets
111  for paquet in $(find $CHROOT_SRC -ipath \*/debian -printf %h\\n); do
112  SVN_DIR=${paquet#$CHROOT_SRC}
113  STATUT=$(basename $SVN_DIR)
114 
115  chroot_run $SCHROOT_SESSION "svn revert ./ -R" $SRC_DIR/$SVN_DIR
116 
117 
118  if [[ $STATUT != "trunk" ]]; then
119  STATUT=$(basename $(dirname $SVN_DIR))
120  else
121  version=( `schroot -p -r --chroot $SCHROOT_SESSION -d $SRC_DIR/$SVN_DIR -- egrep -o '\‍(.*\‍)' -m 1 debian/changelog | sed 's/(//'|sed s'/)//'` )
122  chroot_run $SCHROOT_SESSION "dch -v ${version}.1~`date +%Y-%m-%d` nightly" $SRC_DIR/$SVN_DIR
123  #echo "dch -l \"`date +%Y-%m-%d`\" nightly" | \
124  fi
125 
126  #Construire le package
127  echo $STATUT
128  mkdir -p "$CHROOT_BUILD_AREA/$STATUT"
129  chroot_run $SCHROOT_SESSION "svn-buildpackage -us -uc -rfakeroot --svn-move-to=$LOCAL_BUILD_AREA/$STATUT --svn-ignore" $SRC_DIR/$SVN_DIR
130  chroot_run $SCHROOT_SESSION "svn revert ./ -R" $SRC_DIR/$SVN_DIR
131 
132  done
133 
134  #Fermer le chroot
135  schroot -e \
136  --chroot=$SCHROOT_SESSION
137 
138 # umount $CHROOT_BUILD_AREA
139 
140  done;
141 }
142 
143 function create_apt() {
144  #Création du depot
145  mkdir -p $DEPOT_DIR
146 
147  for dir in $(ls $BUILD_AREA); do
148  if [[ ! -d $CHROOT_DIR/$dir ]]; then
149  continue
150  fi
151  dist=$(echo $dir | sed 's/-.*//' )
152  arch=$(echo $dir | sed 's/.*-//' )
153 
154  DEPOT_DIST=$DEPOT_DIR/dists/$dist
155 
156  CHROOT_BUILD_AREA=$BUILD_AREA/$dist-$arch
157 
158  for dir in $(ls $CHROOT_BUILD_AREA); do
159 
160  echo $dir
161 
162  DEPOT_SRC=$DEPOT_DIST/$dir/source
163  DEPOT_BIN=$DEPOT_DIST/$dir/binary-$arch/
164 
165  mkdir -p $DEPOT_SRC
166  mkdir -p $DEPOT_BIN
167 
168  cd $CHROOT_BUILD_AREA/$dir
169  cp *.dsc $DEPOT_BIN
170  cp *.deb $DEPOT_BIN
171 
172  cp *.dsc $DEPOT_SRC
173  cp *.diff.gz $DEPOT_SRC
174  cp *.tar.gz $DEPOT_SRC
175 
176  cd $DEPOT_DIST/$dir/
177  dpkg-scanpackages binary-$arch /dev/null dists/$dist/$dir/ | gzip -f9 > binary-$arch/Packages.gz
178  dpkg-scansources source /dev/null dists/$dist/$dir/ | gzip -f9 > source/Sources.gz
179  apt-ftparchive -c $ROOT_DIR/$dist-$arch-apt-ftparchive.conf release $DEPOT_BIN > $DEPOT_BIN/Release
180  apt-ftparchive -c $ROOT_DIR/$dist-$arch-apt-ftparchive.conf release $DEPOT_SRC > $DEPOT_SRC/Release
181  done
182  done
183 }
184 
185 prepare_chroot
186 get_sources
187 create_packages
188 create_apt