Add mobile installer script — Termux + proot-distro
This commit is contained in:
parent
dfbcced433
commit
6a4b0acddb
308
install-alfred-mobile.sh
Normal file
308
install-alfred-mobile.sh
Normal file
@ -0,0 +1,308 @@
|
|||||||
|
#!/data/data/com.termux/files/usr/bin/bash
|
||||||
|
# ═══════════════════════════════════════════════════════════════════
|
||||||
|
# Alfred Linux Mobile Installer
|
||||||
|
# Version: 1.0.0 — April 6, 2026
|
||||||
|
# Compatible: Samsung Galaxy S26 Ultra, Pixel, any Android 12+
|
||||||
|
# Method: Termux + proot-distro (NO ROOT REQUIRED)
|
||||||
|
# ═══════════════════════════════════════════════════════════════════
|
||||||
|
#
|
||||||
|
# PREREQUISITES:
|
||||||
|
# 1. Install Termux from F-Droid (NOT Google Play — that version is outdated)
|
||||||
|
# https://f-droid.org/en/packages/com.termux/
|
||||||
|
# 2. Open Termux and run:
|
||||||
|
# curl -fsSL https://alfredlinux.com/downloads/install-alfred-mobile.sh | bash
|
||||||
|
#
|
||||||
|
# WHAT THIS DOES:
|
||||||
|
# - Installs proot-distro in Termux
|
||||||
|
# - Creates a Debian Bookworm environment (same base as Alfred Linux desktop)
|
||||||
|
# - Installs Alfred IDE (code-server) accessible via browser
|
||||||
|
# - Installs Alfred Voice (Kokoro TTS)
|
||||||
|
# - Installs Alfred Search (Meilisearch)
|
||||||
|
# - Creates 'alfred' launcher command
|
||||||
|
#
|
||||||
|
# STORAGE: ~4 GB after full install
|
||||||
|
# ═══════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Colors
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
AMBER='\033[0;33m'
|
||||||
|
CYAN='\033[0;36m'
|
||||||
|
BOLD='\033[1m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
banner() {
|
||||||
|
echo ""
|
||||||
|
echo -e "${AMBER}${BOLD}"
|
||||||
|
echo " ╔═══════════════════════════════════════╗"
|
||||||
|
echo " ║ ALFRED LINUX MOBILE ║"
|
||||||
|
echo " ║ The AI-Native OS — Everywhere ║"
|
||||||
|
echo " ╚═══════════════════════════════════════╝"
|
||||||
|
echo -e "${NC}"
|
||||||
|
echo -e " ${CYAN}Version 1.0.0 · April 2026 · Debian Bookworm${NC}"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
step() {
|
||||||
|
echo -e "\n${GREEN}${BOLD}[$(date +%H:%M:%S)] ▸ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
warn() {
|
||||||
|
echo -e "${AMBER} ⚠ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
fail() {
|
||||||
|
echo -e "${RED}${BOLD} ✗ $1${NC}"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
ok() {
|
||||||
|
echo -e "${GREEN} ✓ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ── Preflight ──────────────────────────────────────────────────────
|
||||||
|
banner
|
||||||
|
|
||||||
|
# Verify we're in Termux
|
||||||
|
if [[ ! -d /data/data/com.termux ]]; then
|
||||||
|
fail "This script must be run inside Termux on Android."
|
||||||
|
fi
|
||||||
|
|
||||||
|
step "Checking Android environment..."
|
||||||
|
ARCH=$(uname -m)
|
||||||
|
echo " Architecture: $ARCH"
|
||||||
|
echo " Android API: $(getprop ro.build.version.sdk 2>/dev/null || echo 'unknown')"
|
||||||
|
echo " Device: $(getprop ro.product.model 2>/dev/null || echo 'unknown')"
|
||||||
|
echo " Storage free: $(df -h /data | tail -1 | awk '{print $4}')"
|
||||||
|
|
||||||
|
if [[ "$ARCH" != "aarch64" && "$ARCH" != "arm64" && "$ARCH" != "x86_64" ]]; then
|
||||||
|
fail "Unsupported architecture: $ARCH. Need arm64 or x86_64."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check available storage (need at least 4GB)
|
||||||
|
FREE_MB=$(df -m /data | tail -1 | awk '{print $4}')
|
||||||
|
if [[ "$FREE_MB" -lt 3000 ]]; then
|
||||||
|
warn "Low storage: ${FREE_MB}MB free. Alfred needs ~4GB. Continuing anyway..."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ── Phase 1: Update Termux ────────────────────────────────────────
|
||||||
|
step "Updating Termux packages..."
|
||||||
|
pkg update -y 2>&1 | tail -3
|
||||||
|
pkg upgrade -y 2>&1 | tail -3
|
||||||
|
ok "Termux updated"
|
||||||
|
|
||||||
|
# ── Phase 2: Install proot-distro ─────────────────────────────────
|
||||||
|
step "Installing proot-distro..."
|
||||||
|
pkg install -y proot-distro pulseaudio 2>&1 | tail -3
|
||||||
|
ok "proot-distro installed"
|
||||||
|
|
||||||
|
# ── Phase 3: Install Debian Bookworm ──────────────────────────────
|
||||||
|
step "Installing Debian Bookworm (Alfred Linux base)..."
|
||||||
|
if proot-distro list | grep -q "debian.*installed"; then
|
||||||
|
warn "Debian already installed — using existing installation"
|
||||||
|
else
|
||||||
|
proot-distro install debian 2>&1 | tail -5
|
||||||
|
fi
|
||||||
|
ok "Debian Bookworm ready"
|
||||||
|
|
||||||
|
# ── Phase 4: Alfred Layer Installation ────────────────────────────
|
||||||
|
step "Installing Alfred Linux components inside Debian..."
|
||||||
|
|
||||||
|
proot-distro login debian -- bash -c '
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "[Alfred] Updating base system..."
|
||||||
|
apt-get update -qq
|
||||||
|
apt-get upgrade -y -qq
|
||||||
|
|
||||||
|
echo "[Alfred] Installing core packages..."
|
||||||
|
apt-get install -y -qq \
|
||||||
|
curl wget git sudo nano htop neofetch \
|
||||||
|
python3 python3-pip python3-venv \
|
||||||
|
nodejs npm \
|
||||||
|
build-essential \
|
||||||
|
ca-certificates \
|
||||||
|
locales \
|
||||||
|
2>&1 | tail -5
|
||||||
|
|
||||||
|
# Set locale
|
||||||
|
sed -i "s/# en_US.UTF-8/en_US.UTF-8/" /etc/locale.gen
|
||||||
|
locale-gen en_US.UTF-8 2>/dev/null || true
|
||||||
|
|
||||||
|
# ── Alfred IDE (code-server) ──
|
||||||
|
echo "[Alfred] Installing Alfred IDE (code-server)..."
|
||||||
|
if ! command -v code-server &>/dev/null; then
|
||||||
|
curl -fsSL https://code-server.dev/install.sh | sh -s -- --method=standalone 2>&1 | tail -3
|
||||||
|
fi
|
||||||
|
echo "[Alfred IDE] Installed: $(code-server --version 2>/dev/null | head -1)"
|
||||||
|
|
||||||
|
# Configure code-server for mobile
|
||||||
|
mkdir -p ~/.config/code-server
|
||||||
|
cat > ~/.config/code-server/config.yaml << IDECONF
|
||||||
|
bind-addr: 0.0.0.0:8080
|
||||||
|
auth: none
|
||||||
|
cert: false
|
||||||
|
app-name: Alfred IDE Mobile
|
||||||
|
IDECONF
|
||||||
|
|
||||||
|
# ── Alfred Search (Meilisearch) ──
|
||||||
|
echo "[Alfred] Installing Alfred Search (Meilisearch)..."
|
||||||
|
if ! command -v meilisearch &>/dev/null; then
|
||||||
|
curl -fsSL https://install.meilisearch.com | sh 2>&1 | tail -3
|
||||||
|
mv ./meilisearch /usr/local/bin/ 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ── Alfred Voice (Kokoro TTS) ──
|
||||||
|
echo "[Alfred] Installing Alfred Voice (Kokoro TTS)..."
|
||||||
|
python3 -m venv /opt/alfred-voice 2>/dev/null || true
|
||||||
|
/opt/alfred-voice/bin/pip install --quiet kokoro 2>&1 | tail -3 || echo "[Alfred Voice] Note: Full voice engine requires more resources. Basic install done."
|
||||||
|
|
||||||
|
# ── Alfred Branding ──
|
||||||
|
echo "[Alfred] Applying Alfred Linux branding..."
|
||||||
|
mkdir -p /etc/alfred
|
||||||
|
|
||||||
|
cat > /etc/alfred/release << RELEASE
|
||||||
|
ALFRED_LINUX_VERSION="2.0-mobile"
|
||||||
|
ALFRED_LINUX_CODENAME="Sovereign"
|
||||||
|
ALFRED_LINUX_BUILD="rc3-mobile"
|
||||||
|
ALFRED_LINUX_DATE="2026-04-06"
|
||||||
|
ALFRED_LINUX_BASE="Debian Bookworm"
|
||||||
|
ALFRED_LINUX_EDITION="Mobile"
|
||||||
|
RELEASE
|
||||||
|
|
||||||
|
# Custom MOTD
|
||||||
|
cat > /etc/motd << MOTD
|
||||||
|
|
||||||
|
╔═══════════════════════════════════════╗
|
||||||
|
║ ALFRED LINUX 2.0 — MOBILE ║
|
||||||
|
║ The AI-Native OS — In Your Pocket ║
|
||||||
|
╚═══════════════════════════════════════╝
|
||||||
|
|
||||||
|
Alfred IDE: code-server (port 8080)
|
||||||
|
Alfred Search: meilisearch (port 7700)
|
||||||
|
Alfred Voice: kokoro-tts
|
||||||
|
|
||||||
|
Commands:
|
||||||
|
alfred-ide → Launch Alfred IDE in browser
|
||||||
|
alfred-search → Start Meilisearch
|
||||||
|
alfred-info → System info
|
||||||
|
|
||||||
|
MOTD
|
||||||
|
|
||||||
|
# ── Custom neofetch config ──
|
||||||
|
mkdir -p ~/.config/neofetch
|
||||||
|
cat > ~/.config/neofetch/config.conf << NEOFETCH
|
||||||
|
print_info() {
|
||||||
|
info title
|
||||||
|
info underline
|
||||||
|
info "OS" distro
|
||||||
|
info "Host" model
|
||||||
|
info "Kernel" kernel
|
||||||
|
info "Shell" shell
|
||||||
|
info "Packages" packages
|
||||||
|
info "Memory" memory
|
||||||
|
info "Disk" disk
|
||||||
|
info "Alfred" local_ip
|
||||||
|
}
|
||||||
|
NEOFETCH
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "[Alfred] ✓ All components installed successfully!"
|
||||||
|
echo ""
|
||||||
|
'
|
||||||
|
|
||||||
|
ok "Alfred Linux components installed in Debian"
|
||||||
|
|
||||||
|
# ── Phase 5: Create Launcher Commands ─────────────────────────────
|
||||||
|
step "Creating launcher commands..."
|
||||||
|
|
||||||
|
# Main alfred command
|
||||||
|
cat > "$PREFIX/bin/alfred" << 'LAUNCHER'
|
||||||
|
#!/data/data/com.termux/files/usr/bin/bash
|
||||||
|
echo ""
|
||||||
|
echo " ╔═══════════════════════════════════════╗"
|
||||||
|
echo " ║ ALFRED LINUX 2.0 — MOBILE ║"
|
||||||
|
echo " ╚═══════════════════════════════════════╝"
|
||||||
|
echo ""
|
||||||
|
proot-distro login debian
|
||||||
|
LAUNCHER
|
||||||
|
chmod +x "$PREFIX/bin/alfred"
|
||||||
|
|
||||||
|
# Alfred IDE launcher
|
||||||
|
cat > "$PREFIX/bin/alfred-ide" << 'IDELAUNCHER'
|
||||||
|
#!/data/data/com.termux/files/usr/bin/bash
|
||||||
|
echo ""
|
||||||
|
echo " Starting Alfred IDE on port 8080..."
|
||||||
|
echo " Open your browser to: http://localhost:8080"
|
||||||
|
echo ""
|
||||||
|
proot-distro login debian -- bash -c 'code-server --bind-addr 0.0.0.0:8080 2>&1' &
|
||||||
|
sleep 2
|
||||||
|
am start -a android.intent.action.VIEW -d "http://localhost:8080" 2>/dev/null || echo " Open http://localhost:8080 in your browser"
|
||||||
|
echo ""
|
||||||
|
echo " Alfred IDE is running. Press Ctrl+C to stop."
|
||||||
|
wait
|
||||||
|
IDELAUNCHER
|
||||||
|
chmod +x "$PREFIX/bin/alfred-ide"
|
||||||
|
|
||||||
|
# Alfred info command
|
||||||
|
cat > "$PREFIX/bin/alfred-info" << 'INFOLAUNCHER'
|
||||||
|
#!/data/data/com.termux/files/usr/bin/bash
|
||||||
|
proot-distro login debian -- bash -c '
|
||||||
|
cat /etc/alfred/release 2>/dev/null
|
||||||
|
echo ""
|
||||||
|
echo "Device: $(uname -m)"
|
||||||
|
echo "Kernel: $(uname -r)"
|
||||||
|
echo "Debian: $(cat /etc/debian_version)"
|
||||||
|
echo ""
|
||||||
|
echo "Installed Components:"
|
||||||
|
command -v code-server &>/dev/null && echo " ✓ Alfred IDE (code-server $(code-server --version 2>/dev/null | head -1))"
|
||||||
|
command -v meilisearch &>/dev/null && echo " ✓ Alfred Search (Meilisearch)"
|
||||||
|
[[ -d /opt/alfred-voice ]] && echo " ✓ Alfred Voice (Kokoro TTS)"
|
||||||
|
echo ""
|
||||||
|
'
|
||||||
|
INFOLAUNCHER
|
||||||
|
chmod +x "$PREFIX/bin/alfred-info"
|
||||||
|
|
||||||
|
ok "Launcher commands created"
|
||||||
|
|
||||||
|
# ── Phase 6: Termux Shortcuts (optional) ──────────────────────────
|
||||||
|
step "Creating Termux widget shortcuts..."
|
||||||
|
mkdir -p ~/.shortcuts
|
||||||
|
echo '#!/data/data/com.termux/files/usr/bin/bash
|
||||||
|
alfred-ide' > ~/.shortcuts/Alfred-IDE
|
||||||
|
chmod +x ~/.shortcuts/Alfred-IDE
|
||||||
|
|
||||||
|
echo '#!/data/data/com.termux/files/usr/bin/bash
|
||||||
|
alfred' > ~/.shortcuts/Alfred-Shell
|
||||||
|
chmod +x ~/.shortcuts/Alfred-Shell
|
||||||
|
|
||||||
|
ok "Shortcuts created (install Termux:Widget for home screen access)"
|
||||||
|
|
||||||
|
# ── Done ──────────────────────────────────────────────────────────
|
||||||
|
echo ""
|
||||||
|
echo -e "${GREEN}${BOLD}"
|
||||||
|
echo " ╔═══════════════════════════════════════╗"
|
||||||
|
echo " ║ INSTALLATION COMPLETE! ✓ ║"
|
||||||
|
echo " ╚═══════════════════════════════════════╝"
|
||||||
|
echo -e "${NC}"
|
||||||
|
echo -e " ${BOLD}Quick Start:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e " ${CYAN}alfred${NC} → Enter Alfred Linux shell"
|
||||||
|
echo -e " ${CYAN}alfred-ide${NC} → Launch Alfred IDE in browser"
|
||||||
|
echo -e " ${CYAN}alfred-info${NC} → Show system info"
|
||||||
|
echo ""
|
||||||
|
echo -e " ${BOLD}Samsung DeX:${NC}"
|
||||||
|
echo -e " Connect to monitor/TV, launch alfred-ide,"
|
||||||
|
echo -e " and you have a full desktop IDE experience."
|
||||||
|
echo ""
|
||||||
|
echo -e " ${BOLD}What you have:${NC}"
|
||||||
|
echo -e " • Full Debian Bookworm Linux environment"
|
||||||
|
echo -e " • Alfred IDE (VS Code in browser)"
|
||||||
|
echo -e " • Alfred Search (Meilisearch)"
|
||||||
|
echo -e " • Alfred Voice (Kokoro TTS)"
|
||||||
|
echo -e " • Python 3, Node.js, Git, and build tools"
|
||||||
|
echo ""
|
||||||
|
echo -e " ${AMBER}Alfred Linux 2.0 Mobile — Your phone is now a sovereign computer.${NC}"
|
||||||
|
echo ""
|
||||||
Loading…
Reference in New Issue
Block a user