9b04c158a5
Guacamole isporucuje 22 rasporeda, hrvatskog nema. Rasporedi se kompajliraju u libguac-client-rdp, pa se ne mogu dodati naknadno — guacd se mora ponovno prevesti. guacd-hr/hr_hr_qwertz.keymap Izveden iz X11 "hr" rasporeda na stvarnom sustavu (hr -> rs(latin): rs(common) za brojcani red, rs(latalpha) za s/d/c/c/z s dijakriticima, rs(latlevel3) za AltGr), ne po sjecanju. Strukturno prati cs-cz-qwertz jer njegov caps model dira samo slova, dok de_de_qwertz izvrce i brojcani red. guacd-hr/build.sh Preuzme sluzbeni izvor tražene verzije, ubaci keymap u keymaps/ i u popis rdp_keymaps, pa gradi koristeci Dockerfile koji dolazi uz taj izvor. Namjerno se ne prepisuje upstream receptura, da nadogradnja bude "./build.sh 1.7.0" umjesto odrzavanja vlastitog builda. Ovisnosti su zakljucane jer ih upstream gradi iz gita i bira najnoviji tag, pa gradnja pukne sama od sebe: libwebsockets v5 trazi GnuTLS kojeg build okruzenje 1.6.0 nema, a FreeRDP 2.x je odmakao na razvojne tagove koje configure odbija. Zakljucani su na v4.x i 2.11.7 — ono sto nosi sluzbeni guacd:1.6.0 — i pregazivi su preko env varijabli. install.sh Novo pitanje pri instalaciji; ako se prihvati, gradi image i compose koristi njega umjesto sluzbenog guacd-a. Postojeci image se ne gradi ponovno. Provjereno cistom instalacijom na Ubuntu 24.04: gradnja prolazi u sklopu installera, image sadrzi hr-hr-qwertz uz svih 22 standardnih, FreeRDP je 2.11.7 kao u sluzbenom, i svih 9 GUI stranica vraca 200. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
82 lines
3.1 KiB
Bash
Executable File
82 lines
3.1 KiB
Bash
Executable File
#!/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 <<MSG
|
|
|
|
Gotovo. U /opt/guacamole/docker-compose.yml zamijenite guacd image s:
|
|
|
|
image: ${IMAGE}
|
|
|
|
pa "docker compose up -d guacd". Zatim na konekciji postavite
|
|
server-layout = hr-hr-qwertz
|
|
MSG
|