Skip to content

Commit ada92a2

Browse files
committed
feat(jumpserver): move to v5, building KoKo, Lina and Luna from source
JumpServer v5 only ships Docker images: KoKo, Lina and Luna no longer publish prebuilt release assets, Lion is gone (KoKo now drives guacd itself) and the Luna release is the desktop client. Build the three from source at the core's tag, with Go, Zig/Ghostty, usql and k8s-bundle versions read from KoKo's own build files. Review follow-ups: guacd comes from the latest apache/guacamole-server tag, the bootstrap token is generated inside the core config step, nginx_enable_site replaces the hand-rolled enable/restart, and the sizing note is dropped from the JSON.
1 parent 06b3fc7 commit ada92a2

3 files changed

Lines changed: 192 additions & 102 deletions

File tree

‎ct/jumpserver.sh‎

Lines changed: 87 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ var_disk="${var_disk:-50}"
1515
var_os="${var_os:-debian}"
1616
var_version="${var_version:-13}"
1717
var_unprivileged="${var_unprivileged:-1}"
18-
#var_arm64="${var_arm64:-no}" # unset = ask the user; koko/lion ship arm64 binaries and guacd builds fine on arm64, but the combined stack has not actually been run on arm64
18+
#var_arm64="${var_arm64:-no}" # unset = ask the user; every component builds from source with arm64-capable toolchains, but the stack has only been run on amd64
1919

