Skip to content

Commit

Permalink
linux
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanleung committed Sep 9, 2024
1 parent 7b4e1f4 commit b2dd9db
Show file tree
Hide file tree
Showing 6 changed files with 374 additions and 6 deletions.
116 changes: 116 additions & 0 deletions .github/workflows/mor-agents-build-linux.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
name: MOR Agents Build Linux

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
with:
submodules: 'recursive'

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pyinstaller
- name: Build with PyInstaller
run: |
pyinstaller --name="MORagents" --add-data "images/moragents.png:images" main.py
- name: Create Debian package
run: |
mkdir -p debian/DEBIAN
mkdir -p debian/usr/bin
mkdir -p debian/usr/share/applications
mkdir -p debian/usr/share/icons/hicolor/256x256/apps
cp -r dist/MORagents/* debian/usr/bin/
cp images/moragents.png debian/usr/share/icons/hicolor/256x256/apps/moragents.png
echo "[Desktop Entry]
Name=MORagents
Exec=/usr/bin/MORagents
Icon=moragents
Type=Application
Categories=Utility;" > debian/usr/share/applications/moragents.desktop
echo "Package: moragents
Version: 1.0
Section: utils
Priority: optional
Architecture: amd64
Maintainer: LachsBagel
Description: MORagents application
MORagents is a desktop application for AI agents." > debian/DEBIAN/control
dpkg-deb --build debian moragents.deb
- name: Create setup script
run: |
cat << EOF > moragents-setup.sh
#!/bin/bash
set -e
# Colors for output
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
# Function to check if a command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Install curl if not present
if ! command_exists curl; then
echo -e "${YELLOW}Installing curl...${NC}"
sudo apt-get update
sudo apt-get install -y curl
fi
# Install Docker if not present
if ! command_exists docker; then
echo -e "${YELLOW}Installing Docker...${NC}"
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
sudo systemctl enable docker
sudo systemctl start docker
else
echo -e "${GREEN}Docker is already installed.${NC}"
fi
# Pull necessary Docker images
echo -e "${YELLOW}Pulling Docker images...${NC}"
sudo docker pull morpheusai/nginx-agent:latest
sudo docker pull morpheusai/agents:latest
# Start Docker containers
echo -e "${YELLOW}Starting Docker containers...${NC}"
sudo docker run -d --name agents -p 8080:5000 --restart always -v /var/lib/agents -v /app/src morpheusai/agents:latest
sudo docker run -d --name nginx -p 3333:80 morpheusai/nginx-agent:latest
echo -e "${GREEN}Setup complete!${NC}"
echo -e "${YELLOW}NOTE: Please log out and log back in for Docker group changes to take effect.${NC}"
EOF
chmod +x moragents-setup.sh
- name: Upload Debian Package and Setup Script
uses: actions/upload-artifact@v4
with:
name: MORagentsSetup-Linux
path: |
moragents.deb
moragents-setup.sh
80 changes: 80 additions & 0 deletions build_assets/linux/install_moragents.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#!/bin/bash
set -e

# Colors for output
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# Function to check if a command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}

# Function to get the current user
get_current_user() {
if [ -n "$SUDO_USER" ]; then
echo "$SUDO_USER"
elif [ -n "$USER" ]; then
echo "$USER"
else
echo $(whoami)
fi
}

# Install curl if not present
if ! command_exists curl; then
echo -e "${YELLOW}Installing curl...${NC}"
sudo apt-get update
sudo apt-get install -y curl
fi

# Check Docker installation
if command_exists docker; then
echo -e "${GREEN}Docker is already installed.${NC}"
else
echo -e "${YELLOW}Installing Docker...${NC}"
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
echo -e "${GREEN}Docker installed successfully.${NC}"
fi

# Ensure current user is in docker group
CURRENT_USER=$(get_current_user)
if [ -n "$CURRENT_USER" ]; then
if groups "$CURRENT_USER" | grep -q '\bdocker\b'; then
echo -e "${GREEN}User $CURRENT_USER is already in the docker group.${NC}"
else
echo -e "${YELLOW}Adding user $CURRENT_USER to the docker group...${NC}"
sudo usermod -aG docker "$CURRENT_USER"
echo -e "${GREEN}User $CURRENT_USER added to docker group. You may need to log out and back in for this to take effect.${NC}"
fi
else
echo -e "${RED}Warning: Couldn't determine current user. You may need to manually add your user to the docker group.${NC}"
fi

# Ensure Docker service is running
if ! systemctl is-active --quiet docker; then
echo -e "${YELLOW}Starting Docker service...${NC}"
sudo systemctl start docker
fi

# Pull necessary Docker images
echo -e "${YELLOW}Pulling Docker images...${NC}"
sudo docker pull morpheusai/nginx-agent:latest
sudo docker pull morpheusai/agents:latest

# Stop and remove existing containers if they exist
echo -e "${YELLOW}Stopping and removing existing containers if present...${NC}"
sudo docker stop agents nginx 2>/dev/null || true
sudo docker rm agents nginx 2>/dev/null || true

# Start Docker containers
echo -e "${YELLOW}Starting Docker containers...${NC}"
sudo docker run -d --name agents -p 8080:5000 --restart always -v /var/lib/agents:/var/lib/agents -v /app/src:/app/src morpheusai/agents:latest
sudo docker run -d --name nginx -p 3333:80 morpheusai/nginx-agent:latest

echo -e "${GREEN}Setup complete!${NC}"
echo -e "${YELLOW}NOTE: If you were added to the docker group, please log out and log back in for the changes to take effect.${NC}"
echo -e "${YELLOW}After logging back in, you can run Docker commands without sudo.${NC}"
12 changes: 9 additions & 3 deletions config.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
# Run as bundled executable if condition is met, else run as regular Python script
repo_root = sys._MEIPASS if getattr(sys, 'frozen', False) else os.path.dirname(__file__)
elif os_name == "Linux":
raise RuntimeError(
f"MORagents needs Linux support! Would you like to help?\n"
f"https://github.com/MorpheusAIs/moragents/issues/27")
repo_root = os.path.dirname(__file__)
else:
raise RuntimeError(f"Unsupported OS: {os_name}")

class AgentDockerConfig:
MACOS_IMAGE_NAMES = [
Expand All @@ -23,13 +23,19 @@ class AgentDockerConfig:
"lachsbagel/moragents_dockers-nginx:amd64-0.0.9",
"lachsbagel/moragents_dockers-agents:amd64-0.0.9"
]
LINUX_IMAGE_NAMES = [
"lachsbagel/moragents_dockers-nginx:amd64-0.0.9",
"lachsbagel/moragents_dockers-agents:amd64-0.0.9"
]

@staticmethod
def get_current_image_names():
if os_name == "macOS":
return AgentDockerConfig.MACOS_IMAGE_NAMES
elif os_name == "Windows":
return AgentDockerConfig.WINDOWS_IMAGE_NAMES
elif os_name == "Linux":
return AgentDockerConfig.LINUX_IMAGE_NAMES
else:
raise RuntimeError(f"Unsupported OS: {os_name}")

Expand Down
Binary file added images/moragents.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 2 additions & 3 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

from runtime_setup_macos import main as macos_setup
from runtime_setup_windows import main as windows_setup
from runtime_setup_linux import main as linux_setup
from utils.logger_config import setup_logger
from utils.host_utils import get_os_and_arch

Expand All @@ -21,9 +22,7 @@
elif os_name == "Windows":
windows_setup()
elif os_name == "Linux":
raise RuntimeError(
f"MORagents needs Linux support! Would you like to help?\n"
f"https://github.com/MorpheusAIs/moragents/issues/27")
linux_setup()

except Exception as e:
logging.critical(f"Error during Docker setup: {str(e)}")
Expand Down
Loading

0 comments on commit b2dd9db

Please sign in to comment.