This commit is contained in:
Darren 2023-09-20 19:37:12 +08:00 committed by GitHub
parent f4c75b5299
commit 7825965557
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 327 additions and 131 deletions

View File

@ -25,6 +25,7 @@ services:
volumes: volumes:
- portainer:/data - portainer:/data
- /var/run/docker.sock:/var/run/docker.sock - /var/run/docker.sock:/var/run/docker.sock
#- /run/podman/podman.sock:/var/run/docker.sock
labels: labels:
com.docker.compose.w9_http.port: 9000 com.docker.compose.w9_http.port: 9000

View File

@ -51,14 +51,16 @@ function get_os_version() {
echo $VERSION echo $VERSION
} }
os_type=$(get_os_type) os_type=$(get_os_type)
os_version=$(get_os_version) os_version=$(get_os_version)
CheckEnvironment(){
echo "---------------------------------- Welcome to install websoft9's appstore, it will take 3-5 minutes -------------------------------------------------------"
echo "Check environment ..." Check_OS(){
echo "Check OS environment for install Cockpit..."
echo os_type: $os_type echo os_type: $os_type
echo os_version: $os_version echo os_version: $os_version
if [ $(id -u) != "0" ]; then if [ $(id -u) != "0" ]; then
@ -122,20 +124,11 @@ if [ "$os_type" == 'Debian' ];then
echo "This app only supported on Debian 11" echo "This app only supported on Debian 11"
exit 1 exit 1
fi fi
fi fi
# Todo: need replaced it with vars
# Check port used
if netstat -tuln | grep -qE ':(80|443|9000)\s'; then
echo "Port 80,443,9000 is already in use."
exit 1
else
echo "Port 80,443, 9000 are free."
fi
} }
InstallCockpit(){ Install_Cockpit(){
echo "Prepare to install Cockpit ..." echo "Prepare to install Cockpit ..."
if [ "${os_type}" == 'Debian' ]; then if [ "${os_type}" == 'Debian' ]; then
@ -209,8 +202,7 @@ fi
echo "Set cockpit port to 9000 ..." echo "Set cockpit port to 9000 ..."
sudo sed -i 's/ListenStream=9090/ListenStream=9000/' /lib/systemd/system/cockpit.socket sudo sed -i 's/ListenStream=9090/ListenStream=9000/' /lib/systemd/system/cockpit.socket
} }
CheckEnvironment Check_OS
InstallCockpit Install_Cockpit

View File

