mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-11-02 18:22:40 +01:00
* ci(release): publish weed-vector binaries
Tagged releases now carry weed-vector_linux_{amd64,arm64}.tar.gz, static
musl builds made the same way as weed-worker's.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UpvafvK8JpagF94MHWqwK
* docker: carry weed-vector in the image
The image takes a pre-built weed-vector the way it takes weed-worker, or an
empty placeholder where none was built. `vector` runs it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UpvafvK8JpagF94MHWqwK
* ci(docker): build weed-vector for the images
The container workflows cross-compile weed-vector for amd64 and arm64
beside weed-worker and place it in the Docker context.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UpvafvK8JpagF94MHWqwK
* install.sh: add the vector component
`--component vector` installs weed-vector from a release, and `all` adds it
when the release carries one, as it does for the worker.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UpvafvK8JpagF94MHWqwK
* ci(docker): skip weed-vector for source refs that predate it
The manual latest-image rebuild accepts any source_ref; one without the
engine's server crate now builds its image without weed-vector instead of
failing the Rust job.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UpvafvK8JpagF94MHWqwK
* docker: have the vector engine listen beyond loopback
weed-vector listens on 127.0.0.1 by default, which a gateway in another
container cannot reach. `vector` now adds --listen 0.0.0.0:8090 unless a
listen address is given by flag or WEED_VECTOR_LISTEN. The engine registers
its container address for a wildcard listen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UpvafvK8JpagF94MHWqwK
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
156 lines
4.2 KiB
Bash
Executable File
156 lines
4.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Enable FIPS 140-3 mode by default (Go 1.24+)
|
|
# To disable: docker run -e GODEBUG=fips140=off ...
|
|
export GODEBUG="${GODEBUG:+$GODEBUG,}fips140=on"
|
|
|
|
# Fix permissions for mounted volumes
|
|
# If /data is mounted from host, it might have different ownership
|
|
# Fix this by ensuring seaweed user owns the directory
|
|
if [ "$(id -u)" = "0" ]; then
|
|
# Running as root, check and fix permissions if needed
|
|
SEAWEED_UID=$(id -u seaweed)
|
|
SEAWEED_GID=$(id -g seaweed)
|
|
|
|
# Verify seaweed user and group exist
|
|
if [ -z "$SEAWEED_UID" ] || [ -z "$SEAWEED_GID" ]; then
|
|
echo "Error: 'seaweed' user or group not found. Cannot fix permissions." >&2
|
|
exit 1
|
|
fi
|
|
|
|
DATA_UID=$(stat -c '%u' /data 2>/dev/null)
|
|
DATA_GID=$(stat -c '%g' /data 2>/dev/null)
|
|
|
|
# Only run chown -R if ownership doesn't already match (avoids expensive
|
|
# recursive chown on subsequent starts, and is a no-op on OpenShift when
|
|
# fsGroup has already set correct ownership on the PVC).
|
|
if [ "$DATA_UID" != "$SEAWEED_UID" ] || [ "$DATA_GID" != "$SEAWEED_GID" ]; then
|
|
echo "Fixing /data ownership for seaweed user (uid=$SEAWEED_UID, gid=$SEAWEED_GID)"
|
|
if ! chown -R seaweed:seaweed /data; then
|
|
echo "Warning: Failed to change ownership of /data. This may cause permission errors." >&2
|
|
echo "If /data is read-only or has mount issues, the application may fail to start." >&2
|
|
fi
|
|
fi
|
|
|
|
# Use su-exec to drop privileges and run as seaweed user
|
|
exec su-exec seaweed "$0" "$@"
|
|
fi
|
|
|
|
isArgPassed() {
|
|
# Match both `-flag` and `--flag` (and their `=value` forms): the Go fla9
|
|
# library accepts both, and users may pick either form on the CLI.
|
|
arg="$1"
|
|
argWithEqualSign="$1="
|
|
argDouble="-$1"
|
|
argDoubleWithEqualSign="-$1="
|
|
shift
|
|
while [ $# -gt 0 ]; do
|
|
passedArg="$1"
|
|
shift
|
|
case $passedArg in
|
|
"$arg"|"$argDouble")
|
|
return 0
|
|
;;
|
|
"$argWithEqualSign"*|"$argDoubleWithEqualSign"*)
|
|
return 0
|
|
;;
|
|
esac
|
|
done
|
|
return 1
|
|
}
|
|
|
|
case "$1" in
|
|
|
|
'master')
|
|
ARGS="-mdir=/data -volumeSizeLimitMB=1024"
|
|
shift
|
|
exec /usr/bin/weed -logtostderr=true master $ARGS $@
|
|
;;
|
|
|
|
'volume')
|
|
ARGS="-dir=/data -max=0"
|
|
if isArgPassed "-max" "$@"; then
|
|
ARGS="-dir=/data"
|
|
fi
|
|
shift
|
|
exec /usr/bin/weed -logtostderr=true volume $ARGS $@
|
|
;;
|
|
|
|
'volume-rust')
|
|
ARGS="-dir /data -max 0"
|
|
if isArgPassed "-max" "$@"; then
|
|
ARGS="-dir /data"
|
|
fi
|
|
shift
|
|
if [ ! -s /usr/bin/weed-volume ]; then
|
|
echo "Error: Rust volume server is not available on this platform ($(uname -m))." >&2
|
|
echo "Use 'volume' for the Go volume server instead." >&2
|
|
exit 1
|
|
fi
|
|
exec /usr/bin/weed-volume $ARGS $@
|
|
;;
|
|
|
|
'worker-rust')
|
|
shift
|
|
if [ ! -s /usr/bin/weed-worker ]; then
|
|
echo "Error: Rust maintenance worker is not available on this platform ($(uname -m))." >&2
|
|
echo "Use 'worker' for the Go maintenance worker instead." >&2
|
|
exit 1
|
|
fi
|
|
exec /usr/bin/weed-worker "$@"
|
|
;;
|
|
|
|
'vector')
|
|
shift
|
|
if [ ! -s /usr/bin/weed-vector ]; then
|
|
echo "Error: the vector engine is not available on this platform ($(uname -m))." >&2
|
|
exit 1
|
|
fi
|
|
# The gateway dials the engine from another container, so not loopback.
|
|
if [ -z "$WEED_VECTOR_LISTEN" ] && ! isArgPassed "-listen" "$@"; then
|
|
set -- --listen 0.0.0.0:8090 "$@"
|
|
fi
|
|
exec /usr/bin/weed-vector "$@"
|
|
;;
|
|
|
|
'server')
|
|
ARGS="-dir=/data -volume.max=0 -master.volumeSizeLimitMB=1024"
|
|
if isArgPassed "-volume.max" "$@"; then
|
|
ARGS="-dir=/data -master.volumeSizeLimitMB=1024"
|
|
fi
|
|
shift
|
|
exec /usr/bin/weed -logtostderr=true server $ARGS $@
|
|
;;
|
|
|
|
'mini')
|
|
ARGS="-dir=/data"
|
|
if isArgPassed "-dir" "$@"; then
|
|
ARGS=""
|
|
fi
|
|
shift
|
|
exec /usr/bin/weed -logtostderr=true mini $ARGS $@
|
|
;;
|
|
|
|
'filer')
|
|
ARGS=""
|
|
shift
|
|
exec /usr/bin/weed -logtostderr=true filer $ARGS $@
|
|
;;
|
|
|
|
's3')
|
|
ARGS="-domainName=$S3_DOMAIN_NAME -key.file=$S3_KEY_FILE -cert.file=$S3_CERT_FILE"
|
|
shift
|
|
exec /usr/bin/weed -logtostderr=true s3 $ARGS $@
|
|
;;
|
|
|
|
'shell')
|
|
ARGS="-cluster=$SHELL_CLUSTER -filer=$SHELL_FILER -filerGroup=$SHELL_FILER_GROUP -master=$SHELL_MASTER -options=$SHELL_OPTIONS"
|
|
shift
|
|
exec echo "$@" | /usr/bin/weed -logtostderr=true shell $ARGS
|
|
;;
|
|
|
|
*)
|
|
exec /usr/bin/weed $@
|
|
;;
|
|
esac
|