From 86cc10fc11bca09e751dcb77ae65319901f9f31e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20W=C3=A4ckerlin?= Date: Wed, 7 Dec 2016 10:27:50 +0000 Subject: [PATCH] successfully built rpm on fedora 25 --- ChangeLog | 6 + ax_init_standard_project.m4 | 37 +++- bootstrap.sh | 376 +++++++++++++++++++++++++++++++++++- build-in-docker.sh | 61 +++--- mrw-c++.spec.in | 4 +- resolve-rpmbuilddeps.sh | 24 +-- 6 files changed, 447 insertions(+), 61 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1ad648c..6e4402b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2016-10-17 14:06 + + * [r447] ChangeLog, ax_init_standard_project.m4, bootstrap.sh, + build-in-docker.sh, debian/changelog.in, debian/control.in: + improved debian changelog + 2016-09-28 19:14 * [r446] ax_init_standard_project.m4, bootstrap.sh, diff --git a/ax_init_standard_project.m4 b/ax_init_standard_project.m4 index 953c882..7425450 100644 --- a/ax_init_standard_project.m4 +++ b/ax_init_standard_project.m4 @@ -194,10 +194,13 @@ AC_DEFUN([AX_INIT_STANDARD_PROJECT], [ AX_SUBST(COPYING) _AM_SUBST_NOTMAKE([COPYING]) CHANGELOG=$(> nodejs/makefile.in <> examples/makefile.in <> cordova/makefile.in <= 0.0.1", + "socket.io": "~1.4.4", + "socketio-auth": "0.0.5", + "ldapauth": "git+https://github.com/DimensionSoftware/node-ldapauth.git" + }, + "description": "@DESCRIPTION@", + "main": "@PACKAGE_NAME@.js", + "devDependencies": {}, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "@AUTHOR@", + "license": "@LICENSE@", + "path": { + "prefix": "@PREFIX@", + "sysconf": "@SYSCONFDIR@", + "pkgdata": "@PKGDATADIR@", + "localstate": "@LOCALSTATEDIR@", + "log": "@LOCALSTATEDIR@/log/@PACKAGE_NAME@.log", + "config": "@SYSCONFDIR@/@PACKAGE_NAME@.json", + "nodejs": "@PKGDATADIR@/nodejs" + } +} +EOF +to --condition AX_USE_NODEJS nodejs/etc/${PACKAGE_NAME}.json < /var/run/${PACKAGE_NAME}.pid + # there are some useful defaults + # do not edit this file, overwrite values in /etc/default/${PACKAGE_NAME} + EXEC_${PACKAGE_NAME^^}="/usr/bin/nodejs /usr/share/${PACKAGE_NAME}/nodejs/${PACKAGE_NAME}" + ${PACKAGE_NAME^^}_LOG="/var/log/${PACKAGE_NAME}.log" + ${PACKAGE_NAME^^}_USER="${PACKAGE_NAME}" + ${PACKAGE_NAME^^}_PORT="" + [ -r /etc/default/${PACKAGE_NAME} ] && . /etc/default/${PACKAGE_NAME} + if test -n "\${${PACKAGE_NAME^^}_USER}"; then + exec sudo -u "\${${PACKAGE_NAME^^}_USER}" \${EXEC_${PACKAGE_NAME^^}} \${${PACKAGE_NAME^^}_PORT} >> \${${PACKAGE_NAME^^}_LOG} 2>&1 + else + exec \${EXEC_${PACKAGE_NAME^^}} \${${PACKAGE_NAME^^}_PORT} >> \${${PACKAGE_NAME^^}_LOG} 2>&1 + fi +end script + +pre-start script + ${PACKAGE_NAME^^}_LOG="/var/log/${PACKAGE_NAME}.log" + [ -r /etc/default/${PACKAGE_NAME} ] && . /etc/default/${PACKAGE_NAME} + # Date format same as (new Date()).toISOString() for consistency + echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> \${${PACKAGE_NAME^^}_LOG} +end script + +pre-stop script + ${PACKAGE_NAME^^}_LOG="/var/log/${PACKAGE_NAME}.log" + [ -r /etc/default/${PACKAGE_NAME} ] && . /etc/default/${PACKAGE_NAME} + rm /var/run/${PACKAGE_NAME}.pid + echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> \${${PACKAGE_NAME^^}_LOG} +end script +EOF +to --condition AX_USE_NODEJS nodejs/etc/systemd/system/${PACKAGE_NAME}.service < /var/log/${PACKAGE_NAME}.log +Restart=on-abort + +[Install] +WantedBy=multi-user.target +EOF +to --condition AX_USE_NODEJS nodejs/public/javascripts/${PACKAGE_NAME}.js < new connection from "+userdata.username); + + function emit(signal, data, info) { + if (typeof data == 'string' && !data.match("\n")) { + console.log("<- signal: "+signal+"("+data+")"); + } else { + console.log("<- signal: "+signal); + } + if (info) console.log(info); + socket.emit(signal, data); + } + + function fail(txt, data) { + console.log("** "+txt, data); + emit("fail", txt); + } + + /* + socket + .on("xxx", xxx) + .on("yyy", yyy; + */ + + } + + // Handle Connection + require('socketio-auth')(io, { + authenticate: function (socket, data, callback) { + console.log("=> authenticate: ", data.username); + //get credentials sent by the client + var username = data.username; + var password = data.password; + authentication(data.username, data.password, + function() { + console.log("####LOGIN-SUCESS####"); + callback(null, true) + }, + function() { + console.log("####LOGIN-FAIL####"); + callback(new Error("wrong credentials")) + }); + }, + postAuthenticate: connection, + timeout: "none" + }); + + return module; +} +EOF +to --condition AX_USE_NODEJS nodejs/views/index.ejs < + + + + + + + + $(head -1 README) + + + +

$(head -1 README)

+

generated by bootstrap, please edit

+ + + +EOF +to --condition AX_USE_NODEJS nodejs/views/layout.ejs < +EOF echo "${HEADER}MAINTAINERCLEANFILES = makefile.in" | to --condition 'AX_USE_DOXYGEN|AX_USE_PERLDOC' doc/makefile.am if testtag AX_BUILD_TEST; then to test/runtests.sh < ${0%/*}/test/runtests.sh @@ -1102,7 +1463,7 @@ if testtag AX_USE_DEBIAN_PACKAGING; then -- @PACKAGER@ @BUILD_DATE@ EOF - BUILD_DEPENDS="debhelper, ${VCSDEPENDS} pkg-config, automake, libtool, autotools-dev, pandoc, lsb-release, fakeroot, $(if testtag AX_USE_DOXYGEN; then echo -n ", doxygen, graphviz, mscgen"; fi; if testtag AX_USE_PERLDOC; then echo -n ", libpod-tree-perl"; fi; if testtag AX_USE_PLANTUML; then echo -n ", default-jre-headless|default-jre"; fi; if testtag AX_USE_CPPUNIT; then echo -n ", libcppunit-dev"; fi; if testtag AX_CXX_QT || testtag AX_CHECK_QT AX_REQUIRE_QT; then echo -n ", qt5-default | libqt4-core | libqtcore4, qt5-qmake | qt4-qmake, qtbase5-dev | libqt4-dev, qtbase5-dev-tools | qt4-dev-tools, qttools5-dev-tools | qt4-dev-tools, qttools5-dev-tools | qt4-dev-tools"; fi)" + BUILD_DEPENDS="debhelper, ${VCSDEPENDS} pkg-config, automake, libtool, autotools-dev, pandoc, lsb-release, fakeroot, default-jre-headless|default-jre, $(if testtag AX_USE_DOXYGEN; then echo -n ", doxygen, graphviz, mscgen, default-jre-headless|default-jre"; fi; if testtag AX_USE_PERLDOC; then echo -n ", libpod-tree-perl"; fi; if testtag AX_USE_CPPUNIT; then echo -n ", libcppunit-dev"; fi; if testtag AX_CXX_QT || testtag AX_CHECK_QT AX_REQUIRE_QT; then echo -n ", qt5-default | libqt4-core | libqtcore4, qt5-qmake | qt4-qmake, qtbase5-dev | libqt4-dev, qtbase5-dev-tools | qt4-dev-tools, qttools5-dev-tools | qt4-dev-tools, qttools5-dev-tools | qt4-dev-tools"; fi)" to debian/control.in < mode: apt or yum, default: ${mode}" + echo " -m, --mode mode: deb, rpm, default: ${mode}" echo " -i, --image use given docker image instead of ${img}" + echo " -a, --arch build for given hardware architecture" echo " -t, --targets targets specify build targets, default: ${targets}" echo " -r, --repo add given apt repository" echo " -k, --key add public key from url" @@ -37,6 +43,8 @@ while test $# -gt 0; do echo " -w, --wait on error keep docker container and wait for enter" echo echo " The option -i must be after -m, because mode sets a new default image" + echo " The option -m must be after -t, because mode may be auto detected from targets" + echo " If target is either deb or rpm, mode is set to the same value" echo echo " The options -r -k -e -d -p -c can be repeated several times." echo @@ -67,8 +75,10 @@ while test $# -gt 0; do (-m|--mode) shift; mode="$1" case "$mode" in - (apt) img="ubuntu:latest";; + (deb|apt) img="ubuntu:latest";; + (rpm|zypper) img="opensuse:latest";; (yum) img="centos:latest";; + (dnf) img="fedora:latest";; (*) echo "**** ERROR: unknown mode '$1', try --help" 1>&2 exit 1 @@ -78,8 +88,16 @@ while test $# -gt 0; do (-i|--image) shift; img="$1" ;; - (-t|--targets) shift; + (-a|--arch) shift; + arch="$1" + ;; + (-t|--targets) shift targets="$1" + if test "$1" = "deb" -o "$1" = "rpm"; then + # set mode to same value + set -- "-m" $@ + continue + fi ;; (-r|--repo) shift; repos+=("$1") @@ -183,10 +201,20 @@ function ifthenelse() { set -x docker pull $img -DOCKER_ID=$(docker run -d ${dirs[@]} ${envs[@]} -e HOME="${HOME}" -w /workdir $img sleep infinity) +DOCKER_ID=$(docker create ${dirs[@]} ${envs[@]} -w /workdir $img sleep infinity) trap 'traperror '"${DOCKER_ID}"' "$? ${PIPESTATUS[@]}" $LINENO $BASH_LINENO "$BASH_COMMAND" "${FUNCNAME[@]}" "${FUNCTION}"' SIGINT INT TERM EXIT +if ! [[ $arch =~ $myarch ]]; then + docker cp "/usr/bin/qemu-${arch}-static" "${DOCKER_ID}:/usr/bin/qemu-${arch}-static" +fi +docker start "${DOCKER_ID}" +if docker exec ${DOCKER_ID} getent passwd > /dev/null 2>&1; then + docker exec ${DOCKER_ID} groupadd -g $(id -g) build + docker exec ${DOCKER_ID} useradd -g $(id -g) -u $(id -u) build +else + docker exec ${DOCKER_ID} useradd -m -u $(id -u) -g $(id -u) -d"${HOME}" build +fi case $mode in - (apt) + (deb|apt) OPTIONS='-o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew -y --force-yes --no-install-suggests --no-install-recommends' for f in 'libpam-systemd:amd64' 'policykit*' 'colord'; do docker exec ${DOCKER_ID} bash -c "echo 'Package: $f' >> /etc/apt/preferences" @@ -214,23 +242,8 @@ case $mode in done docker exec ${DOCKER_ID} ./resolve-debbuilddeps.sh ;; - (yum) + (rpm|yum|dnf|zypper) ./bootstrap.sh -t dist - if [[ "$img" =~ "centos" ]]; then - docker exec ${DOCKER_ID} yum install -y redhat-lsb - docker exec -i ${DOCKER_ID} bash -c 'cat > /etc/yum.repos.d/wandisco-svn.repo' <> /etc/yum.repos.d/wandisco-svn.repo' - docker exec -i ${DOCKER_ID} bash -c 'cat >> /etc/yum.repos.d/wandisco-svn.repo' <&1 | sed -n 's, is needed by.*,,p') if test -n "${FILES}"; then - FIRST=$(echo "${FILES}" | egrep -o "${PKGCONFIGS// /|}") - if test -n "${FIRST}"; then - schroot -c ${SCHROOTNAME} -u root -- yum install -y ${FIRST} || \ - schroot -c ${SCHROOTNAME} -u root -- zypper install -y ${FIRST} || \ - schroot -c ${SCHROOTNAME} -u root -- dnf install -y ${FIRST} - fi - schroot -c ${SCHROOTNAME} -u root -- yum install -y ${FILES} || \ - schroot -c ${SCHROOTNAME} -u root -- zypper install -y ${FILES} || \ - schroot -c ${SCHROOTNAME} -u root -- dnf install -y ${FILES} + schroot -c ${SCHROOTNAME} -u root -- ${INSTALL_TOOL} install -y ${FILES} fi else + ${INSTALL_TOOL} install -y rpm-build FILES=$(LANG= rpmbuild -bb --clean --nobuild --define "_topdir ." --define "_sourcedir ." ${PACKAGE_NAME}.spec 2>&1 | sed -n 's, is needed by.*,,p') if test -n "${FILES}"; then - FIRST=$(echo "${FILES}" | egrep -o "${PKGCONFIGS// /|}") - if test -n "${FIRST}"; then - yum install -y ${FIRST} || \ - zypper install -y ${FIRST} || \ - dnf install -y ${FIRST} - fi - yum install -y ${FILES} || \ - zypper install -y ${FILES} || \ - dnf install -y ${FILES} + ${INSTALL_TOOL} install -y ${FILES} fi fi