chore(installer): replace bash orchestrator with Go binary downloader
install.sh is now a lean curl-to-binary bootstrap: fetches the archup binary from GitHub Releases, verifies the sha256 checksum, and execs `archup install`. Supports --dev and --version flags. Remove install-bin.sh and install-bin-dev.sh (now redundant). Update .goreleaser.yaml to drop install.sh from release archives and fix install URLs in the release footer. Update Makefile check targets to match the actual scripts on disk. Fix SC2012 shellcheck warning in blesh.sh. Rewrite README with an opinionated-installer pitch.
- commit
- d3d16e694eb1e0afd1d312e03079f11fa860d3c5
- author
- brice · · 2026-03-03 03:25 UTC
- parent
- 9a253ed
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
7 files · +143 -463
M .goreleaser.yaml +3 -22
| @@ -46,8 +46,6 @@ archives: | |||
| 46 | 46 | - LICENSE | |
| 47 | 47 | - README.md | |
| 48 | 48 | - CHANGELOG.md | |
| 49 | - | - logo.txt | |
| 50 | - | - install.sh | |
| 51 | 49 | - install/**/* | |
| 52 | 50 | ||
| 53 | 51 | checksum: | |
| @@ -118,34 +116,17 @@ release: | |||
| 118 | 116 | ||
| 119 | 117 | ### Quick Install (from Arch Linux ISO) | |
| 120 | 118 | ```bash | |
| 121 | - | curl -fsSL https://archup.run/install/bin | bash | |
| 119 | + | curl -fsSL https://archup.run/install | bash | |
| 122 | 120 | ``` | |
| 123 | 121 | ||
| 124 | 122 | ### Install Pre-release/Dev Version | |
| 125 | 123 | ```bash | |
| 126 | - | curl -fsSL https://archup.run/install/bin/dev | bash | |
| 124 | + | curl -fsSL https://archup.run/install | bash -s -- --dev | |
| 127 | 125 | ``` | |
| 128 | 126 | ||
| 129 | 127 | ### Install Specific Version | |
| 130 | 128 | ```bash | |
| 131 | - | # Download and run specific version | |
| 132 | - | curl -fsSL https://github.com/bnema/archup/releases/download/{{.Tag}}/archup -o /tmp/archup | |
| 133 | - | chmod +x /tmp/archup | |
| 134 | - | /tmp/archup install | |
| 135 | - | ``` | |
| 136 | - | ||
| 137 | - | ### Manual Install | |
| 138 | - | ```bash | |
| 139 | - | # Download binary | |
| 140 | - | wget https://github.com/bnema/archup/releases/download/{{.Tag}}/archup | |
| 141 | - | ||
| 142 | - | # Verify checksum | |
| 143 | - | wget https://github.com/bnema/archup/releases/download/{{.Tag}}/checksums.txt | |
| 144 | - | sha256sum -c checksums.txt --ignore-missing | |
| 145 | - | ||
| 146 | - | # Install | |
| 147 | - | chmod +x archup | |
| 148 | - | sudo install -m 755 archup /usr/local/bin/ | |
| 129 | + | curl -fsSL https://archup.run/install | bash -s -- --version {{.Tag}} | |
| 149 | 130 | ``` | |
| 150 | 131 | ||
| 151 | 132 | --- | |
| @@ -46,8 +46,6 @@ archives: | |||||
| 46 | - LICENSE | 46 | - LICENSE | ||
| 47 | - README.md | 47 | - README.md | ||
| 48 | - CHANGELOG.md | 48 | - CHANGELOG.md | ||
| 49 | - | - logo.txt | |||
| 50 | - | - install.sh | |||
| 51 | - install/**/* | 49 | - install/**/* | ||
| 52 | 50 | ||||
| 53 | checksum: | 51 | checksum: | ||
| @@ -118,34 +116,17 @@ release: | |||||
| 118 | 116 | ||||
| 119 | ### Quick Install (from Arch Linux ISO) | 117 | ### Quick Install (from Arch Linux ISO) | ||
| 120 | ```bash | 118 | ```bash | ||
| 121 | - | curl -fsSL https://archup.run/install/bin | bash | 119 | + | curl -fsSL https://archup.run/install | bash |
| 122 | ``` | 120 | ``` | ||
| 123 | 121 | ||||
| 124 | ### Install Pre-release/Dev Version | 122 | ### Install Pre-release/Dev Version | ||
| 125 | ```bash | 123 | ```bash | ||
| 126 | - | curl -fsSL https://archup.run/install/bin/dev | bash | 124 | + | curl -fsSL https://archup.run/install | bash -s -- --dev |
| 127 | ``` | 125 | ``` | ||
| 128 | 126 | ||||
| 129 | ### Install Specific Version | 127 | ### Install Specific Version | ||
| 130 | ```bash | 128 | ```bash | ||
| 131 | - | # Download and run specific version | 129 | + | curl -fsSL https://archup.run/install | bash -s -- --version {{.Tag}} |
| 132 | - | curl -fsSL https://github.com/bnema/archup/releases/download/{{.Tag}}/archup -o /tmp/archup | |||
| 133 | - | chmod +x /tmp/archup | |||
| 134 | - | /tmp/archup install | |||
| 135 | - | ``` | |||
| 136 | - | ||||
| 137 | - | ### Manual Install | |||
| 138 | - | ```bash | |||
| 139 | - | # Download binary | |||
| 140 | - | wget https://github.com/bnema/archup/releases/download/{{.Tag}}/archup | |||
| 141 | - | ||||
| 142 | - | # Verify checksum | |||
| 143 | - | wget https://github.com/bnema/archup/releases/download/{{.Tag}}/checksums.txt | |||
| 144 | - | sha256sum -c checksums.txt --ignore-missing | |||
| 145 | - | ||||
| 146 | - | # Install | |||
| 147 | - | chmod +x archup | |||
| 148 | - | sudo install -m 755 archup /usr/local/bin/ | |||
| 149 | ``` | 130 | ``` | ||
| 150 | 131 | ||||
| 151 | --- | 132 | --- | ||
M Makefile +2 -2
| @@ -34,7 +34,7 @@ check-syntax: | |||
| 34 | 34 | @echo "=========================================" | |
| 35 | 35 | @echo "Checking shell script syntax..." | |
| 36 | 36 | @echo "=========================================" | |
| 37 | - | @for script in install.sh install/bootstrap.sh install/helpers/*.sh install/preflight/*.sh install/partitioning/*.sh install/base/*.sh install/config/*.sh install/boot/*.sh install/repos/*.sh install/post-install/*.sh install/post-boot/*.sh; do \ | |
| 37 | + | @for script in install.sh install/mandatory/post-boot/*.sh; do \ | |
| 38 | 38 | if [ -f "$$script" ]; then \ | |
| 39 | 39 | echo "Checking: $$script"; \ | |
| 40 | 40 | bash -n "$$script" || exit 1; \ | |
| @@ -53,7 +53,7 @@ check-shellcheck: | |||
| 53 | 53 | echo "Install with: sudo pacman -S shellcheck"; \ | |
| 54 | 54 | exit 0; \ | |
| 55 | 55 | fi | |
| 56 | - | @for script in install.sh install/bootstrap.sh install/helpers/*.sh install/preflight/*.sh install/partitioning/*.sh install/base/*.sh install/config/*.sh install/boot/*.sh install/repos/*.sh install/post-install/*.sh install/post-boot/*.sh; do \ | |
| 56 | + | @for script in install.sh install/mandatory/post-boot/*.sh; do \ | |
| 57 | 57 | if [ -f "$$script" ]; then \ | |
| 58 | 58 | echo ""; \ | |
| 59 | 59 | echo "Checking: $$script"; \ | |
| @@ -34,7 +34,7 @@ check-syntax: | |||||
| 34 | @echo "=========================================" | 34 | @echo "=========================================" | ||
| 35 | @echo "Checking shell script syntax..." | 35 | @echo "Checking shell script syntax..." | ||
| 36 | @echo "=========================================" | 36 | @echo "=========================================" | ||
| 37 | - | @for script in install.sh install/bootstrap.sh install/helpers/*.sh install/preflight/*.sh install/partitioning/*.sh install/base/*.sh install/config/*.sh install/boot/*.sh install/repos/*.sh install/post-install/*.sh install/post-boot/*.sh; do \ | 37 | + | @for script in install.sh install/mandatory/post-boot/*.sh; do \ |
| 38 | if [ -f "$$script" ]; then \ | 38 | if [ -f "$$script" ]; then \ | ||
| 39 | echo "Checking: $$script"; \ | 39 | echo "Checking: $$script"; \ | ||
| 40 | bash -n "$$script" || exit 1; \ | 40 | bash -n "$$script" || exit 1; \ | ||
| @@ -53,7 +53,7 @@ check-shellcheck: | |||||
| 53 | echo "Install with: sudo pacman -S shellcheck"; \ | 53 | echo "Install with: sudo pacman -S shellcheck"; \ | ||
| 54 | exit 0; \ | 54 | exit 0; \ | ||
| 55 | fi | 55 | fi | ||
| 56 | - | @for script in install.sh install/bootstrap.sh install/helpers/*.sh install/preflight/*.sh install/partitioning/*.sh install/base/*.sh install/config/*.sh install/boot/*.sh install/repos/*.sh install/post-install/*.sh install/post-boot/*.sh; do \ | 56 | + | @for script in install.sh install/mandatory/post-boot/*.sh; do \ |
| 57 | if [ -f "$$script" ]; then \ | 57 | if [ -f "$$script" ]; then \ | ||
| 58 | echo ""; \ | 58 | echo ""; \ | ||
| 59 | echo "Checking: $$script"; \ | 59 | echo "Checking: $$script"; \ | ||
M README.md +40 -39
| @@ -4,25 +4,30 @@ | |||
| 4 | 4 | ||
| 5 | 5 | ## What Is ArchUp? | |
| 6 | 6 | ||
| 7 | - | ArchUp is a minimal Arch Linux installer for Wayland. Boot the ISO, run it, and you get a working barebone system. Hardware is detected automatically and defaults are sensible. Afterward, you can optionally add a desktop environment. | |
| 8 | - | ||
| 9 | - | **Includes:** | |
| 10 | - | - Lean system without unnecessary packages | |
| 11 | - | - Ready-to-use shell environment with modern CLI tools configured and themed | |
| 12 | - | - CPU optimization (amd_pstate/cpu governor) and automatic GPU driver detection | |
| 13 | - | - Essential libraries and packages (Qt5, GTK4, etc.) for a functional environment | |
| 14 | - | - Coherent theme applied across all supported applications | |
| 15 | - | - Full customization after installation | |
| 16 | - | ||
| 17 | - | **Does not include:** | |
| 18 | - | - KDE, GNOME, or other full desktop environments | |
| 19 | - | - Any attempt to be a standalone distro | |
| 20 | - | - Locked-in configurations | |
| 21 | - | - Bloated softwares | |
| 7 | + | ArchUp is an opinionated Arch Linux installer. It is a faster, saner alternative to `archinstall` — it makes the hard choices for you (Btrfs, Limine, Chaotic-AUR, sensible defaults) so you can go from ISO to working system in minutes. | |
| 8 | + | ||
| 9 | + | Boot the Arch ISO, run it, answer a few questions, reboot. That's it. | |
| 10 | + | ||
| 11 | + | **What it decides for you:** | |
| 12 | + | - Btrfs with `@` and `@home` subvolumes | |
| 13 | + | - Limine bootloader (UEFI only) | |
| 14 | + | - Chaotic-AUR enabled out of the box | |
| 15 | + | - Plymouth boot splash | |
| 16 | + | - Snapper for snapshot-based rollbacks | |
| 17 | + | - NetworkManager, OpenSSH, zram, firewalld | |
| 18 | + | ||
| 19 | + | **What you choose:** | |
| 20 | + | - Disk and optional LUKS2 encryption | |
| 21 | + | - Hostname, user, locale, timezone, keymap | |
| 22 | + | - Kernel (linux, linux-lts, linux-zen, linux-hardened, linux-cachyos) | |
| 23 | + | - AMD P-State mode (auto-detected per Zen generation) | |
| 24 | + | - GPU drivers (auto-detected) | |
| 25 | + | - Extra repos (CachyOS, AUR helper) | |
| 26 | + | - Dank Linux desktop on first boot (optional) | |
| 22 | 27 | ||
| 23 | 28 | ## Get Started | |
| 24 | 29 | ||
| 25 | - | **Need:** AMD/Intel 64-bit system, UEFI | |
| 30 | + | **Requirements:** x86\_64, UEFI, Secure Boot disabled | |
| 26 | 31 | ||
| 27 | 32 | Boot the Arch ISO and run: | |
| 28 | 33 | ||
| @@ -32,41 +37,37 @@ curl -fsSL https://archup.run/install | bash | |||
| 32 | 37 | ||
| 33 | 38 | Reboot when done. | |
| 34 | 39 | ||
| 35 | - | For development versions: | |
| 36 | - | ```bash | |
| 37 | - | curl -fsSL https://archup.run/install/dev | bash | |
| 38 | - | ``` | |
| 39 | - | ||
| 40 | 40 | ## What's Installed | |
| 41 | 41 | ||
| 42 | - | **Core system:** | |
| 43 | - | - btrfs filesystem, Limine bootloader, Plymouth | |
| 44 | - | - Kernel selection: linux, linux-lts, or linux-zen | |
| 42 | + | **Base system:** | |
| 43 | + | - Btrfs filesystem, Limine bootloader, Plymouth | |
| 44 | + | - Kernel of your choice + matching microcode | |
| 45 | 45 | - GPU drivers and firmware (auto-detected) | |
| 46 | - | - NetworkManager, OpenSSH, systemd-resolved | |
| 46 | + | - NetworkManager, OpenSSH, systemd-resolved, zram | |
| 47 | 47 | ||
| 48 | 48 | **CLI tools:** | |
| 49 | 49 | - Neovim, Git, sudo, man pages | |
| 50 | 50 | - Modern utilities: fzf, ripgrep, bat, eza, zoxide, starship, btop, yazi | |
| 51 | - | - Build tools: gcc, make, Go, Rust (for AUR packages) | |
| 51 | + | - Build tools: base-devel, Go, Rust (for AUR) | |
| 52 | 52 | ||
| 53 | - | **System utilities:** | |
| 54 | - | - Snapper for snapshots and rollbacks | |
| 55 | - | - Bluetooth and audio configuration | |
| 56 | - | - Firewall (ufw) and power management (TLP) | |
| 57 | - | - Shell completion and theme system | |
| 58 | - | ||
| 59 | - | Run `archup wizard` after installation to add a Wayland compositor with integrated theming. Support will expand as the community contributes. | |
| 53 | + | **First-boot setup (automatic):** | |
| 54 | + | - Snapper configured for Btrfs snapshots | |
| 55 | + | - firewalld enabled | |
| 56 | + | - SSH host keys generated | |
| 57 | + | - ble.sh and shell tooling installed | |
| 60 | 58 | ||
| 61 | 59 | ## Status | |
| 62 | 60 | ||
| 63 | - | - [x] Barebone installer (functional, testing in progress) | |
| 64 | - | - [x] CLI auto-builds on first boot | |
| 65 | - | - [ ] Desktop wizard (in progress in [archup-cli](https://github.com/bnema/archup-cli)) | |
| 61 | + | Active development — tested manually on real hardware. | |
| 62 | + | ||
| 63 | + | - [x] TUI installer (functional) | |
| 64 | + | - [x] LUKS2 encryption support | |
| 65 | + | - [x] First-boot systemd service | |
| 66 | + | - [ ] Dank Linux desktop (niri/Hyprland) — in progress | |
| 66 | 67 | ||
| 67 | - | Active development. Report bugs with logs. | |
| 68 | + | Report bugs with logs from `/var/log/archup.log`. | |
| 68 | 69 | ||
| 69 | 70 | ## Acknowledgments | |
| 70 | 71 | ||
| 71 | - | - [Omarchy](https://github.com/omakub/omakub) - modular architecture approach | |
| 72 | - | - [Charmbracelet Gum](https://github.com/charmbracelet/gum) - interactive UI toolkit | |
| 72 | + | - [Omarchy](https://github.com/omakub/omakub) — modular architecture approach | |
| 73 | + | - [Charmbracelet](https://github.com/charmbracelet) — TUI toolkit (Bubble Tea, Lipgloss, Huh) | |
| @@ -4,25 +4,30 @@ | |||||
| 4 | 4 | ||||
| 5 | ## What Is ArchUp? | 5 | ## What Is ArchUp? | ||
| 6 | 6 | ||||
| 7 | - | ArchUp is a minimal Arch Linux installer for Wayland. Boot the ISO, run it, and you get a working barebone system. Hardware is detected automatically and defaults are sensible. Afterward, you can optionally add a desktop environment. | 7 | + | ArchUp is an opinionated Arch Linux installer. It is a faster, saner alternative to `archinstall` — it makes the hard choices for you (Btrfs, Limine, Chaotic-AUR, sensible defaults) so you can go from ISO to working system in minutes. |
| 8 | - | 8 | + | ||
| 9 | - | **Includes:** | 9 | + | Boot the Arch ISO, run it, answer a few questions, reboot. That's it. |
| 10 | - | - Lean system without unnecessary packages | 10 | + | |
| 11 | - | - Ready-to-use shell environment with modern CLI tools configured and themed | 11 | + | **What it decides for you:** |
| 12 | - | - CPU optimization (amd_pstate/cpu governor) and automatic GPU driver detection | 12 | + | - Btrfs with `@` and `@home` subvolumes |
| 13 | - | - Essential libraries and packages (Qt5, GTK4, etc.) for a functional environment | 13 | + | - Limine bootloader (UEFI only) |
| 14 | - | - Coherent theme applied across all supported applications | 14 | + | - Chaotic-AUR enabled out of the box |
| 15 | - | - Full customization after installation | 15 | + | - Plymouth boot splash |
| 16 | - | 16 | + | - Snapper for snapshot-based rollbacks | |
| 17 | - | **Does not include:** | 17 | + | - NetworkManager, OpenSSH, zram, firewalld |
| 18 | - | - KDE, GNOME, or other full desktop environments | 18 | + | |
| 19 | - | - Any attempt to be a standalone distro | 19 | + | **What you choose:** |
| 20 | - | - Locked-in configurations | 20 | + | - Disk and optional LUKS2 encryption |
| 21 | - | - Bloated softwares | 21 | + | - Hostname, user, locale, timezone, keymap |
| 22 | + | - Kernel (linux, linux-lts, linux-zen, linux-hardened, linux-cachyos) | |||
| 23 | + | - AMD P-State mode (auto-detected per Zen generation) | |||
| 24 | + | - GPU drivers (auto-detected) | |||
| 25 | + | - Extra repos (CachyOS, AUR helper) | |||
| 26 | + | - Dank Linux desktop on first boot (optional) | |||
| 22 | 27 | ||||
| 23 | ## Get Started | 28 | ## Get Started | ||
| 24 | 29 | ||||
| 25 | - | **Need:** AMD/Intel 64-bit system, UEFI | 30 | + | **Requirements:** x86\_64, UEFI, Secure Boot disabled |
| 26 | 31 | ||||
| 27 | Boot the Arch ISO and run: | 32 | Boot the Arch ISO and run: | ||
| 28 | 33 | ||||
| @@ -32,41 +37,37 @@ curl -fsSL https://archup.run/install | bash | |||||
| 32 | 37 | ||||
| 33 | Reboot when done. | 38 | Reboot when done. | ||
| 34 | 39 | ||||
| 35 | - | For development versions: | |||
| 36 | - | ```bash | |||
| 37 | - | curl -fsSL https://archup.run/install/dev | bash | |||
| 38 | - | ``` | |||
| 39 | - | ||||
| 40 | ## What's Installed | 40 | ## What's Installed | ||
| 41 | 41 | ||||
| 42 | - | **Core system:** | 42 | + | **Base system:** |
| 43 | - | - btrfs filesystem, Limine bootloader, Plymouth | 43 | + | - Btrfs filesystem, Limine bootloader, Plymouth |
| 44 | - | - Kernel selection: linux, linux-lts, or linux-zen | 44 | + | - Kernel of your choice + matching microcode |
| 45 | - GPU drivers and firmware (auto-detected) | 45 | - GPU drivers and firmware (auto-detected) | ||
| 46 | - | - NetworkManager, OpenSSH, systemd-resolved | 46 | + | - NetworkManager, OpenSSH, systemd-resolved, zram |
| 47 | 47 | ||||
| 48 | **CLI tools:** | 48 | **CLI tools:** | ||
| 49 | - Neovim, Git, sudo, man pages | 49 | - Neovim, Git, sudo, man pages | ||
| 50 | - Modern utilities: fzf, ripgrep, bat, eza, zoxide, starship, btop, yazi | 50 | - Modern utilities: fzf, ripgrep, bat, eza, zoxide, starship, btop, yazi | ||
| 51 | - | - Build tools: gcc, make, Go, Rust (for AUR packages) | 51 | + | - Build tools: base-devel, Go, Rust (for AUR) |
| 52 | 52 | ||||
| 53 | - | **System utilities:** | 53 | + | **First-boot setup (automatic):** |
| 54 | - | - Snapper for snapshots and rollbacks | 54 | + | - Snapper configured for Btrfs snapshots |
| 55 | - | - Bluetooth and audio configuration | 55 | + | - firewalld enabled |
| 56 | - | - Firewall (ufw) and power management (TLP) | 56 | + | - SSH host keys generated |
| 57 | - | - Shell completion and theme system | 57 | + | - ble.sh and shell tooling installed |
| 58 | - | ||||
| 59 | - | Run `archup wizard` after installation to add a Wayland compositor with integrated theming. Support will expand as the community contributes. | |||
| 60 | 58 | ||||
| 61 | ## Status | 59 | ## Status | ||
| 62 | 60 | ||||
| 63 | - | - [x] Barebone installer (functional, testing in progress) | 61 | + | Active development — tested manually on real hardware. |
| 64 | - | - [x] CLI auto-builds on first boot | 62 | + | |
| 65 | - | - [ ] Desktop wizard (in progress in [archup-cli](https://github.com/bnema/archup-cli)) | 63 | + | - [x] TUI installer (functional) |
| 64 | + | - [x] LUKS2 encryption support | |||
| 65 | + | - [x] First-boot systemd service | |||
| 66 | + | - [ ] Dank Linux desktop (niri/Hyprland) — in progress | |||
| 66 | 67 | ||||
| 67 | - | Active development. Report bugs with logs. | 68 | + | Report bugs with logs from `/var/log/archup.log`. |
| 68 | 69 | ||||
| 69 | ## Acknowledgments | 70 | ## Acknowledgments | ||
| 70 | 71 | ||||
| 71 | - | - [Omarchy](https://github.com/omakub/omakub) - modular architecture approach | 72 | + | - [Omarchy](https://github.com/omakub/omakub) — modular architecture approach |
| 72 | - | - [Charmbracelet Gum](https://github.com/charmbracelet/gum) - interactive UI toolkit | 73 | + | - [Charmbracelet](https://github.com/charmbracelet) — TUI toolkit (Bubble Tea, Lipgloss, Huh) |
D install-bin-dev.sh +0 -131
| @@ -1,131 +0,0 @@ | |||
| 1 | - | #!/bin/bash | |
| 2 | - | # ArchUp Installer Bootstrap Script - Dev/Pre-release Version | |
| 3 | - | # Downloads and runs the latest ArchUp Go installer pre-release | |
| 4 | - | # | |
| 5 | - | # Usage: | |
| 6 | - | # curl -fsSL https://archup.run/install/bin/dev | bash | |
| 7 | - | # | |
| 8 | - | # Or locally: | |
| 9 | - | # ./install-bin-dev.sh # Install latest pre-release | |
| 10 | - | # ./install-bin-dev.sh --version v0.4.0-dev # Install specific version | |
| 11 | - | ||
| 12 | - | set -e | |
| 13 | - | ||
| 14 | - | # Default to dev mode | |
| 15 | - | DEV_MODE=true | |
| 16 | - | SPECIFIC_VERSION="" | |
| 17 | - | ||
| 18 | - | while [[ $# -gt 0 ]]; do | |
| 19 | - | case $1 in | |
| 20 | - | --version) | |
| 21 | - | SPECIFIC_VERSION="$2" | |
| 22 | - | shift 2 | |
| 23 | - | ;; | |
| 24 | - | *) | |
| 25 | - | echo "Unknown option: $1" | |
| 26 | - | echo "Usage: $0 [--version VERSION]" | |
| 27 | - | exit 1 | |
| 28 | - | ;; | |
| 29 | - | esac | |
| 30 | - | done | |
| 31 | - | ||
| 32 | - | # Colors for output | |
| 33 | - | RED='\033[0;31m' | |
| 34 | - | GREEN='\033[0;32m' | |
| 35 | - | BLUE='\033[0;34m' | |
| 36 | - | YELLOW='\033[0;33m' | |
| 37 | - | NC='\033[0m' # No Color | |
| 38 | - | ||
| 39 | - | info() { | |
| 40 | - | echo -e "${BLUE}[INFO]${NC} $1" | |
| 41 | - | } | |
| 42 | - | ||
| 43 | - | success() { | |
| 44 | - | echo -e "${GREEN}[OK]${NC} $1" | |
| 45 | - | } | |
| 46 | - | ||
| 47 | - | warning() { | |
| 48 | - | echo -e "${YELLOW}[WARN]${NC} $1" | |
| 49 | - | } | |
| 50 | - | ||
| 51 | - | error() { | |
| 52 | - | echo -e "${RED}[ERROR]${NC} $1" | |
| 53 | - | exit 1 | |
| 54 | - | } | |
| 55 | - | ||
| 56 | - | # Check if running on Arch Linux | |
| 57 | - | info "Checking system requirements..." | |
| 58 | - | if [ ! -f /etc/arch-release ]; then | |
| 59 | - | error "This installer must be run on Arch Linux ISO" | |
| 60 | - | fi | |
| 61 | - | success "Running on Arch Linux" | |
| 62 | - | ||
| 63 | - | # Check for UEFI mode | |
| 64 | - | if [ ! -d /sys/firmware/efi ]; then | |
| 65 | - | error "UEFI mode required (legacy BIOS not supported)" | |
| 66 | - | fi | |
| 67 | - | success "UEFI mode detected" | |
| 68 | - | ||
| 69 | - | # Check architecture | |
| 70 | - | ARCH=$(uname -m) | |
| 71 | - | if [ "$ARCH" != "x86_64" ]; then | |
| 72 | - | error "Only x86_64 architecture is supported (detected: $ARCH)" | |
| 73 | - | fi | |
| 74 | - | success "Architecture: $ARCH" | |
| 75 | - | ||
| 76 | - | # GitHub repository details | |
| 77 | - | REPO_OWNER="bnema" | |
| 78 | - | REPO_NAME="archup" | |
| 79 | - | BINARY_NAME="archup" | |
| 80 | - | ||
| 81 | - | # Determine which version to download | |
| 82 | - | if [ -n "$SPECIFIC_VERSION" ]; then | |
| 83 | - | # User specified a version | |
| 84 | - | LATEST_TAG="$SPECIFIC_VERSION" | |
| 85 | - | info "Using specific version: $LATEST_TAG" | |
| 86 | - | else | |
| 87 | - | # Get latest pre-release (including dev/rc builds) | |
| 88 | - | warning "Dev mode: fetching latest pre-release..." | |
| 89 | - | RELEASES_URL="https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases" | |
| 90 | - | # Filter for releases where "prerelease": true, then get the first tag_name | |
| 91 | - | LATEST_TAG=$(curl -s "$RELEASES_URL" | grep -B 10 '"prerelease": true' | grep '"tag_name":' | head -n 1 | sed -E 's/.*"([^"]+)".*/\1/') | |
| 92 | - | ||
| 93 | - | if [ -z "$LATEST_TAG" ]; then | |
| 94 | - | error "Failed to fetch latest pre-release" | |
| 95 | - | fi | |
| 96 | - | warning "Latest pre-release: $LATEST_TAG" | |
| 97 | - | fi | |
| 98 | - | ||
| 99 | - | # Download binary | |
| 100 | - | BINARY_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/$BINARY_NAME" | |
| 101 | - | BINARY_PATH="/tmp/$BINARY_NAME" | |
| 102 | - | CHECKSUM_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/checksums.txt" | |
| 103 | - | CHECKSUM_PATH="/tmp/checksums.txt" | |
| 104 | - | ||
| 105 | - | info "Downloading installer binary..." | |
| 106 | - | if ! curl -fsSL "$BINARY_URL" -o "$BINARY_PATH"; then | |
| 107 | - | error "Failed to download installer binary from $BINARY_URL" | |
| 108 | - | fi | |
| 109 | - | success "Binary downloaded" | |
| 110 | - | ||
| 111 | - | # Download and verify checksum | |
| 112 | - | info "Downloading checksums..." | |
| 113 | - | if ! curl -fsSL "$CHECKSUM_URL" -o "$CHECKSUM_PATH"; then | |
| 114 | - | error "Failed to download checksums from $CHECKSUM_URL" | |
| 115 | - | fi | |
| 116 | - | success "Checksums downloaded" | |
| 117 | - | ||
| 118 | - | info "Verifying checksum..." | |
| 119 | - | cd /tmp | |
| 120 | - | if ! sha256sum -c "$CHECKSUM_PATH" --ignore-missing 2>/dev/null; then | |
| 121 | - | error "Checksum verification failed! Binary may be corrupted or tampered with." | |
| 122 | - | fi | |
| 123 | - | success "Checksum verified" | |
| 124 | - | ||
| 125 | - | # Make executable | |
| 126 | - | chmod +x "$BINARY_PATH" | |
| 127 | - | ||
| 128 | - | # Run installer | |
| 129 | - | info "Launching ArchUp installer..." | |
| 130 | - | echo "" | |
| 131 | - | exec "$BINARY_PATH" install | |
| @@ -1,131 +0,0 @@ | |||||
| 1 | - | #!/bin/bash | |||
| 2 | - | # ArchUp Installer Bootstrap Script - Dev/Pre-release Version | |||
| 3 | - | # Downloads and runs the latest ArchUp Go installer pre-release | |||
| 4 | - | # | |||
| 5 | - | # Usage: | |||
| 6 | - | # curl -fsSL https://archup.run/install/bin/dev | bash | |||
| 7 | - | # | |||
| 8 | - | # Or locally: | |||
| 9 | - | # ./install-bin-dev.sh # Install latest pre-release | |||
| 10 | - | # ./install-bin-dev.sh --version v0.4.0-dev # Install specific version | |||
| 11 | - | ||||
| 12 | - | set -e | |||
| 13 | - | ||||
| 14 | - | # Default to dev mode | |||
| 15 | - | DEV_MODE=true | |||
| 16 | - | SPECIFIC_VERSION="" | |||
| 17 | - | ||||
| 18 | - | while [[ $# -gt 0 ]]; do | |||
| 19 | - | case $1 in | |||
| 20 | - | --version) | |||
| 21 | - | SPECIFIC_VERSION="$2" | |||
| 22 | - | shift 2 | |||
| 23 | - | ;; | |||
| 24 | - | *) | |||
| 25 | - | echo "Unknown option: $1" | |||
| 26 | - | echo "Usage: $0 [--version VERSION]" | |||
| 27 | - | exit 1 | |||
| 28 | - | ;; | |||
| 29 | - | esac | |||
| 30 | - | done | |||
| 31 | - | ||||
| 32 | - | # Colors for output | |||
| 33 | - | RED='\033[0;31m' | |||
| 34 | - | GREEN='\033[0;32m' | |||
| 35 | - | BLUE='\033[0;34m' | |||
| 36 | - | YELLOW='\033[0;33m' | |||
| 37 | - | NC='\033[0m' # No Color | |||
| 38 | - | ||||
| 39 | - | info() { | |||
| 40 | - | echo -e "${BLUE}[INFO]${NC} $1" | |||
| 41 | - | } | |||
| 42 | - | ||||
| 43 | - | success() { | |||
| 44 | - | echo -e "${GREEN}[OK]${NC} $1" | |||
| 45 | - | } | |||
| 46 | - | ||||
| 47 | - | warning() { | |||
| 48 | - | echo -e "${YELLOW}[WARN]${NC} $1" | |||
| 49 | - | } | |||
| 50 | - | ||||
| 51 | - | error() { | |||
| 52 | - | echo -e "${RED}[ERROR]${NC} $1" | |||
| 53 | - | exit 1 | |||
| 54 | - | } | |||
| 55 | - | ||||
| 56 | - | # Check if running on Arch Linux | |||
| 57 | - | info "Checking system requirements..." | |||
| 58 | - | if [ ! -f /etc/arch-release ]; then | |||
| 59 | - | error "This installer must be run on Arch Linux ISO" | |||
| 60 | - | fi | |||
| 61 | - | success "Running on Arch Linux" | |||
| 62 | - | ||||
| 63 | - | # Check for UEFI mode | |||
| 64 | - | if [ ! -d /sys/firmware/efi ]; then | |||
| 65 | - | error "UEFI mode required (legacy BIOS not supported)" | |||
| 66 | - | fi | |||
| 67 | - | success "UEFI mode detected" | |||
| 68 | - | ||||
| 69 | - | # Check architecture | |||
| 70 | - | ARCH=$(uname -m) | |||
| 71 | - | if [ "$ARCH" != "x86_64" ]; then | |||
| 72 | - | error "Only x86_64 architecture is supported (detected: $ARCH)" | |||
| 73 | - | fi | |||
| 74 | - | success "Architecture: $ARCH" | |||
| 75 | - | ||||
| 76 | - | # GitHub repository details | |||
| 77 | - | REPO_OWNER="bnema" | |||
| 78 | - | REPO_NAME="archup" | |||
| 79 | - | BINARY_NAME="archup" | |||
| 80 | - | ||||
| 81 | - | # Determine which version to download | |||
| 82 | - | if [ -n "$SPECIFIC_VERSION" ]; then | |||
| 83 | - | # User specified a version | |||
| 84 | - | LATEST_TAG="$SPECIFIC_VERSION" | |||
| 85 | - | info "Using specific version: $LATEST_TAG" | |||
| 86 | - | else | |||
| 87 | - | # Get latest pre-release (including dev/rc builds) | |||
| 88 | - | warning "Dev mode: fetching latest pre-release..." | |||
| 89 | - | RELEASES_URL="https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases" | |||
| 90 | - | # Filter for releases where "prerelease": true, then get the first tag_name | |||
| 91 | - | LATEST_TAG=$(curl -s "$RELEASES_URL" | grep -B 10 '"prerelease": true' | grep '"tag_name":' | head -n 1 | sed -E 's/.*"([^"]+)".*/\1/') | |||
| 92 | - | ||||
| 93 | - | if [ -z "$LATEST_TAG" ]; then | |||
| 94 | - | error "Failed to fetch latest pre-release" | |||
| 95 | - | fi | |||
| 96 | - | warning "Latest pre-release: $LATEST_TAG" | |||
| 97 | - | fi | |||
| 98 | - | ||||
| 99 | - | # Download binary | |||
| 100 | - | BINARY_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/$BINARY_NAME" | |||
| 101 | - | BINARY_PATH="/tmp/$BINARY_NAME" | |||
| 102 | - | CHECKSUM_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/checksums.txt" | |||
| 103 | - | CHECKSUM_PATH="/tmp/checksums.txt" | |||
| 104 | - | ||||
| 105 | - | info "Downloading installer binary..." | |||
| 106 | - | if ! curl -fsSL "$BINARY_URL" -o "$BINARY_PATH"; then | |||
| 107 | - | error "Failed to download installer binary from $BINARY_URL" | |||
| 108 | - | fi | |||
| 109 | - | success "Binary downloaded" | |||
| 110 | - | ||||
| 111 | - | # Download and verify checksum | |||
| 112 | - | info "Downloading checksums..." | |||
| 113 | - | if ! curl -fsSL "$CHECKSUM_URL" -o "$CHECKSUM_PATH"; then | |||
| 114 | - | error "Failed to download checksums from $CHECKSUM_URL" | |||
| 115 | - | fi | |||
| 116 | - | success "Checksums downloaded" | |||
| 117 | - | ||||
| 118 | - | info "Verifying checksum..." | |||
| 119 | - | cd /tmp | |||
| 120 | - | if ! sha256sum -c "$CHECKSUM_PATH" --ignore-missing 2>/dev/null; then | |||
| 121 | - | error "Checksum verification failed! Binary may be corrupted or tampered with." | |||
| 122 | - | fi | |||
| 123 | - | success "Checksum verified" | |||
| 124 | - | ||||
| 125 | - | # Make executable | |||
| 126 | - | chmod +x "$BINARY_PATH" | |||
| 127 | - | ||||
| 128 | - | # Run installer | |||
| 129 | - | info "Launching ArchUp installer..." | |||
| 130 | - | echo "" | |||
| 131 | - | exec "$BINARY_PATH" install | |||
D install-bin.sh +0 -148
| @@ -1,148 +0,0 @@ | |||
| 1 | - | #!/bin/bash | |
| 2 | - | # ArchUp Installer Bootstrap Script | |
| 3 | - | # Downloads and runs the ArchUp Go installer | |
| 4 | - | # | |
| 5 | - | # Usage: | |
| 6 | - | # curl -fsSL https://archup.run/install/bin | bash | |
| 7 | - | # curl -fsSL https://archup.run/install/bin | bash -s -- --dev | |
| 8 | - | # curl -fsSL https://archup.run/install/bin | bash -s -- --version v0.15.3-dev | |
| 9 | - | # | |
| 10 | - | # Or locally: | |
| 11 | - | # ./install-bin.sh # Install latest stable release | |
| 12 | - | # ./install-bin.sh --dev # Install latest pre-release (dev/rc builds) | |
| 13 | - | # ./install-bin.sh --version v0.15.3-dev # Install specific version | |
| 14 | - | ||
| 15 | - | set -e | |
| 16 | - | ||
| 17 | - | # Parse arguments | |
| 18 | - | DEV_MODE=false | |
| 19 | - | SPECIFIC_VERSION="" | |
| 20 | - | ||
| 21 | - | while [[ $# -gt 0 ]]; do | |
| 22 | - | case $1 in | |
| 23 | - | --dev) | |
| 24 | - | DEV_MODE=true | |
| 25 | - | shift | |
| 26 | - | ;; | |
| 27 | - | --version) | |
| 28 | - | SPECIFIC_VERSION="$2" | |
| 29 | - | shift 2 | |
| 30 | - | ;; | |
| 31 | - | *) | |
| 32 | - | echo "Unknown option: $1" | |
| 33 | - | echo "Usage: $0 [--dev] [--version VERSION]" | |
| 34 | - | exit 1 | |
| 35 | - | ;; | |
| 36 | - | esac | |
| 37 | - | done | |
| 38 | - | ||
| 39 | - | # Colors for output | |
| 40 | - | RED='\033[0;31m' | |
| 41 | - | GREEN='\033[0;32m' | |
| 42 | - | BLUE='\033[0;34m' | |
| 43 | - | YELLOW='\033[0;33m' | |
| 44 | - | NC='\033[0m' # No Color | |
| 45 | - | ||
| 46 | - | info() { | |
| 47 | - | echo -e "${BLUE}[INFO]${NC} $1" | |
| 48 | - | } | |
| 49 | - | ||
| 50 | - | success() { | |
| 51 | - | echo -e "${GREEN}[OK]${NC} $1" | |
| 52 | - | } | |
| 53 | - | ||
| 54 | - | warning() { | |
| 55 | - | echo -e "${YELLOW}[WARN]${NC} $1" | |
| 56 | - | } | |
| 57 | - | ||
| 58 | - | error() { | |
| 59 | - | echo -e "${RED}[ERROR]${NC} $1" | |
| 60 | - | exit 1 | |
| 61 | - | } | |
| 62 | - | ||
| 63 | - | # Check if running on Arch Linux | |
| 64 | - | info "Checking system requirements..." | |
| 65 | - | if [ ! -f /etc/arch-release ]; then | |
| 66 | - | error "This installer must be run on Arch Linux ISO" | |
| 67 | - | fi | |
| 68 | - | success "Running on Arch Linux" | |
| 69 | - | ||
| 70 | - | # Check for UEFI mode | |
| 71 | - | if [ ! -d /sys/firmware/efi ]; then | |
| 72 | - | error "UEFI mode required (legacy BIOS not supported)" | |
| 73 | - | fi | |
| 74 | - | success "UEFI mode detected" | |
| 75 | - | ||
| 76 | - | # Check architecture | |
| 77 | - | ARCH=$(uname -m) | |
| 78 | - | if [ "$ARCH" != "x86_64" ]; then | |
| 79 | - | error "Only x86_64 architecture is supported (detected: $ARCH)" | |
| 80 | - | fi | |
| 81 | - | success "Architecture: $ARCH" | |
| 82 | - | ||
| 83 | - | # GitHub repository details | |
| 84 | - | REPO_OWNER="bnema" | |
| 85 | - | REPO_NAME="archup" | |
| 86 | - | BINARY_NAME="archup" | |
| 87 | - | ||
| 88 | - | # Determine which version to download | |
| 89 | - | if [ -n "$SPECIFIC_VERSION" ]; then | |
| 90 | - | # User specified a version | |
| 91 | - | LATEST_TAG="$SPECIFIC_VERSION" | |
| 92 | - | info "Using specific version: $LATEST_TAG" | |
| 93 | - | elif [ "$DEV_MODE" = true ]; then | |
| 94 | - | # Get latest pre-release (including dev/rc builds) | |
| 95 | - | warning "Dev mode: fetching latest pre-release..." | |
| 96 | - | RELEASES_URL="https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases" | |
| 97 | - | # Filter for releases where "prerelease": true, then get the first tag_name | |
| 98 | - | LATEST_TAG=$(curl -s "$RELEASES_URL" | grep -B 10 '"prerelease": true' | grep '"tag_name":' | head -n 1 | sed -E 's/.*"([^"]+)".*/\1/') | |
| 99 | - | ||
| 100 | - | if [ -z "$LATEST_TAG" ]; then | |
| 101 | - | error "Failed to fetch latest pre-release" | |
| 102 | - | fi | |
| 103 | - | warning "Latest pre-release: $LATEST_TAG" | |
| 104 | - | else | |
| 105 | - | # Get latest stable release | |
| 106 | - | info "Fetching latest stable release..." | |
| 107 | - | LATEST_RELEASE_URL="https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/latest" | |
| 108 | - | LATEST_TAG=$(curl -s "$LATEST_RELEASE_URL" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') | |
| 109 | - | ||
| 110 | - | if [ -z "$LATEST_TAG" ]; then | |
| 111 | - | error "Failed to fetch latest release tag" | |
| 112 | - | fi | |
| 113 | - | success "Latest version: $LATEST_TAG" | |
| 114 | - | fi | |
| 115 | - | ||
| 116 | - | # Download binary | |
| 117 | - | BINARY_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/$BINARY_NAME" | |
| 118 | - | BINARY_PATH="/tmp/$BINARY_NAME" | |
| 119 | - | CHECKSUM_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/checksums.txt" | |
| 120 | - | CHECKSUM_PATH="/tmp/checksums.txt" | |
| 121 | - | ||
| 122 | - | info "Downloading installer binary..." | |
| 123 | - | if ! curl -fsSL "$BINARY_URL" -o "$BINARY_PATH"; then | |
| 124 | - | error "Failed to download installer binary from $BINARY_URL" | |
| 125 | - | fi | |
| 126 | - | success "Binary downloaded" | |
| 127 | - | ||
| 128 | - | # Download and verify checksum | |
| 129 | - | info "Downloading checksums..." | |
| 130 | - | if ! curl -fsSL "$CHECKSUM_URL" -o "$CHECKSUM_PATH"; then | |
| 131 | - | error "Failed to download checksums from $CHECKSUM_URL" | |
| 132 | - | fi | |
| 133 | - | success "Checksums downloaded" | |
| 134 | - | ||
| 135 | - | info "Verifying checksum..." | |
| 136 | - | cd /tmp | |
| 137 | - | if ! sha256sum -c "$CHECKSUM_PATH" --ignore-missing 2>/dev/null; then | |
| 138 | - | error "Checksum verification failed! Binary may be corrupted or tampered with." | |
| 139 | - | fi | |
| 140 | - | success "Checksum verified" | |
| 141 | - | ||
| 142 | - | # Make executable | |
| 143 | - | chmod +x "$BINARY_PATH" | |
| 144 | - | ||
| 145 | - | # Run installer | |
| 146 | - | info "Launching ArchUp installer..." | |
| 147 | - | echo "" | |
| 148 | - | exec "$BINARY_PATH" install | |
| @@ -1,148 +0,0 @@ | |||||
| 1 | - | #!/bin/bash | |||
| 2 | - | # ArchUp Installer Bootstrap Script | |||
| 3 | - | # Downloads and runs the ArchUp Go installer | |||
| 4 | - | # | |||
| 5 | - | # Usage: | |||
| 6 | - | # curl -fsSL https://archup.run/install/bin | bash | |||
| 7 | - | # curl -fsSL https://archup.run/install/bin | bash -s -- --dev | |||
| 8 | - | # curl -fsSL https://archup.run/install/bin | bash -s -- --version v0.15.3-dev | |||
| 9 | - | # | |||
| 10 | - | # Or locally: | |||
| 11 | - | # ./install-bin.sh # Install latest stable release | |||
| 12 | - | # ./install-bin.sh --dev # Install latest pre-release (dev/rc builds) | |||
| 13 | - | # ./install-bin.sh --version v0.15.3-dev # Install specific version | |||
| 14 | - | ||||
| 15 | - | set -e | |||
| 16 | - | ||||
| 17 | - | # Parse arguments | |||
| 18 | - | DEV_MODE=false | |||
| 19 | - | SPECIFIC_VERSION="" | |||
| 20 | - | ||||
| 21 | - | while [[ $# -gt 0 ]]; do | |||
| 22 | - | case $1 in | |||
| 23 | - | --dev) | |||
| 24 | - | DEV_MODE=true | |||
| 25 | - | shift | |||
| 26 | - | ;; | |||
| 27 | - | --version) | |||
| 28 | - | SPECIFIC_VERSION="$2" | |||
| 29 | - | shift 2 | |||
| 30 | - | ;; | |||
| 31 | - | *) | |||
| 32 | - | echo "Unknown option: $1" | |||
| 33 | - | echo "Usage: $0 [--dev] [--version VERSION]" | |||
| 34 | - | exit 1 | |||
| 35 | - | ;; | |||
| 36 | - | esac | |||
| 37 | - | done | |||
| 38 | - | ||||
| 39 | - | # Colors for output | |||
| 40 | - | RED='\033[0;31m' | |||
| 41 | - | GREEN='\033[0;32m' | |||
| 42 | - | BLUE='\033[0;34m' | |||
| 43 | - | YELLOW='\033[0;33m' | |||
| 44 | - | NC='\033[0m' # No Color | |||
| 45 | - | ||||
| 46 | - | info() { | |||
| 47 | - | echo -e "${BLUE}[INFO]${NC} $1" | |||
| 48 | - | } | |||
| 49 | - | ||||
| 50 | - | success() { | |||
| 51 | - | echo -e "${GREEN}[OK]${NC} $1" | |||
| 52 | - | } | |||
| 53 | - | ||||
| 54 | - | warning() { | |||
| 55 | - | echo -e "${YELLOW}[WARN]${NC} $1" | |||
| 56 | - | } | |||
| 57 | - | ||||
| 58 | - | error() { | |||
| 59 | - | echo -e "${RED}[ERROR]${NC} $1" | |||
| 60 | - | exit 1 | |||
| 61 | - | } | |||
| 62 | - | ||||
| 63 | - | # Check if running on Arch Linux | |||
| 64 | - | info "Checking system requirements..." | |||
| 65 | - | if [ ! -f /etc/arch-release ]; then | |||
| 66 | - | error "This installer must be run on Arch Linux ISO" | |||
| 67 | - | fi | |||
| 68 | - | success "Running on Arch Linux" | |||
| 69 | - | ||||
| 70 | - | # Check for UEFI mode | |||
| 71 | - | if [ ! -d /sys/firmware/efi ]; then | |||
| 72 | - | error "UEFI mode required (legacy BIOS not supported)" | |||
| 73 | - | fi | |||
| 74 | - | success "UEFI mode detected" | |||
| 75 | - | ||||
| 76 | - | # Check architecture | |||
| 77 | - | ARCH=$(uname -m) | |||
| 78 | - | if [ "$ARCH" != "x86_64" ]; then | |||
| 79 | - | error "Only x86_64 architecture is supported (detected: $ARCH)" | |||
| 80 | - | fi | |||
| 81 | - | success "Architecture: $ARCH" | |||
| 82 | - | ||||
| 83 | - | # GitHub repository details | |||
| 84 | - | REPO_OWNER="bnema" | |||
| 85 | - | REPO_NAME="archup" | |||
| 86 | - | BINARY_NAME="archup" | |||
| 87 | - | ||||
| 88 | - | # Determine which version to download | |||
| 89 | - | if [ -n "$SPECIFIC_VERSION" ]; then | |||
| 90 | - | # User specified a version | |||
| 91 | - | LATEST_TAG="$SPECIFIC_VERSION" | |||
| 92 | - | info "Using specific version: $LATEST_TAG" | |||
| 93 | - | elif [ "$DEV_MODE" = true ]; then | |||
| 94 | - | # Get latest pre-release (including dev/rc builds) | |||
| 95 | - | warning "Dev mode: fetching latest pre-release..." | |||
| 96 | - | RELEASES_URL="https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases" | |||
| 97 | - | # Filter for releases where "prerelease": true, then get the first tag_name | |||
| 98 | - | LATEST_TAG=$(curl -s "$RELEASES_URL" | grep -B 10 '"prerelease": true' | grep '"tag_name":' | head -n 1 | sed -E 's/.*"([^"]+)".*/\1/') | |||
| 99 | - | ||||
| 100 | - | if [ -z "$LATEST_TAG" ]; then | |||
| 101 | - | error "Failed to fetch latest pre-release" | |||
| 102 | - | fi | |||
| 103 | - | warning "Latest pre-release: $LATEST_TAG" | |||
| 104 | - | else | |||
| 105 | - | # Get latest stable release | |||
| 106 | - | info "Fetching latest stable release..." | |||
| 107 | - | LATEST_RELEASE_URL="https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/latest" | |||
| 108 | - | LATEST_TAG=$(curl -s "$LATEST_RELEASE_URL" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') | |||
| 109 | - | ||||
| 110 | - | if [ -z "$LATEST_TAG" ]; then | |||
| 111 | - | error "Failed to fetch latest release tag" | |||
| 112 | - | fi | |||
| 113 | - | success "Latest version: $LATEST_TAG" | |||
| 114 | - | fi | |||
| 115 | - | ||||
| 116 | - | # Download binary | |||
| 117 | - | BINARY_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/$BINARY_NAME" | |||
| 118 | - | BINARY_PATH="/tmp/$BINARY_NAME" | |||
| 119 | - | CHECKSUM_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/checksums.txt" | |||
| 120 | - | CHECKSUM_PATH="/tmp/checksums.txt" | |||
| 121 | - | ||||
| 122 | - | info "Downloading installer binary..." | |||
| 123 | - | if ! curl -fsSL "$BINARY_URL" -o "$BINARY_PATH"; then | |||
| 124 | - | error "Failed to download installer binary from $BINARY_URL" | |||
| 125 | - | fi | |||
| 126 | - | success "Binary downloaded" | |||
| 127 | - | ||||
| 128 | - | # Download and verify checksum | |||
| 129 | - | info "Downloading checksums..." | |||
| 130 | - | if ! curl -fsSL "$CHECKSUM_URL" -o "$CHECKSUM_PATH"; then | |||
| 131 | - | error "Failed to download checksums from $CHECKSUM_URL" | |||
| 132 | - | fi | |||
| 133 | - | success "Checksums downloaded" | |||
| 134 | - | ||||
| 135 | - | info "Verifying checksum..." | |||
| 136 | - | cd /tmp | |||
| 137 | - | if ! sha256sum -c "$CHECKSUM_PATH" --ignore-missing 2>/dev/null; then | |||
| 138 | - | error "Checksum verification failed! Binary may be corrupted or tampered with." | |||
| 139 | - | fi | |||
| 140 | - | success "Checksum verified" | |||
| 141 | - | ||||
| 142 | - | # Make executable | |||
| 143 | - | chmod +x "$BINARY_PATH" | |||
| 144 | - | ||||
| 145 | - | # Run installer | |||
| 146 | - | info "Launching ArchUp installer..." | |||
| 147 | - | echo "" | |||
| 148 | - | exec "$BINARY_PATH" install | |||
M install.sh +97 -120
| @@ -1,132 +1,109 @@ | |||
| 1 | 1 | #!/bin/bash | |
| 2 | - | # ArchUp - Fast, minimal Arch Linux auto-installer | |
| 3 | - | # Main installation orchestrator | |
| 4 | - | ||
| 5 | - | set -Eeo pipefail | |
| 6 | - | ||
| 7 | - | # Handle help flag FIRST - before any side effects | |
| 8 | - | if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then | |
| 9 | - | cat << 'HELP' | |
| 10 | - | Usage: install.sh [OPTIONS] | |
| 11 | - | ||
| 12 | - | OPTIONS: | |
| 13 | - | --cleanup Cleanup before running installation | |
| 14 | - | -h, --help Show this help message | |
| 15 | - | ||
| 16 | - | EXAMPLES: | |
| 17 | - | install.sh # Run normal installation | |
| 18 | - | install.sh --cleanup # Cleanup then run installation | |
| 19 | - | ./cleanup.sh default # Manual cleanup only | |
| 20 | - | ./cleanup.sh full # Full cleanup including /mnt wipe | |
| 21 | - | ./cleanup.sh diagnostic # Show current system state | |
| 22 | - | HELP | |
| 23 | - | exit 0 | |
| 2 | + | # ArchUp Installer Bootstrap | |
| 3 | + | # Downloads the ArchUp binary from GitHub Releases and launches the installer. | |
| 4 | + | # | |
| 5 | + | # Usage: | |
| 6 | + | # curl -fsSL https://archup.run/install | bash | |
| 7 | + | # curl -fsSL https://archup.run/install | bash -s -- --dev | |
| 8 | + | # curl -fsSL https://archup.run/install | bash -s -- --version v0.5.0 | |
| 9 | + | ||
| 10 | + | set -e | |
| 11 | + | ||
| 12 | + | # Parse arguments | |
| 13 | + | DEV_MODE=false | |
| 14 | + | SPECIFIC_VERSION="" | |
| 15 | + | ||
| 16 | + | while [[ $# -gt 0 ]]; do | |
| 17 | + | case $1 in | |
| 18 | + | --dev) | |
| 19 | + | DEV_MODE=true | |
| 20 | + | shift | |
| 21 | + | ;; | |
| 22 | + | --version) | |
| 23 | + | SPECIFIC_VERSION="$2" | |
| 24 | + | shift 2 | |
| 25 | + | ;; | |
| 26 | + | *) | |
| 27 | + | echo "Unknown option: $1" | |
| 28 | + | echo "Usage: $0 [--dev] [--version VERSION]" | |
| 29 | + | exit 1 | |
| 30 | + | ;; | |
| 31 | + | esac | |
| 32 | + | done | |
| 33 | + | ||
| 34 | + | RED='\033[0;31m' | |
| 35 | + | GREEN='\033[0;32m' | |
| 36 | + | BLUE='\033[0;34m' | |
| 37 | + | YELLOW='\033[0;33m' | |
| 38 | + | NC='\033[0m' | |
| 39 | + | ||
| 40 | + | info() { echo -e "${BLUE}[INFO]${NC} $1"; } | |
| 41 | + | success() { echo -e "${GREEN}[OK]${NC} $1"; } | |
| 42 | + | warning() { echo -e "${YELLOW}[WARN]${NC} $1"; } | |
| 43 | + | error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; } | |
| 44 | + | ||
| 45 | + | # Preflight checks | |
| 46 | + | info "Checking system requirements..." | |
| 47 | + | ||
| 48 | + | if [ ! -f /etc/arch-release ]; then | |
| 49 | + | error "Must be run from the Arch Linux ISO" | |
| 24 | 50 | fi | |
| 51 | + | success "Arch Linux detected" | |
| 25 | 52 | ||
| 26 | - | # Export global paths (needed for re-exec) | |
| 27 | - | export ARCHUP_PATH="${ARCHUP_PATH:-$HOME/.local/share/archup}" | |
| 28 | - | export ARCHUP_INSTALL="$ARCHUP_PATH/install" | |
| 29 | - | ||
| 30 | - | # If stdin is not a TTY (piped from curl), save and re-exec with TTY | |
| 31 | - | if [ ! -t 0 ]; then | |
| 32 | - | # Save script to proper location | |
| 33 | - | mkdir -p "$ARCHUP_PATH" | |
| 34 | - | INSTALL_SCRIPT="$ARCHUP_PATH/install.sh" | |
| 35 | - | cat > "$INSTALL_SCRIPT" | |
| 36 | - | chmod +x "$INSTALL_SCRIPT" | |
| 37 | - | # Re-exec with TTY connected | |
| 38 | - | exec < /dev/tty "$INSTALL_SCRIPT" "$@" | |
| 53 | + | if [ ! -d /sys/firmware/efi ]; then | |
| 54 | + | error "UEFI mode required (legacy BIOS not supported)" | |
| 39 | 55 | fi | |
| 56 | + | success "UEFI mode detected" | |
| 40 | 57 | ||
| 41 | - | export ARCHUP_INSTALL_LOG_FILE="/var/log/archup-install.log" | |
| 42 | - | export ARCHUP_INSTALL_CONFIG="/var/log/archup-install.conf" | |
| 43 | - | export ARCHUP_REPO_URL="${ARCHUP_REPO_URL:-https://github.com/bnema/archup}" | |
| 44 | - | export ARCHUP_RAW_URL="${ARCHUP_RAW_URL:-https://raw.githubusercontent.com/bnema/archup/main}" | |
| 45 | - | ||
| 46 | - | # Bootstrap FIRST: Install gum and jq (required for download script) | |
| 47 | - | if [ ! -d "$ARCHUP_INSTALL" ]; then | |
| 48 | - | # First time running from curl, need to download bootstrap | |
| 49 | - | mkdir -p "$ARCHUP_INSTALL" | |
| 50 | - | curl -sL "$ARCHUP_RAW_URL/install/bootstrap.sh" -o "$ARCHUP_INSTALL/bootstrap.sh" | |
| 51 | - | chmod +x "$ARCHUP_INSTALL/bootstrap.sh" | |
| 58 | + | ARCH=$(uname -m) | |
| 59 | + | if [ "$ARCH" != "x86_64" ]; then | |
| 60 | + | error "Only x86_64 is supported (detected: $ARCH)" | |
| 52 | 61 | fi | |
| 53 | - | source "$ARCHUP_INSTALL/bootstrap.sh" | |
| 54 | - | ||
| 55 | - | # Download installer files if not present (for curl-based installation) | |
| 56 | - | if [ ! -f "$ARCHUP_INSTALL/helpers/all.sh" ]; then | |
| 57 | - | # Download the download helper | |
| 58 | - | mkdir -p "$ARCHUP_INSTALL/helpers" | |
| 59 | - | curl -sL "$ARCHUP_RAW_URL/install/helpers/download.sh" -o "$ARCHUP_INSTALL/helpers/download.sh" | |
| 60 | - | chmod +x "$ARCHUP_INSTALL/helpers/download.sh" | |
| 61 | - | ||
| 62 | - | # Run the download script (gum is now available) | |
| 63 | - | source "$ARCHUP_INSTALL/helpers/download.sh" | |
| 64 | - | download_archup_files | |
| 65 | - | fi | |
| 66 | - | ||
| 67 | - | # Source all helper utilities (now safe to use gum) | |
| 68 | - | source "$ARCHUP_INSTALL/helpers/all.sh" | |
| 69 | - | ||
| 70 | - | # Handle cleanup flag (after helpers are available) | |
| 71 | - | if [ "$1" = "--cleanup" ]; then | |
| 72 | - | echo "Running cleanup before installation..." | |
| 73 | - | # Run cleanup in subshell to avoid inheriting set -Eeo pipefail | |
| 74 | - | bash "$ARCHUP_INSTALL/helpers/cleanup.sh" default | |
| 62 | + | success "Architecture: $ARCH" | |
| 63 | + | ||
| 64 | + | REPO_OWNER="bnema" | |
| 65 | + | REPO_NAME="archup" | |
| 66 | + | BINARY_NAME="archup" | |
| 67 | + | ||
| 68 | + | # Resolve version to download | |
| 69 | + | if [ -n "$SPECIFIC_VERSION" ]; then | |
| 70 | + | LATEST_TAG="$SPECIFIC_VERSION" | |
| 71 | + | info "Using version: $LATEST_TAG" | |
| 72 | + | elif [ "$DEV_MODE" = true ]; then | |
| 73 | + | warning "Dev mode: fetching latest pre-release..." | |
| 74 | + | LATEST_TAG=$(curl -s "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases" \ | |
| 75 | + | | grep -B 10 '"prerelease": true' \ | |
| 76 | + | | grep '"tag_name":' \ | |
| 77 | + | | head -n 1 \ | |
| 78 | + | | sed -E 's/.*"([^"]+)".*/\1/') | |
| 79 | + | [ -z "$LATEST_TAG" ] && error "Failed to fetch latest pre-release" | |
| 80 | + | warning "Pre-release: $LATEST_TAG" | |
| 81 | + | else | |
| 82 | + | info "Fetching latest stable release..." | |
| 83 | + | LATEST_TAG=$(curl -s "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/latest" \ | |
| 84 | + | | grep '"tag_name":' \ | |
| 85 | + | | sed -E 's/.*"([^"]+)".*/\1/') | |
| 86 | + | [ -z "$LATEST_TAG" ] && error "Failed to fetch latest release" | |
| 87 | + | success "Version: $LATEST_TAG" | |
| 75 | 88 | fi | |
| 76 | 89 | ||
| 77 | - | # Display logo | |
| 78 | - | clear_logo | |
| 79 | - | ||
| 80 | - | # ============================================================ | |
| 81 | - | # PHASE 1: BAREBONE INSTALLER - BASIC | |
| 82 | - | # ============================================================ | |
| 83 | - | ||
| 84 | - | # Initialize log file | |
| 85 | - | start_install_log | |
| 86 | - | ||
| 87 | - | # Preflight validation (interactive prompts, no log monitor running) | |
| 88 | - | source "$ARCHUP_INSTALL/preflight/all.sh" | |
| 89 | - | ||
| 90 | - | # Start log monitor ONCE - it will run continuously during all work phases | |
| 91 | - | gum style --foreground 6 --padding "1 0 0 $PADDING_LEFT" "Installing..." | |
| 92 | - | echo | |
| 93 | - | start_log_output | |
| 94 | - | ||
| 95 | - | # Partitioning (auto GPT, ext4, no encryption) | |
| 96 | - | source "$ARCHUP_INSTALL/partitioning/all.sh" | |
| 90 | + | BINARY_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/$BINARY_NAME" | |
| 91 | + | CHECKSUM_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/checksums.txt" | |
| 92 | + | BINARY_PATH="/tmp/$BINARY_NAME" | |
| 93 | + | CHECKSUM_PATH="/tmp/archup-checksums.txt" | |
| 97 | 94 | ||
| 98 | - | # Base system installation | |
| 99 | - | source "$ARCHUP_INSTALL/base/all.sh" | |
| 95 | + | info "Downloading binary..." | |
| 96 | + | curl -fsSL "$BINARY_URL" -o "$BINARY_PATH" || error "Failed to download binary from $BINARY_URL" | |
| 97 | + | success "Binary downloaded" | |
| 100 | 98 | ||
| 101 | - | # System configuration | |
| 102 | - | source "$ARCHUP_INSTALL/config/all.sh" | |
| 99 | + | info "Verifying checksum..." | |
| 100 | + | curl -fsSL "$CHECKSUM_URL" -o "$CHECKSUM_PATH" || error "Failed to download checksums" | |
| 101 | + | cd /tmp | |
| 102 | + | sha256sum -c "$CHECKSUM_PATH" --ignore-missing 2>/dev/null || error "Checksum verification failed" | |
| 103 | + | success "Checksum verified" | |
| 103 | 104 | ||
| 104 | - | # Bootloader installation | |
| 105 | - | source "$ARCHUP_INSTALL/boot/all.sh" | |
| 105 | + | chmod +x "$BINARY_PATH" | |
| 106 | 106 | ||
| 107 | - | # Repository setup (AUR + Chaotic) | |
| 108 | - | source "$ARCHUP_INSTALL/repos/all.sh" | |
| 109 | - | ||
| 110 | - | # Post-install (boot logo, snapper, unmount drives) | |
| 111 | - | source "$ARCHUP_INSTALL/post-install/all.sh" | |
| 112 | - | ||
| 113 | - | # Stop logging and cleanup | |
| 114 | - | stop_install_log | |
| 115 | - | ||
| 116 | - | gum style --foreground 2 --padding "1 0 1 $PADDING_LEFT" "ArchUp barebone installation complete!" | |
| 117 | - | echo | |
| 118 | - | ||
| 119 | - | gum style --foreground 6 --padding "0 0 0 $PADDING_LEFT" "Next steps:" | |
| 120 | - | gum style --padding "0 0 0 $PADDING_LEFT" " 1. Reboot the system" | |
| 121 | - | gum style --padding "0 0 0 $PADDING_LEFT" " 2. After login, run: archup wizard" | |
| 122 | - | gum style --padding "0 0 1 $PADDING_LEFT" " 3. Select your compositor and packages" | |
| 123 | - | echo | |
| 124 | - | ||
| 125 | - | CHOICE=$(gum choose --header "What would you like to do?" --header.padding "0 0 0 $PADDING_LEFT" "Reboot" "Close") | |
| 126 | - | ||
| 127 | - | if [ "$CHOICE" = "Reboot" ]; then | |
| 128 | - | gum style --padding "0 0 1 $PADDING_LEFT" "Rebooting system..." | |
| 129 | - | reboot | |
| 130 | - | else | |
| 131 | - | gum style --padding "0 0 1 $PADDING_LEFT" "Installation complete. You can manually reboot when ready." | |
| 132 | - | fi | |
| 107 | + | info "Launching ArchUp..." | |
| 108 | + | echo "" | |
| 109 | + | exec "$BINARY_PATH" install | |
| @@ -1,132 +1,109 @@ | |||||
| 1 | #!/bin/bash | 1 | #!/bin/bash | ||
| 2 | - | # ArchUp - Fast, minimal Arch Linux auto-installer | 2 | + | # ArchUp Installer Bootstrap |
| 3 | - | # Main installation orchestrator | 3 | + | # Downloads the ArchUp binary from GitHub Releases and launches the installer. |
| 4 | - | 4 | + | # | |
| 5 | - | set -Eeo pipefail | 5 | + | # Usage: |
| 6 | - | 6 | + | # curl -fsSL https://archup.run/install | bash | |
| 7 | - | # Handle help flag FIRST - before any side effects | 7 | + | # curl -fsSL https://archup.run/install | bash -s -- --dev |
| 8 | - | if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then | 8 | + | # curl -fsSL https://archup.run/install | bash -s -- --version v0.5.0 |
| 9 | - | cat << 'HELP' | 9 | + | |
| 10 | - | Usage: install.sh [OPTIONS] | 10 | + | set -e |
| 11 | - | 11 | + | ||
| 12 | - | OPTIONS: | 12 | + | # Parse arguments |
| 13 | - | --cleanup Cleanup before running installation | 13 | + | DEV_MODE=false |
| 14 | - | -h, --help Show this help message | 14 | + | SPECIFIC_VERSION="" |
| 15 | - | 15 | + | ||
| 16 | - | EXAMPLES: | 16 | + | while [[ $# -gt 0 ]]; do |
| 17 | - | install.sh # Run normal installation | 17 | + | case $1 in |
| 18 | - | install.sh --cleanup # Cleanup then run installation | 18 | + | --dev) |
| 19 | - | ./cleanup.sh default # Manual cleanup only | 19 | + | DEV_MODE=true |
| 20 | - | ./cleanup.sh full # Full cleanup including /mnt wipe | 20 | + | shift |
| 21 | - | ./cleanup.sh diagnostic # Show current system state | 21 | + | ;; |
| 22 | - | HELP | 22 | + | --version) |
| 23 | - | exit 0 | 23 | + | SPECIFIC_VERSION="$2" |
| 24 | + | shift 2 | |||
| 25 | + | ;; | |||
| 26 | + | *) | |||
| 27 | + | echo "Unknown option: $1" | |||
| 28 | + | echo "Usage: $0 [--dev] [--version VERSION]" | |||
| 29 | + | exit 1 | |||
| 30 | + | ;; | |||
| 31 | + | esac | |||
| 32 | + | done | |||
| 33 | + | ||||
| 34 | + | RED='\033[0;31m' | |||
| 35 | + | GREEN='\033[0;32m' | |||
| 36 | + | BLUE='\033[0;34m' | |||
| 37 | + | YELLOW='\033[0;33m' | |||
| 38 | + | NC='\033[0m' | |||
| 39 | + | ||||
| 40 | + | info() { echo -e "${BLUE}[INFO]${NC} $1"; } | |||
| 41 | + | success() { echo -e "${GREEN}[OK]${NC} $1"; } | |||
| 42 | + | warning() { echo -e "${YELLOW}[WARN]${NC} $1"; } | |||
| 43 | + | error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; } | |||
| 44 | + | ||||
| 45 | + | # Preflight checks | |||
| 46 | + | info "Checking system requirements..." | |||
| 47 | + | ||||
| 48 | + | if [ ! -f /etc/arch-release ]; then | |||
| 49 | + | error "Must be run from the Arch Linux ISO" | |||
| 24 | fi | 50 | fi | ||
| 51 | + | success "Arch Linux detected" | |||
| 25 | 52 | ||||
| 26 | - | # Export global paths (needed for re-exec) | 53 | + | if [ ! -d /sys/firmware/efi ]; then |
| 27 | - | export ARCHUP_PATH="${ARCHUP_PATH:-$HOME/.local/share/archup}" | 54 | + | error "UEFI mode required (legacy BIOS not supported)" |
| 28 | - | export ARCHUP_INSTALL="$ARCHUP_PATH/install" | |||
| 29 | - | ||||
| 30 | - | # If stdin is not a TTY (piped from curl), save and re-exec with TTY | |||
| 31 | - | if [ ! -t 0 ]; then | |||
| 32 | - | # Save script to proper location | |||
| 33 | - | mkdir -p "$ARCHUP_PATH" | |||
| 34 | - | INSTALL_SCRIPT="$ARCHUP_PATH/install.sh" | |||
| 35 | - | cat > "$INSTALL_SCRIPT" | |||
| 36 | - | chmod +x "$INSTALL_SCRIPT" | |||
| 37 | - | # Re-exec with TTY connected | |||
| 38 | - | exec < /dev/tty "$INSTALL_SCRIPT" "$@" | |||
| 39 | fi | 55 | fi | ||
| 56 | + | success "UEFI mode detected" | |||
| 40 | 57 | ||||
| 41 | - | export ARCHUP_INSTALL_LOG_FILE="/var/log/archup-install.log" | 58 | + | ARCH=$(uname -m) |
| 42 | - | export ARCHUP_INSTALL_CONFIG="/var/log/archup-install.conf" | 59 | + | if [ "$ARCH" != "x86_64" ]; then |
| 43 | - | export ARCHUP_REPO_URL="${ARCHUP_REPO_URL:-https://github.com/bnema/archup}" | 60 | + | error "Only x86_64 is supported (detected: $ARCH)" |
| 44 | - | export ARCHUP_RAW_URL="${ARCHUP_RAW_URL:-https://raw.githubusercontent.com/bnema/archup/main}" | |||
| 45 | - | ||||
| 46 | - | # Bootstrap FIRST: Install gum and jq (required for download script) | |||
| 47 | - | if [ ! -d "$ARCHUP_INSTALL" ]; then | |||
| 48 | - | # First time running from curl, need to download bootstrap | |||
| 49 | - | mkdir -p "$ARCHUP_INSTALL" | |||
| 50 | - | curl -sL "$ARCHUP_RAW_URL/install/bootstrap.sh" -o "$ARCHUP_INSTALL/bootstrap.sh" | |||
| 51 | - | chmod +x "$ARCHUP_INSTALL/bootstrap.sh" | |||
| 52 | fi | 61 | fi | ||
| 53 | - | source "$ARCHUP_INSTALL/bootstrap.sh" | 62 | + | success "Architecture: $ARCH" |
| 54 | - | 63 | + | ||
| 55 | - | # Download installer files if not present (for curl-based installation) | 64 | + | REPO_OWNER="bnema" |
| 56 | - | if [ ! -f "$ARCHUP_INSTALL/helpers/all.sh" ]; then | 65 | + | REPO_NAME="archup" |
| 57 | - | # Download the download helper | 66 | + | BINARY_NAME="archup" |
| 58 | - | mkdir -p "$ARCHUP_INSTALL/helpers" | 67 | + | |
| 59 | - | curl -sL "$ARCHUP_RAW_URL/install/helpers/download.sh" -o "$ARCHUP_INSTALL/helpers/download.sh" | 68 | + | # Resolve version to download |
| 60 | - | chmod +x "$ARCHUP_INSTALL/helpers/download.sh" | 69 | + | if [ -n "$SPECIFIC_VERSION" ]; then |
| 61 | - | 70 | + | LATEST_TAG="$SPECIFIC_VERSION" | |
| 62 | - | # Run the download script (gum is now available) | 71 | + | info "Using version: $LATEST_TAG" |
| 63 | - | source "$ARCHUP_INSTALL/helpers/download.sh" | 72 | + | elif [ "$DEV_MODE" = true ]; then |
| 64 | - | download_archup_files | 73 | + | warning "Dev mode: fetching latest pre-release..." |
| 65 | - | fi | 74 | + | LATEST_TAG=$(curl -s "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases" \ |
| 66 | - | 75 | + | | grep -B 10 '"prerelease": true' \ | |
| 67 | - | # Source all helper utilities (now safe to use gum) | 76 | + | | grep '"tag_name":' \ |
| 68 | - | source "$ARCHUP_INSTALL/helpers/all.sh" | 77 | + | | head -n 1 \ |
| 69 | - | 78 | + | | sed -E 's/.*"([^"]+)".*/\1/') | |
| 70 | - | # Handle cleanup flag (after helpers are available) | 79 | + | [ -z "$LATEST_TAG" ] && error "Failed to fetch latest pre-release" |
| 71 | - | if [ "$1" = "--cleanup" ]; then | 80 | + | warning "Pre-release: $LATEST_TAG" |
| 72 | - | echo "Running cleanup before installation..." | 81 | + | else |
| 73 | - | # Run cleanup in subshell to avoid inheriting set -Eeo pipefail | 82 | + | info "Fetching latest stable release..." |
| 74 | - | bash "$ARCHUP_INSTALL/helpers/cleanup.sh" default | 83 | + | LATEST_TAG=$(curl -s "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/latest" \ |
| 84 | + | | grep '"tag_name":' \ | |||
| 85 | + | | sed -E 's/.*"([^"]+)".*/\1/') | |||
| 86 | + | [ -z "$LATEST_TAG" ] && error "Failed to fetch latest release" | |||
| 87 | + | success "Version: $LATEST_TAG" | |||
| 75 | fi | 88 | fi | ||
| 76 | 89 | ||||
| 77 | - | # Display logo | 90 | + | BINARY_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/$BINARY_NAME" |
| 78 | - | clear_logo | 91 | + | CHECKSUM_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_TAG/checksums.txt" |
| 79 | - | 92 | + | BINARY_PATH="/tmp/$BINARY_NAME" | |
| 80 | - | # ============================================================ | 93 | + | CHECKSUM_PATH="/tmp/archup-checksums.txt" |
| 81 | - | # PHASE 1: BAREBONE INSTALLER - BASIC | |||
| 82 | - | # ============================================================ | |||
| 83 | - | ||||
| 84 | - | # Initialize log file | |||
| 85 | - | start_install_log | |||
| 86 | - | ||||
| 87 | - | # Preflight validation (interactive prompts, no log monitor running) | |||
| 88 | - | source "$ARCHUP_INSTALL/preflight/all.sh" | |||
| 89 | - | ||||
| 90 | - | # Start log monitor ONCE - it will run continuously during all work phases | |||
| 91 | - | gum style --foreground 6 --padding "1 0 0 $PADDING_LEFT" "Installing..." | |||
| 92 | - | echo | |||
| 93 | - | start_log_output | |||
| 94 | - | ||||
| 95 | - | # Partitioning (auto GPT, ext4, no encryption) | |||
| 96 | - | source "$ARCHUP_INSTALL/partitioning/all.sh" | |||
| 97 | 94 | ||||
| 98 | - | # Base system installation | 95 | + | info "Downloading binary..." |
| 99 | - | source "$ARCHUP_INSTALL/base/all.sh" | 96 | + | curl -fsSL "$BINARY_URL" -o "$BINARY_PATH" || error "Failed to download binary from $BINARY_URL" |
| 97 | + | success "Binary downloaded" | |||
| 100 | 98 | ||||
| 101 | - | # System configuration | 99 | + | info "Verifying checksum..." |
| 102 | - | source "$ARCHUP_INSTALL/config/all.sh" | 100 | + | curl -fsSL "$CHECKSUM_URL" -o "$CHECKSUM_PATH" || error "Failed to download checksums" |
| 101 | + | cd /tmp | |||
| 102 | + | sha256sum -c "$CHECKSUM_PATH" --ignore-missing 2>/dev/null || error "Checksum verification failed" | |||
| 103 | + | success "Checksum verified" | |||
| 103 | 104 | ||||
| 104 | - | # Bootloader installation | 105 | + | chmod +x "$BINARY_PATH" |
| 105 | - | source "$ARCHUP_INSTALL/boot/all.sh" | |||
| 106 | 106 | ||||
| 107 | - | # Repository setup (AUR + Chaotic) | 107 | + | info "Launching ArchUp..." |
| 108 | - | source "$ARCHUP_INSTALL/repos/all.sh" | 108 | + | echo "" |
| 109 | - | 109 | + | exec "$BINARY_PATH" install | |
| 110 | - | # Post-install (boot logo, snapper, unmount drives) | |||
| 111 | - | source "$ARCHUP_INSTALL/post-install/all.sh" | |||
| 112 | - | ||||
| 113 | - | # Stop logging and cleanup | |||
| 114 | - | stop_install_log | |||
| 115 | - | ||||
| 116 | - | gum style --foreground 2 --padding "1 0 1 $PADDING_LEFT" "ArchUp barebone installation complete!" | |||
| 117 | - | echo | |||
| 118 | - | ||||
| 119 | - | gum style --foreground 6 --padding "0 0 0 $PADDING_LEFT" "Next steps:" | |||
| 120 | - | gum style --padding "0 0 0 $PADDING_LEFT" " 1. Reboot the system" | |||
| 121 | - | gum style --padding "0 0 0 $PADDING_LEFT" " 2. After login, run: archup wizard" | |||
| 122 | - | gum style --padding "0 0 1 $PADDING_LEFT" " 3. Select your compositor and packages" | |||
| 123 | - | echo | |||
| 124 | - | ||||
| 125 | - | CHOICE=$(gum choose --header "What would you like to do?" --header.padding "0 0 0 $PADDING_LEFT" "Reboot" "Close") | |||
| 126 | - | ||||
| 127 | - | if [ "$CHOICE" = "Reboot" ]; then | |||
| 128 | - | gum style --padding "0 0 1 $PADDING_LEFT" "Rebooting system..." | |||
| 129 | - | reboot | |||
| 130 | - | else | |||
| 131 | - | gum style --padding "0 0 1 $PADDING_LEFT" "Installation complete. You can manually reboot when ready." | |||
| 132 | - | fi | |||
M install/mandatory/post-boot/blesh.sh +1 -1
| @@ -5,7 +5,7 @@ | |||
| 5 | 5 | set -e | |
| 6 | 6 | ||
| 7 | 7 | # Get the username from the system | |
| 8 | - | USERNAME=$(ls /home | head -1) | |
| 8 | + | USERNAME=$(find /home -maxdepth 1 -mindepth 1 -type d -printf '%f\n' | head -1) | |
| 9 | 9 | ||
| 10 | 10 | if [[ -z "${USERNAME}" ]]; then | |
| 11 | 11 | echo "ERROR: Could not find user for ble.sh installation" | |
| @@ -5,7 +5,7 @@ | |||||
| 5 | set -e | 5 | set -e | ||
| 6 | 6 | ||||
| 7 | # Get the username from the system | 7 | # Get the username from the system | ||
| 8 | - | USERNAME=$(ls /home | head -1) | 8 | + | USERNAME=$(find /home -maxdepth 1 -mindepth 1 -type d -printf '%f\n' | head -1) |
| 9 | 9 | ||||
| 10 | if [[ -z "${USERNAME}" ]]; then | 10 | if [[ -z "${USERNAME}" ]]; then | ||
| 11 | echo "ERROR: Could not find user for ble.sh installation" | 11 | echo "ERROR: Could not find user for ble.sh installation" | ||