mirror of
https://github.com/openimsdk/open-im-server.git
synced 2026-05-01 07:35:58 +08:00
feat: add save scripts
Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com>
This commit is contained in:
@@ -16,9 +16,9 @@
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
. $(dirname ${BASH_SOURCE})/lib/color.sh
|
||||
. $(dirname ${BASH_SOURCE})/lib/init.sh
|
||||
|
||||
trap 'openim::color::echo RED_PREFIX "Script interrupted."; exit 1' INT
|
||||
openim::util::onCtrlC
|
||||
|
||||
print_with_delay() {
|
||||
text="$1"
|
||||
@@ -89,7 +89,8 @@ O:::::::OOO:::::::O p:::::ppppp:::::::pe::::::::e n::::n n::::nII:
|
||||
print_with_delay "Open-IM-Server: Reinventing Instant Messaging" 0.01
|
||||
print_progress 50 0.02
|
||||
|
||||
print_with_delay "Open-IM-Server is not just a product; it's a revolution. It's about bringing the power of seamless, real-time messaging to your fingertips. And it's about joining a global community of developers, dedicated to pushing the boundaries of what's possible." 0.01
|
||||
print_with_delay "Open-IM-Server is not just a product; it's a revolution. It's about bringing the power of seamless," 0.01
|
||||
print_with_delay "real-time messaging to your fingertips. And it's about joining a global community of developers, dedicated to pushing the boundaries of what's possible." 0.01
|
||||
|
||||
print_progress 50 0.02
|
||||
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
# Iterates over two directories: 'pkg' and 'internal/pkg'.
|
||||
for top in pkg internal/pkg tools
|
||||
for top in pkg internal/pkg
|
||||
do
|
||||
# Finds all subdirectories (including nested ones) under the current directory in the iteration ('pkg' or 'internal/pkg').
|
||||
for d in $(find $top -type d)
|
||||
|
||||
@@ -13,110 +13,62 @@
|
||||
# limitations under the License.
|
||||
|
||||
|
||||
#Include shell font styles and some basic information
|
||||
SCRIPTS_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
|
||||
source "${OPENIM_ROOT}/scripts/lib/init.sh"
|
||||
source "${OPENIM_ROOT}/scripts/install/environment.sh"
|
||||
|
||||
openim::util::onCtrlC
|
||||
|
||||
# docker-compose.yaml file name
|
||||
docker_compose_file_name="docker-compose.yaml"
|
||||
|
||||
trap 'onCtrlC' INT
|
||||
function onCtrlC () {
|
||||
#Capture CTRL+C, terminate the background process of the program when the script is terminated in the form of ctrl+c
|
||||
kill -9 ${do_sth_pid} ${progress_pid}
|
||||
echo
|
||||
echo 'Ctrl+C is captured'
|
||||
exit 1
|
||||
# Load environment variables from .env file
|
||||
load_env() {
|
||||
source ${OPENIM_ROOT}/.env
|
||||
}
|
||||
|
||||
do_sth() {
|
||||
#Main program to run
|
||||
echo "++++++++++++++++++++++++"
|
||||
sleep 5
|
||||
echo "++++++++++++++++++++++++"
|
||||
|
||||
sleep 10
|
||||
}
|
||||
|
||||
#Import environment variables
|
||||
source .env
|
||||
|
||||
#Get the public IP address of the local machine
|
||||
internet_ip=$(curl ifconfig.me -s)
|
||||
echo -e "\033[1;34mCurrent public IP address: ${internet_ip}\033[0m\n"
|
||||
|
||||
#If MINIO_ENDPOINT is "http://127.0.0.1:10005", replace it with the current public IP address
|
||||
if [[ $MINIO_ENDPOINT == "http://127.0.0.1:10005" ]]; then
|
||||
sed -i "s/127.0.0.1/${internet_ip}/" .env
|
||||
fi
|
||||
|
||||
do_progress_bar() {
|
||||
local duration=${1}
|
||||
local max_progress=20
|
||||
local current_progress=0
|
||||
|
||||
while true; do
|
||||
((current_progress++))
|
||||
if [[ $current_progress -gt $max_progress ]]; then
|
||||
break
|
||||
fi
|
||||
sleep "$duration"
|
||||
echo "=====> Progress: [${current_progress}/${max_progress}]"
|
||||
done
|
||||
}
|
||||
|
||||
#Start Docker containers
|
||||
start_docker_containers() {
|
||||
if command -v docker-compose >/dev/null 2>&1; then
|
||||
echo -e "\033[1;34mFound docker-compose command, starting docker containers...\033[0m\n"
|
||||
docker-compose -f ${OPENIM_ROOT}/${docker_compose_file_name} up -d
|
||||
else
|
||||
if command -v docker >/dev/null 2>&1; then
|
||||
echo -e "\033[1;34mFound docker command, starting docker containers...\033[0m\n"
|
||||
docker compose -f ${OPENIM_ROOT}/${docker_compose_file_name} up -d
|
||||
else
|
||||
echo -e "\033[1;31mFailed to find docker-compose or docker command, please make sure they are installed and configured correctly.\033[0m"
|
||||
return 1
|
||||
fi
|
||||
# Replace local IP with public IP in .env
|
||||
replace_ip() {
|
||||
if [ "$API_URL" == "http://127.0.0.1:10002/object/" ]; then
|
||||
sed -i "s/127.0.0.1/${internet_ip}/" ${OPENIM_ROOT}/.env
|
||||
fi
|
||||
|
||||
if [ "$MINIO_ENDPOINT" == "http://127.0.0.1:10005" ]; then
|
||||
sed -i "s/127.0.0.1/${internet_ip}/" ${OPENIM_ROOT}/.env
|
||||
fi
|
||||
|
||||
openim::log::info "Your minio endpoint is ${MINIO_ENDPOINT}"
|
||||
}
|
||||
|
||||
#Execute scripts
|
||||
setup_script() {
|
||||
chmod +x ${SCRIPTS_ROOT}/*.sh
|
||||
echo -e "\033[1;34m============>Executing init_pwd.sh script...\033[0m\n"
|
||||
${SCRIPTS_ROOT}/init_pwd.sh
|
||||
echo -e "\033[1;34m============>Executing env_check.sh script...\033[0m\n"
|
||||
${SCRIPTS_ROOT}/env_check.sh
|
||||
# Execute necessary scripts
|
||||
execute_scripts() {
|
||||
chmod +x ${OPENIM_ROOT}/scripts/*.sh
|
||||
openim::log::info "Executing init_pwd.sh"
|
||||
${OPENIM_ROOT}/scripts/init_pwd.sh
|
||||
|
||||
openim::log::info "Executing env_check.sh"
|
||||
${OPENIM_ROOT}/scripts/env_check.sh
|
||||
}
|
||||
|
||||
setup_script &
|
||||
# Start docker compose
|
||||
start_docker_compose() {
|
||||
openim::log::info "Checking if docker-compose command is available"
|
||||
if command -v docker-compose &> /dev/null; then
|
||||
docker-compose up -d
|
||||
else
|
||||
docker compose up -d
|
||||
fi
|
||||
|
||||
#Start Docker containers (timeout 10 seconds)
|
||||
start_docker_containers
|
||||
${OPENIM_ROOT}/scripts/docker_check_service.sh
|
||||
}
|
||||
|
||||
docker_pid=$!
|
||||
timeout 10s tail --pid=${docker_pid} -f /dev/null
|
||||
docker_exit_code=$?
|
||||
main() {
|
||||
load_env
|
||||
openim::util::get_server_ip
|
||||
replace_ip
|
||||
execute_scripts
|
||||
start_docker_compose
|
||||
openim::log::success "Script executed successfully"
|
||||
}
|
||||
|
||||
if [ $docker_exit_code -eq 0 ]; then
|
||||
echo -e "\033[1;32m============>Docker containers started successfully!\033[0m\n"
|
||||
else
|
||||
echo -e "\033[1;31m============>Failed to start Docker containers, please check the environment configuration and dependencies.\033[0m\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "\033[1;34m============>Executing docker_check_service.sh script...\033[0m\n"
|
||||
|
||||
#View running Docker containers
|
||||
echo -e "\033[1;34m============>Viewing running Docker containers...\033[0m\n"
|
||||
echo ""
|
||||
docker ps
|
||||
|
||||
#Replace the progress bar section with the pv command
|
||||
echo -e "\033[1;34m============>Starting progress bar...\033[0m\n"
|
||||
do_progress_bar 0.5 | pv -l -s 20 > /dev/null
|
||||
echo -e "\033[1;34m============>Progress bar completed.\033[0m\n"
|
||||
|
||||
#Execute the main program
|
||||
do_sth
|
||||
# Run the main function
|
||||
main
|
||||
+33
-8
@@ -128,7 +128,7 @@ openim::util::wait_for_url() {
|
||||
return 1
|
||||
}
|
||||
|
||||
# Example: openim::util::wait_for_success 120 5 "imctl get nodes|grep localhost"
|
||||
# Example: openim::util::wait_for_success 120 5 "openimctl get nodes|grep localhost"
|
||||
# arguments: wait time, sleep time, shell command
|
||||
# returns 0 if the shell command get output, 1 otherwise.
|
||||
openim::util::wait_for_success(){
|
||||
@@ -277,7 +277,7 @@ openim::util::find-binary() {
|
||||
openim::util::find-binary-for-platform "$1" "$(openim::util::host_platform)"
|
||||
}
|
||||
|
||||
# Run all known doc generators (today gendocs and genman for imctl)
|
||||
# Run all known doc generators (today gendocs and genman for openimctl)
|
||||
# $1 is the directory to put those generated documents
|
||||
openim::util::gen-docs() {
|
||||
local dest="$1"
|
||||
@@ -293,8 +293,8 @@ openim::util::gen-docs() {
|
||||
# least from k/k tree), remove it completely.
|
||||
openim::util::sourced_variable "${genfeddocs}"
|
||||
|
||||
mkdir -p "${dest}/docs/guide/en-US/cmd/imctl/"
|
||||
"${gendocs}" "${dest}/docs/guide/en-US/cmd/imctl/"
|
||||
mkdir -p "${dest}/docs/guide/en-US/cmd/openimctl/"
|
||||
"${gendocs}" "${dest}/docs/guide/en-US/cmd/openimctl/"
|
||||
|
||||
mkdir -p "${dest}/docs/guide/en-US/cmd/"
|
||||
"${genopenimdocs}" "${dest}/docs/guide/en-US/cmd/" "openim-api"
|
||||
@@ -310,7 +310,7 @@ openim::util::gen-docs() {
|
||||
"${genopenimdocs}" "${dest}/docs/guide/en-US/cmd/" "openim-rpc-msg"
|
||||
"${genopenimdocs}" "${dest}/docs/guide/en-US/cmd/" "openim-rpc-third"
|
||||
"${genopenimdocs}" "${dest}/docs/guide/en-US/cmd/" "openim-rpc-user"
|
||||
"${genopenimdocs}" "${dest}/docs/guide/en-US/cmd/imctl" "imctl"
|
||||
"${genopenimdocs}" "${dest}/docs/guide/en-US/cmd/openimctl" "openimctl"
|
||||
|
||||
mkdir -p "${dest}/docs/man/man1/"
|
||||
"${genman}" "${dest}/docs/man/man1/" "openim-api"
|
||||
@@ -327,8 +327,8 @@ openim::util::gen-docs() {
|
||||
"${genman}" "${dest}/docs/man/man1/" "openim-rpc-third"
|
||||
"${genman}" "${dest}/docs/man/man1/" "openim-rpc-user"
|
||||
|
||||
mkdir -p "${dest}/docs/guide/en-US/yaml/imctl/"
|
||||
"${genyaml}" "${dest}/docs/guide/en-US/yaml/imct/"
|
||||
mkdir -p "${dest}/docs/guide/en-US/yaml/openimctl/"
|
||||
"${genyaml}" "${dest}/docs/guide/en-US/yaml/openimctl/"
|
||||
|
||||
# create the list of generated files
|
||||
pushd "${dest}" > /dev/null || return 1
|
||||
@@ -553,7 +553,7 @@ EOF
|
||||
# flatten the openimconfig files to make them self contained
|
||||
username=$(whoami)
|
||||
${sudo} /usr/bin/env bash -e <<EOF
|
||||
$(openim::util::find-binary imct) --openimconfig="${dest_dir}/${client_id}.openimconfig" config view --minify --flatten > "/tmp/${client_id}.openimconfig"
|
||||
$(openim::util::find-binary openimctl) --openimconfig="${dest_dir}/${client_id}.openimconfig" config view --minify --flatten > "/tmp/${client_id}.openimconfig"
|
||||
mv -f "/tmp/${client_id}.openimconfig" "${dest_dir}/${client_id}.openimconfig"
|
||||
chown ${username} "${dest_dir}/${client_id}.openimconfig"
|
||||
EOF
|
||||
@@ -896,6 +896,31 @@ function openim::util::run::relative() {
|
||||
done
|
||||
}
|
||||
|
||||
# This function retrieves the IP address of the current server.
|
||||
# It primarily uses the `curl` command to fetch the public IP address from ifconfig.me.
|
||||
# If curl or the service is not available, it falls back
|
||||
# to the internal IP address provided by the hostname command.
|
||||
function openim::util::get_server_ip() {
|
||||
# Check if the 'curl' command is available
|
||||
if command -v curl &> /dev/null; then
|
||||
# Try to retrieve the public IP address using curl and ifconfig.me
|
||||
IP=$(curl -s ifconfig.me)
|
||||
|
||||
# Check if IP retrieval was successful
|
||||
if [[ -z "$IP" ]]; then
|
||||
# If not, get the internal IP address
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
fi
|
||||
else
|
||||
# If curl is not available, get the internal IP address
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
fi
|
||||
|
||||
# Return the fetched IP address
|
||||
echo "$IP"
|
||||
}
|
||||
|
||||
|
||||
function openim::util::onCtrlC () {
|
||||
#Capture CTRL+C, terminate the background process of the program when the script is terminated in the form of ctrl+c
|
||||
kill -9 ${do_sth_pid} ${progress_pid}
|
||||
|
||||
Reference in New Issue
Block a user