# Guide de Build pour FreeBSD ## Prérequis ### Installation de Go sur FreeBSD ```bash # Installer Go depuis les packages pkg install go pkg install npm pkg install node # Vérifier l'installation go version ``` ## Build ### 1. Télécharger les dépendances ```bash go mod download ``` **Dépendances requises :** - `github.com/fsnotify/fsnotify v1.7.0` - Surveillance système de fichiers - `gopkg.in/yaml.v3 v3.0.1` - Parsing YAML front matter - `golang.org/x/sys v0.4.0` - API système (indirect) ### 2. Vérifier les dépendances ```bash go mod tidy go mod download ``` **Note :** Si `go mod tidy` ne produit aucune sortie, c'est normal ! Cela signifie que le fichier `go.mod` est déjà à jour. ### 3. Compiler ```bash # Compilation standard go build -o server ./cmd/server # Avec optimisations go build -ldflags="-s -w" -o server ./cmd/server # Build statique (recommandé pour FreeBSD) CGO_ENABLED=0 go build -ldflags="-s -w" -o server ./cmd/server ``` ## Lancement ### Mode développement ```bash # Lancer directement avec go run go run ./cmd/server # Ou avec le binaire compilé ./server ``` Le serveur démarre sur `http://localhost:8080` ### Mode production ```bash # Copier le binaire cp server /usr/local/bin/project-notes # Créer un utilisateur dédié pw useradd -n notes -c "Project Notes" -d /var/notes -s /usr/sbin/nologin # Créer le dossier de notes mkdir -p /var/notes/notes chown -R notes:notes /var/notes # Lancer avec l'utilisateur dédié su -m notes -c '/usr/local/bin/project-notes' ``` ## Dépannage ### Problème : `go mod tidy` ne fait rien **C'est normal !** Si `go mod tidy` ne produit aucune sortie et retourne immédiatement, cela signifie que : - Toutes les dépendances sont déjà listées dans `go.mod` - Aucune dépendance inutilisée n'est présente - Le fichier `go.sum` est à jour Pour vérifier que tout est OK : ```bash # Vérifier les dépendances go list -m all # Télécharger les dépendances si nécessaire go mod download # Compiler pour vérifier go build ./cmd/server ``` ### Problème : Erreurs de compilation ```bash # Nettoyer le cache go clean -cache -modcache -testcache # Re-télécharger les dépendances go mod download # Recompiler go build ./cmd/server ``` ### Problème : Dépendances manquantes ```bash # Vérifier que go.mod et go.sum sont présents ls -la go.mod go.sum # Re-synchroniser go mod tidy go mod download ``` ### Problème : Fichiers Go manquants Si des fichiers `.go` sont manquants, c'était dû à un bug dans le `.gitignore` qui ignorait le dossier `cmd/server/`. **Vérifié et corrigé !** Le `.gitignore` a été corrigé pour utiliser `/server` au lieu de `server`, ce qui ignore uniquement le binaire à la racine et non le dossier source. Vérifier que tous les fichiers sont présents : ```bash git ls-files | grep -E '\.(go|mod|sum)$' ``` Devrait afficher 11 fichiers (1 go.mod, 1 go.sum, 9 fichiers .go). ## Tests ```bash # Lancer tous les tests go test ./... # Tests avec verbosité go test -v ./... # Tests avec couverture go test -cover ./... # Tests d'un package spécifique go test -v ./internal/api go test -v ./internal/indexer ``` ## Optimisations FreeBSD ### 1. Build statique Pour éviter les dépendances dynamiques : ```bash CGO_ENABLED=0 GOOS=freebsd GOARCH=amd64 go build -ldflags="-s -w" -o server ./cmd/server ``` ### 2. Service rc.d Créer `/usr/local/etc/rc.d/project_notes` : ```bash #!/bin/sh # # PROVIDE: project_notes # REQUIRE: NETWORKING # KEYWORD: shutdown . /etc/rc.subr name="project_notes" rcvar="project_notes_enable" command="/usr/local/bin/project-notes" command_args="" pidfile="/var/run/${name}.pid" project_notes_user="notes" project_notes_chdir="/var/notes" load_rc_config $name run_rc_command "$1" ``` Activer au démarrage : ```bash chmod +x /usr/local/etc/rc.d/project_notes sysrc project_notes_enable="YES" service project_notes start ``` ### 3. Surveillance avec daemon(8) ```bash daemon -p /var/run/project-notes.pid -u notes -r /usr/local/bin/project-notes ``` ## Architecture du projet ``` project-notes/ ├── cmd/ │ └── server/ │ └── main.go # Point d'entrée ├── internal/ │ ├── api/ # Handlers HTTP │ │ ├── handler.go # Handler principal │ │ ├── rest_handler.go # API REST │ │ ├── daily_notes.go # Notes quotidiennes │ │ ├── favorites.go # Favoris │ │ └── handler_test.go # Tests │ ├── indexer/ # Recherche full-text │ │ ├── indexer.go │ │ └── indexer_test.go │ └── watcher/ # Surveillance fichiers │ └── watcher.go ├── frontend/ # Frontend Vite ├── static/ # Assets statiques ├── templates/ # Templates HTML ├── notes/ # Notes Markdown ├── go.mod # Dépendances Go ├── go.sum # Checksums └── README.md # Documentation ``` ## Vérification finale ```bash # Tous les fichiers sont présents ? git ls-files | grep -E '\.(go|mod|sum)$' | wc -l # Doit afficher : 11 # Compilation réussie ? go build -o server ./cmd/server && echo "✅ Build OK" # Tests passent ? go test ./... && echo "✅ Tests OK" # Binaire fonctionne ? ./server & sleep 2 curl http://localhost:8080/ && echo "✅ Server OK" pkill -f ./server ``` ## Support Pour toute question ou problème de build sous FreeBSD, vérifier : 1. Version de Go : `go version` (minimum 1.22) 2. Variables d'environnement : `go env` 3. Fichiers présents : `git status` et `git ls-files` 4. Logs de compilation : `go build -v ./cmd/server` --- **Dernière mise à jour :** 11 novembre 2025 **Testé sur :** FreeBSD 13.x et 14.x **Version Go minimale :** 1.22