From 10776537f88345bd388941c6e4bb92e2f1846886 Mon Sep 17 00:00:00 2001 From: Darren <27513732@qq.com> Date: Mon, 25 Sep 2023 17:53:21 +0800 Subject: [PATCH] install --- install/install_cockpit.sh | 38 +++++--- install/install_new.sh | 4 +- install/install_plugins.sh | 193 ++++++++++++++++--------------------- version.json | 30 +++--- 4 files changed, 123 insertions(+), 142 deletions(-) diff --git a/install/install_cockpit.sh b/install/install_cockpit.sh index 85d53868..9c33acc2 100644 --- a/install/install_cockpit.sh +++ b/install/install_cockpit.sh @@ -30,7 +30,8 @@ export PATH # $install_path ############################################################ -# 设置参数的默认值 +# Install Cockpit at this port +# If Cockpit installed, maintain its origin port port="9000" # 获取参数值 @@ -47,14 +48,10 @@ while [[ $# -gt 0 ]]; do done -if [ -z "$cockpit_port" ]; then - cockpit_port=$port -fi - echo_prefix_cockpit=$'\n[Cockpit] - ' -cockpit_packages_install="cockpit cockpit-pcp cockpit-sosreport" -cockpit_packages_upgrade="cockpit cockpit-ws cockpit-bridge cockpit-system cockpit-ws cockpit-storaged cockpit-session-recording cockpit-doc cockpit-packagekit cockpit-pcp cockpit-sosreport" -cockpit_plugin_delete="apps,machines,selinux,subscriptions,kdump,updates,playground,packagekit" +# package cockpit depends_on [cockpit-bridge,cockpit-ws,cockpit-system], but update cockpit the depends don't update +cockpit_packages="cockpit cockpit-ws cockpit-bridge cockpit-system cockpit-pcp cockpit-storaged cockpit-networkmanager cockpit-session-recording cockpit-doc cockpit-packagekit cockpit-sosreport" +cockpit_plugin_delete="apps,machines,selinux,subscriptions,kdump,updates,playground,packagekit,session-recording" menu_overrides_github_page_url="https://websoft9.github.io/websoft9/cockpit/menu_override" cockpit_config_github_page_url="https://websoft9.github.io/websoft9/cockpit/cockpit.conf" cockpit_menu_overrides=(networkmanager.override.json shell.override.json storaged.override.json systemd.override.json users.override.json) @@ -73,6 +70,22 @@ Pin: release a=$VERSION_CODENAME-backports Pin-Priority: 1000 " +cockpit_exist() { + systemctl list-unit-files | grep -q "cockpit.service" + return $? +} + + +if cockpit_exist; then + cockpit_port=$(grep -oP "(?<=^ListenStream=).*" "/lib/systemd/system/cockpit.socket") + echo "Maintain original port: $cockpit_port" +else + if [ -z "$cockpit_port" ]; then + cockpit_port="$port" + fi +fi + + check_ports() { local ports=("$@") @@ -233,17 +246,18 @@ Upgrade_Cockpit(){ sudo dpkg --configure -a apt update -y apt --fix-broken install - apt install -u $cockpit_packages_upgrade -y + apt install -u $cockpit_packages -y else sudo pkcon refresh > /dev/null sudo pkcon get-updates > /dev/null - sudo pkcon update $cockpit_packages_upgrade -y + sudo pkcon update $cockpit_packages -y + sudo pkcon install $cockpit_packages -y --allow-untrusted --allow-reinstall fi } Install_Cockpit(){ - if systemctl list-unit-files | grep -q cockpit.service; then + if cockpit_exist; then Upgrade_Cockpit Restart_Cockpit else @@ -252,7 +266,7 @@ Install_Cockpit(){ export DEBIAN_FRONTEND=noninteractive sudo pkcon refresh > /dev/null sudo pkcon get-updates > /dev/null - sudo pkcon install $cockpit_packages_install -y --allow-untrusted + sudo pkcon install $cockpit_packages -y --allow-untrusted --allow-reinstall Restart_Cockpit fi diff --git a/install/install_new.sh b/install/install_new.sh index 8749206f..3de9a530 100644 --- a/install/install_new.sh +++ b/install/install_new.sh @@ -73,8 +73,8 @@ export source_github_pages="https://websoft9.github.io/websoft9" export tools_yum="git curl wget yum-utils jq bc unzip" export tools_apt="git curl wget jq bc unzip" export docker_network="websoft9" -export urls="https://w9artifact.blob.core.windows.net/$channel/websoft9" -echo Install from url: $urls +export artifact_url="https://w9artifact.blob.core.windows.net/$channel/websoft9" +echo Install from url: $artifact_url # Define common functions diff --git a/install/install_plugins.sh b/install/install_plugins.sh index f6be37ad..4ccf7954 100644 --- a/install/install_plugins.sh +++ b/install/install_plugins.sh @@ -3,119 +3,92 @@ PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH +# Command-line options +# ========================================================== +# +# --channel +# Use the --channel option to install a release(production) or dev distribution. default is release, for example: +# +# $ sudo sh install.sh --channel release +# +# ============================================================================== - -### -----------------------------------------------------### - -InstallPlugins(){ - - - -# install plugins -cd /usr/share/cockpit -appstore_version=$(cat /data/apps/websoft9/version.json | jq .PLUGINS |jq .APPSTORE | tr -d '"') -wget $urls/plugin/appstore/appstore-$appstore_version.zip -unzip appstore-$appstore_version.zip - -myapps_version=$(cat /data/apps/websoft9/version.json | jq .PLUGINS |jq .MYAPPS| tr -d '"') -wget $urls/plugin/myapps/myapps-$myapps_version.zip -unzip myapps-$myapps_version.zip - -portainer_version=$(cat /data/apps/websoft9/version.json | jq .PLUGINS |jq .PORTAINER | tr -d '"') -wget $urls/plugin/portainer/portainer-$portainer_version.zip -unzip portainer-$portainer_version.zip - -nginx_version=$(cat /data/apps/websoft9/version.json | jq .PLUGINS |jq .NGINX | tr -d '"') -wget $urls/plugin/nginx/nginx-$nginx_version.zip -unzip nginx-$nginx_version.zip - -settings_version=$(cat /data/apps/websoft9/version.json | jq .PLUGINS |jq .SETTINGS | tr -d '"') -wget $urls/plugin/settings/settings-$settings_version.zip -unzip settings-$settings_version.zip - -# install navigator -navigator_version=$(cat /data/apps/websoft9/version.json | jq .PLUGINS |jq .NAVIGATOR | tr -d '"') -wget $urls/plugin/navigator/navigator-$navigator_version.zip -unzip navigator-$navigator_version.zip -rm -f *.zip - -# install library -cd /data -library_version=$(cat /data/apps/websoft9/version.json | jq .PLUGINS |jq .LIBRARY | tr -d '"') -wget $urls/plugin/library/library-$library_version.zip -unzip library-$library_version.zip -rm -f library-$library_version.zip - -# configure cockpit -cp /data/apps/websoft9/cockpit/cockpit.conf /etc/cockpit/cockpit.conf - -#####ci-section##### - -sudo systemctl daemon-reload -sudo systemctl enable --now cockpit.socket -sudo systemctl restart cockpit.socket - -} - -StartAppMng(){ - -echo "Start appmanage API ..." -cd /data/apps/w9services/w9redis && sudo docker compose up -d -cd /data/apps/w9services/w9appmanage && sudo docker compose up -d - -public_ip=`bash /data/apps/websoft9/scripts/get_ip.sh` -echo $public_ip > /data/apps/w9services/w9appmanage/public_ip -appmanage_ip=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' websoft9-appmanage) -} - -StartPortainer(){ - -echo "Start Portainer ..." -cd /data/apps/w9services/w9portainer && sudo docker compose up -d -docker pull backplane/pwgen -new_password=$(docker run --name pwgen backplane/pwgen 15)! -docker rm -f pwgen -portainer_ip=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' websoft9-portainer) -echo "Portainer init password:" $new_password >> /usr/password.txt -curl -X POST -H "Content-Type: application/json" -d '{"username":"admin", "Password":"'$new_password'"}' http://$portainer_ip:9000/api/users/admin/init -curl "http://$appmanage_ip:5000/AppUpdateUser?user_name=admin&password=$new_password" - -} - -InstallNginx(){ - -echo "Install nginxproxymanager ..." -cd /data/apps/w9services/w9nginxproxymanager && sudo docker compose up -d -sleep 30 -echo "edit nginxproxymanager password..." -nginx_ip=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' websoft9-nginxproxymanager) -login_data=$(curl -X POST -H "Content-Type: application/json" -d '{"identity":"admin@example.com","scope":"user", "secret":"changeme"}' http://$nginx_ip:81/api/tokens) -#token=$(echo $login_data | grep -Po '(?<="token":")[^"]*') -token=$(echo $login_data | jq -r '.token') -while [ -z "$token" ]; do - sleep 5 - login_data=$(curl -X POST -H "Content-Type: application/json" -d '{"identity":"admin@example.com","scope":"user", "secret":"changeme"}' http://$nginx_ip:81/api/tokens) - token=$(echo $login_data | jq -r '.token') +# get input and define vars +while [[ $# -gt 0 ]]; do + case $1 in + --channel) + channel="$2" + shift 2 + ;; + *) + shift + ;; + esac done -echo "Nginx token:"$token -new_password=$(docker run --name pwgen backplane/pwgen 15)! -docker rm -f pwgen -echo "Nginx init password:" $new_password >> /usr/password.txt -curl -X PUT -H "Content-Type: application/json" -H "Authorization: Bearer $token" -d '{"email": "help@websoft9.com", "nickname": "admin", "is_disabled": false, "roles": ["admin"]}' http://$nginx_ip:81/api/users/1 -curl -X PUT -H "Content-Type: application/json" -H "Authorization: Bearer $token" -d '{"type":"password","current":"changeme","secret":"'$new_password'"}' http://$nginx_ip:81/api/users/1/auth -sleep 3 -curl "http://$appmanage_ip:5000/AppUpdateUser?user_name=help@websoft9.com&password=$new_password" -echo "edit password success ..." -while [ ! -d "/var/lib/docker/volumes/w9nginxproxymanager_nginx_data/_data/nginx/proxy_host" ]; do - sleep 1 -done -cp /data/apps/w9services/w9nginxproxymanager/initproxy.conf /var/lib/docker/volumes/w9nginxproxymanager_nginx_data/_data/nginx/proxy_host -echo $public_ip -sudo sed -i "s/domain.com/$public_ip/g" /var/lib/docker/volumes/w9nginxproxymanager_nginx_data/_data/nginx/proxy_host/initproxy.conf -sudo docker restart websoft9-nginxproxymanager -sudo docker cp websoft9-appmanage:/usr/src/app/db/database.sqlite /usr + + +if [ -z "$channel" ]; then + channel="release" +fi + +if [ -z "$source_github_pages" ]; then + source_github_pages="https://websoft9.github.io/websoft9" +fi + +if [ -z "$install_path" ]; then + install_path="/data/websoft9/source" +fi + + +echo "Your installation parameters are as follows: " +echo "--channel: $channel" + +artifact_url="https://w9artifact.blob.core.windows.net/$channel/websoft9/plugin" +echo_prefix_cockpit=$'\n[Plugins] - ' + + +version_json(){ + + if [ -f "$install_path/version.json" ]; then + echo "Find version file on your $install_path " + else + echo "Get version.json from $source_github_pages " + mydata=$(curl -s "$url") + if [ $? -ne 0 ]; then + echo "URL does not exist or cannot be accessed." + exit 1 + else + echo "$mydata" + fi + fi + mydata=$(cat "$install_path/version.json") + echo $mydata + } +install_plugins() { + echo "$echo_prefix_cockpit Start to install plugins" + data=$(version_json) + # 解析数据文件,获取 plugins 的子元素和对应的版本号 + plugins=$(echo "$data" | jq -r '.plugins | keys_unsorted[]') + versions=$(echo "$data" | jq -r '.plugins | .[]') -InstallPlugins + # 定义数组变量 + declare -a artifact_array + + # 构建数组内容 + readarray -t plugins_array <<<"$plugins" + readarray -t versions_array <<<"$versions" + + for ((i=0; i<${#plugins_array[@]}; i++)); do + artifact_array+=("$artifact_url/${plugins_array[$i]}-${versions_array[$i]}") + done + + # 打印数组元素 + for element in "${artifact_array[@]}"; do + echo "$element" + done +} + +install_plugins diff --git a/version.json b/version.json index 2344201a..0c1b8f59 100644 --- a/version.json +++ b/version.json @@ -1,20 +1,14 @@ { - "SERVICES": { - "PORTAINER": "2.18.3", - "NGINX": "2.10.3", - "APPMANAGE": "0.8.17", - "REDIS": "7.0.11" + "version": "0.8.20", + "plugins": { + "portainer": "0.0.6", + "nginx": "0.0.5", + "myapps": "0.0.8", + "appstore": "0.0.7", + "settings": "0.0.5", + "navigator": "0.5.10" }, - "PLUGINS": { - "PORTAINER": "0.0.6", - "NGINX": "0.0.5", - "MYAPPS": "0.0.8", - "APPSTORE": "0.0.7", - "SETTINGS": "0.0.5", - "NAVIGATOR": "0.5.10", - "LIBRARY": "0.5.4" - }, - "OS_SUPPORT": { + "OS": { "Fedora": [ "38", "37" @@ -37,13 +31,13 @@ "8" ], "Debian": [ - "11" + "11", + "10" ], "Ubuntu": [ "22.04", "20.04", "18.04" ] - }, - "VERSION": "0.8.20" + } } \ No newline at end of file