Compare commits
23 Commits
66a95b912b
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
872bb0c432
|
|||
|
27658209d3
|
|||
|
18d2860397
|
|||
|
|
66b416ebde | ||
|
|
b7b59f593a | ||
|
|
3d86677dd2 | ||
|
|
c20c49d5e0 | ||
|
|
c93f972c4a | ||
|
|
5d7f06282e | ||
|
|
2162463382 | ||
|
|
f965547b6c | ||
|
|
d3ea2cc78d | ||
|
|
66f3fe4045 | ||
|
|
30ebfcf933 | ||
|
|
66a5c6d16f | ||
|
|
62db018527 | ||
|
|
111fa7b828 | ||
|
|
7b0cb8e183 | ||
|
|
2d98f58232 | ||
|
|
fe1f150634 | ||
|
|
e62288c872 | ||
|
|
fd922287c0 | ||
|
|
2773101035 |
21
build.zsh
21
build.zsh
@@ -63,17 +63,21 @@ arch-chroot root.x86_64 /bin/sh -c 'npm i -g @anthropic-ai/claude-code'
|
|||||||
# Copy os-release
|
# Copy os-release
|
||||||
cp -rf ./cfg/os-release root.x86_64/etc/os-release
|
cp -rf ./cfg/os-release root.x86_64/etc/os-release
|
||||||
|
|
||||||
# Configure sudoers for wheel group
|
# Configure sudoers for wheel group (full access for container operation)
|
||||||
echo "Configuring sudoers..."
|
echo "Configuring sudoers..."
|
||||||
arch-chroot root.x86_64 /bin/sh -c 'echo "%wheel ALL=(ALL:ALL) NOPASSWD: /usr/bin/pacman, /usr/bin/pacstrap, /usr/bin/arch-chroot, /usr/bin/rm, /usr/bin/mkdir, /usr/bin/mv, /usr/bin/cp, /usr/bin/poweroff, /usr/bin/reboot, /usr/bin/machinectl, /bin/bash" >> /etc/sudoers'
|
arch-chroot root.x86_64 /bin/sh -c 'echo "%wheel ALL=(ALL:ALL) NOPASSWD: /usr/bin/pacman -Syu --noconfirm, /usr/bin/poweroff, /usr/bin/reboot" >> /etc/sudoers'
|
||||||
|
arch-chroot root.x86_64 /bin/sh -c 'echo "ai ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers'
|
||||||
|
|
||||||
# Install aigpt (aios core package)
|
# Install aigpt (aios core package)
|
||||||
echo "Installing aigpt..."
|
echo "Installing aigpt..."
|
||||||
arch-chroot root.x86_64 /bin/sh -c 'git clone https://git.syui.ai/ai/gpt && cd gpt && cargo build --release && cp -rf ./target/release/aigpt /bin/'
|
arch-chroot root.x86_64 /bin/sh -c 'git clone https://git.syui.ai/ai/gpt && cd gpt && cargo build --release && cp -rf ./target/release/aigpt /bin/ && cd .. && rm -rf gpt'
|
||||||
|
|
||||||
# Install aibot (aios core package)
|
# Install aibot (aios core package)
|
||||||
echo "Installing aibot..."
|
echo "Installing aibot..."
|
||||||
arch-chroot root.x86_64 /bin/sh -c 'git clone https://git.syui.ai/ai/bot && cd bot && cargo build && cp -rf ./target/debug/aibot /bin/ && aibot ai'
|
arch-chroot root.x86_64 /bin/sh -c 'git clone https://git.syui.ai/ai/bot && cd bot && cargo build --release && cp -rf ./target/release/aibot /bin/ && aibot ai && cd .. && rm -rf bot'
|
||||||
|
|
||||||
|
echo "Installing aishell..."
|
||||||
|
arch-chroot root.x86_64 /bin/sh -c 'git clone https://git.syui.ai/ai/shell && cd shell && cargo build --release && cp -rf ./target/release/aishell /bin/ && cd .. && rm -rf shell'
|
||||||
|
|
||||||
echo "✓ Arch Linux base complete"
|
echo "✓ Arch Linux base complete"
|
||||||
echo ""
|
echo ""
|
||||||
@@ -86,14 +90,7 @@ bash ./cfg/setup-user.sh
|
|||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# 3. Claude & aigpt Setup
|
# 3. Create workspace container (after all configuration)
|
||||||
# ============================================
|
|
||||||
|
|
||||||
bash ./cfg/setup-claude.sh
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# ============================================
|
|
||||||
# 4. Create child containers (after all configuration)
|
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
bash ./cfg/user-continer.sh
|
bash ./cfg/user-continer.sh
|
||||||
|
|||||||
@@ -11,6 +11,17 @@ tar xf "$TARBALL"
|
|||||||
mkdir -p /var/lib/machines
|
mkdir -p /var/lib/machines
|
||||||
mv root.x86_64 /var/lib/machines/$NAME
|
mv root.x86_64 /var/lib/machines/$NAME
|
||||||
|
|
||||||
|
# Create aios.nspawn for network access
|
||||||
|
echo "Creating network configuration..."
|
||||||
|
mkdir -p /etc/systemd/nspawn
|
||||||
|
cat > /etc/systemd/nspawn/$NAME.nspawn <<'EOF'
|
||||||
|
[Exec]
|
||||||
|
Boot=yes
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
Private=no
|
||||||
|
EOF
|
||||||
|
|
||||||
echo "=== Installation complete ==="
|
echo "=== Installation complete ==="
|
||||||
echo ""
|
echo ""
|
||||||
echo "Usage:"
|
echo "Usage:"
|
||||||
|
|||||||
@@ -1,50 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Claude Code MCP setup for aios
|
|
||||||
# Configures MCP, sets up shared memory
|
|
||||||
|
|
||||||
ROOTFS="root.x86_64"
|
|
||||||
|
|
||||||
echo "=== Claude MCP Setup ==="
|
|
||||||
|
|
||||||
# Setup Claude Code MCP configuration (shared via symlink)
|
|
||||||
echo "Configuring MCP..."
|
|
||||||
# Create actual config in syui/ai/claude (bind-mounted)
|
|
||||||
arch-chroot $ROOTFS /bin/sh -c 'mkdir -p /root/.config/syui/ai/claude'
|
|
||||||
cat > $ROOTFS/root/.config/syui/ai/claude/claude_desktop_config.json <<'EOF'
|
|
||||||
{
|
|
||||||
"mcpServers": {
|
|
||||||
"aigpt": {
|
|
||||||
"command": "aigpt",
|
|
||||||
"args": ["server", "--enable-layer4"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Create symlink for root
|
|
||||||
arch-chroot $ROOTFS /bin/sh -c 'ln -sf /root/.config/syui/ai/claude /root/.config/claude'
|
|
||||||
|
|
||||||
# Setup for ai user too
|
|
||||||
arch-chroot $ROOTFS /bin/sh -c 'mkdir -p /home/ai/.config/syui/ai/claude'
|
|
||||||
arch-chroot $ROOTFS /bin/sh -c 'cp /root/.config/syui/ai/claude/claude_desktop_config.json /home/ai/.config/syui/ai/claude/'
|
|
||||||
arch-chroot $ROOTFS /bin/sh -c 'ln -sf /home/ai/.config/syui/ai/claude /home/ai/.config/claude'
|
|
||||||
arch-chroot $ROOTFS /bin/sh -c 'chown -R ai:ai /home/ai/.config/syui'
|
|
||||||
|
|
||||||
# Create config directory
|
|
||||||
arch-chroot $ROOTFS /bin/sh -c 'mkdir -p /root/.config/syui/ai/gpt'
|
|
||||||
|
|
||||||
# Copy MCP and aios configuration
|
|
||||||
echo "Copying configuration files..."
|
|
||||||
cp -rf ./cfg/mcp.json $ROOTFS/root/.config/syui/ai/mcp.json
|
|
||||||
cp -rf ./cfg/config.toml $ROOTFS/root/.config/syui/ai/config.toml
|
|
||||||
|
|
||||||
# Initialize aigpt database with WAL mode
|
|
||||||
echo "Initializing aigpt database..."
|
|
||||||
arch-chroot $ROOTFS /bin/sh -c 'aigpt server --enable-layer4 &'
|
|
||||||
sleep 2
|
|
||||||
arch-chroot $ROOTFS /bin/sh -c 'pkill aigpt'
|
|
||||||
arch-chroot $ROOTFS /bin/sh -c 'if command -v sqlite3 &>/dev/null; then sqlite3 /root/.config/syui/ai/gpt/memory.db "PRAGMA journal_mode=WAL; PRAGMA synchronous=NORMAL;"; fi'
|
|
||||||
|
|
||||||
# Note: claude auto-start is configured in ai user's .zshrc (shared with workspace root via bind mount)
|
|
||||||
|
|
||||||
echo "✓ Claude MCP setup complete"
|
|
||||||
@@ -36,7 +36,6 @@ mkdir -p $ROOTFS/etc/systemd/nspawn
|
|||||||
cat > $ROOTFS/etc/systemd/nspawn/workspace.nspawn <<'EOF'
|
cat > $ROOTFS/etc/systemd/nspawn/workspace.nspawn <<'EOF'
|
||||||
[Exec]
|
[Exec]
|
||||||
Boot=yes
|
Boot=yes
|
||||||
PrivateUsers=pick
|
|
||||||
ResolvConf=copy-host
|
ResolvConf=copy-host
|
||||||
|
|
||||||
[Files]
|
[Files]
|
||||||
@@ -62,28 +61,19 @@ cp -rf ./cfg/zshrc $ROOTFS/root/.zshrc
|
|||||||
# Copy .zshrc for user 'ai'
|
# Copy .zshrc for user 'ai'
|
||||||
cp -rf ./cfg/zshrc $ROOTFS/home/ai/.zshrc
|
cp -rf ./cfg/zshrc $ROOTFS/home/ai/.zshrc
|
||||||
|
|
||||||
# Add workspace container auto-start and entry (shared .zshrc for ai user and workspace root)
|
# Add workspace auto-entry and claude auto-start
|
||||||
cat >> $ROOTFS/home/ai/.zshrc <<'EOF'
|
cat >> $ROOTFS/home/ai/.zshrc <<'EOF'
|
||||||
|
|
||||||
# MCP auto-setup (run once after .claude.json is created)
|
# aios: auto-enter workspace container
|
||||||
if [[ -f ~/.claude.json ]] && ! grep -q '"aigpt"' ~/.claude.json 2>/dev/null; then
|
|
||||||
if command -v claude &>/dev/null && command -v aigpt &>/dev/null; then
|
|
||||||
claude mcp add aigpt aigpt server &>/dev/null || true
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# aios concept: container from start (ai user and workspace root share this .zshrc)
|
|
||||||
if [[ -o login ]] && [[ -o interactive ]]; then
|
if [[ -o login ]] && [[ -o interactive ]]; then
|
||||||
if [[ -z "$INSIDE_WORKSPACE" ]]; then
|
if [[ -z "$INSIDE_WORKSPACE" ]]; then
|
||||||
# Running as ai user on aios OS - enter workspace container
|
# Enter workspace container
|
||||||
export INSIDE_WORKSPACE=1
|
export INSIDE_WORKSPACE=1
|
||||||
sudo machinectl start workspace 2>/dev/null || true
|
exec sudo systemd-nspawn -q -D /var/lib/machines/workspace /bin/zsh
|
||||||
sleep 1
|
|
||||||
exec sudo machinectl shell workspace
|
|
||||||
else
|
else
|
||||||
# Running as root inside workspace container - start claude
|
# Inside workspace - start claude with skip permissions
|
||||||
if command -v claude &>/dev/null; then
|
if command -v claude &>/dev/null; then
|
||||||
claude
|
claude --dangerously-skip-permissions
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -91,24 +81,4 @@ EOF
|
|||||||
|
|
||||||
arch-chroot $ROOTFS /bin/sh -c 'chown ai:ai /home/ai/.zshrc'
|
arch-chroot $ROOTFS /bin/sh -c 'chown ai:ai /home/ai/.zshrc'
|
||||||
|
|
||||||
# Copy aios startup script
|
|
||||||
cp -rf ./cfg/aios.zsh $ROOTFS/usr/local/bin/aios-startup
|
|
||||||
arch-chroot $ROOTFS /bin/sh -c 'chmod +x /usr/local/bin/aios-startup'
|
|
||||||
|
|
||||||
# Create default config directory and file for user 'ai'
|
|
||||||
arch-chroot $ROOTFS /bin/sh -c 'mkdir -p /home/ai/.config/syui/ai/os'
|
|
||||||
cat > $ROOTFS/home/ai/.config/syui/ai/os/config.json <<'EOF'
|
|
||||||
{
|
|
||||||
"shell": false
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
arch-chroot $ROOTFS /bin/sh -c 'chown -R ai:ai /home/ai/.config'
|
|
||||||
|
|
||||||
# Update .zshrc to source startup script
|
|
||||||
cat >> $ROOTFS/home/ai/.zshrc <<'EOF'
|
|
||||||
|
|
||||||
# aios startup
|
|
||||||
source /usr/local/bin/aios-startup
|
|
||||||
EOF
|
|
||||||
|
|
||||||
echo "✓ User setup complete"
|
echo "✓ User setup complete"
|
||||||
|
|||||||
@@ -1,20 +1,23 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Create child containers inside aios for ai user
|
# Create workspace container inside aios for ai user
|
||||||
# Simply copy the aios itself as child containers
|
# Backup aios before creating /var/lib/machines to avoid recursion
|
||||||
|
|
||||||
ROOTFS="root.x86_64"
|
ROOTFS="root.x86_64"
|
||||||
|
|
||||||
echo "=== Creating child containers ==="
|
echo "=== Creating workspace container ==="
|
||||||
|
|
||||||
|
# Backup current aios to temp location (before creating /var/lib/machines)
|
||||||
|
echo "Backing up aios..."
|
||||||
|
cp -a $ROOTFS /tmp/aios-backup-$$
|
||||||
|
|
||||||
# Create directory for child containers
|
# Create directory for child containers
|
||||||
mkdir -p $ROOTFS/var/lib/machines
|
mkdir -p $ROOTFS/var/lib/machines
|
||||||
|
|
||||||
# Copy aios as workspace
|
# Copy backup as workspace
|
||||||
echo "Creating workspace container..."
|
echo "Creating workspace container..."
|
||||||
cp -a $ROOTFS $ROOTFS/var/lib/machines/workspace
|
cp -a /tmp/aios-backup-$$ $ROOTFS/var/lib/machines/workspace
|
||||||
|
|
||||||
# Copy aios as restore-img
|
# Cleanup temp backup
|
||||||
echo "Creating restore-img container..."
|
rm -rf /tmp/aios-backup-$$
|
||||||
cp -a $ROOTFS $ROOTFS/var/lib/machines/restore-img
|
|
||||||
|
|
||||||
echo "✓ Child containers created"
|
echo "✓ Workspace container created"
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ export AIGPT_CONFIG="$HOME/.config/syui/ai/config.toml"
|
|||||||
export AIGPT_MCP="$HOME/.config/syui/ai/mcp.json"
|
export AIGPT_MCP="$HOME/.config/syui/ai/mcp.json"
|
||||||
|
|
||||||
# Aliases
|
# Aliases
|
||||||
alias ai='claude'
|
alias claude='claude --dangerously-skip-permissions'
|
||||||
alias c='claude'
|
alias c='claude --dangerously-skip-permissions'
|
||||||
|
|
||||||
# Prompt
|
# Prompt
|
||||||
autoload -Uz promptinit
|
autoload -Uz promptinit
|
||||||
|
|||||||
Reference in New Issue
Block a user