@ -2,70 +2,145 @@
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH export PATH
# Install and Upgade Docker for mosts of Linux
# This script is intended from https://get.docker.com and add below:
#
# - remove Podman
# - support Redhat, CentOS-Stream, OracleLinux, AmazonLinux
#
# 1. download the script
#
# $ curl -fsSL https://websoft9.github.io/websoft9/install/install-docker.sh -o install-docker.sh
#
# 2. verify the script's content
#
# $ cat install-docker.sh
#
# 3. run the script with --dry-run to verify the steps it executes
#
# $ sh install-docker.sh --dry-run
#
# 4. run the script either as root, or using sudo to perform the installation.
#
# $ sudo sh install-docker.sh
InstallDocker(){ ############################################################
# This script is
# $force_value is define at install.sh
############################################################
if command -v docker &> /dev/null docker_packages="docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin"
then docker_exist="command -v docker &> /dev/null && systemctl is-active --quiet docker"
echo "Docker is installed, update..."
if command -v apt > /dev/null;then # Function to check if apt is locked
sudo apt -y install --only-upgrade docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin is_apt_locked(){
elif command -v dnf > /dev/null;then if [[ -f /var/lib/dpkg/lock-frontend || -f /var/lib/apt/lists/lock ]]; then
sudo dnf update -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin return 0 # Apt is locked
elif command -v yum > /dev/null;then else
sudo yum update -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin return 1 # Apt is not locked
fi fi
sudo systemctl start docker }
sudo systemctl enable docker
if ! docker network inspect websoft9 > /dev/null 2>&1; then Install_Docker(){
sudo docker network create websoft9 echo "Installing Docker for your system..."
# For redhat family
if [[ -f /etc/redhat-release ]]; then
# For CentOS, Fedora, or RHEL(only s390x)
if [[ $(cat /etc/redhat-release) =~ "RHEL" ]] && [[ $(uname -m) == "s390x" ]] || [[ $(cat /etc/redhat-release) =~ "CentOS" ]] || [[ $(cat /etc/redhat-release) =~ "Fedora" ]]; then
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
else
# For other distributions
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install $docker_packages -y
fi
fi
# For Ubuntu, Debian, or Raspbian
if type apt >/dev/null; then
apt update
# Wait for apt to be unlocked
while is_apt_locked; do
echo "Waiting for apt to be unlocked..."
sleep 5
done
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
fi
}
Upgrade_Docker(){
if eval "$docker_exist"; then
echo "Upgrading Docker for your system..."
dnf --version >/dev/null 2>&1
dnf_status=$?
yum --version >/dev/null 2>&1
yum_status=$?
apt --version >/dev/null 2>&1
apt_status=$?
if [ $dnf_status -eq 0 ]; then
sudo dnf update -y $docker_packages
elif [ $yum_status -eq 0 ]; then
sudo yum update -y $docker_packages
elif [ $apt_status -eq 0 ]; then
sudo apt -y install --only-upgrade $docker_packages
else
echo "Docker installed, but cannot upgrade"
fi fi
return
else else
echo "Docker is not installed, start to install..." Install_Docker
fi
if [ "$os_type" == 'CentOS' ];then
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
fi fi
}
if [ "$os_type" == 'Ubuntu' ] || [ "$os_type" == 'Debian' ] ;then Remove_Podman(){
apt-get update echo "Try to remove Podman"
while fuser /var/lib/dpkg/lock >/dev/null 2>&1 ; do podman pod stop --all
echo "Waiting for other software managers to finish..." # Remove Podman and its dependencies
sleep 5 if [ -x "$(command -v dnf)" ]; then
done sudo dnf remove podman -y
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh elif [ -x "$(command -v apt)" ]; then
sleep 30 sudo apt remove podman -y
fi elif [ -x "$(command -v zypper)" ]; then
sudo zypper remove podman -y
if [ "$os_type" == 'OracleLinux' ] ;then elif [ -x "$(command -v pacman)" ]; then
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo pacman -Rs podman --noconfirm
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y else
fi echo "Unable to find a suitable package manager to remove Podman."
exit 1
if [ "$os_type" == 'Fedora' ] ;then fi
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/fedora/docker-ce.repo echo "Podman has been stopped and removed."
sudo yum install device-mapper-persistent-data lvm2 docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-scan-plugin docker-ce-rootless-extras -y
fi
if [ "$os_type" == 'Redhat' ] ;then
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runc -y 1>/dev/null 2>&1
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
fi
if [ "$os_type" == 'CentOS Stream' ] || [ "$os_type" == 'Rocky Linux' ];then
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runc -y 1>/dev/null 2>&1
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
fi
sudo systemctl start docker
sudo systemctl enable docker
if ! docker network inspect websoft9 > /dev/null 2>&1; then
sudo docker network create websoft9
fi
} }
InstallDocker
Set_Docker(){
# should have Docker server and Docker cli
if eval $docker_exist; then
echo "Starting to Set docker..."
sudo systemctl enable docker
sudo systemctl start docker
if ! docker network inspect websoft9 > /dev/null 2>&1; then
sudo docker network create websoft9
fi
else
echo "Docker no installed, exit..."
exit
fi
}
## This Script starting here ....................................
if command -v podman &> /dev/null; then
if [ "$force_install" = "y" ]; then
Remove_Podman
else
read -p "Install Websoft9 will remove Podman and Install Docker for continue(y/n): " answer
if [ "$answer" = "y" ]; then
Remove_Podman
fi
fi
fi
Upgrade_Docker
Set_Docker

View File

