Kompilacja na serwerze
Z UMP
Spis treści |
Uwaga dokument wysoce techniczny
potrzebny w zasadzie tylko nielicznym developerom lub na wypadek przejechania mnie przez tramwaj.
aliasy dla punktów
czyli końcówka na samym początku. Żeby dodać nowy typ dla punktów, lub zmienić istniejący, należy:
- dla kompilacji: zmienić pnt2poi.awk
- dla edytorów: zmienić mont-demont-multi2.pl (i ewentualnie exe)
- dla mapy na www: zmienić ump-www/mapnik_style/settings/styles_points.xml oraz ump-www/ump2osm/rules.xml
crontab woła
#!/bin/sh skrypty=$HOME/skrypty logi=$skrypty/logi mapy=/home/httpd/html/ump/update #naboku=$skrypty/naboku mapa=$mapy/48000003.zip mapatmp=/var/tmp/48000003.zip tempfile=/var/tmp/gps.$$ $skrypty/replikuj-cvs # ------ jak mamy nowe dane, można je skompilować ------------------- # sprawdź jakie są nowe dane na cvs cvs_log=$logi/cvs.log kiedycvs=`grep -n 200.$ $cvs_log | tail -n 1 | cut -d : -f 1` #kiedynury=`grep -n nury $cvs_log | tail -n 1 | cut -d : -f 1` kiedyikonki=`grep -n narzedzia\/ikonki\/ $cvs_log | tail -n 1 | cut -d : -f 1` kiedybialystok=`grep -n UMP-Bialystok\/src $cvs_log | tail -n 1 | cut -d : -f 1` kiedyciechanow=`grep -n UMP-Ciechanow\/src $cvs_log | tail -n 1 | cut -d : -f 1` itd. itd. kiedyanglia=`grep -n UMP-GB-Anglia\/src $cvs_log | tail -n 1 | cut -d : -f 1` kiedycokolwiek=`grep -n -e UMP -e ump $cvs_log | tail -n 1 | cut -d : -f 1` if [ $kiedycokolwiek -gt $kiedycvs ]; then $skrypty/listuj-nazwy; $skrypty/generuj-cvslog; cp -uf $mapa $mapatmp; fi if [ $kiedyszlaki -gt $kiedycvs ]; then $skrypty/generuj-szlaki; fi if [ $kiedyradary -gt $kiedycvs ]; then $skrypty/generuj-radary; fi if [ $kiedybialystok -gt $kiedycvs ]; then $skrypty/kompiluj-bialystok; fi if [ $kiedyciechanow -gt $kiedycvs ]; then $skrypty/kompiluj-ciechanow; fi itd. itd. if [ $kiedyanglia -gt $kiedycvs ]; then $skrypty/kompiluj-gb-anglia; fi if [ $kiedyikonki -gt $kiedycvs ]; then $skrypty/generuj-typy; fi if [ $kiedycokolwiek -gt $kiedycvs ]; then $skrypty/generuj-indeksy; fi $skrypty/sprawdz-www
replikuj cvs
trywialne
#!/bin/sh # ----------------- zreplikuj cvs i spakuj nowe pliczki homek=$HOME cvs_log=$homek/skrypty/logi/cvs.log # (uwaga: nie zauważa skasowania pliku więc rzeczy wywalone z cvs zostają w zipie) cd $homek/cvs date +'%n%c' >> $cvs_log # i żeby najpierw były zmiany w szlakach czyli *.szlaki.topo.txt cvs -d:pserver:aldziew@localhost:/home/cvsroot up UMP-szlaki -Pd 1>> $cvs_log 2>> /dev/null cvs -d:pserver:aldziew@localhost:/home/cvsroot up -Pd 1>> $cvs_log 2>> /dev/null # nie trzeba cvs checkout bo nowe pliki się i tak pojawiają - ale nowe katalogi nie # znowuż co chyba nie wypisuje danych do logu :-o # lista autorów cp -u $homek/cvs/narzedzia/opisy/autorzy $homek/html/ump/autorzy chmod go+r $homek/html/ump/autorzy # pakiet install zip -fj $homek/html/ump/pliki/instaluj.zip $homek/cvs/narzedzia/install/instaluj.*
generuj cvslog
kompiluj
wywołania "krajowe" to po prostu
#!/bin/sh ~/skrypty/kompiluj Andora 37600001
a główny skrypt kompiluj
#!/bin/bash if [ $# -gt 0 ]; then miasto=$1; ID=$2; shift; shift; else echo Należy się podać dwa parametry - $0 miasto ID; exit; fi topo=nietopo; ogonki=nie; NI=nie; # ogonkowatość implikuje NI czyli brak kompilowania while [ $# -gt 0 ]; do if [ "$1" = "topo" ]; then topo=topo; fi if [ "$1" = "ogonki" ]; then ogonki=tak; fi if [ "$1" = "NI" ]; then NI=tak; fi shift done # nie ma sensu wersja ogonki nie-NI if [ $ogonki = tak ]; then NI=tak; fi # jeśli wersja zwykła, to trzaśnij źródła do wersji NI (i ogonkowej?) if [ $NI = nie ]; then if [ $topo = nietopo ]; then $0 $miasto $ID NI $0 $miasto $ID ogonki fi fi homek=$HOME skad=$homek/cvs/UMP-$miasto #pnt2poi=$homek/gps/pnt2poi #\ -c\ nic\ -r\ $miasto skrypty=$homek/skrypty narzedzia=$homek/cvs/narzedzia pnt2poi=$narzedzia/pnt2poi logi=$skrypty/logi netgenlog=$logi/routing-$miasto.log kompillog=$logi/kompiluj-$miasto.log wojeklog=$logi/wojek-$miasto.log naboku=$homek/gps/naboku-$topo #komumaile=aldziew,starazie@interia.pl komumaile=ump #komumaile=aldziew #,Piotr.Frasunkiewicz@eranet.pl wojekmapa=$narzedzia/mapka_woj.mp pid=$$ wyslac=/tmp/mail.$pid temp=/tmp/tmp.$pid #lockfile=/tmp/cgpsmapper.pid region=`echo $miasto | cut -f 2 -d "-"` wynik=$homek/tmp/zrodla/UMP-$miasto-caly-$topo.mp mapy=/home/httpd/html/ump/update mapa=$mapy/48000003-$topo.zip mapatmp=/var/tmp/48000003-$topo.zip # img musi być lokalnie, bo inaczej zip na siłę zachowuje ścieżkę img=img/$ID.img #cat > $wynik << KONIEC-NAGL echo [IMG ID] > $wynik echo ID=$ID >> $wynik echo FamilyID=4800 >> $wynik echo Name=UMP-$miasto-`date +%d%b` >> $wynik echo Datum=W84 >> $wynik # było 2048 echo TreSize=3096 >> $wynik echo RgnLimit=1024 >> $wynik echo Levels=6 >> $wynik echo Level0=24 >> $wynik echo Level1=22 >> $wynik echo Level2=20 >> $wynik # było: 17 15 13 echo Level3=18 >> $wynik echo Level4=16 >> $wynik echo Level5=15 >> $wynik if [ $ogonki = tak ]; then echo NT=Y >> $wynik; fi echo POIIndex=Y >> $wynik echo MG=Y >> $wynik echo Numbering=Y >> $wynik echo POINumberFirst=N >> $wynik echo POIZipFirst=Y >> $wynik echo Routing=Y >> $wynik # lower first, default 25 echo DrawPriority=23 >> $wynik echo Copyright=ump.waw.pl debest >> $wynik echo Elevation=m >> $wynik #echo DefaultRegionCountry=$miasto >> $wynik #echo DefaultCityCountry=Polska~[0x1d]PL >> $wynik if [ $ogonki = tak ]; then echo LBLcoding=9 >> $wynik echo Codepage=1250 >> $wynik # else #echo LBLcoding=6 >> $wynik #echo Codepage=0 >> $wynik fi # lewostronni: Brytania * 3, Irlandia, Cypr, Malta if [ $ID = 44100001 ]; then echo LeftSideTraffic=Y >> $wynik; fi if [ $ID = 44130001 ]; then echo LeftSideTraffic=Y >> $wynik; fi if [ $ID = 44280001 ]; then echo LeftSideTraffic=Y >> $wynik; fi if [ $ID = 35300001 ]; then echo LeftSideTraffic=Y >> $wynik; fi if [ $ID = 35700001 ]; then echo LeftSideTraffic=Y >> $wynik; fi if [ $ID = 35600001 ]; then echo LeftSideTraffic=Y >> $wynik; fi echo [END-IMG ID] >> $wynik #KONIEC-NAGL #cat $homek/cvs/ump-wawa/src/dictionary.txt >> $wynik ##########cat $narzedzia/regions.txt >> $wynik if [ -f $skad/$miasto-big.mp ]; then gawk '$0 ~ "END-IMG ID", EOF' < $skad/$miasto-big.mp >> $wynik; fi # można uprościć: żeby miasta dodawało za każdym razem osobno, a nie wspólne for pnt in `ls $skad/src/cities-*.pnt 2> /dev/null`; do cat $pnt | $pnt2poi >> $wynik; done echo \;\; punkty >> $wynik if [ $topo = nietopo ]; then for pnt in `ls $skad/src/*.pnt 2> /dev/null | grep -v \.topo\. | grep -v cities`; \ do cat $pnt | grep -vf $narzedzia/md-filtr-bez | $pnt2poi -c nic >> $wynik; done else for pnt in `ls $skad/src/*.pnt 2> /dev/null | grep -v cities`; \ do cat $pnt | $pnt2poi -c nic >> $wynik; done fi; echo \;\; koniec >> $wynik $narzedzia/formatuj_numery_telefonow.pl < $wynik > $temp 2> $wyslac mv $temp $wynik if [ -d $skad/src ]; then for m in `ls $skad/src/*.ulice.txt 2> /dev/null | grep -v inne`; do # nie przerabiaj na miasto # zpliku=`echo $miasto | cut -d "/" -f 8` # miastko=`echo $zpliku | cut -d "." -f 1` # cat $skad/src/$zpliku | gawk '{sub(/^\[POLYLINE\]/,"\[POLYLINE\]\nMiasto='$miastko'");print}' >> $wyniky gawk -f $narzedzia/md-montaz.awk $m | grep -v Plik= >> $wynik done cat $skad/src/*inne.ulice.txt >> $wynik 2> /dev/null cat $skad/src/*.drogi.txt >> $wynik 2> /dev/null cd $skad/src cat `ls -1 | grep -f $narzedzia/md-filtr | grep -v \.ulice\.txt | grep -v \.drogi\.txt | grep -v \.zakazy\.txt` >> $wynik if [ $topo = topo ]; then cat *.topo.txt 2> /dev/null >> $wynik; fi # SERIA PODMIAN - może to można uprościć, albo zmienić kolejność, ale po co? # zamiana typów dwubajtowych na trzybajtowe cat $wynik | sed -e 's/Type=0xe0/Type=0x010e0/g' \ -e 's/Type=0xe1/Type=0x010e1/g' > $temp; mv $temp $wynik # -e 's/Type=0xf0/Type=0x010f0/g' \ # -e 's/Type=0xf1/Type=0x010f1/g' > $temp; mv $temp $wynik cd -> /dev/null # zmiana typów # $skrypty/zamien_rampy.pl $wynik 2> /dev/null # zamień myślniki w nazwach na spacje sed '/Label/s/-/ /g' $wynik > $temp # dodaj Label2, jeśli Label ma tabliczkę i nazwę gawk -f $narzedzia/label2.awk < $temp > $wynik # mv $temp $wynik #if [ -a $skad/src/*.zakazy.txt ]; then cat $skad/src/*.zakazy.txt >> $wynik 2> /dev/null #; fi if [ $ogonki = tak ]; then # zamiana 0x2d-f na 0x04-6 (kodowanie 8bit) sed -e 's/~\[0x2d/~\[0x04/g' -e 's/~\[0x2e/~\[0x05/g' -e 's/~\[0x2f/~\[0x06/g' $wynik > $temp; mv $temp $wynik fi; if [ $NI = nie ]; then # ucinamy też dzielnice vel drugie miasta cut -f 1 -d @ $wynik > $temp; mv $temp $wynik; fi ## granice wspólne i obszar - tylko właściwe (szuka całych słów) grep -w -A 5 $region $narzedzia/granice.txt >> $wynik grep -w -A 6 $region $narzedzia/obszary.txt >> $wynik fi wojekbledy=$logi/wojek-bledy-$miasto.wpt /usr/local/bin/wojek -s $homek/gps/wojek-slownik.txt -k $wojekmapa -d -e $wojekbledy < $wynik > $temp 2> $wojeklog mv $temp $wynik if [ `grep -c . $wojekbledy` -eq 4 ] then rm $wojekbledy else cat $wojekbledy | mail aldziew -s wojek-$miasto fi ### seria podmianek: # zamiana Miasto= na CityName=, kod pocztowy też # oraz rozwiązanie sklejania ][ przez dodawanie entera między obiektami sed -e 's/Miasto=/CityName=/g' -e 's/^KodPoczt=/ZIP=/g' -e 's/^\[POLY/\n\[POLY/g' $wynik > $temp; mv $temp $wynik # dla Polski - tłumaczenie ISO-8859-2 na CP1250 if [ `echo $ID | cut -c 1,2` -eq 48 ]; then # ąB1 śB6 źBC ĄA1 ŚA6 ŹAC šB9 <9C>9C <9F>9F ĽA5 <8C>8C <8F>8F cat $wynik | tr '\261\266\274\241\246\254' '\271\234\237\245\214\217' > $temp; mv $temp $wynik fi # tłumaczenie CP1250 na bezogonkowe if [ $ogonki = nie ] then cat $wynik | \ sed -e 's/ß/ss/g' | \ tr '<80><8A><8C><8D><8E><8F><99><9A><9C><9D><9E><9F>ŁĽŠŞŽŻłšşźžżŔŕÁáÂâĂăÄäĹĺĆćÇçČčÉéĘęËëĚěÍíÎîĎďĐđŃńŇňÓóÔôŐőÖöŘřŮůÚúŰűÜüÝýŢţß_' \ 'ESSTZZtsstzzLAcSrZlasLlzRrAaAaAaAaLlCcCcCcEeEeEeEeIiIiDdDdNnNnOoOoOoOoRrUuUuUuUuYyTtB ' > $temp; else # dla wszystkich - tylko zamiana podkreślenia na spację (bo wieloczłonowe nazwy miast brane z nazw plików *.ulice.txt cat $wynik | tr "_" " " > $temp; fi mv $temp $wynik zip -qDj $homek/ftp/zrodla/net-$miasto $wynik ; chmod go+r $homek/ftp/zrodla/net-$miasto.zip #cp $wynik ~/skrypty/dla-netgena.mp /usr/local/bin/netgen -b -j -k -R -T$narzedzia/netgen.cfg < $wynik > $temp 2> $netgenlog # -e0.00002 -p5 mv $temp $wynik # KONIEC MONTOWANIA if [ $ogonki = nie ]; then cat $wynik | tr '{}' '()' > $temp mv $temp $wynik fi # poprawka (podnoszenie) leveli - skrypt Michała Jankowskiego cat $wynik | $skrypty/podnies-poziom.pl > $temp mv $temp $wynik # topo albo ogonki - koniec roboty bo serwer nie kompiluje kolorowych szlaków if [ $topo = topo ]; then zip -q -Dj $homek/ftp/zrodla/srt-$miasto $wynik; chmod go+r $homek/ftp/zrodla/srt-$miasto.zip; rm $wyslac; exit; fi if [ $ogonki = tak ]; then zip -q -Dj $homek/ftp/zrodla/sro-$miasto $wynik; chmod go+r $homek/ftp/zrodla/sro-$miasto.zip; rm $wyslac; exit; fi if [ $NI = tak ]; then zip -q -Dj $homek/ftp/zrodla/src-$miasto $wynik; chmod go+r $homek/ftp/zrodla/src-$miasto.zip; rm $wyslac; exit; fi # zwykłe - nie potrzeba źródeł # KOMPILACJA #while [ -a $lockfile ]; do sleep 15s ; done #touch $lockfile mkdir img date > $kompillog date +%s >> $kompillog nice -5 /usr/local/bin/cgpsmapper ac -m -e -l $wynik -o $img >> $kompillog #rm $lockfile date +%s >> $kompillog date >> $kompillog rm img/$ID.img.idx #sed -e 's/^0095/0097/g' img/$ID.img.idx > $temp; mv $temp img/$ID.img.idx #chmod go+r img/$ID.img.idx #if [ -s img/$ID.img.idx ]; then mv img/$ID.img.idx $homek/html/ump/update/idx; else rm mv img/$ID.img.idx; fi # sposób: luzem (na boku) mv $img $naboku/$img ## uwaga to był mv # sposób: do zipa #if [ ! -f $mapatmp ]; then cp $mapa $mapatmp; fi #zip -qm $mapatmp $img #rm $mapatmp rmdir img ### SPRAWDZANIE BŁĘDÓW ### ## sprawdzmy tylko dla wersji roboczej... żeby nie wypisywał tych samych błędów trzy razy if [ $ogonki = tak ]; then exit; fi if [ $NI = tak ]; then exit; fi # $wynik = plik źródłowy # Warning: Too many nodes (64) in road 102 (~[0x2c]69). # albo # Error R009: Limit of 60 segments for a single road exceed. if [ `grep -c "Warning: Too many" $netgenlog` -gt 0 ]; then echo -------- Błąd zbyt wielu skrzyżowań >> $wyslac grep "Warning: Too many" $netgenlog | cut -d " " -f 8 | tr " " "\n" | gawk '{print "RoadID="$0"$"}' > $temp grep -A 5 -f $temp $wynik | cut -d "," -f 1-7 >> $wyslac # grep -A 1 "Error R009: Limit of 60 segments" $kompillog | grep RoadID | tr -d " " | gawk '{print $0"\$"}' > $temp grep -B 2 -A 9 -f $temp $wynik | cut -d "," -f 1-7 | grep -E "Label|CityName|Data0|--" >> $wyslac rm $temp fi ilerozjazd=`grep -c "Warning: Road with" $netgenlog` if [ $ilerozjazd -gt 0 ] then echo -------- Rozcialem droge z numeracją $ilerozjazd razy >> $wyslac grep -B 1 "Warning: Road with" $netgenlog >> $wyslac #else rm $mapka fi #Traffic restriction for unknown points/streets #Points: 8347 , 8479 #Road: 11817 #Note - traffic restrictions can be created only between routable points. if [ `grep -c "Traffic restriction for unknown" $kompillog` -gt 0 ]; then echo Traffic restriction for unknown points/streets >> $wyslac grep -A 8 RoadID=`grep "Traffic restriction for" -A 3 $kompillog | grep Road: | cut -d " " -f 2`$ $wynik | \ grep Data0 | cut -d "," -f 1-7 >> $wyslac #| mail aldziew -s "Zakaz się sypnął w $miasto" fi # kompiler # BŁĄD cgpsmapper # RoadID = 4288 # Error R008: Too short road to be routable - coordinates were aligned to same place. #Error R010: No data for routing - remove 'ROUTING=Y' from [IMG ID] for non routable maps! # /home/users/aldziew/skrypty/UMP-Olsztyn-caly.mp(18185) : Warning W004: Cannot determine type # of element, type cannot be defined before RGNTYPE. # (typ 0x0) bo źle wklepano składnię pnt? # Błędy KOMPILATORA #Distance is below 5.4, NODID1: 2269, NODID2: 2268 RgnID: 629 #Error R011: NODID points cannot be closer than 5.4 meter! if [ `grep -c "Distance is below 5.4" $kompillog` -gt 0 ]; then echo -------- Za blisko węzły >> $wyslac grep "Distance is below 5.4" $kompillog | cut -d " " -f 10 | tr " " "\n" | gawk '{print "RoadID="$0"$"}' > $temp grep -B 2 -A 9 -f $temp $wynik | cut -d "," -f 1-7 | grep -E "Label|CityName|Data0|--" >> $wyslac rm $temp # =?iso-8859-2?Q? i na końcu ?= fi # UMP-Kalisz-caly.mp(9411) : Error E019: Street cannot intersect with itself! Split this element! #Warning: Road 544 (~[0x2e]41) passes through node 2099 (50.46705,17.34140) more than once. if [ `grep -c "Warning.*more than once" $netgenlog` -gt 0 ]; then echo -------- Za duże zapętlenie >> $wyslac; grep "more than once" $netgenlog >> $wyslac fi # cannot parse coordinates ? # /home/users/aldziew/skrypty/UMP-Zamosc-caly.mp(29114) : Error E038: Type of element cannot be 0. if [ `grep -c "Error E038" $kompillog` -gt 0 ]; then echo -------- Linia typ zero >> $wyslac for linia in `grep "Error E038:" $kompillog $wynik | cut -d "(" -f 2 | cut -d ")" -f 1`; do head -n $linia $wynik | tail -n 3 | cut -d "," -f 1-8 >> $temp done cat $temp >> $wyslac fi # Błędy NETGEN # Restriction: TYTUŁ. Number of roads connecting node 3398 with node 3390 (0) is other than 1. ilerozjazd=`grep -c "Restralnum:*:" $netgenlog` if [ $ilerozjazd -gt 0 ] then echo -------- Restrykcje sztuk $ilerozjazd się nie wpasowało >> $wyslac; grep "Restr[a-z]*:" $netgenlog >> $wyslac #else rm $mapka fi # UMP-Szczecin-caly.mp(119665) : Warning W005: Error reading data. if [ `grep -c "Warning W005:" $kompillog` -gt 0 ]; then echo -------- Dziwna pomylka >> $wyslac echo > $temp for linia in `grep "Warning W005:" $kompillog | cut -d "(" -f 2 | cut -d ")" -f 1`; do head -n $linia $wynik | tail -n 3 | cut -d "," -f 1-8 >> $temp done cat $temp >> $wyslac fi if [ -s $wyslac ]; then ( cat <<EOT MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-2" Content-Transfer-Encoding: 8bit From: bledy <bledy@ump.waw.pl> To: $komumaile Reply-To: aldziew@ump.waw.pl Subject: [blad] Bledy w UMP-$miasto EOT cat $wyslac ) | /usr/sbin/sendmail -t fi rm $wyslac chmod go+r $wynik 2> /dev/null #mv $wynik $homek/skrypty
generuj indeksy
też trywialny
#!/bin/sh homek=$HOME cvslogstat=/tmp/cvslog-stat.$$ tmp=/tmp/cvslogtmp.$$ skrypty=$homek/skrypty html=/home/services/httpd/html/ump wynik=$html/cvslog.html #lockfile=/tmp/cgpsmapper.pid #while [ -a $lockfile ]; do sleep 15s ; done cd $homek/cvs #cvs -d:pserver:aldziew@localhost:/home/cvsroot log -d 31day -d now > $cvslogstat 2> /dev/null cvs -d:pserver:aldziew@localhost:/home/cvsroot log -d "> `date -d "1 month ago" "+%F"`" > $cvslogstat 2> /dev/null #cd - > /dev/null gawk '{sub(/aldziew;/,"Alf/red/"); \ sub(/blackpeter;/,"BlackPeter") \ itd. itd. sub(/Zachu;/,"Tomek_Z") \ sub(/Jarek_K;/,"Jarek_Ko") \ ;print}' $cvslogstat > $tmp ## pamiętaj nie dawać spacji w nazwach ! mv $tmp $cvslogstat rm -f $html/logi/* gawk -f $skrypty/cvslog_filter.awk $cvslogstat > $wynik chgrp http $html/logi/* chmod g+r $html/logi/* rm $cvslogstat