Files
personotes/docs/FREEBSD_BUILD.md
2025-11-12 17:16:13 +01:00

265 lines
5.8 KiB
Markdown

# 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 "PersoNotes" -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