2020
header_info "$APP"
2121
variables
@@ -32,20 +32,34 @@ function update_script() {
3232
exit
3333
fi
3434

35-
if check_for_gh_release "jumpserver" "jumpserver/jumpserver" "" "" "v4."; then
35+
if check_for_gh_tag "guacd" "apache/guacamole-server"; then
36+
msg_info "Stopping guacd"
37+
systemctl stop guacd
38+
msg_ok "Stopped guacd"
39+
40+
CLEAN_INSTALL=1 fetch_and_deploy_gh_tag "guacd" "apache/guacamole-server"
41+
42+
msg_info "Building guacd"
43+
cd /opt/guacd
44+
$STD autoreconf -fi
45+
$STD ./configure --with-systemd-dir=/etc/systemd/system --disable-guacenc
46+
$STD make -j"$(nproc)"
47+
$STD make install
48+
$STD ldconfig
49+
systemctl daemon-reload
50+
systemctl start guacd
51+
msg_ok "Built guacd"
52+
fi
53+
54+
if check_for_gh_release "jumpserver" "jumpserver/jumpserver" "" "" "v5."; then
3655
msg_info "Stopping Services"
37-
systemctl stop jumpserver koko lion
56+
systemctl stop jumpserver koko
3857
msg_ok "Stopped Services"
3958

40-
create_backup /opt/jumpserver/config.yml /opt/jumpserver/data/media /opt/koko/config.yml /opt/lion/config.yml
41-
42-
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jumpserver" "jumpserver/jumpserver" "tarball" "latest" "" "" "v4."
43-
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "koko" "jumpserver/koko" "prebuild" "latest" "/opt/koko" "koko-v4.*-linux-$(arch_resolve amd64 arm64).tar.gz" "v4."
44-
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "lion" "jumpserver/lion-release" "prebuild" "latest" "/opt/lion" "lion-v*-linux-$(arch_resolve amd64 arm64).tar.gz"
45-
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "lina" "jumpserver/lina" "prebuild" "latest" "/opt/lina" "lina-v4.*.tar.gz" "v4."
46-
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "luna" "jumpserver/luna" "prebuild" "latest" "/opt/luna" "luna-v4.*.tar.gz" "v4."
59+
create_backup /opt/jumpserver/config.yml /opt/jumpserver/data /opt/koko/config.yml /opt/koko/data
4760

48-
restore_backup
61+
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jumpserver" "jumpserver/jumpserver" "tarball" "latest" "" "" "v5."
62+
JMS_TAG="v$(<~/.jumpserver)"
4963

5064
msg_info "Updating Python Environment"
5165
cd /opt/jumpserver
@@ -61,10 +75,71 @@ function update_script() {
6175
fi
6276
sleep 15
6377
done
78+
cd /opt/jumpserver/apps
79+
$STD ../.venv/bin/python3 manage.py compilemessages
6480
msg_ok "Updated Python Environment"
6581

82+
CLEAN_INSTALL=1 fetch_and_deploy_gh_tag "koko" "jumpserver/koko" "$JMS_TAG"
83+
84+
GHOSTTY_COMMIT=$(grep -oP 'libghostty-vt:ghostty-\K[0-9a-f]+' /opt/koko/Dockerfile-base)
85+
ZIG_VERSION=$(grep -oP 'libghostty-vt:ghostty-[0-9a-f]+-zig-\K[0-9.]+' /opt/koko/Dockerfile-base)
86+
USQL_VERSION=$(grep -oP 'ARG USQL_VERSION=\K\S+' /opt/koko/Dockerfile-base)
87+
K8S_BUNDLE_VERSION=$(grep -oP 'ARG K8S_BUNDLE_VERSION=\K\S+' /opt/koko/Dockerfile-base)
88+
GO_VERSION=$(grep -oP '^go \K\S+' /opt/koko/go.mod) setup_go
89+
90+
if [[ "$(cat ~/.libghostty-vt 2>/dev/null)" != "$GHOSTTY_COMMIT" ]]; then
91+
fetch_and_deploy_from_url "https://ziglang.org/download/${ZIG_VERSION}/zig-$(arch_resolve x86_64 aarch64)-linux-${ZIG_VERSION}.tar.xz" "/opt/zig"
92+
fetch_and_deploy_from_url "https://github.com/ghostty-org/ghostty/archive/${GHOSTTY_COMMIT}.tar.gz" "/opt/ghostty"
93+
94+
msg_info "Building libghostty-vt"
95+
rm -rf /opt/libghostty-vt
96+
cd /opt/ghostty
97+
$STD /opt/zig/zig build -Demit-lib-vt -Doptimize=ReleaseFast -Dcpu=baseline --prefix /opt/libghostty-vt
98+
rm -rf /opt/ghostty /opt/zig ~/.cache/zig
99+
echo "$GHOSTTY_COMMIT" >~/.libghostty-vt
100+
msg_ok "Built libghostty-vt"
101+
fi
102+
103+
msg_info "Building KoKo"
104+
cd /opt/koko
105+
export PKG_CONFIG_PATH=/opt/libghostty-vt/share/pkgconfig
106+
$STD make build VERSION="$JMS_TAG"
107+
mv build/koko koko
108+
rm -rf build
109+
msg_ok "Built KoKo"
110+
111+
fetch_and_deploy_gh_release "usql" "jumpserver-dev/usql" "prebuild" "$USQL_VERSION" "/opt/usql" "usql-*-linux-$(arch_resolve amd64 arm64).tar.gz"
112+
fetch_and_deploy_gh_release "k8s-bundle" "jumpserver-dev/k8s-bundle" "binary" "$K8S_BUNDLE_VERSION" "" "k8s-bundle_$(arch_resolve amd64 arm64).deb"
113+
114+
restore_backup
115+
116+
NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs
117+
118+
CLEAN_INSTALL=1 fetch_and_deploy_gh_tag "lina" "jumpserver/lina" "$JMS_TAG" "/opt/lina-src"
119+
120+
msg_info "Building Lina"
121+
cd /opt/lina-src
122+
$STD yarn install --immutable
123+
$STD yarn build:prod
124+
rm -rf /opt/lina
125+
mv lina /opt/lina
126+
rm -rf /opt/lina-src
127+
msg_ok "Built Lina"
128+
129+
CLEAN_INSTALL=1 fetch_and_deploy_gh_tag "luna" "jumpserver/luna" "$JMS_TAG" "/opt/luna-src"
130+
131+
msg_info "Building Luna"
132+
cd /opt/luna-src
133+
export ELECTRON_SKIP_BINARY_DOWNLOAD=1 PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 HUSKY=0
134+
$STD pnpm --filter jumpserver-web... install --frozen-lockfile --config.node-linker=isolated
135+
$STD pnpm --config.node-linker=isolated --filter jumpserver-web web:generate
136+
rm -rf /opt/luna
137+
mv .output/public /opt/luna
138+
rm -rf /opt/luna-src
139+
msg_ok "Built Luna"
140+
66141
msg_info "Starting Services"
67-
systemctl start jumpserver koko lion
142+
systemctl start jumpserver koko
68143
msg_ok "Started Services"
69144
msg_ok "Updated successfully!"
70145
fi

0 commit comments

Comments
 (0)