#!/bin/bash # # Gradi guacd image s dodanim hrvatskim rasporedom tipkovnice. # # Rasporedi se kompajliraju u libguac-client-rdp, pa se ne mogu dodati # naknadno — guacd se mora ponovno prevesti. Skripta namjerno koristi # Dockerfile koji dolazi uz sluzbeni izvor tražene verzije umjesto da # recepturu prepisuje, da nadogradnja na novi Guacamole ne trazi # odrzavanje ovdje. # # ./build.sh [verzija] npr. ./build.sh 1.7.0 # set -euo pipefail GUAC_VERSION="${1:-1.6.0}" IMAGE="guacd:${GUAC_VERSION}-hr" KEYMAP="hr_hr_qwertz.keymap" SRC_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" [[ -f "${SRC_DIR}/${KEYMAP}" ]] || { echo "Nedostaje ${KEYMAP}" >&2; exit 1; } command -v docker >/dev/null || { echo "Docker nije pronaden" >&2; exit 1; } WORK=$(mktemp -d) trap 'rm -rf "$WORK"' EXIT echo "==> Preuzimanje izvora guacamole-server ${GUAC_VERSION}" TARBALL="guacamole-server-${GUAC_VERSION}.tar.gz" for base in "https://downloads.apache.org/guacamole" \ "https://archive.apache.org/dist/guacamole"; do if curl -fsSL -o "${WORK}/${TARBALL}" \ "${base}/${GUAC_VERSION}/source/${TARBALL}"; then break fi done [[ -s "${WORK}/${TARBALL}" ]] || { echo "Izvor ${GUAC_VERSION} nije pronaden" >&2; exit 1; } tar -xzf "${WORK}/${TARBALL}" -C "$WORK" BUILD_CTX="${WORK}/guacamole-server-${GUAC_VERSION}" [[ -f "${BUILD_CTX}/Dockerfile" ]] || { echo "Izvor nema Dockerfile" >&2; exit 1; } echo "==> Ugradnja ${KEYMAP}" cp "${SRC_DIR}/${KEYMAP}" "${BUILD_CTX}/src/protocols/rdp/keymaps/" # Keymap mora biti naveden u rdp_keymaps, inace ga generate.pl preskoci. MAKEFILE="${BUILD_CTX}/src/protocols/rdp/Makefile.am" grep -q "$KEYMAP" "$MAKEFILE" || \ sed -i "s|\(\$(srcdir)/keymaps/en_us_qwerty.keymap[[:space:]]*\\\\\)|\1\n \$(srcdir)/keymaps/${KEYMAP} \\\\|" "$MAKEFILE" grep -q "$KEYMAP" "$MAKEFILE" || { echo "Ubacivanje u Makefile.am nije uspjelo" >&2; exit 1; } echo "==> Gradnja ${IMAGE} (dugotrajno, gradi se i FreeRDP)" # Upstream Dockerfile ovisnosti gradi iz gita i bira NAJNOVIJI tag koji # odgovara regexu. Kako te biblioteke izlaze, gradnja pukne sama od sebe # iako se nista nije promijenilo kod nas: # - libwebsockets v5 trazi GnuTLS kojeg build okruzenje 1.6.0 nema # - FreeRDP 2.x je odmakao na razvojne tagove koje configure odbija # Zato su zakljucani na ono sto nosi sluzbeni guacd:1.6.0 image. # Za drugu verziju Guacamolea po potrebi pregazi preko env varijabli. docker build \ --build-arg BUILD_JOBS="$(nproc)" \ --build-arg WITH_LIBWEBSOCKETS="${WITH_LIBWEBSOCKETS:-v4(\\.\\d+)+}" \ --build-arg WITH_FREERDP="${WITH_FREERDP:-2\\.11\\.7}" \ -t "$IMAGE" "$BUILD_CTX" echo "==> Provjera da je raspored u imageu" if docker run --rm --entrypoint sh "$IMAGE" -c \ 'strings /opt/guacamole/lib/libguac-client-rdp.so.0.0.0 | grep -qx hr-hr-qwertz'; then echo "OK — ${IMAGE} sadrzi hr-hr-qwertz" else echo "GRESKA: raspored nije zavrsio u imageu" >&2 exit 1 fi cat <