--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="256"
+ height="256"
+ id="svg2"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="icon.svg">
+ <metadata
+ id="metadata2981">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1857"
+ inkscape:window-height="1179"
+ id="namedview2979"
+ showgrid="false"
+ inkscape:zoom="1.3575898"
+ inkscape:cx="149.9999"
+ inkscape:cy="118.16996"
+ inkscape:window-x="61"
+ inkscape:window-y="19"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg2"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <defs
+ id="defs4" />
+ <g
+ style="opacity:0.75319148"
+ id="g3504"
+ transform="matrix(2.3258198,-6.3905532e-4,6.3905532e-4,2.3258198,-1332.2742,-1113.7565)">
+ <path
+ id="path3402"
+ d="m 586.7443,568.51986 c -0.045,0.047 -0.045,7.506 -0.138,9.453 -0.092,1.574 -0.232,4.957 -3.568,4.957 -3.429,0 -4.263,-3.939 -4.541,-5.652 -0.324,-1.9 -0.324,-3.477 -0.324,-4.17 0,-2.225 0.139,-8.436 5.375,-8.436 1.576,0 2.456,0.465 3.151,0.834 l 0.045,3.014 z m -13.437,5.469 c 0,13.066 6.951,13.066 7.97,13.066 2.873,0 4.727,-1.576 5.514,-4.309 l 0.093,4.123 c 0.881,-0.047 1.761,-0.139 3.197,-0.139 0.51,0 0.926,0 1.298,0.047 0.371,0 0.741,0.045 1.158,0.092 -0.741,-1.482 -1.297,-4.818 -1.297,-12.049 0,-7.043 0,-18.951 0.602,-22.566 -1.667,0.789 -3.105,1.299 -6.256,1.576 1.251,1.344 1.251,2.039 1.251,8.154 -0.879,-0.277 -1.992,-0.602 -3.892,-0.602 -8.294,0.001 -9.638,7.23 -9.638,12.607" />
+ <path
+ id="path3404"
+ d="m 598.4373,571.62286 c 0.047,-3.846 0.835,-7.275 4.124,-7.275 3.615,0 3.891,3.984 3.799,7.275 l -7.923,0 z m 12.51,0.465 c 0,-5.422 -1.065,-10.752 -7.923,-10.752 -9.452,0 -9.452,10.475 -9.452,12.697 0,9.406 4.216,13.113 11.306,13.113 3.149,0 4.68,-0.461 5.514,-0.695 -0.046,-1.668 0.185,-2.734 0.465,-4.17 -0.975,0.604 -2.226,1.391 -5.006,1.391 -7.229,0 -7.322,-6.582 -7.322,-8.852 l 12.328,0 0.09,-2.732" />
+ <path
+ id="path3406"
+ d="m 626.0223,574.07986 c 0,4.309 -0.787,10.102 -6.162,10.102 -0.742,0 -1.668,-0.141 -2.27,-0.279 -0.093,-1.668 -0.093,-4.541 -0.093,-7.877 0,-3.986 0.416,-6.068 0.742,-7.09 0.972,-3.289 3.15,-3.334 3.566,-3.334 3.522,0 4.217,4.865 4.217,8.478 z m -13.298,5.051 c 0,3.43 0,5.375 -0.556,6.857 1.9,0.742 4.262,1.158 7.09,1.158 1.807,0 7.043,0 9.869,-5.791 1.344,-2.688 1.807,-6.303 1.807,-9.037 0,-1.668 -0.186,-5.328 -1.529,-7.646 -1.296,-2.176 -3.382,-3.289 -5.605,-3.289 -4.449,0 -5.746,3.707 -6.44,5.607 0,-2.363 0.045,-10.611 0.415,-14.828 -3.011,1.391 -4.866,1.621 -6.857,1.807 1.807,0.74 1.807,3.801 1.807,13.764 l 0,11.398" />
+ <path
+ id="path3408"
+ d="m 639.8423,586.86886 c -0.928,-0.139 -1.578,-0.232 -2.922,-0.232 -1.48,0 -2.502,0.094 -3.566,0.232 0.463,-0.881 0.648,-1.299 0.787,-4.309 0.186,-4.125 0.232,-15.154 -0.092,-17.471 -0.232,-1.762 -0.648,-2.039 -1.297,-2.502 3.799,-0.371 4.865,-0.648 6.625,-1.482 -0.369,2.037 -0.418,3.059 -0.418,6.162 -0.091,15.989 -0.138,17.702 0.883,19.602" />
+ <path
+ id="path3410"
+ d="m 654.6803,573.75386 c -0.092,2.92 -0.139,4.959 -0.928,6.58 -0.973,2.086 -2.594,2.688 -3.799,2.688 -2.783,0 -3.383,-2.316 -3.383,-4.586 0,-4.355 3.893,-4.682 5.652,-4.682 l 2.458,0 z m -12.744,5.701 c 0,2.92 0.881,5.838 3.477,7.09 1.158,0.51 2.316,0.51 2.688,0.51 4.264,0 5.699,-3.152 6.58,-5.098 -0.047,2.039 0,3.289 0.139,4.912 0.834,-0.047 1.668,-0.139 3.059,-0.139 0.787,0 1.529,0.092 2.316,0.139 -0.51,-0.787 -0.787,-1.252 -0.928,-3.059 -0.092,-1.76 -0.092,-3.521 -0.092,-5.977 l 0.047,-9.453 c 0,-3.523 -0.928,-6.998 -7.879,-6.998 -4.586,0 -7.273,1.391 -8.617,2.086 0.557,1.02 1.02,1.898 1.436,3.893 1.809,-1.576 4.172,-2.41 6.58,-2.41 3.848,0 3.848,2.549 3.848,6.162 -0.881,-0.045 -1.623,-0.137 -2.875,-0.137 -5.887,10e-4 -9.779,2.268 -9.779,8.479" />
+ <path
+ id="path3412"
+ d="m 681.3703,582.28186 c 0.047,1.576 0.047,3.244 0.695,4.588 -1.021,-0.092 -1.623,-0.232 -3.521,-0.232 -1.113,0 -1.715,0.094 -2.596,0.232 0.184,-0.602 0.279,-0.834 0.371,-1.623 0.139,-1.064 0.232,-4.633 0.232,-5.885 l 0,-5.004 c 0,-2.178 0,-5.33 -0.141,-6.441 -0.092,-0.787 -0.322,-2.918 -3.012,-2.918 -2.641,0 -3.521,1.945 -3.846,3.521 -0.369,1.621 -0.369,3.383 -0.369,10.24 0.045,5.932 0.045,6.486 0.508,8.109 -0.787,-0.092 -1.76,-0.184 -3.15,-0.184 -1.113,0 -1.854,0.045 -2.779,0.184 0.324,-0.742 0.51,-1.113 0.602,-3.707 0.094,-2.549 0.279,-15.061 -0.141,-18.025 -0.23,-1.809 -0.695,-2.225 -1.203,-2.688 3.754,-0.186 4.957,-0.789 6.117,-1.389 l 0,4.91 c 0.555,-1.438 1.713,-4.635 6.348,-4.635 5.793,0 5.838,4.217 5.885,6.996 l 0,13.951" />
+ <path
+ style="fill:#d70751"
+ id="path3414"
+ d="m 640.2333,554.54686 -3.838,3.836 -3.836,-3.836 3.836,-3.836 3.838,3.836" />
+ </g>
+ <g
+ id="layer3"
+ style="display:none"
+ transform="translate(0,-146.87399)">
+ <rect
+ width="548.07941"
+ height="31.793367"
+ rx="0.70528102"
+ ry="0.89940047"
+ x="11.388664"
+ y="365.11572"
+ id="rect3255"
+ style="fill:#000000;fill-opacity:0.05882353;fill-rule:nonzero;stroke:none" />
+ <rect
+ width="548.07941"
+ height="31.793367"
+ rx="0.70528102"
+ ry="0.89940047"
+ x="11.388723"
+ y="333.32236"
+ id="rect3257"
+ style="fill:#000000;fill-opacity:0.21568627;fill-rule:nonzero;stroke:none" />
+ <use
+ transform="translate(0,-63.586745)"
+ id="use3261"
+ x="0"
+ y="0"
+ width="570.47241"
+ height="402.87399"
+ xlink:href="#rect3255" />
+ <use
+ transform="translate(0,-63.58674)"
+ id="use3263"
+ x="0"
+ y="0"
+ width="570.47241"
+ height="402.87399"
+ xlink:href="#rect3257" />
+ <use
+ transform="translate(0,-63.58674)"
+ id="use3265"
+ x="0"
+ y="0"
+ width="570.47241"
+ height="402.87399"
+ xlink:href="#use3261" />
+ <use
+ transform="translate(0,-63.58674)"
+ id="use3267"
+ x="0"
+ y="0"
+ width="570.47241"
+ height="402.87399"
+ xlink:href="#use3263" />
+ <use
+ transform="translate(0,-63.586752)"
+ id="use3269"
+ x="0"
+ y="0"
+ width="570.47241"
+ height="402.87399"
+ xlink:href="#use3265" />
+ <use
+ transform="translate(0,-63.586734)"
+ id="use3271"
+ x="0"
+ y="0"
+ width="570.47241"
+ height="402.87399"
+ xlink:href="#use3267" />
+ <use
+ transform="translate(0,-63.586729)"
+ id="use3273"
+ x="0"
+ y="0"
+ width="570.47241"
+ height="402.87399"
+ xlink:href="#use3269" />
+ <use
+ transform="translate(0,-63.586729)"
+ id="use3275"
+ x="0"
+ y="0"
+ width="570.47241"
+ height="402.87399"
+ xlink:href="#use3271" />
+ <use
+ transform="translate(0,-63.586733)"
+ id="use3277"
+ x="0"
+ y="0"
+ width="570.47241"
+ height="402.87399"
+ xlink:href="#use3273" />
+ <use
+ transform="translate(0,-63.586737)"
+ id="use3279"
+ x="0"
+ y="0"
+ width="570.47241"
+ height="402.87399"
+ xlink:href="#use3275" />
+ </g>
+ <g
+ id="layer5"
+ style="display:none"
+ transform="translate(0,-146.87399)">
+ <path
+ d="M 144.4234,78.975388 C 266.02989,-77.854986 517.89394,31.598913 544.30928,206.19246 M 235.52123,47.182022 C 346.11429,-52.460919 514.87505,31.449949 544.30928,206.19246 M 332.17381,47.182022 C 422.50525,-23.52659 511.10143,30.082837 544.30928,206.19246 M 429.58867,66.478997 C 483.92989,13.647221 520.15812,42.230553 544.30928,206.19246"
+ id="path3525"
+ style="fill:none;stroke:#000000;stroke-width:2.65748024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 139.95489,62.706883 c -5.85467,2.570988 -7.09795,12.718367 -2.97518,22.983152 l -9.29976,4.083851 c -1.62417,0.713228 -2.35632,2.591831 -1.64308,4.216006 l 0.88109,2.006431 c 0.71323,1.62417 2.59184,2.356307 4.21601,1.643077 l 38.61807,-16.958534 c 1.62417,-0.713229 2.35631,-2.591833 1.64308,-4.216005 l -0.88109,-2.006431 c -0.71323,-1.62417 -2.59184,-2.356307 -4.21601,-1.643078 l -7.40014,3.249658 C 154.12984,66.083576 145.80956,60.135897 139.95489,62.706883 z"
+ id="path3514"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.77901149;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ <path
+ d="m 232.97728,34.179007 c -6.25476,1.328559 -9.53269,11.012061 -7.58021,21.900167 l -9.93528,2.110333 c -1.73517,0.36856 -2.83354,2.059351 -2.46497,3.79452 l 0.45531,2.143545 c 0.36856,1.735162 2.05936,2.833521 3.79452,2.464959 l 41.25714,-8.763326 c 1.73516,-0.368561 2.83352,-2.059355 2.46496,-3.794519 l -0.4553,-2.143545 c -0.36857,-1.735162 -2.05937,-2.833521 -3.79453,-2.46496 l -7.90585,1.679261 C 246.17123,40.363753 239.23205,32.850451 232.97728,34.179007 z"
+ id="path3519"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.77901149;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ <path
+ d="m 333.85888,26.48456 c -6.3721,-0.532394 -12.3043,7.793715 -13.57599,18.782155 l -10.12167,-0.845669 c -1.76772,-0.147698 -3.30717,1.154329 -3.45486,2.922052 l -0.18245,2.183759 c -0.1477,1.767713 1.15434,3.307158 2.92205,3.454851 l 42.03112,3.51174 c 1.76772,0.147694 3.30716,-1.15434 3.45486,-2.922055 l 0.18246,-2.183756 c 0.14768,-1.767716 -1.15436,-3.307161 -2.92207,-3.454855 l -8.05416,-0.672934 c 0.5694,-11.047125 -3.90718,-20.242889 -10.27929,-20.775288 z"
+ id="path3521"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.77901149;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ <path
+ d="m 436.78602,52.620877 c -5.74315,-2.811278 -14.29516,2.790344 -19.47253,12.565713 l -9.12264,-4.46553 c -1.59323,-0.779895 -3.50056,-0.126207 -4.28044,1.467038 l -0.96344,1.968216 c -0.7799,1.593232 -0.1262,3.500553 1.46704,4.280441 l 37.88251,18.543527 c 1.59324,0.779892 3.50056,0.126194 4.28045,-1.46704 l 0.96345,-1.96821 c 0.77988,-1.593242 0.12617,-3.500563 -1.46706,-4.280452 l -7.25919,-3.553381 c 4.54441,-10.085216 3.71501,-20.279036 -2.02815,-23.090322 z"
+ id="path3523"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.77901149;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ <path
+ d="m 544.30928,206.19246 c 11.2601,72.34335 23.16011,139.63781 -29.38309,159.0433 l -95.76795,31.92265"
+ id="path3538"
+ style="fill:none;stroke:#000000;stroke-width:2.65748024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <path
+ d="m 131.57708,155.02684 c -6.65568,1.92166 -23.76224,8.99408 -30.15258,8.7809 l -2.881217,-2.57184 c -6.613649,-1.01982 -3.544564,1.16971 -8.73279,0.55397 -5.479387,-2.82907 -17.004785,-8.46999 -18.707187,-10.78205 -0.614222,-1.85026 3.027562,0.58738 4.161822,0.73828 -6.086013,-4.09802 -4.797819,3.53747 -10.217455,-3.71977 l 0.533204,-0.38585 c -16.503508,-11.54383 -1.866283,-38.77646 26.632829,-49.38031 -1.946472,0.2704 -1.61784,-0.23495 -2.525249,-0.47446 13.532363,-0.66539 9.197985,-2.63076 22.022503,-6.00259 6.27677,-2.07589 4.61142,-4.12724 6.56294,-4.71951 -7.29778,0.0115 -9.46705,-0.59487 -19.031838,2.80152 -28.313454,3.80129 -36.83205,15.74393 -45.198736,34.41264 -1.05476,2.86451 -1.962674,1.22996 -3.302519,1.91811 0.990958,-5.74624 3.566842,-11.43071 7.386868,-16.54146 -2.777418,2.90401 -5.4009,5.93968 -7.065326,9.42702 0.198496,-5.23583 9.695391,-14.57271 9.509555,-16.54197 -14.490171,12.6151 -18.628194,40.96755 -7.388387,52.41344 -2.450305,-5.99588 -5.102651,-13.72657 -4.558814,-21.29623 0.720053,-3.31366 2.946544,-8.11907 3.873701,-7.596 -1.506946,19.89715 0.993996,24.70357 21.314972,36.41987 5.067711,3.00984 12.820175,5.73105 13.351353,6.95342 -4.022572,-1.01931 -1.495299,0.72967 -4.96897,0.044 8.93483,2.00116 2.450812,-2.48625 14.453206,0.74689 l -2.717667,3.01136 c 5.966004,-2.38549 29.349472,-5.0991 38.961312,-8.35504 3.62457,0.91096 -12.70826,8.77431 -20.29768,8.76166 8.5986,0.50991 19.31179,-7.69829 25.90316,-8.68368 -1.89483,1.2249 -3.83927,2.70856 -5.93259,3.74407 6.87291,-3.50557 23.266,-5.59433 27.89014,-5.88549 0.12963,-0.90741 -4.18765,-1.64721 4.47121,-4.27271 3.84382,-0.91298 2.32625,0.38787 3.38354,0.46889 0.20558,-0.73727 2.54094,-3.13744 7.79905,-5.57053 1.58391,0.38737 -2.72273,2.81843 -2.55766,3.86003 4.23575,-1.77431 7.24813,-3.7385 10.66103,-4.65756 6.17109,-4.73756 -1.33377,-0.78284 1.88217,-4.16587 10.34961,-6.00449 3.58304,1.88469 8.92571,0.94589 -6.38224,6.72809 -17.93194,12.57509 -22.669,15.1206 5.97917,-2.54196 11.5568,-5.60801 16.81237,-8.96015 -0.20305,1.60771 12.16696,-5.59484 4.58109,0.85677 17.75826,-9.34195 55.51623,-18.0165 59.19752,-33.50573 -1.18946,2.07813 -2.67716,4.70313 -3.2929,4.05701 2.30599,-7.82842 3.09643,-6.75695 4.73756,-8.21174 0.67346,-6.06171 -2.28675,-5.7027 -3.36329,-9.32625 2.76426,-11.81909 -2.24956,-16.92985 -1.6004,-27.32504 l -2.22041,1.02995 c 0.24609,-7.42535 -3.83826,-7.60359 -5.45913,-15.14693 0.25014,-0.54637 2.33485,1.95711 3.55165,4.14714 -3.37341,-6.26223 -0.70588,-6.60808 -4.81757,-12.529012 1.87811,1.237052 3.35012,2.682722 5.06822,4.075742 -2.2989,-5.219119 -8.25529,-11.762889 -4.43172,-10.248349 -7.73119,-7.50282 -19.74473,-21.26636 -32.50616,-27.46023 l 2.06445,-0.82082 C 203.5884,22.655623 187.5523,12.198658 179.83477,13.003274 l -0.67448,-0.986401 C 174.26525,11.014774 169.07804,10.874511 164.21844,10.326117 157.77899,9.021718 160.68907,6.909159 159.96953,7.511734 145.26618,5.460952 133.56709,5.554629 123.9274,5.523741 120.72077,8.480964 106.57829,9.977737 95.210886,13.534452 37.01373,25.425501 -0.1784754,59.149548 1.626439,112.18433 c 2.0288948,7.6756 12.406173,13.67327 18.455449,18.63371 -5.304335,-7.94806 -2.055749,-4.60862 -8.150989,-11.75264 -3.6026675,-5.48003 -2.8891575,-7.81438 0.0275,-13.2882 l -2.9905975,2.63311 c 0.52105,-9.40879 2.6508255,-6.0683 2.7662775,-13.64657 1.168185,0.36965 2.336372,0.7398 3.504558,1.10996 -0.74132,-2.81945 -2.168765,-8.7014 0.312934,-10.68686 l -1.227937,-2.97946 c 4.007381,-4.96947 5.123411,-10.91421 8.147429,-11.52742 l -2.417897,-0.44813 c 1.85735,-1.67608 15.146927,-18.393749 13.31135,-11.006882 0.852214,-1.502387 1.093751,-3.273147 4.157265,-5.904737 l 2.217377,0.84462 c 3.575451,-4.23373 8.638605,-8.32415 10.704072,-8.63455 -2.02749,2.2913 -2.111547,3.54456 -2.157119,4.77756 19.972596,-13.48706 -1.67911,-8.45631 18.123853,-19.85562 0.186849,0.40053 0.373193,0.80107 0.560041,1.2016 1.362631,-1.3763 2.990597,-2.42144 4.525899,-3.63976 2.186995,-0.35952 4.373484,-0.71954 6.560479,-1.07957 5.626739,-7.482064 34.383077,-5.34725 48.282827,-8.004153 5.73156,-0.856265 13.0926,1.724177 23.44931,2.472079 l -0.29471,-1.984448 c 8.789,1.705947 37.50704,12.958922 39.18362,21.129642 7.07342,2.36473 -0.25116,-0.76461 0.91196,-1.87507 13.33414,5.75637 11.25399,9.16016 15.14794,14.3418 6.4982,4.99986 -3.56684,-4.80491 0.79702,-2.76071 6.99697,9.728817 9.97187,5.61712 16.54653,18.954299 -0.45827,1.70088 -2.72679,-2.97895 -4.43526,-3.86358 8.27604,7.47954 18.48296,31.31581 16.14558,45.39278 -2.8154,16.34803 -46.36905,26.81553 -68.29825,33.08535 l 0.0289,0.78183 c -8.94141,1.87457 -38.84536,16.09029 -49.13776,15.86749"
+ id="path2490"
+ style="fill:#d70751" />
+</svg>
--- /dev/null
+family=$1
+dist=$2
+
+# basic settings
+cowbuilderroot="/home/neurodebian"
+buildplace="${cowbuilderroot}/build"
+
+# all cuurently supported dists
+alldists="nd+debian-lenny nd+debian-squeeze nd+debian-sid \
+ nd+ubuntu-maverick nd+ubuntu-lucid nd+ubuntu-karmic nd+ubuntu-jaunty"
+
+# default is debian
+aptcache="${cowbuilderroot}/debian_aptcache"
+components="main contrib non-free"
+mirror="http://debian.lcs.mit.edu/debian"
+
+# overwrite necessary bits for ubuntu
+if [ "${family#nd+}" = "ubuntu" ]; then
+ aptcache="${cowbuilderroot}/ubuntu_aptcache"
+ components="main universe"
+ mirror="http://ubuntu.media.mit.edu/ubuntu"
+fi
+
+if [ ! -d $aptcache ]; then mkdir $aptcache; fi
Priority: optional
Maintainer: NeuroDebian Team <team@neuro.debian.net>
Uploaders: Michael Hanke <michael.hanke@gmail.com>, Yaroslav Halchenko <debian@onerussian.com>
-Build-Depends: debhelper (>= 7.0.50~)
-Standards-Version: 3.9.0
+Build-Depends: debhelper (>= 7.0.50~), xcftools, help2man, inkscape
+Standards-Version: 3.9.1
Homepage: http://neuro.debian.net
Vcs-Browser: http://git.debian.org/?p=pkg-exppsy/neurodebian.git
Vcs-Git: git://git.debian.org/git/pkg-exppsy/neurodebian.git
Package: neurodebian-dev
Architecture: all
-Depends: ${misc:Depends}
+Depends: ${misc:Depends}, devscripts, cowbuilder, python
Suggests:
Description: NeuroDebian development tools
Pacifier
+
+
+Package: neurodebian-desktop
+Architecture: all
+Depends: ${misc:Depends}
+Suggests:
+Description: neuroscience research environment
+ Pacifier
+
+
+Package: neurodebian-trailer
+Architecture: all
+Depends: ${misc:Depends}
+Suggests:
+Description: neuroscience research environment
+ Pacifier
+
+
--- /dev/null
+build/wallpaper/neurodebian.png usr/share/backgrounds
+build/icons/* usr/share/pixmaps
+xdg/neurodebian.menu etc/xdg/menus/applications-merged
+xdg/directories/* usr/share/desktop-directories
+xdg/desktop/* usr/share/applications
--- /dev/null
+tools/backport-dsc usr/bin/
+tools/nd_* usr/bin/
+neurodebian.cfg /etc/neurodebian/
+cmdsettings.sh /etc/neurodebian/
+pkgs usr/share/neurodebian/
+sphinx usr/share/neurodebian/
--- /dev/null
+build/man/*
+++ /dev/null
-build/wallpaper/neurodebian.png usr/share/backgrounds
# wallpaper
[ ! -d build/wallpaper ] && mkdir -p build/wallpaper
xcf2png -o build/wallpaper/neurodebian.png artwork/wallpaper_hotbrain.xcf
+ # icons
+ [ ! -d build/icons ] && mkdir -p build/icons
+ inkscape artwork/icon.svg -w 32 -h 32 -e build/icons/neurodebian.png
+ # manpages
+ [ ! -d build/man ] && mkdir -p build/man
+ help2man -h '--verbose-help' --no-info tools/backport-dsc \
+ -n "backport Debian source packages" > build/man/backport-dsc.1
override_dh_auto_install::
--- /dev/null
+3.0 (native)
python-mvpa = python-mvpa python-mvpa-snapshot
libgiftiio-dev = libgiftiio-dev gifti-bin
openmeeg-tools = openmeeg-tools libopenmeeg-dev python-openmeeg libopenmeeg1
+libbiosig-dev = libbiosig-dev python-biosig octave-biosig biosig-tools libbiosig0
[mirrors]
+de = http://apsy.gse.uni-magdeburg.de/debian
+gr = http://neurobot.bio.auth.gr/neurodebian
us-nh = http://neuro.debian.net/debian
us-tn = http://masi.vuse.vanderbilt.edu/neurodebian
-de = http://apsy.gse.uni-magdeburg.de/debian
[neurodebian]
# Release files of all repositories to be contained in the website
intrepid = Ubuntu 08.10 "Intrepid Ibex" (intrepid)
jaunty = Ubuntu 09.04 "Jaunty Jackalope" (jaunty)
karmic = Ubuntu 09.10 "Karmic Koala" (karmic)
-lucid = Ubuntu 10.4 LTS "Lucid Lynx" (lucid)
+lucid = Ubuntu 10.04 LTS "Lucid Lynx" (lucid)
maverick = Ubuntu upcoming release "Maverick Meerkat" (maverick)
+[release backport ids]
+# the purpose of these ids is to have version suffixes for backported packages
+# that allow proper sorting (upgradability) across distribution releases
+# For Debian we'll use ndXX (where XX is the version of the Debian release,
+# e.g. 50; analog to backports.org) and for Ubuntu we'll use ndXX.XX.
+etch = nd40
+lenny = nd50
+squeeze = nd60
+wheezy = nd70
+sid = nd
+hardy = nd08.04
+intrepid = nd08.10
+jaunty = nd09.04
+karmic = nd09.10
+lucid = nd10.04
+maverick = nd10.10
+
[nitrc ids]
afni = 23
ants = 130
How do I get a new neuroscience-related FOSS into (Neuro)Debian?
----------------------------------------------------------------
- * You can approach packaging it yourself (file an ITP_ (Intent to package)
- bugreport) and `ask us <team@neuro.debian.net>`_ to mentor your upload to
- Debian_ if you are not a Debian developer.
-
- * `Contact us <team@neuro.debian.net>`_, but then it might take longer
- depending on our workload and interest to the particular software.
+The goal of NeuroDebian is to package neuroscience software for Debian. Hence
+getting software into NeuroDebian means trying to get it into Debian. There are
+at least two possibilities to achieve that:
+
+* You can approach packaging it yourself. Start by filing an ITP_ (Intent to
+ package) bugreport) and `ask us <team@neuro.debian.net>`_ to mentor your
+ upload to Debian_, if you are not a Debian developer.
+
+* `Contact us <team@neuro.debian.net>`_ -- but then it might take a little
+ longer, depending on our current workload and interest in a particular
+ software.
+
+
+I have heard that some packages are non-free. Will you charge me for them?
+--------------------------------------------------------------------------
+
+ No. The term :term:`non-free` refers to an archive section. NeuroDebian uses
+ exactly the same :ref:`archive sections as Debian proper
+ <http://www.debian.org/doc/debian-policy/ch-archive.html>`. The *non-free*
+ section contains packages that have certain restrictions regarding **your
+ freedom** to employ them for a particular purpose. In contrast, for packages
+ in the *main* section your are completely free to do whatever and in whatever
+ context you like. Regardless of the actual license or archive section, all
+ packages in NeuroDebian are provided free of charge and under the licensing
+ terms of the original developers.
.. include:: links_names.rst
This service is provided "as is". There is no guarantee that a package
works as expected, so use them at your own risk. If you encounter problems,
-please `report <#contact>`_ them.
+please `report <#contacts>`_ them.
Please |spread|, if you like it.
.. include:: sources_lists
.. note::
- Thanks to the `Department of Psychological and Brain Sciences at
- Dartmouth College`_ `[us-nh]` (primary mirror), the `Department of
- Experimental Psychology at the University of Magdeburg`_ `[de]`, and
- the `Medical-image Analysis and Statistical Interpretation lab at
- Vanderbilt`_ `[us-tn]` for hosting a mirror.
+ Thanks to the following institutions and individuals for hosting a mirror:
+
+ * `Department of Psychological and Brain Sciences at Dartmouth College`_
+ `[us-nh]` (primary mirror)
+ * `Department of Experimental Psychology at the University of Magdeburg`_
+ `[de]`
+ * `Neurobot at Aristotle University of Thessaloniki, Greece`_ `[gr]`
+ * `Medical-image Analysis and Statistical Interpretation lab at Vanderbilt`_
+ `[us-tn]`
If your are interested in mirroring the repository, please see the :ref:`faq`.
-.. _Department of Experimental Psychology at the University of Magdeburg: http://apsy.gse.uni-magdeburg.de
.. _Department of Psychological and Brain Sciences at Dartmouth College: http://www.dartmouth.edu/~psych
+.. _Department of Experimental Psychology at the University of Magdeburg: http://apsy.gse.uni-magdeburg.de
+.. _Neurobot at Aristotle University of Thessaloniki, Greece: http://neurobot.bio.auth.gr
.. _Medical-image Analysis and Statistical Interpretation lab at Vanderbilt: https://masi.vuse.vanderbilt.edu
Once this is done, you have to update the package index. Use your favorite
.. _FOSS: http://en.wikipedia.org/wiki/Free_and_open_source_software
-Contact
-=======
+Contacts
+========
+
+`Email us directly <team@neuro.debian.net>`_ with any "private"
+communication. Otherwise please use our public mailing lists, which
+exist not only to provide user-support but also to establish
+communication channels within the NeuroDebian community
+
+* neurodebian-users_: Discussions and support of NeuroDebian users
+
+* neurodebian-upstream_: General discussions and knowledge sharing
+ among developers of the neuroscience software. We will also use it
+ to update you with summaries of recent relevant developments in
+ Debian project
+
+* neurodebian-devel_: Technical mailing list for discussions on
+ NeuroDebian development
+
+.. _neurodebian-users: http://lists.alioth.debian.org/mailman/listinfo/neurodebian-users
+.. _neurodebian-devel: http://lists.alioth.debian.org/mailman/listinfo/neurodebian-devel
+.. _neurodebian-upstream: http://lists.alioth.debian.org/mailman/listinfo/neurodebian-upstream
-`Email us <team@neuro.debian.net>`_ if you have any suggestions or want to
-report a problem.
.. toctree::
:hidden:
aptitude install module-assistant
module-assistant prepare
# note guest additions for 3.1.2 are broken, use 3.1.0
-bash /media/cdrom/VBoxLinuxAdditions-amd64.run (need 2.6.27+ kernel for direct rendering)
+bash /media/cdrom/VBoxLinuxAdditions-x86.run (need 2.6.27+ kernel for direct rendering)
#make sure that xorg.conf has 'vboxvideo' as device driver and also
echo "vboxvideo" >> /etc/modules
--- /dev/null
+#!/bin/bash
+
+# play save
+set -e
+set -u
+
+# version of this script
+backports_dsc_version=0.1
+
+############
+# Defaults #
+############
+
+bp_distribution=${BACKPORT_DISTRIBUTION:-lenny-backports}
+bp_version_suffix=${BACKPORT_VERSION_SUFFIX:-bpo50}
+bp_maintainer_name=${DEBFULLNAME:-unamed}
+bp_maintainer_email=${DEBEMAIL:-unknown}
+bp_update_maintainer=1
+# whether or not to apply backport patches found in a package
+bp_apply_patches=1
+# produce fancy colored output
+bp_color_output=1
+# enables additional status message if set to true
+bp_verbose=0
+# sed expressions to modify debian/control
+bp_mod_control=""
+
+
+# source config files
+if [ -f /etc/backport-dsc ]; then
+ . /etc/backport-dsc
+fi
+
+# source user config files
+if [ -f "$HOME/.backport-dsc" ]; then
+ . $HOME/.backport-dsc
+fi
+
+
+print_version()
+{
+cat << EOT
+backport-dsc $backports_dsc_version
+
+Copyright (C) 2010 Michael Hanke <michael.hanke@gmail.com>
+
+Licensed under GNU Public License version 2 or later.
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Written by Michael Hanke for the NeuroDebian project.
+
+EOT
+}
+
+
+print_short_description()
+{
+cat << EOT
+Helper to aid backporting a Debian source package to an arbitrary distribution
+release.
+
+backport-dsc aids backporting by appropriately mangling the source package
+version, adjusting the maintainer of a package and compiling an informative
+changelog entry. Moreover, it supports distribution specific patches (plain, or
+for format 3.0 (quilt) source packages) and allow modification of debian/control
+via arbitrary 'sed' expressions.
+
+Backport relevant patches can be embedded in source packages for use with
+backport-dsc. The distribution name (see --target-distribution) serves as an
+identifier to search for patches in the source package that shall be applied
+for a particular distribution. For packages using format the 3.0 (quilt),
+backport-dsc will look for debian/patches/series-<distname> and append it to
+the main patch series. Moreover, backport-dsc will also look for patches
+matching /debian/patches/<distname>-dsc-patch* and apply them to the source
+package. The latter patches, unlike the former quilt series, can also be used
+to modify the debian/ directory itself.
+
+EOT
+}
+
+
+print_help()
+{
+cat << EOT
+
+Usage: backport-dsc [OPTIONS] <dsc-file>
+
+
+Options:
+
+-d <distname>, --target-distribution <distname>
+ Arbitrary distribution name (e.g. lenny-backports). This will be the target
+ distribution used for the backport changelog entry. The distribution name
+ also serves as an identifier to search for backport patches in the source
+ package.
+
+-h, --help
+ Print short description, usage summary and option list.
+
+--maint-email <email>
+ Specify the backport maintainer's email address. Alternatively, backport-dsc
+ will use the DEBEMAIL environment setting.
+
+--maint-name <name>
+ Specify the backport maintainer's real name. Alternatively, backport-dsc will
+ use the DEBFULLNAME environment setting.
+
+--mod-control <expression>
+ sed expression to modify debian/control. The option can be given multiple
+ times and all expressions will be passed to sed in the order of appearance.
+ This can be used to, e.g. change build or runtime dependencies.
+
+--no-backport-patches
+ If set, potentially existing backport patches will not be applied/activated.
+
+--no-colored
+ If set, backport-dsc won't colorize its status and error messages.
+
+--no-maintainer-update
+ If set, the orginal maintainer is preserved in the backported source package.
+ This should only be done if original maintainer and backporter are identical.
+ Otherwise the porter should take responsibility for the source package
+ backport and identify herself as the maintainer.
+
+-s <string>, --version-suffix <string>
+ Version suffix that will be appended to the original source package version,
+ ideally indicating the backport target distribution. The resulting package
+ version will follow this schema:
+
+ <originalversion>~<suffix>+<digit>
+
+ e.g.: 1.2.3-4~bpo50+1
+
+--verbose
+ Enable additional status messages.
+
+--verbose-help
+ Print all available help.
+
+--version
+ Print version information and exit.
+
+EOT
+}
+
+
+print_additional_description()
+{
+cat << EOT
+
+Examples:
+
+backport-dsc examplepkg_1.2.3-4.dsc
+ Create backport suitable for backports.org
+
+backport-dsc -d myown-backports -v mo2010 examplepkg_1.2.3-4.dsc
+ Create backport for some custom distribution with custom version suffix.
+
+backport-dsc -d ubuntu-lucid -v myppa --mod-control "-e 's/iceweasel/firefox/g'" examplepkg_1.2.3-4.dsc
+ Create a backport for a fake Ubuntu PPA repository, replacing all occurrences
+ of iceweasel in debian/control with firefox.
+
+
+Files:
+
+backport-dsc reads configuration from two files: system-wide from
+/etc/backports-dsc and per user settings from \$HOME/.backport-dsc
+(in that order). Both files have to be valid bash scripts that will
+be sourced by backport-dsc. The following variables (each shown with an
+example setting) can be used to pre-configure backport-dsc:
+
+bp_distribution="lenny-backports"
+ Backport target distribution (see --backport-distribution)
+
+bp_version_suffix="bpo50"
+ Version suffix (see --version-suffix)
+
+bp_maintainer_name="Unknown fellow"
+ Name of the backport maintainer (see --maint-name)
+
+bp_maintainer_email="user@example.net"
+ Email address of backport maintainer (see --maint-email)
+
+bp_apply_patches=1
+ Whether or not to apply backport patches found in a source package.
+ (see --no-backport-patches)
+
+bp_color_output=1
+ Enable or disable colored status output (see --no-color)
+
+bp_verbose=0
+ Enable verbose status output (see --verbose)
+
+bp_mod_control="--mod-control 's/^Depends:.*$/&, mypackage/'"
+ sed expressions to modify debian/control, for example to add dependencies
+ (see --mod-control)
+
+bp_update_maintainer=1
+ Whether or not to replace the original maintainer in the backported source
+ package (see --no-maintainer-update)
+
+
+Environment:
+
+backport-dsc acknowledges the common environment variables DEBFULLNAME and
+DEBEMAIL to specify the maintainer.
+
+
+
+Report bugs to <michael.hanke@gmail.com>.
+
+EOT
+}
+
+
+
+################################
+# Commandline options handling #
+################################
+
+# Parse commandline options (taken from the getopt examples from the Debian util-linux package)
+# Note that we use `"$@"' to let each command-line parameter expand to a
+# separate word. The quotes around `$@' are essential!
+# We need CLOPTS as the `eval set --' would nuke the return value of getopt.
+CLOPTS=`getopt -o h,d:,s: --long help,verbose-help,version,target-distribution:,version-suffix:,maint-name:,maint-email:,no-color,no-backport-patches,verbose,mod-control:,no-maintainer-update, -n 'backport-dsc' -- "$@"`
+
+if [ $? != 0 ] ; then
+ echo "Terminating..." >&2
+ exit 1
+fi
+
+# Note the quotes around `$CLOPTS': they are essential!
+eval set -- "$CLOPTS"
+
+while true ; do
+ case "$1" in
+ -d|--target-distribution) shift; bp_distribution=$1; shift;;
+ -s|--version-suffix) shift; bp_version_suffix=$1; shift;;
+ --maint-name) shift; bp_maintainer_name=$1; shift;;
+ --maint-email) shift; bp_maintainer_email=$1; shift;;
+ --no-maintainer-update) bp_update_maintainer=0; shift;;
+ --no-backport-patches) apply_patches=0; shift;;
+ --no-color) bp_color_output=0; shift;;
+ --verbose) bp_verbose=1; shift;;
+ --mod-control) shift; bp_mod_control="$bp_mod_control -e '$1'"; shift;;
+ -h|--help) print_short_description; print_help; exit 0;;
+ --verbose-help) print_short_description; print_help; print_additional_description; exit 0;;
+ --version) print_version; exit 0;;
+ --) shift ; break ;;
+ *) echo "Internal error! ($1)"; exit 1;;
+ esac
+done
+
+# colorful output requested?
+if [ "$bp_color_output" = 1 ]; then
+ black='\e[0;30m'; Black='\e[1;30m'
+ red='\e[0;31m'; Red='\e[1;31m'
+ green='\e[0;32m'; Green='\e[1;32m'
+ yellow='\e[0;33m'; Yellow='\e[1;33m'
+ blue='\e[0;34m'; Blue='\e[1;34m'
+ cyan='\e[0;36m'; Cyan='\e[1;36m'
+ white='\e[0;37m'; White='\e[1;37m'
+ NC='\e[0m' #no color
+else
+ black=''; Black=''
+ red=''; Red=''
+ green=''; Green=''
+ yellow=''; Yellow=''
+ blue=''; Blue=''
+ cyan=''; Cyan=''
+ white=''; White=''
+ NC='' #no color
+fi
+
+
+if [ $# -ne 1 ]; then
+ printf "${Red}Error: This command needs exactly one positional argument.\n${NC}"
+ exit 1
+fi
+
+# to be processed source package
+dsc_file=$1
+
+if [ ! -f "$dsc_file" ]; then
+ printf "${Red}Error: Cannot find DSC file at '$dsc_file'.\n${NC}"
+ exit 1
+fi
+
+# determine basic DSC properties
+src_name=$(basename "${dsc_file%%_*}")
+src_version=${dsc_file#*_}
+src_version=${src_version%%.dsc}
+
+wdir=$(mktemp -d -t backport-dsc.XXXXXX)
+sdir=$wdir/${src_name}-${src_version}
+
+bp_version="~${bp_version_suffix}+"
+
+
+# setup environment for dpkg
+DEBEMAIL="$bp_maintainer_email"
+DEBFULLNAME="$bp_maintainer_name"
+export DEBEMAIL DEBFULLNAME
+
+if [ "$bp_verbose" = 1 ]; then
+ printf "${green}DSC name: '$src_name'\nDSC version: '$src_version'\n${NC}"
+ printf "${green}Backporting to '$bp_distribution', version suffix '$bp_version'\n${NC}"
+ printf "${green}Extracting source package to '$sdir'\n${NC}"
+fi
+
+# common debchange call
+bp_dch_cmd="dch --noconf --force-distribution --force-bad-version -c $sdir/debian/changelog"
+
+# extract the original source package
+dpkg-source -x $dsc_file $sdir
+# note backport in changelog
+$bp_dch_cmd -D ${bp_distribution} -l "${bp_version}" "Backported for ${bp_distribution}."
+
+if [ "$bp_update_maintainer" = 1 ]; then
+ if [ "$bp_verbose" = 1 ]; then
+ printf "${green}Set backport maintainer to: '$bp_maintainer_name <$bp_maintainer_email>'\n${NC}"
+ fi
+ bp_mod_control="$bp_mod_control -e 's/^Maintainer:.*$/Maintainer: $bp_maintainer_name <$bp_maintainer_email>\nX-Original-&/'"
+fi
+
+# handle patches if desired
+if [ "$bp_apply_patches" = 1 ]; then
+ dsc_format=$(dpkg-source --print-format $sdir)
+ # per each supported source package format
+ if [ "$dsc_format" = "3.0 (quilt)" -a -f "$sdir/debian/patches/series-$bp_distribution" ]; then
+ if [ "$bp_verbose" = 1 ]; then
+ printf "${green}Enabling additional quilt patch series for $bp_distribution.\n${NC}"
+ fi
+ cat $sdir/debian/patches/series-$bp_distribution >> $sdir/debian/patches/series
+ $bp_dch_cmd "Added 'series-$bp_distribution' in quilt patch series."
+ fi
+ # look for backport patches
+ for p in $(ls -1 $sdir/debian/patches/$bp_distribution-dsc-patch* 2> /dev/null || true); do
+ if [ "$bp_verbose" = 1 ]; then
+ printf "${green}Applying additional patch $(basename "$p").\n${NC}"
+ fi
+ patch -p1 --directory=$sdir < "$p"
+ $bp_dch_cmd "Applied additional patch from debian/patches/$(basename "$p")."
+ done
+fi
+
+# modify control file
+if [ -n "$bp_mod_control" ]; then
+ if [ "$bp_verbose" = 1 ]; then
+ printf "${green}Modifying debian/control with given instructions.\n${NC}"
+ fi
+ bash -c "sed -i $bp_mod_control $sdir/debian/control"
+ $bp_dch_cmd "Used following sed expression to modify debian/control:$bp_mod_control."
+fi
+
+# extract final version
+final_version=$(dpkg-parsechangelog -l$sdir/debian/changelog | egrep '^Version: ' | cut -d ' ' -f 2,2)
+# build backported source package
+bash -c "cd $wdir && dpkg-source -b $sdir"
+# remove extracted source tree
+rm -rf $sdir
+# move generated source package into working dir
+mv $wdir/* .
+# cleanup
+rm -rf $wdir
+
+if [ "$bp_verbose" = 1 ]; then
+ printf "${green}Backported source package is at '${src_name}_$final_version.dsc'\n${NC}"
+fi
fi
-. /home/neurodebian/neurodebian.git/tools/nd_cmdsettings.sh
+. /etc/neurodebian/cmdsettings.sh
# common options
opts="--distribution $dist --debootstrap debootstrap --aptcache $aptcache"
#!/bin/bash
+#
+# Simple frontend for backport-dsc to do it the NeuroDebian way
+#
+
+set -e
+set -u
release=$1
dscfile=$2
-set -e
-
if [ -z "$release" ]; then
echo "You need to provide a distribution codename (e.g. 'lenny', 'squeeze')."
exit 1
fi
-
-set -e
-set -u
-
if [ -z "$2" ]; then
cat << EOT
Script to backport a source package to some target release.
exit 1
fi
-. /home/neurodebian/neurodebian.git/tools/nd_cmdsettings.sh
-
-DEBEMAIL="team@neuro.debian.net"
-DEBFULLNAME="NeuroDebian Maintainers"
-export DEBEMAIL DEBFULLNAME
-
-srcname=${dscfile%%_*}
-srcversion=${dscfile#*_}
-srcversion=${srcversion%%.dsc}
-wdir=$(mktemp -d -t nd_backport.XXXXXX)
-sdir=$wdir/${srcname}-${srcversion}
-
-echo "Source package name: $srcname"
-echo "Source package version: $srcversion"
-echo "Extracting source package to: $sdir"
-
-dpkg-source -x $dscfile $sdir
-
-echo "Backporting to: $release"
-
-changelog_entry="Backport of Debian package version $srcversion for \
-NeuroDebian. Problems with the backport should be reported to the
-NeuroDebian maintainers and not to the original Debian maintainer."
-
-echo | debchange \
- --noconf --force-bad-version \
- -c $sdir/debian/changelog \
- -D ${release} \
- -b -l "~${release}.nd" \
- $changelog_entry
-
-bpversion=$(dpkg-parsechangelog -l$sdir/debian/changelog | egrep '^Version: ' | cut -d ' ' -f 2,2)
-dpkg-source -b $sdir
-
-# cleanup
-rm -rf $wdir
+# assemble an appropriate backport-dsc call
+backport-dsc \
+ --maint-name "NeuroDebian Maintainers" \
+ --maint-email "team@neuro.debian.net" \
+ --target-distribution "$release" \
+ --version-suffix "$(nd_querycfg "release backport ids" "$release")" \
+ "$dscfile"
-echo ${srcname}_$bpversion.dsc
+# not adding the auto-dep for now
+# --mod-control 's/^Depends:.*$/&, neurodebian-trailer/' \
exit 1
fi
-. /home/neurodebian/neurodebian.git/tools/nd_cmdsettings.sh
+. /etc/neurodebian/cmdsettings.sh
# common options
opts="--distribution $dist --aptcache $aptcache --buildplace $buildplace"
-. /home/neurodebian/neurodebian.git/tools/nd_cmdsettings.sh
+. /etc/neurodebian/cmdsettings.sh
for d in $alldists; do
dfamily=${d%%-*}
drelease=${d##*-}
- bpdsc=$(nd_backport $drelease $1 | tail -n1)
+ bpdsc=$(nd_backport $drelease $1 | tail -n1 | sed -e 's/^.* //g')
nd_build $dfamily $drelease $bpdsc
done
+++ /dev/null
-family=$1
-dist=$2
-
-# basic settings
-cowbuilderroot="/home/neurodebian"
-buildplace="${cowbuilderroot}/build"
-
-# all cuurently supported dists
-alldists="nd+debian-lenny nd+debian-squeeze nd+debian-sid \
- nd+ubuntu-maverick nd+ubuntu-lucid nd+ubuntu-karmic nd+ubuntu-jaunty"
-
-# default is debian
-aptcache="${cowbuilderroot}/debian_aptcache"
-components="main contrib non-free"
-mirror="http://debian.lcs.mit.edu/debian"
-
-# overwrite necessary bits for ubuntu
-if [ "${family#nd+}" = "ubuntu" ]; then
- aptcache="${cowbuilderroot}/ubuntu_aptcache"
- components="main universe"
- mirror="http://ubuntu.media.mit.edu/ubuntu"
-fi
-
-if [ ! -d $aptcache ]; then mkdir $aptcache; fi
exit 1
fi
-. /home/neurodebian/neurodebian.git/tools/nd_cmdsettings.sh
+. /etc/neurodebian/cmdsettings.sh
# common options
opts="--distribution $dist --aptcache $aptcache --buildplace $buildplace"
exit 1
fi
-. /home/neurodebian/neurodebian.git/tools/nd_cmdsettings.sh
+. /etc/neurodebian/cmdsettings.sh
# common options
opts="--distribution $dist --aptcache $aptcache --buildplace $buildplace"
--- /dev/null
+#!/usr/bin/python
+#
+# Dead simple script to query the NeuroDebian dev config.
+#
+import sys
+from ConfigParser import SafeConfigParser
+
+# XXX add check if it is there at all
+# XXX support more locations
+cfg_path="/etc/neurodebian/neurodebian.cfg"
+
+cfg = SafeConfigParser()
+cfg.read(cfg_path)
+print cfg.get(sys.argv[1], sys.argv[2])
#!/bin/bash
-. /home/neurodebian/neurodebian.git/tools/nd_cmdsettings.sh
+. /etc/neurodebian/cmdsettings.sh
for d in $alldists; do
dfamily=${d%%-*}
exit 1
fi
-. /home/neurodebian/neurodebian.git/tools/nd_cmdsettings.sh
+. /etc/neurodebian/cmdsettings.sh
# common options
opts="--distribution $dist --aptcache $aptcache --buildplace $buildplace"
+++ /dev/null
-#!/usr/bin/env python
-"""Tell me who you are!
-"""
-
-import urllib
-import apt
-from debian_bundle import deb822
-from debian_bundle import debtags
-from ConfigParser import SafeConfigParser
-import subprocess
-import os
-import sys
-import shutil
-import pysvn
-from optparse import OptionParser, Option, OptionGroup, OptionConflictError
-
-
-def transCodename(codename, cfg):
- """Translate a known codename into a release description.
-
- Unknown codenames will simply be returned as is.
- """
- # strip repository codename
- codename = codename[codename.find('_') + 1:]
-
- # if we know something, tell
- if codename in cfg.options('release codenames'):
- return cfg.get('release codenames', codename)
- else:
- return codename
-
-
-def createDir(path):
- if os.path.exists(path):
- return
-
- ps = path.split(os.path.sep)
-
- for i in range(1,len(ps) + 1):
- p = os.path.sep.join(ps[:i])
-
- if not os.path.exists(p):
- os.mkdir(p)
-
-
-class AptListsCache(object):
- def __init__(self, cachedir='cache', ro_cachedirs=None, init_db=None):
- self.cachedir = cachedir
-
- if not ro_cachedirs is None:
- self.ro_cachedirs = ro_cachedirs
- else:
- self.ro_cachedirs = []
-
- # always use system cache
- #self.ro_cachedirs.append('/var/lib/apt/lists/')
-
- # create cachedir
- createDir(self.cachedir)
-
-
- def get(self, url, update=False):
- """Looks in the cache if the file is there and takes the cached one.
- Otherwise it is downloaded first.
-
- Knows how to deal with http:// and svn:// URLs.
-
- :Return:
- file handler
- """
- # look whether it is compressed
- cext = url.split('.')[-1]
- if cext in ['gz', 'bz2']:
- target_url = url[:-1 * len(cext) -1]
- else:
- # assume not compressed
- target_url = url
- cext = None
-
- # turn url into a filename -- mimik what APT does for
- # /var/lib/apt/lists/
- tfilename = '_'.join(target_url.split('/')[2:])
-
- # if we need to download anyway do not search
- if update:
- cfilename = os.path.join(self.cachedir, tfilename)
- else:
- # look for the uncompressed file anywhere in the cache
- cfilename = None
- for cp in [self.cachedir] + self.ro_cachedirs:
- if os.path.exists(os.path.join(cp, tfilename)):
- cfilename = os.path.join(cp, tfilename)
-
- # nothing found?
- if cfilename is None:
- # add cache item
- cfilename = os.path.join(self.cachedir, tfilename)
- update = True
-
- # if updated needed -- download
- if update:
- print 'Caching file from %s' % url
-
- if url.startswith('svn://'):
- # export from SVN
- pysvn.Client().export(url, cfilename)
- if url.startswith('http://'):
- # download
- tempfile, ignored = urllib.urlretrieve(url)
-
- # decompress
- decompressor = None
- if cext == 'gz':
- decompressor = 'gzip'
- elif cext == 'bz2':
- decompressor = 'bzip2'
- elif cext == None:
- decompressor = None
- else:
- raise ValueError, \
- "Don't know how to decompress %s files" \
- % cext
-
- if not decompressor is None:
- if subprocess.call([decompressor, '-d', '-q', '-f',
- tempfile]) == 1:
- raise RuntimeError, \
- "Something went wrong while decompressing '%s'" \
- % tempfile
-
- # move decompressed file into cache
- shutil.move(os.path.splitext(tempfile)[0], cfilename)
-
- # XXX do we need that if explicit filename is provided?
- urllib.urlcleanup()
-
- # open cached file
- fh = open(cfilename, 'r')
-
- return fh
-
-
-
-
-class DebianPkgArchive(SafeConfigParser):
- """
- """
- def __init__(self, cache=None, init_db=None):
- """
- :Parameter:
- """
- SafeConfigParser.__init__(self)
-
- # read an existing database if provided
- if not init_db is None:
- self.read(init_db)
-
- # use provided file cache or use fresh one
- if not cache is None:
- self.cache = cache
- else:
- self.cache = AptListsCache()
-
- # init debtags DB
- self.dtags = debtags.DB()
- self.dtags.read(open('/var/lib/debtags/package-tags'))
-
- # init package filter
- self.pkgfilter = None
-
- self._updateReleases()
-
-
- def _updateReleases(self):
- self.releases = {}
-
- # for all packages
- for p in self.sections():
- # no releases, nothing to do
- if not self.has_option(p, 'releases'):
- continue
-
- # for all releases of this package
- for r in \
- [rel.strip() for rel in self.get(p, 'releases').split(',')]:
- # push release code
- if not self.releases.has_key(r):
- self.releases[r] = []
-
- # store component
- component = self.get(p, '%s component' % r)
-
- if not component in self.releases[r]:
- self.releases[r].append(component)
-
-
- def __repr__(self):
- """Generate INI file content for current content.
- """
- # make adaptor to use str as file-like (needed for ConfigParser.write()
- class file2str(object):
- def __init__(self):
- self.__s = ''
- def write(self, val):
- self.__s += val
- def str(self):
- return self.__s
-
- r = file2str()
- self.write(r)
-
- return r.str()
-
-
- def save(self, filename):
- """Write current content to a file.
- """
- f = open(filename, 'w')
- self.write(f)
- f.close()
-
-
- def ensureUnique(self, section, option, value):
- if not self.has_option(section, option):
- self.set(section, option, value)
- else:
- if not self.get(section, option) == value:
- raise ValueError, "%s: %s is not unique (%s != %s)" \
- % (section, option,
- self.get(section, option), value)
-
-
- def appendUniqueCSV(self, section, option, value):
- """
- """
- if not self.has_option(section, option):
- self.set(section, option, value)
- else:
- l = self.get(section, option).split(', ')
- if not value in l:
- self.set(section, option, ', '.join(l + [value]))
-
-
- def getReleaseInfo(self, rurl, force_update=False):
- # root URL of the repository
- baseurl = '/'.join(rurl.split('/')[:-1])
- # get the release file from the cache
- release_file = self.cache.get(rurl, update=force_update)
-
- # create parser instance
- rp = deb822.Release(release_file)
-
- # architectures on this dist
- archs = rp['Architectures'].split()
- components = rp['Components'].split()
- # compile a new codename that also considers the repository label
- # to distinguish between official and unofficial repos.
- label = rp['Label']
- codename = rp['Codename']
- labelcode = '_'.join([rp['Label'], rp['Codename']])
-
- # cleanup
- release_file.close()
-
- return {'baseurl': baseurl, 'archs': archs, 'components': components,
- 'codename': codename, 'label': label, 'labelcode': labelcode}
-
-
- def checkOfficialRelease(self, rurl, force_update=False):
- ri = self.getReleaseInfo(rurl, force_update=force_update)
-
- # try with a i386 packages file, since that should be the most common
- # one
- # loop over all components
- for c in ri['components']:
- pkgsurl = self.buildPkgsURL(ri['baseurl'], c, 'i386')
- packages_file = self.cache.get(pkgsurl,
- update=force_update)
-
- # now check every package, whether we also have it in the DB already
- for st in deb822.Packages.iter_paragraphs(packages_file):
- pkg = st['Package']
- if self.has_section(pkg):
- # store the label code
- self.appendUniqueCSV(pkg, "releases", ri['labelcode'])
- # and the associated component
- self.ensureUnique(pkg, "%s component" % ri['labelcode'], c)
- # and version
- self.set(pkg, "%s version" % ri['labelcode'], st['Version'])
-
- # cleanup
- packages_file.close()
-
-
- def buildPkgsURL(self, baseurl, component, arch):
- return '/'.join([baseurl, component, 'binary-' + arch, 'Packages.bz2'])
-
-
- def importRelease(self, rurl, force_update=False):
-
- ri = self.getReleaseInfo(rurl, force_update=force_update)
-
- # compile the list of Packages files to parse and parse them
- for c in ri['components']:
- for a in ri['archs']:
- # compile packages URL
- pkgsurl = self.buildPkgsURL(ri['baseurl'], c, a)
-
- # retrieve from cache
- packages_file = self.cache.get(pkgsurl,
- update=force_update)
-
- # parse
- for stanza in deb822.Packages.iter_paragraphs(packages_file):
- self._storePkg(stanza, ri['labelcode'], c, ri['baseurl'])
-
-
- # cleanup
- packages_file.close()
-
- self._updateReleases()
-
-
- def _storePkg(self, st, codename, component, baseurl):
- """
- :Parameter:
- st: Package section
- """
- pkg = st['Package']
-
- if not self.has_section(pkg):
- self.add_section(pkg)
-
- # do nothing if package is not in filter if there is any
- if not self.pkgfilter is None and not pkg in self.pkgfilter:
- self.ensureUnique(pkg, 'visibility', 'shadowed')
- else:
- self.ensureUnique(pkg, 'visibility', 'featured')
-
- # which releases
- self.appendUniqueCSV(pkg, "releases", codename)
-
- # arch listing
- self.appendUniqueCSV(pkg, "%s archs" % codename, st['Architecture'])
-
- # versions
- self.ensureUnique(pkg,
- "%s version %s" % (codename, st['Architecture']),
- st['Version'])
-
- # link to .deb
- self.ensureUnique(pkg,
- "%s file %s" % (codename, st['Architecture']),
- '/'.join(baseurl.split('/')[:-2] + [st['Filename']]))
-
- # component
- self.ensureUnique(pkg, '%s component' % codename, component)
-
- # store the pool url
- self.ensureUnique(pkg, "%s poolurl" % codename,
- '/'.join(baseurl.split('/')[:-2] \
- + [os.path.dirname(st['Filename'])]))
-
-
- # now the stuff where a single variant is sufficient and where we go for
- # the latest available one
- if self.has_option(pkg, "newest version") \
- and apt.VersionCompare(st['Version'],
- self.get(pkg, "newest version")) < 0:
- return
-
- # everything from here will overwrite existing ones
-
- # we seems to have an updated package
- self.set(pkg, "newest version", st['Version'])
-
- # description
- self.set(pkg, "description", st['Description'].replace('%', '%%'))
-
- # maintainer
- self.set(pkg, "maintainer", st['Maintainer'])
-
- # optional stuff
- if st.has_key('Homepage'):
- self.set(pkg, 'homepage', st['Homepage'])
-
- # query debtags
- debtags = self.dtags.tagsOfPackage(pkg)
- if debtags:
- self.set(pkg, 'debtags', ', '.join(debtags))
-
-
- def writeSourcesLists(self, outdir, cfg):
- createDir(outdir)
- createDir(os.path.join(outdir, 'static'))
-
- fl = open(os.path.join(outdir, 'sources_lists'), 'w')
- for trans, r in sorted([(transCodename(k, cfg), k)
- for k in self.releases.keys() if k.startswith('apsy')]):
- # need to turn 'apsy_lenny' back into 'lenny'
- debneuro_r = r.split('_')[1]
-
- f = open(os.path.join(outdir, 'static',
- 'debneuro.%s.sources.list' % debneuro_r),
- 'w')
- f.write("deb http://apsy.gse.uni-magdeburg.de/debian %s %s\n" \
- % (debneuro_r, ' '.join(self.releases[r])))
- f.write("deb-src http://apsy.gse.uni-magdeburg.de/debian %s %s\n" \
- % (debneuro_r, ' '.join(self.releases[r])))
- # XXX use :download: role from sphinx 0.6 on
- #fl.write('* `%s <http://apsy.gse.uni-magdeburg.de/debian/html/_static/debneuro.%s.sources.list>`_\n' \
- fl.write('* `%s <_static/debneuro.%s.sources.list>`_\n' \
- % (trans, debneuro_r))
- f.close()
- fl.close()
-
-
- def importProspectivePkgsFromTaskFile(self, url):
- fh = self.cache.get(url)
-
- for st in deb822.Packages.iter_paragraphs(fh):
- # do not stop unless we have a description
- if not st.has_key('Pkg-Description'):
- continue
-
- if st.has_key('Depends'):
- pkg = st['Depends']
- elif st.has_key('Suggests'):
- pkg = st['Suggests']
- else:
- print 'Warning: Cannot determine name of prospective package ' \
- '... ignoring.'
- continue
-
- # store pkg info
- if not self.has_section(pkg):
- self.add_section(pkg)
-
- # prospective ones are always featured
- self.ensureUnique(pkg, 'visibility', 'featured')
-
- # pkg description
- self.set(pkg, "description",
- st['Pkg-Description'].replace('%', '%%'))
-
- # optional stuff
- if st.has_key('Homepage'):
- self.set(pkg, 'homepage', st['Homepage'])
-
- if st.has_key('Pkg-URL'):
- self.set(pkg, 'external pkg url', st['Pkg-URL'])
-
- if st.has_key('WNPP'):
- self.set(pkg, 'wnpp debian', st['WNPP'])
-
- if st.has_key('License'):
- self.set(pkg, 'license', st['License'])
-
- # treat responsible as maintainer
- if st.has_key('Responsible'):
- self.set(pkg, "maintainer", st['Responsible'])
-
-
- def setPkgFilterFromTaskFile(self, urls):
- pkgs = []
-
- for task in urls:
- fh = self.cache.get(task)
-
-
- # loop over all stanzas
- for stanza in deb822.Packages.iter_paragraphs(fh):
- if stanza.has_key('Depends'):
- pkg = stanza['Depends']
- elif stanza.has_key('Suggests'):
- pkg = stanza['Suggests']
- else:
- continue
-
- # account for multiple packages per line
- if pkg.count(','):
- pkgs += [p.strip() for p in pkg.split(',')]
- else:
- pkgs.append(pkg.strip())
-
- # activate filter
- self.pkgfilter = pkgs
-
-
-def genPkgPage(db, pkg, cfg):
- """
- :Parameters:
- db: database
- pkg: str
- Package name
- """
- descr = db.get(pkg, 'description').split('\n')
-
- s = ''
-
- # only put index markup for featured packages
- if db.get(pkg, 'visibility') == 'featured':
- s = '.. index:: %s, ' % pkg
- s += '\n'
-
- # add a subset of available debtags (if present)
- if db.has_option(pkg, 'debtags'):
- # filter tags
- tags = [t for t in db.get(pkg, 'debtags').split(', ')
- if t.split('::')[0] in ['field', 'works-with']]
- if len(tags):
- s += '.. index:: %s\n\n' % ', '.join(tags)
-
- # main ref target for this package
- s += '.. _deb_' + pkg + ':\n'
-
- # separate header from the rest
- s += '\n\n\n'
-
- header = '%s -- %s' % (pkg, descr[0])
- s += '*' * (len(header) + 2)
- s += '\n ' + header + '\n'
- s += '*' * (len(header) + 2) + '\n\n'
-
- # put description
- # XXX honour formating syntax
- s += '\n'.join([l.lstrip(' .') for l in descr[1:]])
- s += '\n'
-
- if db.has_option(pkg, 'homepage'):
- s += '\n**Homepage**: %s\n' % db.get(pkg, 'homepage')
-
- s += '\nBinary packages'\
- '\n===============\n'
-
- s += genMaintainerSection(db, pkg)
-
- if db.has_option(pkg, 'wnpp debian'):
- s += """\
-A Debian packaging effort has been officially announced. Please see the
-corresponding `intent-to-package bug report`_ for more information about
-its current status.
-
-.. _intent-to-package bug report: http://bugs.debian.org/%s
-
-""" % db.get(pkg, 'wnpp debian')
-
- # write repository content summary for NeuroDebian
- s += getReposContentSummary(db, cfg, 'apsy', pkg)
- # see if there is something about a package in Debian proper
- s += getDebianRefs(db, cfg, pkg)
-
- return s
-
-
-def genMaintainerSection(db, pkg):
- s = ''
-
- if not db.has_option(pkg, 'maintainer'):
- s += """\
-
-Currently, nobody seems to be responsible for creating or maintaining
-Debian packages of this software.
-
-"""
- return s
-
- # there is someone responsible
- maintainer = db.get(pkg, 'maintainer')
-
- # do we have actual packages, or is it just a note
- if not db.has_option(pkg, 'releases'):
- s += """\
-
-There are currently no binary packages available. However, the last known
-packaging effort was started by %s which meanwhile might have led to an
-initial unofficial Debian packaging.
-
-""" % maintainer
- return s
-
- s += '\n**Maintainer**: %s\n\n' % maintainer
-
- if not maintainer.startswith('Michael Hanke'):
- s += """\
-
-.. note::
- Do not contact the original package maintainer regarding
- bugs in this unofficial binary package. Instead, contact
- the repository maintainer at michael.hanke@gmail.com\ .
-
-"""
-
- return s
-
-
-def getDebianRefs(db, cfg, pkg):
- # no release, nothing to do
- if not db.has_option(pkg, 'releases'):
- return ''
- # which Debian release is this package part of?
- debrels = [r.split('_')[1] for r in db.get(pkg, 'releases').split(', ')
- if r.startswith('Debian')]
- # do nothing if there is no package in Debian proper
- if not len(debrels):
- return ''
-
- s = """\
-Official Debian archive
------------------------
-
-This package is available from the offical Debian archive for:
-
-* %s
-
-Please see the following ressources for more information:
-
-* `Debian package summary page`_
-* `Bugreports in the Debian bug tracking system`_
-* `Debian package popularity statistics`_
-
-.. _Debian package summary page: http://packages.debian.org/%s
-.. _Bugreports in the Debian bug tracking system: http://bugs.debian.org/%s
-.. _Debian package popularity statistics: http://qa.debian.org/popcon.php?package=%s
-
-""" % ('\n* '.join(['`%s <http://www.debian.org/releases/%s>`_ *[%s]*: %s' \
- % (transCodename(rel, cfg),
- rel,
- db.get(pkg, 'debian_%s component' % rel),
- db.get(pkg, 'debian_%s version' % rel))
- for rel in debrels]),
- pkg, pkg, pkg)
-
- return s
-
-
-def getReposContentSummary(db, cfg, reposlabel, pkg):
- # do nothing if the are no packages
- if not db.has_option(pkg, 'releases'):
- return ''
-
- reposname = cfg.get('repository labels', reposlabel)
- s = '\n%s\n%s\n' % (reposname, '-' * len(reposname))
-
- s += """\
-The repository contains binary packages for the following distribution
-releases and system architectures. The corresponding source packages
-are available too.
-
-.. note::
- Do not download this package manually if you plan to use it
- regularly. Instead configure your package manager to use this
- repository by following the instructions on the
- :ref:`front page <repository_howto>`.
-
-"""
-
- # for all releases this package is part of
- for rel in db.get(pkg, 'releases').split(', '):
- # ignore items associated with other repositories
- if not rel.split('_')[0] == reposlabel:
- continue
- # write release description and component
- s += '\n%s *[%s]*:\n ' \
- % (transCodename(rel, cfg),
- db.get(pkg, '%s component' % rel))
-
- s += '`source <%s>`_' % db.get(pkg, '%s poolurl' % rel)
-
- # archs this package is available for
- archs = db.get(pkg, '%s archs' % rel).split(', ')
-
- # extract all present versions for any arch
- versions = [db.get(pkg, '%s version %s' % (rel, arch))
- for arch in archs]
-
- # if there is only a single version for all of them, simplify the list
- single_ver = versions.count(versions[0]) == len(versions)
-
- if single_ver:
- s += ', '
- # only one version string for all
- s += ', '.join(['`%s <%s>`_' \
- % (arch, db.get(pkg, '%s file %s' % (rel, arch)))
- for arch in archs])
- s += ' (%s)' % versions[0]
- else:
- s += ', '
- # a separate version string for each arch
- s += ', '.join(['`%s <%s>`_ (%s)' \
- % (arch,
- db.get(pkg, '%s file %s' % (rel, arch)),
- db.get(pkg, '%s version %s' % (rel, arch)))
- for arch in archs])
-
- s += '\n'
-
- return s
-
-def maintainer2email(maint):
- return maint.split('<')[1].rstrip('>')
-
-
-def writePkgsBy(db, key, value2id, outdir, heading):
- createDir(outdir)
- nwkey = key.replace(' ', '')
- createDir(os.path.join(outdir, 'by%s' % nwkey))
-
- collector = {}
-
- # get packages by maintainer
- for p in db.sections():
- # only featured packages
- if db.get(p, 'visibility') == 'shadowed':
- continue
-
- if db.has_option(p, key):
- by = db.get(p, key)
-
- if not collector.has_key(by):
- collector[by] = (value2id(by), [p])
- else:
- collector[by][1].append(p)
-
- toc = open(os.path.join(outdir, 'by%s.rst' % nwkey), 'w')
- toc.write('.. index:: Packages by %s\n.. _by%s:\n\n' % (key, key))
-
- toc_heading = 'Packages by %s' % key
- toc.write('%s\n%s\n\n' % (toc_heading, '=' * len(toc_heading)))
- toc.write('.. toctree::\n :maxdepth: 1\n\n')
-
- # summary page per maintainer
- for by in sorted(collector.keys()):
- toc.write(' by%s/%s\n' % (nwkey, collector[by][0]))
-
- fh = open(os.path.join(outdir,
- 'by%s' % nwkey,
- collector[by][0] + '.rst'), 'w')
-
- fh.write('.. index:: %s\n.. _%s:\n\n' % (by, by))
-
- hdr = heading.replace('<ITEM>', by)
- fh.write(hdr + '\n')
- fh.write('=' * len(hdr) + '\n\n')
-
- # write sorted list of packages
- for p in sorted(collector[by][1]):
- fh.write('* :ref:`deb_%s`\n' % p)
-
- fh.close()
-
- toc.close()
-
-
-def writeRst(db, outdir, cfg, addenum_dir=None):
- createDir(outdir)
- createDir(os.path.join(outdir, 'pkgs'))
-
- # open pkgs toctree
- toc = open(os.path.join(outdir, 'pkgs.rst'), 'w')
- # write header
- toc.write('.. _full_pkg_list:\n\n')
- toc.write('Archive content\n===============\n\n'
- '.. toctree::\n :maxdepth: 1\n\n')
-
- for p in sorted(db.sections()):
- print "Generating page for '%s'" % p
- pf = open(os.path.join(outdir, 'pkgs', '%s.rst' % p), 'w')
- pf.write(genPkgPage(db, p, cfg))
-
- # check for doc addons
- if addenum_dir is not None:
- addenum = os.path.join(os.path.abspath(addenum_dir), '%s.rst' % p)
- if os.path.exists(addenum):
- pf.write('\n\n.. include:: %s\n' % addenum)
- pf.close()
- toc.write(' pkgs/%s\n' % p)
-
-
- toc.close()
-
-
-def prepOptParser(op):
- # use module docstring for help output
- op.usage = "%s [OPTIONS]\n\n" % sys.argv[0] + __doc__
-
- op.add_option("--db",
- action="store", type="string", dest="db",
- default=None,
- help="Database file to read. Default: None")
-
- op.add_option("--cfg",
- action="store", type="string", dest="cfg",
- default=None,
- help="Repository config file.")
-
- op.add_option("-o", "--outdir",
- action="store", type="string", dest="outdir",
- default=None,
- help="Target directory for ReST output. Default: None")
-
- op.add_option("-r", "--release-url",
- action="append", dest="release_urls",
- help="None")
-
- op.add_option("--pkgaddenum", action="store", dest="addenum_dir",
- type="string", default=None, help="None")
-
-
-
-def main():
- op = OptionParser(version="%prog 0.0.1")
- prepOptParser(op)
-
- (opts, args) = op.parse_args()
-
- if len(args) != 1:
- print('There needs to be exactly one command')
- sys.exit(1)
-
- cmd = args[0]
-
- if opts.cfg is None:
- print("'--cfg' option is mandatory.")
- sys.exit(1)
-
-
- cfg = SafeConfigParser()
- cfg.read(opts.cfg)
-
- # load existing db, unless renew is requested
- if cmd == 'refreshdb':
- dpa = DebianPkgArchive()
- else:
- dpa = DebianPkgArchive(init_db=opts.db)
-
-
- if cmd == 'generate':
- if opts.outdir is None:
- print('Not output directory specified!')
- sys.exit(1)
-
- dpa.writeSourcesLists(opts.outdir, cfg)
- writeRst(dpa, opts.outdir, cfg, opts.addenum_dir)
- writePkgsBy(dpa, 'maintainer', maintainer2email, opts.outdir,
- 'Packages maintained by <ITEM>')
- # stop here
- sys.exit(0)
-
-
- if cfg.has_option('packages', 'select taskfiles'):
- dpa.setPkgFilterFromTaskFile(cfg.get('packages',
- 'select taskfiles').split())
-
- if cfg.has_option('packages', 'select names'):
- dpa.pkgfilter += cfg.get('packages', 'select names').split()
-
- if cfg.has_option('packages', 'prospective'):
- for p in cfg.get('packages', 'prospective').split():
- dpa.importProspectivePkgsFromTaskFile(p)
-
- if cfg.has_option('repositories', 'releases'):
- for rurl in cfg.get('repositories', 'releases').split():
- dpa.importRelease(rurl, force_update=False)
-
- if cfg.has_option('repositories', 'releases'):
- for rurl in cfg.get('repositories', 'releases').split():
- dpa.importRelease(rurl, force_update=False)
-
- if cfg.has_option('officials', 'releases'):
- for rurl in cfg.get('officials', 'releases').split():
- dpa.checkOfficialRelease(rurl, force_update=False)
-
- if not opts.db is None:
- dpa.save(opts.db)
-
-
-if __name__ == "__main__":
- main()
-
--- /dev/null
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=Cortical Surface Reconstruction and Visualization
+Name=Caret
+Exec=caret5
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-MedicalImaging;
+
--- /dev/null
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=DICOM to NIfTI Conversion
+GenericName[ru]=Конвертор из DICOM в NIfTI
+Name=dcm2nii
+Exec=dcm2niigui %F
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-MedicalImaging
+Icon=mricron.xpm
--- /dev/null
+[Desktop Entry]
+Name=Developer Mailing List Archive
+Type=Application
+Exec=x-www-browser "http://lists.alioth.debian.org/pipermail/neurodebian-devel"
+Comment=Opens the list archive in a browser window
+Icon=help-browser
+Categories=X-NeuroDebian-Support
--- /dev/null
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=Software Collection for (f)MRI Data Analysis
+GenericName[de]=Software-Kollektion zur (f)MRT-Daten Analyse
+Name=FSL 4.1
+Exec=fsl4.1-fsl
+Icon=fsl-4.1.xpm
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-MedicalImaging
--- /dev/null
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=MRI Image Viewer
+GenericName[de]=Betrachter für MRT-Daten
+Name=FSLView
+Exec=fslview %F
+Type=Application
+Terminal=false
+Comment=This program is part of FSL
+Comment[de]=Dieses Programm gehört zu FSL
+Categories=X-NeuroDebian-MedicalImaging
+Icon=fslview.xpm
--- /dev/null
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=3D Structure Segmentation
+Name=ITK-SNAP
+Exec=itksnap %F
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-MedicalImaging
+Icon=itksnap.xpm
--- /dev/null
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=2D/3D MRI Image Viewer
+GenericName[de]=2D/3D Betrachter für MRT-Daten
+GenericName[ru]=Просмотр 2D/3D МРТ-данных
+Name=MRIcron
+Exec=mricron %F
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-MedicalImaging
+Icon=mricron.xpm
--- /dev/null
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=MRI Tractography View
+Name=MRview
+Exec=mrview %F
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-MedicalImaging
+Icon=mrtrix.xpm
--- /dev/null
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=Non-parametric MRI Analysis
+Name=NPM
+Exec=npm
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-MedicalImaging
+Icon=mricron.xpm
--- /dev/null
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=Electrophysiological Data Analysis
+GenericName[de]=Elektrophysiologische Daten-Analyse
+Name=OpenElectrophy
+Exec=openelectrophy
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-Electrophysiology
+Icon=openelectrophy.png
--- /dev/null
+[Desktop Entry]
+Name=Upstream Mailing List Archive
+Type=Application
+Exec=x-www-browser "http://lists.alioth.debian.org/pipermail/neurodebian-upstream"
+Comment=Opens the list archive in a browser window
+Icon=help-browser
+Categories=X-NeuroDebian-Support
--- /dev/null
+[Desktop Entry]
+Name=User Mailing List Archive
+Type=Application
+Exec=x-www-browser "http://lists.alioth.debian.org/pipermail/neurodebian-users"
+Comment=Opens the list archive in a browser window
+Icon=help-browser
+Categories=X-NeuroDebian-Support
--- /dev/null
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=VoxBo Image Viewer
+Name=VBView2
+Exec=vbview2 %F
+Type=Application
+Terminal=false
+Categories=X-NeuroDebian-MedicalImaging
--- /dev/null
+[Desktop Entry]
+Name=Electrophysiology
+Icon=neurodebian-electrophysiology
+Type=Directory
--- /dev/null
+[Desktop Entry]
+Name=Medical Imaging
+Icon=neurodebian-imaging
+Type=Directory
--- /dev/null
+[Desktop Entry]
+Name=Psychophysics
+Icon=neurodebian-psychophysics
+Type=Directory
--- /dev/null
+[Desktop Entry]
+Name=Support
+Icon=system-help
+Type=Directory
--- /dev/null
+[Desktop Entry]
+Name=NeuroDebian
+Icon=neurodebian
+Type=Directory
--- /dev/null
+<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
+ "http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
+<Menu>
+ <Name>Applications</Name>
+<Menu>
+ <Name>neurodebian-main</Name>
+ <Directory>neurodebian.directory</Directory>
+ <Include>
+ <Category>X-NeuroDebian</Category>
+ </Include>
+<Menu>
+ <Name>neurodebian-electrophysiology</Name>
+ <Directory>neurodebian-electrophysiology.directory</Directory>
+ <Include>
+ <Category>X-NeuroDebian-Electrophysiology</Category>
+ </Include>
+</Menu>
+<Menu>
+ <Name>neurodebian-imaging</Name>
+ <Directory>neurodebian-imaging.directory</Directory>
+ <Include>
+ <Category>X-NeuroDebian-MedicalImaging</Category>
+ </Include>
+</Menu>
+<Menu>
+ <Name>neurodebian-psychophysics</Name>
+ <Directory>neurodebian-psychophysics.directory</Directory>
+ <Include>
+ <Category>X-NeuroDebian-Psychophysics</Category>
+ </Include>
+</Menu>
+<Menu>
+ <Name>neurodebian-support</Name>
+ <Directory>neurodebian-support.directory</Directory>
+ <Include>
+ <Category>X-NeuroDebian-Support</Category>
+ </Include>
+</Menu>
+</Menu>
+</Menu>