@ -5,32 +5,200 @@ PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH export PATH
# Command-line options
# ==============================================================================
#
# --force <y|n>
# Use the --force option to ignore all interactive choices. default is n, for example:
#
# --port <9000>
# Use the --port option to set Websoft9 cosole port. default is 9000, for example:
#
# $ sudo sh install.sh --port 9001
# ==============================================================================
#!/bin/bash
# 设置参数的默认值
force="n"
port="9000"
# 获取参数值
while [[ $# -gt 0 ]]; do
case $1 in
--force)
force="$2"
shift 2
;;
--port)
port="$2"
shift 2
;;
*)
shift
;;
esac
done
# 输出参数值
echo "Force: $force"
echo "Port: $port"
# Define global vars # Define global vars
export http_port=80 export http_port=80
export https_port=443 export https_port=443
export cockpit_port=9000 export cockpit_port=$port
export install_path="/data/websoft9" export force_install=$force
export install_path="/data/websoft9/source"
export source_zip="websoft9-latest.zip"
export source_unzip="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/release/websoft9" export urls="https://w9artifact.blob.core.windows.net/release/websoft9"
if [[ "$1" == "dev" ]]; then if [[ "$1" == "dev" ]]; then
echo "update by dev artifact" echo "update by dev artifact"
export urls="https://w9artifact.blob.core.windows.net/dev/websoft9" export urls="https://w9artifact.blob.core.windows.net/dev/websoft9"
fi fi
# Install runtime
bash install_tools.sh
bash install_docker.sh
# Install Cockpit and plugins # Define common functions
install_tools(){
echo "Starting install necessary tool..."
dnf --version >/dev/null 2>&1
dnf_status=$?
yum --version >/dev/null 2>&1
yum_status=$?
apt --version >/dev/null 2>&1
apt_status=$?
if [ $dnf_status -eq 0 ]; then
dnf install $tools_yum -y
elif [ $yum_status -eq 0 ]; then
yum $tools_yum -y
elif [ $apt_status -eq 0 ]; then
while fuser /var/lib/dpkg/lock >/dev/null 2>&1 ; do
echo "Waiting for other software managers to finish..."
sleep 5
done
sudo apt update -y 1>/dev/null 2>&1
apt $tools_apt -y --assume-yes
else
echo "None of the required package managers are installed."
fi
}
download_source() {
echo "Download Websoft9 source code..."
if [ -d "$install_path" ]; then
echo "Directory $install_path already exists."
else
mkdir -p "$install_path"
fi
wget "$urls/$source_package"
if [ $? -ne 0 ]; then
echo "Failed to download source package."
exit 1
fi
unzip -o "$source_zip" -d "$install_path"
if [ $? -ne 0 ]; then
echo "Failed to unzip source package."
exit 1
fi
mv -fn "$install_path/$source_unzip/*" "$install_path"
rm -rf "$source_package" "$install_path/$source_unzip"
}
check_ports() {
local ports=("$@")
for port in "${ports[@]}"; do
if netstat -tuln | grep ":$port " >/dev/null; then
echo "Port $port is in use, install failed"
exit
fi
done
echo "All ports are available"
}
install_compose() {
echo "Install backend docker services"
cd "$install_path/docker"
if [ $? -ne 0 ]; then
echo "Failed to change directory."
exit 1
fi
sudo docker network inspect $docker_network >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Docker network '$docker_network' already exists."
else
sudo docker network create $docker_network
if [ $? -ne 0 ]; then
echo "Failed to create docker network."
exit 1
fi
fi
sudo docker-compose -p websoft9 up -d
if [ $? -ne 0 ]; then
echo "Failed to start docker services."
exit 1
fi
}
install_systemd() {
echo "Install Systemd service"
cp "$install_path/systemd/websoft9.service" /lib/systemd/system/
if [ $? -ne 0 ]; then
echo "Failed to copy Systemd service file."
exit 1
fi
sudo systemctl daemon-reload
if [ $? -ne 0 ]; then
echo "Failed to reload Systemd daemon."
exit 1
fi
sudo systemctl enable websoft9.service
if [ $? -ne 0 ]; then
echo "Failed to enable Systemd service."
exit 1
fi
sudo systemctl start websoft9
if [ $? -ne 0 ]; then
echo "Failed to start Systemd service."
exit 1
fi
}
#--------------- main-----------------------------------------
echo "------ Welcome to install Websoft9, it will take 3-5 minutes ------"
check_ports $http_port $https_port $cockpit_port
install_tools
download_source
bash install_docker.sh
bash install_cockpit.sh bash install_cockpit.sh
bash install_plugins.sh bash install_plugins.sh
# Install backend services install_compose
cd $install_path/docker install_systemd
sudo docker network create websoft9 echo "-- Install success! Access Websoft9 console by: http://Internet IP:9000 and using Linux user for login ------"
sudo docker compose -p websoft9 up -d
# Install Systemd service
cp $install_path/systemd/websoft9.service /lib/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable websoft9.service
sudo systemctl start websoft9

View File

@ -9,12 +9,7 @@ export PATH
InstallPlugins(){ InstallPlugins(){
# download apps
mkdir -p /data/apps && cd /data/apps
wget $urls/websoft9-latest.zip
unzip websoft9-latest.zip
cp -r /data/apps/websoft9/docker /data/apps/w9services
rm -f websoft9-latest.zip
# install plugins # install plugins
cd /usr/share/cockpit cd /usr/share/cockpit
@ -128,8 +123,6 @@ echo "Start to Edit Cockpit Menu ..."
# uninstall plugins # uninstall plugins
rm -rf /usr/share/cockpit/apps /usr/share/cockpit/selinux /usr/share/cockpit/kdump /usr/share/cockpit/sosreport /usr/share/cockpit/packagekit rm -rf /usr/share/cockpit/apps /usr/share/cockpit/selinux /usr/share/cockpit/kdump /usr/share/cockpit/sosreport /usr/share/cockpit/packagekit
cp -r /data/apps/websoft9/cockpit/menu_override/* /etc/cockpit cp -r /data/apps/websoft9/cockpit/menu_override/* /etc/cockpit
echo "---------------------------------- Install success! When installation completed, you can access it by: http://Internet IP:9000 and using Linux user for login to install a app by websoft9's appstore. -------------------------------------------------------"
} }
InstallPlugins InstallPlugins

View File

@ -1,33 +0,0 @@
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo "Starting InstallTools..."
InstallTools(){
echo "Prepare to install Tools ..."
#!/bin/bash
dnf --version >/dev/null 2>&1 || yum --version >/dev/null 2>&1 || apt --version >/dev/null 2>&1
if [ $? -eq 0 ]; then
dnf install git curl wget yum-utils jq bc unzip -y
elif [ $? -eq 0 ]; then
yum install git curl wget yum-utils jq bc unzip -y
elif [ $? -eq 0 ]; then
while fuser /var/lib/dpkg/lock >/dev/null 2>&1 ; do
echo "Waiting for other software managers to finish..."
sleep 5
done
sudo apt update -y 1>/dev/null 2>&1
apt install curl wget yum-utils jq bc unzip -y --assume-yes
else
echo "None of the required package managers are installed."
fi
}
InstallTools