1 Commits

Author SHA1 Message Date
Thomas Klaehn
a945c08e80 error in mqtt fixed 2016-05-02 11:21:37 +02:00
9 changed files with 245 additions and 952 deletions

View File

@@ -4,10 +4,10 @@ DEP := \
config/headfoot.tex \
config/sourcelst.tex \
config/titlepage.tex \
content.tex \
title.tex \
Makefile
DEP += $(wildcard ./*.tex)
all: $(MAIN)
clean:

View File

@@ -1,440 +0,0 @@
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner
%%Title: Laird Logo_TM Mark_RGB_200.eps
%%CreationDate: Mon Apr 11 10:58:39 2016
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%Pages: 1
%%BoundingBox: 14 14 215 108
%%EndComments
%%BeginProlog
% Use own dictionary to avoid conflicts
10 dict begin
%%EndProlog
%%Page: 1 1
% Translate for offset
14.173228346456694 14.173228346456694 translate
% Translate to begin of first scanline
0 93.01903937007873 translate
200.04094488188974 -93.01903937007873 scale
% Image geometry
200 93 8
% Transformation matrix
[ 200 0 0 93 0 0 ]
% Strings to hold RGB-samples per scanline
/rstr 200 string def
/gstr 200 string def
/bstr 200 string def
{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop}
{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop}
{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop}
true 3
%%BeginData: 17923 ASCII Bytes
colorimage
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
ZMsq(q>10kf`(sLqYLKrs8;ios8C+?J,~>
ZMsq(q>:6lf`1dFs8N6"rVccpb5Zt~>
ZMsq(q>C<mf`1dG!WW/ur;lrsb5Zt~>
JcG<@!<1+?J,~>
JcG<@!<1+?J,~>
JcG<@!<1+?J,~>
kl:GWf)GmPs5p>brN6:,X6]fbgA_5dX0;K)#d!^bX2;pPbPo]bJ,~>
kl:GWf)GmPs6$GerN?@.XR#ocgA_5eXK_Z,#d*ddXM`-TbPo]bJ,~>
kl:GWf)GmPs6dhHr5SoYnc/UBrrLKcr5T)_q!uDSg%sJ&bQ!(~>
[/U:,s02P+r;Zs%!5AL2gA_4'!!<&u#L`X5b%JP)rlb=l~>
[/U:,s02P+r;Zs%!5AL2gA_4'!!<&u#L`X6b%S\-rlb=l~>
[/U:-s2I)hrBpcW4ja6-gA_4`4\#B<#X[DJYhG>lQN#)-J,~>
lMh"cs(NrAr\Xg;/7AMWf`)*Ps0;V/r<!0+!5JR3gA_4)!!W<'#Q`?QW8!DZNVUctJ,~>
lMh"cs(j;Lr](*C0P(4_f`)*Ps0Mb5r<EH3!5\^5gA_4-!"&T/#R/WUWS<P_NqpluJ,~>
lMh"ds-RYHrcA9cDNb&!f`)*Qs2mi0rD3Vo8^m_<gA_4j8l>O`#Z'@X_<%nsY5?EBJ,~>
lMh"cs$?\frW!''!&srWf`)*Ps02P+r;Zs%!5JR3gA_4'!!<&u#L`Y+mb,b7qof"i~>
lMh"cs$?\frW!''!&srWf`)*Ps0D\1r<*6-!5SX4gA_4*!!`B)#QiHSg@!Y;fDEbkJ,~>
lMh"cs)pLqr^I#]4`:<!f`)*Qs2dZ*rD!Jk8(7M:gA_4i7o0(Y#Yj7Wjn%TgjS[4$J,~>
lMh"cs$QhkrW<9-!'1)Yf`)*Ps0;V/r<!0+!5JR3gA_4'!!<&u"k3MMs8W)?s*t~>
lMh"cs$m%rrW`Q5!'L;\f`)*Ps0Mb5r<EH3!5\^5gA_4*!!`B)"p39RrVuosao?k~>
lMh"cs*[C8r_N_q89Y%4f`)*Qs2mi0rD3Vo8^m_<gA_4i7o0(Y##4%UrVuosao?k~>
lMh"cs$?\frW!''!&srWf`)*Ps02P+r;Zs%!5AL2gA_4'!!<&u#1NVMrr2lpb5Zt~>
lMh"cs$ZnmrWE?/!':/Zf`)*Ps02P+r;Zs%!5AL2gA_4*!!`B)#6NBSr;Q]orQ>.j~>
lMh"cs*R73r_<Sm7We\0f`)*Qs2I,jrC$iY510E/gA_4i7o0(Y"ARhSrVulrb5Zt~>
lMh"cs$?\frW!''!&srWf`)*Ps26`ZrB:?L2U;@$gA_4'!!<&u!n72J`rCP~>
lMh"cs$ZnmrWE?/!':/Zf`)*Ps2?oarBUQR3m[j)gA_4*!!`B)!s6sOrPnkf~>
lMh"cs*R73r_<Sm7We\0f`)*Qs427=rH\TnFl*/sgA_4i7o0(Y"&7_RrPnkf~>
lMh"cs$?\frW!''!&srWmf*@frVZNh!rW#rc2RhDrVcTtrVlis.0'GI!!:XLrPnkf~>
lMh"cs$ZnmrWE?/!':/Zmf*@frVZNh!rW#rc2RhDrVl[!r;HWps""-Sr<*3(e,TBds*t~>
lMh"cs*R73r_<Sm7We\0mf3=d!<)cls8;rsc2RhDrVl^"rVlfrs(b,#rD!Ghi;`bqs*t~>
lMh"cs$?\frW!''!&srWnc/Xd!<2Wj!r`#pq>UHoq>(*jrVllrqYU?mrVm'"qtp<hrVQTqrVQHk
"o\>t.0'GI!!:XLrPnkf~>
lMh"cs$ZnmrWE?/!':/Znc&[gqu66f!r`#pq>UHoq>(*jrVllrqYU?mrVm'"qtp<hrVQTqrVQHk
"oeDu/-#nQ"9S_Ss8Bt;J,~>
lMh"cs*R73r_<Sm7We\0nc/Xe!<2Wj!ri,sq>UHoq>C0j!<2in!<2rs!r`&prr)`o!WDrmrrrE"
rbG#"rD!Ghi;`bqs*t~>
lMh"cs$?\frW!''!&srWmf*^efY42FL4b/<S[6Z2rr3#sro3qYr;HBi&H;V-s7OR6Q'ef0r;ZdG
!!<&u!n72J`rCP~>
lMh"cs$ZnmrWE?/!':/Zmf*^eftXGLLkUSDT!Zl5rr3#sro3qYr;HBi&H;V-s7OU8Q^Y25r;ZdJ
!!`B)!s6sOrPnkf~>
lMh"cs*R73r_<Sm7We\0mf*^ijjLuPXJr5(]?B('rr2usiVrrWrqHF(rr)lsptN]q\B*e1s8Qk*
:]4#j:#Q'M`rCP~>
lMh"cs$?\frW!''!&srWo)AmlVe.q)!qu[!&Ntm/s8;lqrt>>2mT*"W:/4SW>kS-rr;W$K;>s<*
;*q\jq>^HBP@dfdVuQ\prqufFA/Y:F"p6E0jt$K6qu?fIs8Bt;J,~>
lMh"cs$ZnmrWE?/!':/Zo)AmlW+\:3"o&'&!YmtVj8]&Vrr3W1s6a#c;Gg:h:1*\orque_79'7`
(0!`2s7u]oe!+QK9WA'is8Mrre7Td&r;[$+0S\^C!!`B)!s6sOrPnkf~>
lMh"cs*R73r_<Sm7We\0o)B!p_Nf:N:Idc=rBU`V78-p1XR,ucrr2p#rr;SIK)UE1Kn59Zs8Mus
[<mZ-KHZ(sbl@S?s5:8LM1NPDrVulqs5B2M8jbp36r.["mVPHirD!Ghi;`bqs*t~>
lMh"cs$?\frW!''!&srWo`#3rs6p^&!<<*$q?.!)!<<-#$&&<Ws8N`2s5j[h!<<*#!#4r&rql_-
!!N9$('FW#s8KPi!<<*&!-A2;rVlV6!WW3$rWEB,!!*'4%/Kr*e,TBds*t~>
lMh"cs$ZnmrWE?/!':/Zo`#6ss6p^&!<<3+#Q"c2#6Y#-!"=V]rr<!2rr;*g!!*'"!<<i's8Moq
AcMu5!$DCEP5kNm4p(cb"9<NCqu-NiFT_[F"U>;=#6Or+'bCED"9S_Ss8Bt;J,~>
lMh"cs*R73r_<Sm7We\0o`#6ss7K8R7nQKO;#=)q:ejYP5uXf_rr2p1rr;@Y5t"(-6pFTBs8Mrr
N]'B+6QeiVYQ+UJG>(:h7Q$P4r;Q`nT1_LC:Janc:ejMG=]\;p:'45Ks8Bt;J,~>
lMh"cs$?\frW!''!&srWo`#3rs6pj*"9AN'quQ`r*!$-E!ruF&rr<#ts5sjl"9S`/!#P/)rql_/
!!iK*'aF`,s&K+#!<`N2!-S><s6r5Q!sA]&!!*-(p](BEs8Bt;J,~>
lMh"cs$ZnmrWE?/!':/Zo`#3rs7%$1#R(A7r!!$%*!HQQ"9;X*rr<#ts5t!t#R:S?!ZU\0rql_1
!"8c2'ak#1s&f=%":,8@!-eJ>s7&DU"pbD0"9Si6!X&<&!s6sOrPnkf~>
lMh"cs*R73r_<Sm7We\0o`#3rs7K_n;,9q^rD3>d"]%rl9g+F5rt>>2moW=^:f("_?M4?tr;W'N
;uTT.;a\(pMaU!/;,L7[TE"fgom&_s;,@'a"&Mif9`%Qe:#Q'M`rCP~>
lMh"cs$?\frW!''!&srWo`#3rs6p^&!WrQ,qu?d""9JH$)$'pAJH,QIrr;-h!!*'"!<<i's8Moq
AcMu5!!WK)CGl.q"9&9,"9<NCqtrh^"p+W%!!<-&rrW6%q>^TGs8Bt;J,~>
lMh"cs$ZnmrWE?/!':/Zo`#6ss7$p+"pYD<!r`0%!s])8r<*uA$35\Xr;Zcrk77Rs"9\l.)"IY*
qu:=0#lXr2"orL"!!`c.":5>6FoV@:7K<c!qud!(rWiQ1"pOl,!s6sOrPnkf~>
lMh"cs*R73r_<Sm7We\0o`#L%s7KYi:Janb9hS)O9i+\_rD"5+;a%#XrVulsmT*"W:/4SW?1n6s
r;W$K;>s;p:e$jn5#>)T:'a]_T)\`eHU(O,:&n,i;?'Jh:'45Ks8Bt;J,~>
lMh"cs$?\frW!''!&srWo`#*os6pg)!r`0*"r%jc"98E&!W<!8!<<_ns8N#tk6h7j!!!$"'_)/%
qu:7."T/9"!<<6"!!`W,F8u8c!!W9#rrVcl!n72J`rCP~>
lMh"cs$ZnmrWE?/!':/Zo`#*os7%$1"TAB,$5XWr#64`+#5nZA"Tf>!s8N#tk77Rs"9\l.)"IY*
qu:=0#lFf,!s/`*":#24FoVJg!"&Q+!<r`*!!!&r"9S_Ss8Bt;J,~>
lMh"cs*R73r_<Sm7We\0o`#O&s7K\m:.@N=;d<[5;+<iF;#O-+:J=dUs8N#tmT*"W:/4SW?1n6s
r;W$K;>j5l:J+/Tr([Jo6(\,VTg)HQ:'XTk7m]L-6V@2M"&7_RrPnkf~>
lMh"cs$?\frW!''!&srWo`#R's6p^&"uh%Di:-@*gq%S?!!3#u(Ba`1s82fqk6h7j!!!$"'_)/%
qu:7."T/6%!<N6%r<!9/!-/%`"on]&!!iW,!AA#5G#9.Q!!:XLrPnkf~>
lMh"cs$ZnmrWE?/!':/Zo`#R's6pa'#WmUMiUHI+h7IhE!!W<((C1#6s82fqk77Rs"9\l.)"IY*
qu:=0#lFf-"U5)5r<EQ7!-A1c#Qt>0":>>7"#=M>GZ5[b"oJK*!n72J`rCP~>
lMh"cs*R73r_<Sm7We\0o`#R's7K;S:j&Y^lLjoCkKff&85K1Z(K!N2s8;lrmT*"W:/4SW?1n6s
r;W$K;>a2h:B=3drD3Yq6Cn/4:&@Zl:e+)rPbt+/?qpMn"&7_RrPnkf~>
lMh"cs$?\frW!''!&srWo`#*os7B3>h"gsRrVtRi!!<-"(Ba_Ss82fqk6h7j!!!$"'_)/%qu:7.
"T/6$!X&Q%!!WQ+E;s2D"T8<&!WXglrr30$s7.<5!rN$#e,TCHr;Oq?J,~>
lMh"cs$ZnmrWE?/!':/Zo`#*os7B<Ch"gsRrVtUm!!`E*(C1"Xs82fqk77Rs"9\l.)"IY*qu:=0
#lFf,"pbA0!!WQ+EW9AG#lOl."op<srr30$s7.E8#5nZ,!n72J`rCP~>
lMh"cs*R73r_<Sm7We\0o`#*os7hDJkP>,]rr;+e8l,F](K!Mcs8;lrmT*"W:/4SW?1n6sr;W$K
;>a0!:f0t[7RTX690\pGN'^D?:'4<^CYA^e"oePqAP#\r:'45Ks8Bt;J,~>
lMh"cs$?\frW!''!&srWmf*:dr;$Zqr;HNmNW94]!#G_;;?-Rms5sai!<<*#!#4r&rql_-!!N,u
$iq,#77B-]!.4MN!!3'!%0?MVli6q\qtg6j.0'GI!!:XLrVHNorVl]rrVlfGs*t~>
lMh"cs$ZnmrWE?/!':/Zmf*:dr;$Zqr;HNmO8oRc";_:C;ucdps5smn"U"r3!#Y8+rql_/!!rK*%
KZV3)`UAZ3[k&Wq%*Q1rWEZ7!%@46rVQKgr;S>K#5nZ,!n72JqZ$Kmdf4g~>
lMh"cs*R73r_<Sm7We\0mf*:drqm*"r;?Nmr;X#g;>s<,:d^!;rVlib<_Q:a:/=Jfp&G$hs-5oJ
rD!l!7mTdSEdiIZBM##s<(p*e:'FEaAb,m#rqlots(b,#rD!Ghi;`bqs*t~>
lMh"cs$?\frW!''!&srWnc&Ufrqc]pqu6irm-U>D!r`09!rtsnr;HZY$NL2-!!*'6nGiLbs(266
rW!*'!&p@koDS[mqr.LQ!!E0""9JS+s7uZo"oeQ$-ia>H!"%-SrV#L7hrXA+q>UWsr;?NmrnII'~>
lMh"cs$ZnmrWE?/!':/Znc&Ufrqc]pqu6irm-^GF#6"`A#67Kur;HZY%flh:"9ecBnc/Ucs(DB<
rWEB/!'6Upo_ndnqr7RR!!iH*"9nk0s7uTm"9'hO#5nZ3!n72Jr:p!Yp\Ombs8DrMs*t~>
lMh"cs*R73r_<Sm7We\0nc&Ufrqlcqqu6ito(0I`;#X3+:dfm7rVlib<_Q:a:/=Jfp&G$hs-5oJ
r_<Vm8T_N!p\k*qr9O@!6W*eW"AhS-s82]n!bt8%rD!Ghi;`bqs*t~>
lMh"cs$?\frW!''!&srWnc'*ur;ZfrijOh\9J[h*#Qai'(BXY0s8;iqk6h7j!!!$"'_)/%qu:7.
"TAB3"9=_equ?ZorVlios(VN:rW!$%!%%I:rrOVL!rN$0e,TCDn_qWnOaM;#Pd&EopA4dlrqu]m
ro!g,~>
lMh"cs$ZnmrWE?/!':/Znc'*ur;ZfrijXtb:,aF6$jHP3(C'q6s8;iqk77Rs"9\l.)"IY*qu:=0
#lXr;#QU4kqu?ZorVlios(_T?rWE<-!%@[=rrO_O#5nZ:!n72JrqlEXk2"Y=fA>][p\ajerr1gT
J,~>
lMh"cs*R73r_<Sm7We\0nc'*urVuoslclZ$K5tO-<)<Ee(JmMNs8DrsmT*"W:/4SW?1n6sr;W$K
;>s<$;*q_kr;ZcprVlips->uKr_<Pk88%eprrQt+:]4#j:#Q'M`rCP~>
lMh"cs$?\frW!''!&srWo)Jag"TRA11'dCN(BXY/s8;iqk6h7j!!!$"'_)/%qu:7."TAB)"9=Vb
q>U?m"oeH"5QCoc!!EE)?2sj!rrOVL!rN$"e,TCDrsnVJVg2)u1dYGnQa4ltq>C6qrqu]mroO01~>
lMh"cs$ZnmrWE?/!':/Zo)Jag"TRD42@B9\!<NB$";_:C9`P%hs5smn"U"r3!#Y8+rql_/!!rQ,
"UG*ms7uZmrrrE"s$?\jrWE?0!+5d(qYpUJ!!`B)!s6sOrVQU)qsiatahbd3c.:e8n+ZeXs8N#Y
s*t~>
lMh"cs*R73r_<Sm7We\0o)B7"rVu,\EDo:l6:=:792&(X:)?_pJcG]Js6`o]:JOY\8mV,irque]
6;d_W"]7Uns82forrrE#s*7%0r_<Sn6B;*EqYpV47o0(Y"&7_RrPnkf~>
lMh"cs$?\frW!''!&srWoD]*ps7:17!!*'%rWN6'rr`<(qu@N8!(m4grVu$g!!*'"!<<i's8Moq
AcMu5!!EE)PlLXYrrrE%s![pLrW!'(!/:IMqYpUG!!<&u#h/hPs8W)srVlcq&,tRpI8)=?.l^""
DiV'Lmem(erVZWnl2Q8~>
lMh"cs$ZnmrWE?/!':/ZoD]0rs7:7;!!!'*#RLD7rs/T0qudf@!)3FjrVu$k!<iT/"TTD0s8Moq
BE/>;"9\u1QN-jXrrO_O#6"`.#QTY[qtg<o/-#nQ"9S_Ss8Drss8Moq%ef);aM,=$_T'dIgun5(
r;Zcqkl6/~>
lMh"cs*R73r_<Sm7We\0oD]0ss7`$\5t4RF;,R<hs%rbmr(\&)7"PC:rr;Ce9M\DY:J+pcs8Mrr
PsS@I:'=E\[K$1#rrQq+:]=)l;*h5^r;-EpCI_2!:'45Ks8Bt;J,~>
lMh"cs$?\frW!''!&srWo`#@!s5Yd4!X&T+!!39)pAc!3!(m4grVu$g!!*'"!<<i's8MoqAcMu5
!!EE)PlLXYrrrE%qB,b>rW!'(!1NrbqYpUG!!<&u!n72Jqu6ctrVZTlrt,"USRju>2*!NM3D!_8
Y1<4DrrW/srTsQ7~>
lMh"cs$ZnmrWE?/!':/Zo`#C"s5Yj6":,28"9o,9!r`0"!W3':#67Htr;HZY%flh:"9ecBnc/Uc
s(DB<rWE?0!1*Z^r;Qs"s8!r?#6"`.#QU@oqtg<o/-#nQ"9S_Ss8Dforr2lr&H21Yd)<]8_SO%)
a3WH$o)/Idrr29aJ,~>
lMh"cs*R73r_<Sm7We\0o`#R's6XYf9i4_^:/Fe`9h@iB7SitX(JmMNs8DrsmT*"W:/4SW?1n6s
r;W$K;>s;n;*q\jr;-Eqqd`8or_<Sn6Fm-oqYpV47o0(Y"&7_RrPnkf~>
lMh"cs$?\frW!''!&srWp&>6qs7nSR"p+]'!!<-""pZ)$:I+s]rW!`:!(m4grVu$g!!*'"!<<i'
s8MoqAcMu5!!EE)PlLXYrrrE%q]Pq@rW!'(!1j/eqYpUG!!<&u!n72JpAY3mr;HWp&cUOS=uSK2
6TmCb1-89PT?[!,rrW2trU9c:~>
lMh"cs$ZnmrWE?/!':/Zp&>6qs7nYT$3gD3$3gM2!"'f(;*t<erWF#B!)3FjrVu$k!<iT/"TTD0
s8MoqBE/>;"9\u1QN-j[rrrE%q]u4HrWE?0!2';gqYpUJ!!`B)!s6sOrUp3jrr)j.o\ds0_T'R4
_SEt(ajf;=qu-QprpTl;~>
lMh"cs*R73r_<Sm7We\0oD\pjEC!P%:'sfg5t=j^E.rX3:]=**:dfm7rVlib<_Q:a:/=Jfp&G$h
s-5oJr_<Sn6FHjkqYpZqAP#\s:'=E\]`7p+rrQt+:]4#j:#Q'M`rCP~>
lMh"cs$?\frW!''!&srWp&>0ls,@!^r;[3+!%NiAiV*3LYlFn*!#G_;8cS_es5sai!<<*#!#4r&
rql_-!!N9$"9\^hs82Wl!\=<QrW!'(!0R<YqYpUG!!<&u!n72JoD]j1rVZZps8'QG2*=5l6UO.%
2DR6eG,sO!s8W)rrpp)>~>
lMh"cs$ZnmrWE?/!':/Zp&>0ls,I'dr<*K3!%j,GiqNBNZN(70";_:C9`P%hs5smn"U"r3!#Y8+
rql_/!!rQ,":,!ns82Wl!\XNXrWE?0!0dH[qYpUJ!!`B)!s6sOrUU!grr2p#rTqqJ_u7O[`5BF,
_8t0gp&4mjrpg#=~>
lMh"cs*R73r_<Sm7We\0p&>0ms/nRarD!_r7;K$TlhUMZa[Au):)?_pJcG]Js6`o]:JOY\8mV,i
rque]6;d_W"AqLns8;]m!c1A'r_<Sn6F6^iqYpV47o0(Y"&7_RrPnkf~>
lMh"cs$?\frW!''!&srWoD\kG!!<-"$j$E?s8W)us82i"!!E3#(BXY/s8;iqk6h7j!!!$"'_)/%
qu:7."TAB("9=\dqtpBrrVo1a"9&9'"9<NCqtg<o.0'GI!!:XLrU9alrVZZps1_Ag6iK=]5sdq*
4Z+uZ@[bsJs8W&ro`'F~>
lMh"cs$ZnmrWE?/!':/ZoD\kH!!`E*$jQcFs8W)us82i#!!iK+(C'q6s8;iqk77Rs"9\l.)"IY*
qu:=0#lXr0#QU1jqtpBrrVo7c#Q=i/#QT#Iqtg<o/-#nQ"9S_Ss8DEds8N#t"7+(F`VmaS`<O5r
^r4RWoD\airq$/?~>
lMh"cs*R73r_<Sm7We\0oD\l-85T:\!`2=Lr;Qots2RQ)r_=8+7"PC:rr;Ce9M\DY:J+pcs8Mrr
PsS@I:'=E\[K$1%rri?$HUUd1:'=E[T)\`brrQt+:]4#j:#Q'M`rCP~>
lMh"cs$?\frW!''!&jlTpAGa's5+(^!<<*#!#"VtqY^<kqu<o$"9&9:!rtpmr;HZY$NL2-!!*'6
nGiLbs(266rW!'(!0mN\qu6frs'l$3rW!''!'pS_rVm'#s8FDH!rN$"e,TC5rs&E"s7'ta6i0+X
5sdq(3&3R*VsOH_rVlNjJ,~>
lMh"cs$ZnmrWE?/!':/XpAGa's5+1c"U"r3!#Fo#qY^<kqu<r%#Q=iB#67Htr;HZY%flh:"9ecB
nc/Ucs(DB<rWE?0!1*Z^qu6frs()09rWE?/!(-_arVm'#s8FPL#5nZ,!n72Jm/R+b"TSAI_8Z8h
s2>;__SF%7jSAiUrq6;A~>
lMh"cs*R73r_<Sm7We\/pAP3ns6*?Tr_<nu93^rdqu-NnrVsu-;#X3+:dfm7rVlib<_Q:a:/=Jf
p&G$hs-5oJr_<Sn6FHjkqu6fss,o]Gr_<Sm7="q3qu6ctC.M/!:'45Ks8Bt;J,~>
lMh"cs$?\frW!''!&srWpAY9ns2tBCrW!'&!&+?MrVm#ts02P+rW!`:!(m4grVu$g!!*'"!<<i'
s8MoqAcMu5!!EE)PlLXXrri6!OoPXa!!NB'"kEYLrr2rq"90eM!rN$"e,TC3rrr?#q.DWQpco0Q
6U<[e7uQF-rVlQkJ,~>
lMh"cs$ZnmrWE?/!':/ZpAY9ns2tBGrWE?.!&FQPrVm#ts0;V0rWF#B!)3FjrVu$k!<iT/"TTD0
s8MoqBE/>;"9\u1QN-jZrri6!P5kmf"9er2#hK%Prr2rq"90qQ#5nZ,!n72JlMh%es8C<\`V@CO
`<X>u^rG.&s8M`lJ,~>
lMh"cs*R73r_<Sm7We\0pAY9os4U(@r_<Sm7rSD+rVm#us2d]+r_=8+7"PC:rr;Ce9M\DY:J+pc
s8MrrPsS@I:'=E\[K$1%rri9"Z9hFe:(9ooirAoTs8Mups(b,#rD!Ghi;`bqs*t~>
lMh"cs$?\frW!'&!&<`tp>Z54n&bJ-"TeZJqYp?jqZQcqW;m&"!#G_;8cS_es5sai!<<*#!#4r&
rql_-!!N9$"9\^hs82]n"TAAC!!3#u%0HT)s8W)us8N&Y(]XU7!!:XLrTX=`r;YLB5R9\D4u5Hj
p](3es*t~>
lMh"cs$ZnmrWE?.!&Ws"p>Z;6n&YP5rWEB/!%.RAqYg9ns/Q,)rWF#B!)3FjrVu$k!<iT/"TTD0
s8MoqBE/>;"9\u1QN-jZrri<#b5__E":YS9:]LIos8W)uiu7t%r<*3(e,TC2rrW3"o^g$$`<=)o
`8COes*t~>
lMh"cs*R73r_<Sm7r[t`p?VnHo[un9:'FEaB)MZ*rVQct`'dH$:)?_pJcG]Js6`o]:JOY\8mV,i
rque]6;d_W"AqLns8;co"TAAS8l,C\!`2=:r;Qs"s6O)b:]4#j:#Q'M`rCP~>
lMh"cs$?\fqu?]uo`ta."V\`b!!3'!"9ALfs8Drs"TG;8!!3'!(BXY/s8;iqk6h7j!!!$"'_)/%
qu:7."TAB("9=\dqtpBsrr;jF!!<*!$N^;n]^,Fdd!??*!W)iue,TC1rri<#F#HAW5R0SB5VQR,
s8MioJ,~>
lMh"cs$Znmqud!(oaD$6#oCGm!!W?)"9njms8Drs"TGA>!!W?)(C'q6s8;iqk77Rs"9\l.)"IY*
qu:=0#lXr0#QU1jqtpBsrr;mI!!`B)$O-St^$PUfd!ZZ0"oJK*!n72Jkl1ebs4"m(o>CdN`4sRk
p]#a~>
lMh"cs*R73r([5foMbrk>gukKrD!Jk8@AKsrr3-#_d?&4r_=8+7"PC:rr;Ce9M\DY:J+pcs8Mrr
PsS@I:'=E\[K$1#rr`4585K1Z$W'9;dIR50hkXFJ:]*ri:#Q'M`rCP~>
lMh"cs$?\fmf3Om!!V4<!!<&u#Q[GRU7??V!!2ut(BXY/s8;iqk6h7j!!!$"'_)/%qu:7."TAB(
"9=\dqtg<qqu;9K"T/6+!W`92+Vt.Z!<N#s!n72Jkl1e`s,o0*nN[7H1fa#ErqcYF~>
lMh"cs$ZnmqZQQn"p4i1h`(T?qud9,8r]U:G:rpuqudf@!)3FjrVu$k!<iT/"TTD0s8MoqBE/>;
"9\u1QN-jYrri6!KE);U":585!"pRs!rrE,qZI!&e,TC1rri?$h8%#"_un#pb51o5J,~>
lMh"cs*R73qbHcW"\VYUECNb&:'s]eJ?Q`!T5?tg:]4$):dfm7rVlib<_Q:a:/=Jfp&G$hs-5oJ
r_<Sn6FHjkqYp]rs//.\r([Pp7RgNm?V<[X:]!lh:#Q'M`rCP~>
lMh"cs$?\fqZ-9i"p+c+mY:cGqu?]uqZ$X#!rN$7!rtpmr;HZY$NL2-!!*'6nGiLbs(266rW!'(
!0mN\qYp`us6CR'!rN$!!s8H%!W`K.q#CKFs8D0]"T8:P1dgat"@Y#+s8;`nJ,~>
lMh"cs$ZnmqZQQq"pP/6mt^rMr<3-(qZ$U&qZI]?!)3FjrVu$k!<iT/"TTD0s8MoqBE/>;"9\u1
QN-jYrrrE%lPom/qud91"p"](":>A9qZI!&e,TC1rri?$ftbSr`!")ph>dKNs*t~>
lMh"cs*R73qbHcZ"\qndW]sDZ:'aW`5smt)7oE(Z:)?_pJcG]Js6`o]:JOY\8mV,irque]6;d_W
"AqLns8;`n"oePm>=q`i:B+,p91VZM;GU$a:'45Ks8Bt;J,~>
lMh"cs$?\fmf3Rn!!D6O)?9p<!!!-#"9\o4!"T,/!#G_;8cS_es5sai!<<*#!#4r&rql_-!!N9$
"9\^hs82Wl"oSCu!!EB#!!WH*!X&K-#PnE%e,TC2rrrE%mnZ&3n3@%A3FhjaJ,~>
lMh"cs$ZnmmfWk!!sdiV)ZU0A"98]+#QtJ?!"oJ6";_:C9`P%hs5smn"U"r3!#Y8+rql_/!!rQ,
":,!ns82Wl"oSD!!!``*":#)7"pb57$Np;0!s6sOrTF1^qT6YC_u[a$q#>j~>
lMh"cs*R73mS3s\;![j[85]:[!)WYl"B&)c<_rZh(JmMNs8DrsmT*"W:/4SW?1n6sr;W$K;>s;n
;*q\jr;$?rrVs`$:f.$ar_EYp8P<#Wr([>gi;`bqs*t~>
lMh"cs$ZnmmfWt$!sm]^]*A<="9SQ'#Qb,2!<?]-!!`E*(C'q6s8;iqk77Rs"9\l.)"@S)qu:=0
#lXr0#QU1jqtU0rr;VHN!X&T+rW!3*"9SW;Yql@ar<*3(e,TC3rrrE"s+iL!mm%"C2KAcqqYu'~>
lMh"cs%!+tmg'7,#7TDf]EnQD#R:83#R1P>!WZo2!"/]2(CL4=s8;lrk7\"*#RC_=*:a(.qu:F3%
/pM8$il[pqtU0rr;VNP!sf,8rWEK1#R18EZShdjr<NK0eGoL3rri?$g;(\r`!"&qe,TFDs*t~>
lMh"cs*dL;mSO]q<9O;/9h&#X:JX_]:Jjt[5F0,W;Z9N0;b)N@rVlic=\hpm;,U+qp&G$hs-H/R
r_Wet7CW<pq#:Tts/SFX;G^0g:'aWm:I/.+E_01-;$0YRs8Bt;J,~>
lMh"cs$?\fmf3Xp!!M-Xs2QGd!W2p&!<=4<s02P+rW!`:!(m4grVu!f!!*'"!<<i's8MoqAcMu5
!!EE)PlLXTrs8Q&U_<_/!!!&u!!QHes!IdJqu?fIs8D9`"oSB"RP[A"5QsG@0u*beqYu'~>
lMh"cs$?\fmf4+(!!M0Ys2ZYi!<<-&!<<-#,GtLG!!E3#(BXY/s8;iqjpM.i!!!$"'_)/%qu:7.
"TAB("9=\dqtL+'r;WW0!!*'&"Tn`)!F"[d-ia>H!!:XLrTjIerr<#V^r>`["NA.As8MlpJ,~>
lMh"cs)^7imR%^U8*BpPfkEc?8PDiP84,^S_>hJ77K,Xj76#VnrVlia90ks56UX.:p&G$hs,K!,
r^-fX2R3;[p\tm)s1qo*78$BO:.diDN:-^S4@T39"$tfDrPnkf~>
lMh"ds1+Vmm[t;eU@\E_s7`?e+US>[,Z^f8s8V&IU&L\kTpr[orr2rkUn@UY$(e*ls8W)u`gNP"
TELsVfDkgCrt52/m?'UG!<<0=>fm$Fr3)ZbrLa7bmf3:Srs/Q$rVuG<1ICOq"[kO.RK*9^s*t~>
lMh"ds14brm\1GiV"=Was7`Ei,Rt(j-s3G@s8V&KU]-toURf*urr2rkVP3s_$)"9os8W)ua./q(
U'.6]f`1sErt52/m?0dO"98TG?HW<Ir3;lhrLsCfn,NCSs8W'$s81E``UC_I`P]IJp]#a~>
lMh"ds3J<lmCj:Lp](3lqS@qu<Dce1MSf/gs6@52rk8]R]$^QWs8Vo2^&>YO]u0aIs8N&N\\J-X
"M_M.s8M`l&cMb$Z[,hN8krcSgAh0NaLo:d^&u(@s8L%<J,~>
c2S4Nrr<#pjkT%rs8W)rcMn=Nrr<#fe]QM:s8W#qjSoMar;Q`o[8/VHnN[=F6U*=q[/^+"s*t~>
c2S4Nrr<#pk2#7us8W)rcMn=Nrr<#ff#u_=s8W#qjT#8Zs8N6$kfLWZnAGOM`5'CVs8MfnJ,~>
c2S4Nrr<#rmH<s:s8W)scMn=Orr<#jinNPhs8W&s])R9~>
kl1Y\lMCS\rr3'!qu$Bl"oS8ss8W)pqZ-Qls7uQirrE#oqZ-TcrrW2srVZ]qr;Q]rr;-9jrpp's
rr)cos8Vbu?Saf3o0<UJ6UNpj6Ak%-rV->B~>
kl1Y\lMCS\rr3'!qu$Bl"oS8ss8W)pqZ-Qls7uQirrE#oqZ-TcrrW2srVZ]qr;Q]rr;-9jrpg$g
rr2p$r92D@_o;2bs2>2[^r>('s8McmJ,~>
kl1Y]lMUS[!W;oorrN)rrr2utqYU?lr;ZTjr;QcqqYU?mo)Adjr;QWos8Drsq>:6l`;b>~>
aoDD?!r`,t`r?2@rVZWnkl1barVZWnrs/JPO\mnp6UCB1$UI-H4Z##pQf\8HrV$8A~>
aoDD?!r`,t`r?2@rVZWnkPtP\rr33%o%hF'_Su,bs2>8]^qn1Np](9mpA]X~>
aT)8=`W,u;!r`,t[f:j~>
JcG3="9/5rrVca%p<Jt13\ifb6ME_T5sdq)3\rWfJ&:s[s8Dris*t~>
JcG0<rr2lr#lO2Lc,.96`PqPhs2>>`_SF"/f^/P9s8MZjJ,~>
JcE:\J,~>
JcGEC"TJAtr;HQn$M`8UHr;pZ3C-"uq*5<S6UO.%2)79sM8Ji_rrN&roDa=~>
JcGBBrVl`p$2sJXf?(nF_SjFf`;dd^`5BF,_p$m%qu6Tqrpp)>~>
JcE:\J,~>
JcGZJs8E-!r;?Njrs\hf`h.EQ4>J`U6:4*;5lX.M6OH.E3A`KQ;L#.nqYpKrrVZZbs*t~>
JcGTHrVl]o$i]nfiRQ)g^qdk,`VIIO`<jK"^qdh/e`??$rr<#tnGe"~>
JcE:\J,~>
p](6lP5kR]s8Drp!<)co,6%)a]:*tJ6T-\W4$c5$5sR\$5sdq+69[Cd1,_L*JZRGsrVuoq!<2Ed
J,~>
K)bcJq>Up#oBP8abf.E6_8F41`Vd[Q`<sN"^qde*c.M.Kr;HZqrpB`9~>
JcE:\J,~>
oD\jjrVcZorVleqs8N#trVcWprVlWm'`Raabd*O\?qWU=1,V*W6:4+,5skQ<%7*0=2D[-K7U1;5
`TI-trrW/srTaE5~>
o)JRcU]:2ip\t^"p@%2%f$;=R^qde'`;RXT`;RXa`5BI.^qdh,c.:k@p\t-krr23_J,~>
JcE:\J,~>
p\t<UhY6[B!WN&pr;QZnrlP3=rr2lnquQcqp&>[%n)2L&UPs>(:I-oq1,V'T5stW>r^.2^5<Ce\
1,CpZ=)a2'cKbB+rr`5trVl![J,~>
p\t<hp&4L^q#8&.q#9pc$i^"rnET&he]u:T_>_4O_Sa=g`W*jW_nl>f#f=U)e(j*Tq>U<lrr2'[
J,~>
JcE:\J,~>
q>V$*s5eT!;I+-iPGbt6g#hi$n,NFerr(IHrr)lrn,F1#oBG)W^os;dG\:,N5WCSU1H%6V5t(]A
'1>2Q5!(_]1GUdJ6rRcLR^UW-qtpBqrVZTmir=N~>
p\t`tf#PnWdb*F;l0n6<qYfg]dJiP5%fZA#p$h;0iS2o0bK%Q<rkJZQ_Sa=2rl4uW"N83p_86,d
$,X[(d+I:@nbE+\s8N#Vs*t~>
JcE:\J,~>
pAZ32e$YWoB2_2Y1GUgL6r73+I#FJn\&?VGip-%,qYn\<*rPg)mH<EZcc*K!U6^X`E+E'G7R&mj
1G^mI3^#_qr^@Pi69dRm2Dd0E1cITh<FpH:VS:RDq"k!nrqu]mrn[U)~>
pAZ04n`\o_d)s>E^qde(`Q?BQf%]-Dl0\!3pA"L^rlY6Vrr)`jq"=7JmHWinhV-T1ccaDL`59@i
^^\,s_o0O5`l?!:`5BI.rP/fW_oBjGf%f?Po(`1Zs8N#Qs*t~>
JcE:\J,~>
p](9mqu8>FleBOiU5jP5=@tb7/h8A#/M]7K7SQlgAScI7JVK,GQC=D=V5L>pYHY==[C*I?[k"no
['Hs?XfA:qU7Rg>P)Y9MIX#mMB45"E:eO8E5!(__2Dm?M2`Wr_5!T$3(dC/G3B&fO1,:[F4$cG;
?uLRYV7=_(m.pJW!<2uq!r`,tf`-I~>
pAY-lqu7-(q=O+=inW,4bK%N9^](na^;.S&`lQ?JcdL=of\5*9hVdAPj5f=ak3)^,q<@qC!9a@D
)<Kr>io/hQh;$`;f@AC!d*BkYaiDE?_ns:f_>hCP_u.IQ_ZI]k_>V.Z_8=.2b0JJgh;dbgo_JI\
s8DrJs*t~>
JcE:\J,~>
p&>$jrqlcppAZQ=oB=rS^TaDpK6:j4;Fj&51bU@.-RC&a,UF``-R^Am.P!&%/hSe1r\4""!&4:)
s"aU1s"sa5r\jd8rAOU3'fJ!24$Q,):fq.AG(PdGX1HC&j6l^9rrE#squZirrmCar~>
p&FshpAYj+qtTgQlf[9`g""Hob/_H;^q[Usrk/9Cr4N$BrP%L1qnV^;'>hZ*`Q-*DcI(1pgu7A[
mdg)JrV$9hrm1Up~>
JcE:\J,~>
n,NFes8Doo!<)Nh,lRH*kht(<`OrOXU7.:)Kmn;gDJ<Zj?<UH2;c-=c9M7uL8P&_K,Y1L!8kViP
:Jaqh='Am;A8,n$GCG4'P+&,FZb+0#e_]HVp&"@\!<2rps8Dusao?k~>
mJm(_o)Bg2r;-3]oC2/4kiLg^h:pW7f$r-qcd'eZbKJ&MaiMR$a8<mSa8a6\aoBL$bKS5VcdC1i
e^rL/h;I;SkN_I(o(DbRr;Q9equ4Y9J,~>
JcE:\J,~>
jo>>Zs8Dln!WE#^rser(q=jRRnaPu6lg!a!qrn(E$gR'EmdTc<p%S:[rosF`rr)cmrr)lr^]/f~>
irAiRkl:\^#6"Jtqtp6drqZ<`rqZTjs82io!r`,tkl:JX]`3K~>
JcE:\J,~>
f`1pLrr)Wirr)lrg].<Qrr)Wirr)fpZN#F~>
eGo.>f)P=?Y5a"~>
JcE:\J,~>
_#NEnRK%d~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
JcE:\J,~>
%%EndData
showpage
%%Trailer
end
%%EOF

View File

@@ -20,11 +20,8 @@ citecolor = black]{hyperref}%
\usepackage{amsfonts}%
\usepackage{mathrsfs}%
\usepackage{hyperref}%
\usepackage[dvipsnames]{xcolor}%
\usepackage{xcolor}%
\usepackage{scrpage2}%
\usepackage{multido}
\usepackage{pstricks}
\usepackage{colortbl}
\newcommand*\euler{\mathrm{e}}
\input{title.tex}
@@ -40,9 +37,6 @@ citecolor = black]{hyperref}%
\pagestyle{scrheadings} % switch on head and foot line
\newpage
\tableofcontents
\listoffigures
\listoftables
\lstlistoflistings
\input{config/headfoot.tex}
\newpage
\input{content.tex}

View File

@@ -1,5 +1,4 @@
\ihead{\includegraphics[scale=0.30]{config/Laird_Logo_TM_Mark_RGB_200.eps}}
%\ihead{\includegraphics[scale=0.16]{config/novero_logo_web_500px.eps}}
\ihead{\includegraphics[scale=0.16]{config/novero_logo_web_500px.eps}}
\ohead{\today}
\setheadsepline{1pt}
\ofoot{\pagemark}

View File

@@ -1,195 +1,242 @@
\section{Gitlab workflow} \label{sec:glw}
\begin{figure}
\begin{center}
\input{img_gitlab.tex}
\caption{Gitlab workflow}
\label{fig:gitlab_workflow}
\end{center}
\end{figure}
Figure \ref{fig:gitlab_workflow} gives an overview of the gitlab workflow.
The workflow is splitted in different phases:\\
\begin{itemize}
\item Implementation phase
\item Code freeze
\item Release phase
\end{itemize}
For these different phases The continuous integration/delivery system
triggers different build stages. For further details please refer to
section \ref{sec:ci}.
\subsection{Implementation phase}
While in implementation phase every implementation for the next release is
done. Every implementation has to be done on a seperate branch. After
finishing an implementation the branch it was made on has to be merged back
to the master branch. As defined an implementation could be one of:\\
\begin{itemize}
\item Feature
\item Fix
\end{itemize}
\subsubsection{Feature implementation}
A feature is a a new piece of code that implements new functionality into
the system.
\subsubsection{Fix implementation}
If in any testing phase an issue is detected these issue can be fixed with
a fix implementation.
\subsubsection{Further kinds of implementation}
Beside these defined implementations any other kind of implementation is
possible but has to be made also on a seperate branch.
\subsection{Code freeze}
The transition between implementation phase and release phase is called
code freeze. Code freeze means each for the upcoming release planned
feature is implemented and merged to the main branch (normally master) of
the project's git repository (see figure \ref{fig:gitlab_workflow}). For
the upcoming release a "\texttt{release/...}" named branch is created.
For a proper release configuration it is necessary to configure the ci
build job before creating the release branch (see section \ref{sec:ci_conf})
.
\subsection{Release phase}
Any release relevant issue that is detected while release phase has to be
fixed at the release branch. The release phase is splitted into different
stages:
\begin{itemize}
\item Internal release(s)
\item External release
\end{itemize}
\subsubsection{Internal release(s)}
Each push to a release branch triggers the creation of an internal release.
Only internal releases must be used to system test the release branch. For
details please refer to section \ref{sec:ci_int}.
\subsubsection{External release}
If no further release relevant issues could be found (or are accepted as
known issues) an external release is created by tagging the commit which
should be delivered to the customer. For details please refer to section
\ref{sec:ci_ext}.
\section{Continuous integration/delivery} \label{sec:ci}
As continuous integration system the gitlab built in ci-system
\textit{gitlab-ci} is used. Beside the most important task of ci, ensure
constant high code quality, the ci system is used for various tasks:
\FloatBarrier
\begin{itemize}
\item Automated static code analysis
\item Automated build
\item Automated test (not implemented yet)
\item Internal release deployment
\item External release deployment
\item Automated release note generation (not implemented yet)
\end{itemize}
\FloatBarrier
\subsection{Internal release deployment} \label{sec:ci_int}
\begin{figure}
\begin{center}
\input{img_deploy.tex}
\caption{Deployment of release candidats and releases}
\label{fig:deployment}
\end{center}
\end{figure}
For a branch named \texttt{release/...} the creation of a release candidate
is triggered automatically. Figure \ref{fig:deployment} illustrates the
deployment process. The internal release is processing the following steps:
\\
\begin{enumerate}
\item Build project variant specific configuration
\item Static code analysis of project variant specific configuration
\item Name the release depending on the release naming convention
\item Build release notes for the release candidate
\item Deploy the release to the project's release candidate deploy
location
\end{enumerate}
\subsection{External release deployment} \label{sec:ci_ext}
To create an external release the commit to be released must be tagged
using the following naming convention:\\
\texttt{release/<project\_specific\_name>}.\\
The project specific naming convention for Agricola ruby is:\\
\texttt{release/174\_AG*}.\\
\begin{enumerate}
\item Build project variant specific configuration
\item Static code analysis of project variant specific configuration
\item Name the release depending on the release naming convention
\item Build release notes for the release
\item Deploy the release to the project's release deploy location
\end{enumerate}
\subsection{Release note generation} \label{sec:rel_note}
\begin{figure}
\begin{center}
\input{img_history.tex}
\caption{Git commit history}
\label{fig:git_commit_history}
\end{center}
\end{figure}
To generate release notes by commit messages special tagged commit messages
are used. Release notes are generated for release candidats and releases.
For release candidats (internal releases) more tags are analyzed. The
definition of the commit tag rules are somewhere in the Polarion :) Because
the release notes content is taken from the log history of a release branch
each commit in it's history has to use tagged commits. To show logs only of
direct parents (commits on the current release branch and commits on the
master) the log command\\
\texttt{git log <first\_commit>..HEAD --first parent master}\\
can be used. Figure \ref{fig:git_commit_history} illustrates the flow of the
log history of the release branch shown in figure \ref{fig:gitlab_workflow}.
\subsection{Configuring the build jobs} \label{sec:ci_conf}
The configuration of gitlab-ci is made in the \texttt{.gitlab-ci.yml} file
in the root directory of the project's repository. The certain build stages
are using variables to customize the build. These variables are defined in
the \texttt{variables} section of the config file. Table \ref{tab:conf_var}
and listing \ref{lst:ag_cfg} gives an overview about customizing a release
phase.
\captionof{table}{Variables to customize a release phase}
\label{tab:conf_var}
\begin{tabular}{l l l}
\cellcolor{black}\color{white}variable & \cellcolor{black}\color{white}meaning & \cellcolor{black}\color{white}example\\
PRODUCT\_NAME & Short of the product name & AG\\
PRODUCT\_VARIANT & Short of the product variant & NA\\
PROJECT\_VERSION & ?? & 10\\
SW\_MAJOR & Software major number & 1\\
SW\_MINOR & Software minor number & 2\\\\
\end{tabular}
\newline
\section{Installation}
\subsection{SD card preparation}
\subsubsection{Partitions}
Format the SD card with two new partitions:
\lstsetbash
\begin{lstlisting}[caption=variables configuration, label=lst:ag_cfg]
variables:
PRODUCT_NAME: "AG"
PRODUCT_VARIANT: "NA"
PROJECT_VERSION: "10"
SW_MAJOR: "1"
SW_MINOR: "2"
\begin{lstlisting}
fdisk /dev/mmcblk0
\end{lstlisting}
\begin{enumerate}
\item Type \textbf{o} to erase all former partitions
\item Type \textbf{p} to list all existing partitions
\item Type \textbf{n}, then \textbf{p} to create the boot partition. Press
\textbf{RETURN} to accept the first sector, then \textbf{+100M} for the
last sector
\item Type \textbf{t}, then \textbf{c} to set the partition type to FAT32
\item Type \textbf{n}, then \textbf{p} to create the root partition. Press
\textbf{RETURN} to accept the first sector, then \textbf{RETURN} for the
last sector
\item Type \textbf{w} to write the new partition table
\end{enumerate}
\subsubsection{File systems}
Create the file systems for the new partitions:
\begin{lstlisting}
mkfs.vfat /dev/mmcblk0p1
mkfs.ext4 /dev/mmcblk0p2
\end{lstlisting}
Create mount points and mount the new partitions:
\begin{lstlisting}
mkdir boot
mkdir root
mount /dev/mmcblk0p1 boot
mount /dev/mmcblk0p2 root
\end{lstlisting}
\subsubsection{Download and extract root file system}
\begin{lstlisting}
wget http://archlinuxarm.org/os/\
ArchLinuxARM-rpi-2-latest.tar.gz
bsdtar -xpf ArchLinuxARM-rpi-2-latest.tar.gz -C root
sync
mv root/boot/* boot
\end{lstlisting}
Enable ssh root login:
\begin{lstlisting}
vim root/etc/ssh/sshd\_config
\end{lstlisting}
Find \texttt{\#PermitRootLogin yes} and uncommend it
\begin{lstlisting}
PermitRootLogin yes
\end{lstlisting}
Unmount both partitions
\begin{lstlisting}
umount boot root
\end{lstlisting}
\section{Configuration}
\subsection{User management}
\subsubsection{Create new user}
\begin{lstlisting}
useradd -m -g users -G wheel -s /bin/bash tkl
\end{lstlisting}
\begin{tabular}{ l l }
\texttt{-m} & create user name home directory\\
\texttt{-g} & initial login group\\
\texttt{-G} & list of supplementary groups - comma separated\\
\texttt{-s} & path and file name of default login shell\\
\end{tabular}\\
Set password for the new user:
\begin{lstlisting}
passwd tkl
\end{lstlisting}
Enable wheel group members as sudoers:
\begin{lstlisting}
EDITOR=vim visudo
\end{lstlisting}
Uncomment:
\begin{lstlisting}
%wheel ALL=(ALL) ALL
\end{lstlisting}
\subsection{Aliasing}
\begin{lstlisting}
cd ~
vi .bashrc
\end{lstlisting}
Add:\\
\texttt{alias vi='vim'}
\subsection{Customize vim}
Edit \texttt{.vimrc}:
\begin{lstlisting}
syntax on "Syntax highlightning
set number "Line numbering
\end{lstlisting}
\subsection{Wifi}
Configure wifi network:
\begin{lstlisting}
wifi-menu
\end{lstlisting}
Enable wifi network permanent:
\begin{lstlisting}
netctl enable wlan0-<network_name>
\end{lstlisting}
\subsubsection{Deactivate wifi device sleep mode}
\begin{lstlisting}
pacman -S iw
echo ACTION=="add", SUBSYSTEM=="net", KERNEL=="wlan*", \
RUN+="/usr/bin/iw dev \%k set power\_save off\" \
> etc/udev/rules.d/70-wifi-powersave.rules
\end{lstlisting}
\subsection{Ssh key login}
\begin{itemize}
\item Create \texttt{.ssh/} folder in users home directory
\item Copy public key file (i.e. \texttt{id\_rsa.pub}) into \texttt{.ssh}
folder
\item Authorize public key:
\begin{lstlisting}
cat id_rsa.pub >> authorized_keys
\end{lstlisting}
\end{itemize}
\subsection{Interfaces}
\subsubsection{I2C}
To enable i2c interface edit \texttt{/boot/config.txt}. \\
Uncomment \texttt{\#device\_tree\_param=i2c\_arm=on}\\
Load i2c modules while boot:
\begin{lstlisting}
/etc/modules-load.d/raspberry.conf
i2c-dev
i2c-bcm2708
\end{lstlisting}
Install package \texttt{i2c-tools}
Test i2c bus after reboot:
\begin{lstlisting}
i2cdetect -y 1
\end{lstlisting}
Set permissions for i2c device access:
\begin{lstlisting}
/etc/udev/rules.d/99-i2c.rules
KERNEL=="i2c-1", MODE="0777"
\end{lstlisting}
\subsubsection{SPI}
To enable spi interface edit \texttt{/boot/config.txt}. \\
Uncomment \texttt{\#device\_tree\_param=spi=on}
\subsubsection{GPIO}
Create an udev rule to enable others than root accessing the gpio files:
\begin{lstlisting}
/etc/udev/rules.d/98-gpio.rules
SUBSYSTEM=="gpio*", PROGRAM="/bin/sh -c 'chown -R root:gpio\
/sys/class/gpio; chmod -R 0777 /sys/class/gpio; chown -R \
root:gpio /sys/devices/virtual/gpio; chmod -R 0777 \
/sys/devices/virtual/gpio'"
\end{lstlisting}
\subsection{tools}
\begin{itemize}
\item \texttt{fakeroot}
\item \texttt{gcc}
\item \texttt{git}
\item \texttt{make}
\item \texttt{patch}
\item \texttt{python2, python2-pip}
\item \texttt{wget}
\end{itemize}
\subsection{Hostname}
\begin{lstlisting}
echo "hostname" > /etc/hostname
\end{lstlisting}
\section{Applications}
\subsection{I2C-OLED}
\subsubsection{Oled Test application}
Clone test application:
\begin{lstlisting}
git clone git@dabgit01.internal.novero.com:raspberry/\
oledpi.git
\end{lstlisting}
\subsubsection{Install driver}
Clone oled driver:
\begin{lstlisting}
git clone https://github.com/rm-hull/ssd1306.git
\end{lstlisting}
Install it:
\begin{lstlisting}
python2 setup.py install
\end{lstlisting}
\subsubsection{Dependencies}
\begin{itemize}
\item \texttt{python-smbus/python2-smbus} (AUR)
\item \texttt{i2c-tool-git} (AUR)
\item \texttt{libjpeg-turbo}
\item \texttt{pillow} install using pip \texttt{(pip/pip2 install pillow)}
\end{itemize}
\subsection{Weatherpi}
\subsubsection{Usb weatherstation test application}
Clone test application:
\begin{lstlisting}
git clone git@dabgit01.internal.novero.com:raspberry/\
weatherpi.git
\end{lstlisting}
\subsubsection{Dependencies}
\begin{itemize}
\item \texttt{python2-pyusb} (AUR) (edit \texttt{PKGBUILD} and add
\texttt{'armv7h'} to \texttt{arch})
\item \texttt{libusb-compat}
\end{itemize}
\subsection{MQTT Broker}
Install mosquitto (AUR)\\
Install paho-mqtt client library:\\
\begin{lstlisting}
pip2 install paho-mqtt
\end{lstlisting}
Create config file:
\begin{lstlisting}
cp /etc/mosquitto/mosquitto.conf.example \
/etc/mosquitto/mosquitto.conf
\end{lstlisting}
Start mosquitto broker service:
\begin{lstlisting}
systemctl enable mosquitto.service
systemctl start mosquitto.service
\end{lstlisting}
\subsubsection{Test}
Subscribe to a topic:
\begin{lstlisting}
mosquitto_sub -t "topic/path"
\end{lstlisting}
Populate a message:
\begin{lstlisting}
mosquitto_pub -t "topic/path" -m "message payload"
\end{lstlisting}

View File

@@ -1,97 +0,0 @@
\psset{griddots=0,gridlabels=8pt,subgriddiv=5}
\psset{xunit=10mm,yunit=10mm}
\begin{pspicture}(12,10)
% \psgrid
\newcommand{\clr}{black}
% phases
\psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](0,2)(12,2)
\psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](0,8)(12,8)
\rput{0}(1.5,2){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\clr}
\psset{framearc=.5}
\psframebox{\textcolor{\clr}{code freeze}}
}
\psline[linewidth=1pt,linecolor=\clr]{<->}(11.5,2)(11.5,8)
\rput{90}(11.5,5){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\clr}
\psset{framearc=.5}
\psframebox{\textcolor{\clr}{release phase}}
}
% master
\newcommand{\masterx}{10}
\psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\masterx,1)(\masterx,9)
\psset{fillcolor=\clr}
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,2)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,8)
\rput(\masterx,0.5){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\clr}
\psset{framearc=.5}
\psframebox{\textcolor{\clr}{master}}
}
% feature/anti_osc
\renewcommand{\clr}{RedOrange}
\newcommand{\featurex}{8}
\psline[linewidth=2pt,linecolor=\clr](\masterx,2)(\featurex,3)
\psline[linewidth=2pt,linecolor=\clr](\featurex,3)(\featurex,7)
\psline[linewidth=2pt,linecolor=\clr,linestyle=dashed,arrowsize=15pt]{->}(\featurex,7)(\masterx,8)
\psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\featurex,2)(\featurex,8)
\multido{\nA=3+2}{3}{
\psset{fillcolor=\clr}
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\featurex,\nA)
}
\rput(\featurex,1.5){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\clr}
\psset{framearc=.5}
\psframebox{\textcolor{\clr}{release/NAR\_C0}}
}
\newcommand{\rccolor}{Blue}
\psset{fillcolor=\rccolor}
\psdot[dotsize=5pt,dotstyle=o,linecolor=\rccolor](\masterx,2)
\psdot[dotsize=5pt,dotstyle=o,linecolor=\rccolor](\featurex,3)
\psdot[dotsize=5pt,dotstyle=o,linecolor=\rccolor](\featurex,5)
\psline[linewidth=1pt,linecolor=\rccolor,arrowsize=10pt]{->}(\masterx,2)(5.7,2.8)
\psline[linewidth=1pt,linecolor=\rccolor,arrowsize=10pt]{->}(\featurex,3)(5.7,4.6)
\psline[linewidth=1pt,linecolor=\rccolor,arrowsize=10pt]{->}(\featurex,5)(5.7,6.6)
\rput(3,3){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\rccolor}
\psset{framearc=.5}
\psframebox{\textcolor{\rccolor}{deploy: release candidate 1}}
}
\rput(3,5){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\rccolor}
\psset{framearc=.5}
\psframebox{\textcolor{\rccolor}{deploy: release candidate 2}}
}
\rput(3,7){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\rccolor}
\psset{framearc=.5}
\psframebox{\textcolor{\rccolor}{deploy: release candidate 3}}
}
\newcommand{\rcolor}{ForestGreen}
\psset{fillcolor=\rcolor}
\psdot[dotsize=5pt,dotstyle=o,linecolor=\rcolor](\featurex,7)
\psline[linewidth=1pt,linecolor=\rcolor,arrowsize=10pt]{->}(\featurex,7)(4.6,8.6)
\rput(3,9){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\rcolor}
\psset{framearc=.5}
\psframebox{\textcolor{\rcolor}{deploy: release}}
}
\end{pspicture}

View File

@@ -1,136 +0,0 @@
\psset{griddots=0,gridlabels=8pt,subgriddiv=5}
\psset{xunit=10mm,yunit=10mm}
\begin{pspicture}(14,16)
% \psgrid
\newcommand{\clr}{black}
% phases
\psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](0,2)(14,2)
\psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](0,8)(14,8)
\psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](0,14)(14,14)
\rput{0}(1.5,8){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\clr}
\psset{framearc=.5}
\psframebox{\textcolor{\clr}{code freeze}}
}
\psline[linewidth=1pt,linecolor=\clr]{<->}(13.5,2)(13.5,8)
\rput{90}(13.5,5){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\clr}
\psset{framearc=.5}
\psframebox{\textcolor{\clr}{implementation phase}}
}
\psline[linewidth=1pt,linecolor=\clr]{<->}(13.5,8)(13.5,14)
\rput{90}(13.5,11){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\clr}
\psset{framearc=.5}
\psframebox{\textcolor{\clr}{release phase}}
}
% master
\newcommand{\masterx}{7}
\psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\masterx,1)(\masterx,15)
\psset{fillcolor=\clr}
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,2)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,3)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,7)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,8)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\masterx,14)
\rput(\masterx,0.5){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\clr}
\psset{framearc=.5}
\psframebox{\textcolor{\clr}{master}}
}
% feature/anti_osc
\renewcommand{\clr}{ForestGreen}
\newcommand{\featurex}{5}
\psline[linewidth=2pt,linecolor=\clr](\masterx,2)(\featurex,3)
\psline[linewidth=2pt,linecolor=\clr](\featurex,3)(\featurex,7)
\psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\featurex,7)(\masterx,8)
\psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\featurex,2)(\featurex,8)
\multido{\nA=3+2}{3}{
\psset{fillcolor=\clr}
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\featurex,\nA)
}
\rput(\featurex,1.5){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\clr}
\psset{framearc=.5}
\psframebox{\textcolor{\clr}{feature/anti\_osc}}
}
% old_branch
\renewcommand{\clr}{Gray}
\newcommand{\xpos}{9}
\psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\xpos,2)(\masterx,3)
\psline[linewidth=2pt,linecolor=\clr](\xpos,1)(\xpos,2)
% fix/calibration_crc
\renewcommand{\clr}{Maroon}
\newcommand{\fixx}{9}
\psline[linewidth=2pt,linecolor=\clr](\masterx,3)(\fixx,4)
\psline[linewidth=2pt,linecolor=\clr](\fixx,4)(\fixx,6)
\psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\fixx,6)(\masterx,7)
\psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\fixx,3)(\fixx,7)
\multido{\nA=4+2}{2}{
\psset{fillcolor=\clr}
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,\nA)
}
\rput(\fixx,2.5){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\clr}
\psset{framearc=.5}
\psframebox{\textcolor{\clr}{fix/calibration\_crc}}
}
% feature/dynamic_monitoring
\renewcommand{\clr}{RoyalBlue}
\renewcommand{\fixx}{11}
\psline[linewidth=2pt,linecolor=\clr](\masterx,3)(\fixx,4)
\psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\fixx,4)(\fixx,12)
\psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\fixx,3)(\fixx,4)
\rput(\fixx,12.5){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\clr}
\psset{framearc=.5}
\psframebox{\textcolor{\clr}{feature/dyn\_mon}}
}
\psset{fillcolor=\clr}
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,4)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,6)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,8)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,10)
% release/NAR_C0
\renewcommand{\clr}{RedOrange}
\renewcommand{\fixx}{5}
\psline[linewidth=2pt,linecolor=\clr](\masterx,8)(\fixx,9)
\psline[linewidth=2pt,linecolor=\clr](\fixx,9)(\fixx,13)
\psline[linewidth=1pt,linecolor=\clr,linestyle=dashed](\fixx,8)(\fixx,14)
\psline[linewidth=2pt,linecolor=\clr,linestyle=dashed,arrowsize=15pt]{->}(\fixx,13)(\masterx,14)
\rput(\fixx,14.5){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\clr}
\psset{framearc=.5}
\psframebox{\textcolor{\clr}{release/NAR\_C0}}
}
\rput(2.5,13){
\psset{fillcolor=\clr}
\psset{fillstyle=solid}
\psset{linecolor=\clr}
\psset{framearc=.5}
\psframebox{\textcolor{white}{\shortstack{tags/release/\\174\_AG\_NA\_10-01.02}}}
}
\psset{fillcolor=\clr}
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,9)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,11)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,13)
\end{pspicture}

View File

@@ -1,74 +0,0 @@
\psset{griddots=0,gridlabels=8pt,subgriddiv=5}
\psset{xunit=10mm,yunit=10mm}
\begin{pspicture}(14,16)
% \psgrid
\newcommand{\clr}{Gray}
\newcommand{\bclr}{RedOrange}
\newcommand{\hclr}{Blue}
\newcommand{\mclr}{black}
% master
\newcommand{\masterx}{7}
\psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\masterx,8)(\masterx,15)
\psline[linewidth=2pt,linecolor=\hclr](\masterx,1)(\masterx,8)
\psset{fillcolor=\hclr}
\psdot[dotsize=10pt,dotstyle=o,linecolor=\hclr](\masterx,2)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\hclr](\masterx,3)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\hclr](\masterx,7)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\hclr](\masterx,8)
\rput(\masterx,0.5){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\mclr}
\psset{framearc=.5}
\psframebox{\textcolor{\mclr}{master}}
}
% feature/anti_osc
\newcommand{\featurex}{5}
\psline[linewidth=2pt,linecolor=\clr](\masterx,2)(\featurex,3)
\psline[linewidth=2pt,linecolor=\clr](\featurex,3)(\featurex,7)
\psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\featurex,7)(\masterx,8)
\multido{\nA=3+2}{3}{
\psset{fillcolor=\clr}
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\featurex,\nA)
}
% old_branch
\newcommand{\xpos}{9}
\psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\xpos,2)(\masterx,3)
\psline[linewidth=2pt,linecolor=\clr](\xpos,1)(\xpos,2)
% fix/calibration_crc
\newcommand{\fixx}{9}
\psline[linewidth=2pt,linecolor=\clr](\masterx,3)(\fixx,4)
\psline[linewidth=2pt,linecolor=\clr](\fixx,4)(\fixx,6)
\psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\fixx,6)(\masterx,7)
\multido{\nA=4+2}{2}{
\psset{fillcolor=\clr}
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,\nA)
}
% feature/dynamic_monitoring
\renewcommand{\fixx}{11}
\psline[linewidth=2pt,linecolor=\clr](\masterx,3)(\fixx,4)
\psline[linewidth=2pt,linecolor=\clr,arrowsize=15pt]{->}(\fixx,4)(\fixx,12)
\psset{fillcolor=\clr}
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,4)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,6)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,8)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\clr](\fixx,10)
% release/NAR_C0
\renewcommand{\fixx}{5}
\psline[linewidth=1pt,linecolor=\bclr,linestyle=dashed](\fixx,8)(\fixx,14)
\psline[linewidth=2pt,linecolor=\hclr](\masterx,8)(\fixx,9)
\psline[linewidth=2pt,linecolor=\hclr](\fixx,9)(\fixx,13)
\rput(\fixx,14.5){
\psset{fillcolor=white}
\psset{fillstyle=solid}
\psset{linecolor=\bclr}
\psset{framearc=.5}
\psframebox{\textcolor{\bclr}{release/NAR\_C0}}
}
\psset{fillcolor=\hclr}
\psdot[dotsize=10pt,dotstyle=o,linecolor=\hclr](\fixx,9)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\hclr](\fixx,11)
\psdot[dotsize=10pt,dotstyle=o,linecolor=\hclr](\fixx,13)
\end{pspicture}

View File

@@ -1,4 +1,4 @@
\newcommand{\docname}{Release Process}
\newcommand{\prjname}{Agricola}
\newcommand{\docname}{HowTo}
\newcommand{\prjname}{arch linux on raspberry pi}
\newcommand{\docversion}{0.1}
\newcommand{\docauthor}{Thomas Klaehn}