diff --git a/pkg/cli/setup.go b/pkg/cli/setup.go index be554c5..5ea8175 100644 --- a/pkg/cli/setup.go +++ b/pkg/cli/setup.go @@ -5,6 +5,7 @@ import ( "fmt" "os" "os/exec" + "path/filepath" "runtime" "strconv" "strings" @@ -436,10 +437,43 @@ func installAnon() { os.Remove(repoPath) } + // Preseed debconf before installation + fmt.Printf(" Pre-accepting Anon terms and conditions...\n") + preseedCmd := exec.Command("sh", "-c", `echo "anon anon/terms boolean true" | debconf-set-selections`) + preseedCmd.Run() // Ignore errors, preseed might not be critical + + // Create anonrc directory and file with AgreeToTerms before installation + // This ensures terms are accepted even if the post-install script checks the file + anonrcDir := "/etc/anon" + anonrcPath := "/etc/anon/anonrc" + if err := os.MkdirAll(anonrcDir, 0755); err == nil { + if _, err := os.Stat(anonrcPath); os.IsNotExist(err) { + // Create file with AgreeToTerms already set + os.WriteFile(anonrcPath, []byte("AgreeToTerms 1\n"), 0644) + } + } + + // Create terms-agreement files in multiple possible locations + // Anon might check for these files to verify terms acceptance + termsLocations := []string{ + "/var/lib/anon/terms-agreement", + "/usr/share/anon/terms-agreement", + "/usr/share/keyrings/anon/terms-agreement", + "/usr/share/keyrings/anyone-terms-agreed", + } + for _, loc := range termsLocations { + dir := filepath.Dir(loc) + if err := os.MkdirAll(dir, 0755); err == nil { + os.WriteFile(loc, []byte("agreed\n"), 0644) + } + } + // Use the official installation script from GitHub + // Pipe "yes" repeatedly to automatically accept terms prompt installScriptURL := "https://raw.githubusercontent.com/anyone-protocol/anon-install/refs/heads/main/install.sh" - cmd := exec.Command("sh", "-c", fmt.Sprintf("curl -fsSL %s | bash", installScriptURL)) - cmd.Stdin = os.Stdin // Allow interactive prompts if needed + // Use yes command to pipe multiple "yes" responses if needed + cmd := exec.Command("sh", "-c", fmt.Sprintf("curl -fsSL %s | (yes yes | bash)", installScriptURL)) + cmd.Env = append(os.Environ(), "DEBIAN_FRONTEND=noninteractive") cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr diff --git a/scripts/install-debros-network.sh b/scripts/install-debros-network.sh index 235ee76..efbc1ba 100755 --- a/scripts/install-debros-network.sh +++ b/scripts/install-debros-network.sh @@ -225,12 +225,46 @@ install_anon() { # Preseed terms acceptance to avoid interactive prompt log "Pre-accepting Anon terms and conditions..." + # Try multiple debconf question formats echo "anon anon/terms boolean true" | sudo debconf-set-selections + echo "anon anon/terms seen true" | sudo debconf-set-selections + # Also try with select/string format + echo "anon anon/terms select true" | sudo debconf-set-selections || true - # Update and install + # Query debconf to verify the question exists and set it properly + # Some packages use different question formats + sudo debconf-get-selections | grep -i anon || true + + # Create anonrc directory and file with AgreeToTerms before installation + # This ensures terms are accepted even if the post-install script checks the file + sudo mkdir -p /etc/anon + if [ ! -f /etc/anon/anonrc ]; then + echo "AgreeToTerms 1" | sudo tee /etc/anon/anonrc >/dev/null + fi + + # Also create a terms-agreement file if Anon checks for it + # Check multiple possible locations where Anon might look for terms acceptance + sudo mkdir -p /var/lib/anon + echo "agreed" | sudo tee /var/lib/anon/terms-agreement >/dev/null 2>&1 || true + sudo mkdir -p /usr/share/anon + echo "agreed" | sudo tee /usr/share/anon/terms-agreement >/dev/null 2>&1 || true + # Also create near the GPG keyring directory (as the user suggested) + sudo mkdir -p /usr/share/keyrings/anon + echo "agreed" | sudo tee /usr/share/keyrings/anon/terms-agreement >/dev/null 2>&1 || true + # Create in the keyring directory itself as a marker file + echo "agreed" | sudo tee /usr/share/keyrings/anyone-terms-agreed >/dev/null 2>&1 || true + + # Update and install with non-interactive frontend log "Installing Anon package..." sudo apt update -qq - if ! sudo apt install -y anon; then + + # Use DEBIAN_FRONTEND=noninteractive and set debconf values directly via apt-get options + # This is more reliable than just debconf-set-selections + if ! sudo DEBIAN_FRONTEND=noninteractive \ + apt-get install -y \ + -o Dpkg::Options::="--force-confdef" \ + -o Dpkg::Options::="--force-confold" \ + anon; then warning "Anon installation failed" return 1 fi