Passer au contenu principal
Version: v2.5.0

Prise en charge des distributions Linux

Vue d'ensemble​

Wails offre le support de Linux, mais fournir des instructions d'installation pour toutes les distributions disponibles est une tĂąche impossible. À la place, Wails essaie de dĂ©terminer si les paquets dont vous avez besoin pour dĂ©velopper des applications sont disponibles via le gestionnaire de paquets de votre systĂšme. Actuellement, nous supportons les gestionnaires de paquets suivants :

  • apt
  • dnf
  • emerge
  • eopkg
  • nixpkgs
  • pacman
  • zypper

Ajout des noms de paquets​

Il peut y avoir des cas oĂč votre distribution de linux utilise un des gestionnaires de paquets pris en charge mais le nom du paquet est diffĂ©rent. Par exemple, vous pouvez utiliser un dĂ©rivĂ© Ubuntu, mais le nom du paquet pour gtk peut ĂȘtre diffĂ©rent. Wails tente de trouver le paquet correct en itĂ©rant une liste de noms de paquets. La liste des paquets est stockĂ©e dans un fichier spĂ©cifique dans le dossier v2/internal/system/packagemanager . Dans notre exemple, ce serait v2/internal/system/packagemanager/apt.go.

Dans ce fichier, la liste des paquets est définie par la méthode Packages():

func (a *Apt) Packages() packagemap {
return packagemap{
"libgtk-3": []*Package{
{Name: "libgtk-3-dev", SystemPackage: true, Library: true},
},
"libwebkit": []*Package{
{Name: "libwebkit2gtk-4.0-dev", SystemPackage: true, Library: true},
},
"gcc": []*Package{
{Name: "build-essential", SystemPackage: true},
},
"pkg-config": []*Package{
{Name: "pkg-config", SystemPackage: true},
},
"npm": []*Package{
{Name: "npm", SystemPackage: true},
},
"docker": []*Package{
{Name: "docker.io", SystemPackage: true, Optional: true},
},
}
}

Supposons que dans notre distribution linux, libgtk-3 est empaqueté sous le nom lib-gtk3-dev. Nous pourrions ajouter le support de ce paquet en ajoutant la ligne suivante :

func (a *Apt) Packages() packagemap {
return packagemap{
"libgtk-3": []*Package{
{Name: "libgtk-3-dev", SystemPackage: true, Library: true},
{Name: "lib-gtk3-dev", SystemPackage: true, Library: true},
},
"libwebkit": []*Package{
{Name: "libwebkit2gtk-4.0-dev", SystemPackage: true, Library: true},
},
"gcc": []*Package{
{Name: "build-essential", SystemPackage: true},
},
"pkg-config": []*Package{
{Name: "pkg-config", SystemPackage: true},
},
"npm": []*Package{
{Name: "npm", SystemPackage: true},
},
"docker": []*Package{
{Name: "docker.io", SystemPackage: true, Optional: true},
},
}
}

Ajout de nouveaux gestionnaires de paquets​

Pour ajouter un nouveau gestionnaire de paquets, effectuez les Ă©tapes suivantes :

  • CrĂ©ez un nouveau fichier dans v2/internal/system/packagemanager appelĂ© <pm>.go, oĂč <pm> est le nom du gestionnaire de paquets.
  • DĂ©finit une structure conforme Ă  l'interface du gestionnaire de paquets dĂ©finie dans pm.go:
type PackageManager interface {
Name() string
Packages() packagemap
PackageInstalled(*Package) (bool, error)
PackageAvailable(*Package) (bool, error)
InstallCommand(*Package) string
}
  • Name() doit retourner le nom du gestionnaire de paquets
  • Packages() doit retourner une packagemap, qui fournit des noms de fichiers candidats pour les dĂ©pendances
  • PackageInstalled() devrait retourner true si le paquet donnĂ© est installĂ©
  • PackageAvailable() devrait retourner true si le paquet donnĂ© n'est pas installĂ© mais disponible pour l'installation
  • InstallCommand() doit retourner la commande exacte pour installer le nom du paquet donnĂ©

Jetez un coup d'Ɠil au code des autres gestionnaires de paquets pour avoir une idĂ©e de comment cela fonctionne.

Rappel

Si vous ajoutez le support d'un nouveau gestionnaire de paquets, n'oubliez pas de mettre Ă©galement Ă  jour cette page !