Bonjour à tous,

Utilisateur (et petit contributeur dans les paquets) de Debian et openSUSE depuis longtemps, je franchi un nouveau cap avec Fedora, d'habitude il y a toujours un quelque chose qui coince mais cette fois ci ça passe, enfin presque. 🙂

Je voulais me mettre aux paquets de Fedora pour combler deux ou trois manques, j'ai voulu passer par mock car c'est la façon officiel (ou une des façons) de ce projet pour faire des paquets et je me retrouve toujours avec des erreurs.

J'ai regardé la doc, notamment faire des paquets pour les nuls, mais aussi celle sur mock, je pense que ça doit être la configuration qui fait que mes tentatives se soldent toutes par un échec.

La commande que je lance est celle-ci:
mock -r fedora-33-x86_64 rebuild zola-0.11.0-1.fc33.src.rpm

Je passe aussi par sudo sinon en pensant que c'était une autorisation manquante, car sur deux pc j'ai le soucis avec mock, un j'ai mit mon utilisateur avec les droits pour mock et un autre je ne lui ait rien mit concernant les droits mais pareil. Par contre le paquet se fait bien par OBS et OSC (openSUSE).
Error: 
 Problem 1: nothing provides requested (crate(ammonia/default) >= 3.0.0 with crate(ammonia/default) < 4.0.0)
 Problem 2: nothing provides requested (crate(atty/default) >= 0.2.11 with crate(atty/default) < 0.3.0)
 Problem 3: nothing provides requested (crate(base64/default) >= 0.12.0 with crate(base64/default) < 0.13.0)
 Problem 4: nothing provides requested (crate(chrono/default) >= 0.4.0 with crate(chrono/default) < 0.5.0)
 Problem 5: nothing provides requested (crate(chrono/serde) >= 0.4.0 with crate(chrono/serde) < 0.5.0)
 Problem 6: nothing provides requested (crate(clap/default) >= 2.0.0 with crate(clap/default) < 3.0.0)
 Problem 7: nothing provides requested (crate(csv/default) >= 1.0.0 with crate(csv/default) < 2.0.0)
 Problem 8: nothing provides requested (crate(ctrlc/default) >= 3.0.0 with crate(ctrlc/default) < 4.0.0)
 Problem 9: nothing provides requested (crate(elasticlunr-rs/default) >= 2.0.0 with crate(elasticlunr-rs/default) < 3.0.0)
 Problem 10: nothing provides requested (crate(filetime/default) >= 0.2.8 with crate(filetime/default) < 0.3.0)
 Problem 11: nothing provides requested (crate(fs_extra/default) >= 1.1.0 with crate(fs_extra/default) < 2.0.0)
 Problem 12: nothing provides requested (crate(glob/default) >= 0.3.0 with crate(glob/default) < 0.4.0)
 Problem 13: nothing provides requested (crate(globset/default) >= 0.4.0 with crate(globset/default) < 0.5.0)
 Problem 14: nothing provides requested (crate(hyper-staticfile/default) >= 0.5.0 with crate(hyper-staticfile/default) < 0.6.0)
 Problem 15: nothing provides requested (crate(hyper/runtime) >= 0.13.0 with crate(hyper/runtime) < 0.14.0)
 Problem 16: nothing provides requested (crate(image/default) >= 0.23.0 with crate(image/default) < 0.24.0)
 Problem 17: nothing provides requested (crate(lazy_static/default) >= 1.0.0 with crate(lazy_static/default) < 2.0.0)
 Problem 18: nothing provides requested (crate(lazy_static/default) >= 1.1.0 with crate(lazy_static/default) < 2.0.0)
 Problem 19: nothing provides requested (crate(mockito/default) >= 0.25.0 with crate(mockito/default) < 0.26.0)
 Problem 20: nothing provides requested (crate(notify/default) >= 4.0.0 with crate(notify/default) < 5.0.0)
 Problem 21: nothing provides requested (crate(open/default) >= 1.2.0 with crate(open/default) < 2.0.0)
 Problem 22: nothing provides requested (crate(percent-encoding/default) >= 2.0.0 with crate(percent-encoding/default) < 3.0.0)
 Problem 23: nothing provides requested (crate(pest/default) >= 2.0.0 with crate(pest/default) < 3.0.0)
 Problem 24: nothing provides requested (crate(pest_derive/default) >= 2.0.0 with crate(pest_derive/default) < 3.0.0)
 Problem 25: nothing provides requested (crate(pulldown-cmark/default) >= 0.7.0 with crate(pulldown-cmark/default) < 0.8.0)
 Problem 26: nothing provides requested (crate(rayon/default) >= 1.0.0 with crate(rayon/default) < 2.0.0)
 Problem 27: nothing provides requested (crate(regex/default) >= 1.0.0 with crate(regex/default) < 2.0.0)
 Problem 28: nothing provides requested (crate(reqwest/blocking) >= 0.10.0 with crate(reqwest/blocking) < 0.11.0)
 Problem 29: nothing provides requested (crate(sass-rs/default) >= 0.2.0 with crate(sass-rs/default) < 0.3.0)
 Problem 30: nothing provides requested (crate(serde/default) >= 1.0.0 with crate(serde/default) < 2.0.0)
 Problem 31: nothing provides requested (crate(serde_derive/default) >= 1.0.0 with crate(serde_derive/default) < 2.0.0)
 Problem 32: nothing provides requested (crate(serde_json/default) >= 1.0.0 with crate(serde_json/default) < 2.0.0)
 Problem 33: nothing provides requested (crate(sha2/default) >= 0.8.0 with crate(sha2/default) < 0.9.0)
 Problem 34: nothing provides requested (crate(slotmap/default) >= 0.4.0 with crate(slotmap/default) < 0.5.0)
 Problem 35: nothing provides requested (crate(slug/default) >= 0.1.0 with crate(slug/default) < 0.2.0)
 Problem 36: nothing provides requested (crate(syntect/default) >= 4.1.0 with crate(syntect/default) < 5.0.0)
 Problem 37: nothing provides requested (crate(tempfile/default) >= 3.0.0 with crate(tempfile/default) < 4.0.0)
 Problem 38: nothing provides requested (crate(tera/default) >= 1.0.0 with crate(tera/default) < 2.0.0)
 Problem 39: nothing provides requested (crate(tera/preserve_order) >= 1.0.0 with crate(tera/preserve_order) < 2.0.0)
 Problem 40: nothing provides requested (crate(termcolor/default) >= 1.0.4 with crate(termcolor/default) < 2.0.0)
 Problem 41: nothing provides requested (crate(tokio) >= 0.2.0 with crate(tokio) < 0.3.0)
 Problem 42: nothing provides requested (crate(toml/default) >= 0.5.0 with crate(toml/default) < 0.6.0)
 Problem 43: nothing provides requested (crate(unicode-segmentation/default) >= 1.2.0 with crate(unicode-segmentation/default) < 2.0.0)
 Problem 44: nothing provides requested (crate(url/default) >= 2.0.0 with crate(url/default) < 3.0.0)
 Problem 45: nothing provides requested (crate(walkdir/default) >= 2.0.0 with crate(walkdir/default) < 3.0.0)
 Problem 46: nothing provides requested (crate(ws/default) >= 0.9.0 with crate(ws/default) < 0.10.0)
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
Finish: rpmbuild zola-0.11.0-1.fc33.src.rpm
Finish: build phase for zola-0.11.0-1.fc33.src.rpm
ERROR: Exception(zola-0.11.0-1.fc33.src.rpm) Config(fedora-33-x86_64) 1 minutes 14 seconds
INFO: Results and/or logs in: /var/lib/mock/fedora-33-x86_64/result
Ça c'est une partie du résultat de la commande.
Et le reste:
ERROR: Command failed: 
 # /usr/bin/systemd-nspawn -q -M 740b6269481349abb3d0dbcdff09db98 -D /var/lib/mock/fedora-33-x86_64-bootstrap/root -a --capability=cap_ipc_lock --bind=/tmp/mock-resolv.v5x1npc2:/etc/resolv.conf --console=pipe --setenv=TERM=vt100 --setenv=SHELL=/bin/bash --setenv=HOME=/var/lib/mock/fedora-33-x86_64/root/installation-homedir --setenv=HOSTNAME=mock --setenv=PATH=/usr/bin:/bin:/usr/sbin:/sbin --setenv=PROMPT_COMMAND=printf "\033]0;<mock-chroot>\007" --setenv=PS1=<mock-chroot> \s-\v\$  --setenv=LANG=C.UTF-8 --setenv=LC_MESSAGES=C.UTF-8 --resolv-conf=off /usr/bin/dnf builddep --installroot /var/lib/mock/fedora-33-x86_64/root/ --releasever 33 --setopt=deltarpm=False --allowerasing --disableplugin=local --disableplugin=spacewalk --disableplugin=local --disableplugin=spacewalk --disableplugin=local --disableplugin=spacewalk /var/lib/mock/fedora-33-x86_64/root/builddir/build/SRPMS/zola-0.11.0-1.fc33.buildreqs.nosrc.rpm --setopt=tsflags=nocontexts
No matches found for the following disable plugin patterns: local, spacewalk
fedora                                                                                           52 kB/s |  24 kB     00:00    
updates                                                                                         309 kB/s |  21 kB     00:00    
Package rust-packaging-16-1.fc33.x86_64 is already installed.
Package rust-packaging-16-1.fc33.x86_64 is already installed.
Error: 
 Problem 1: nothing provides requested (crate(ammonia/default) >= 3.0.0 with crate(ammonia/default) < 4.0.0)
 Problem 2: nothing provides requested (crate(atty/default) >= 0.2.11 with crate(atty/default) < 0.3.0)
 Problem 3: nothing provides requested (crate(base64/default) >= 0.12.0 with crate(base64/default) < 0.13.0)
 Problem 4: nothing provides requested (crate(chrono/default) >= 0.4.0 with crate(chrono/default) < 0.5.0)
 Problem 5: nothing provides requested (crate(chrono/serde) >= 0.4.0 with crate(chrono/serde) < 0.5.0)
 Problem 6: nothing provides requested (crate(clap/default) >= 2.0.0 with crate(clap/default) < 3.0.0)
 Problem 7: nothing provides requested (crate(csv/default) >= 1.0.0 with crate(csv/default) < 2.0.0)
 Problem 8: nothing provides requested (crate(ctrlc/default) >= 3.0.0 with crate(ctrlc/default) < 4.0.0)
 Problem 9: nothing provides requested (crate(elasticlunr-rs/default) >= 2.0.0 with crate(elasticlunr-rs/default) < 3.0.0)
 Problem 10: nothing provides requested (crate(filetime/default) >= 0.2.8 with crate(filetime/default) < 0.3.0)
 Problem 11: nothing provides requested (crate(fs_extra/default) >= 1.1.0 with crate(fs_extra/default) < 2.0.0)
 Problem 12: nothing provides requested (crate(glob/default) >= 0.3.0 with crate(glob/default) < 0.4.0)
 Problem 13: nothing provides requested (crate(globset/default) >= 0.4.0 with crate(globset/default) < 0.5.0)
 Problem 14: nothing provides requested (crate(hyper-staticfile/default) >= 0.5.0 with crate(hyper-staticfile/default) < 0.6.0)
 Problem 15: nothing provides requested (crate(hyper/runtime) >= 0.13.0 with crate(hyper/runtime) < 0.14.0)
 Problem 16: nothing provides requested (crate(image/default) >= 0.23.0 with crate(image/default) < 0.24.0)
 Problem 17: nothing provides requested (crate(lazy_static/default) >= 1.0.0 with crate(lazy_static/default) < 2.0.0)
 Problem 18: nothing provides requested (crate(lazy_static/default) >= 1.1.0 with crate(lazy_static/default) < 2.0.0)
 Problem 19: nothing provides requested (crate(mockito/default) >= 0.25.0 with crate(mockito/default) < 0.26.0)
 Problem 20: nothing provides requested (crate(notify/default) >= 4.0.0 with crate(notify/default) < 5.0.0)
 Problem 21: nothing provides requested (crate(open/default) >= 1.2.0 with crate(open/default) < 2.0.0)
 Problem 22: nothing provides requested (crate(percent-encoding/default) >= 2.0.0 with crate(percent-encoding/default) < 3.0.0)
 Problem 23: nothing provides requested (crate(pest/default) >= 2.0.0 with crate(pest/default) < 3.0.0)
 Problem 24: nothing provides requested (crate(pest_derive/default) >= 2.0.0 with crate(pest_derive/default) < 3.0.0)
 Problem 25: nothing provides requested (crate(pulldown-cmark/default) >= 0.7.0 with crate(pulldown-cmark/default) < 0.8.0)
 Problem 26: nothing provides requested (crate(rayon/default) >= 1.0.0 with crate(rayon/default) < 2.0.0)
 Problem 27: nothing provides requested (crate(regex/default) >= 1.0.0 with crate(regex/default) < 2.0.0)
 Problem 28: nothing provides requested (crate(reqwest/blocking) >= 0.10.0 with crate(reqwest/blocking) < 0.11.0)
 Problem 29: nothing provides requested (crate(sass-rs/default) >= 0.2.0 with crate(sass-rs/default) < 0.3.0)
 Problem 30: nothing provides requested (crate(serde/default) >= 1.0.0 with crate(serde/default) < 2.0.0)
 Problem 31: nothing provides requested (crate(serde_derive/default) >= 1.0.0 with crate(serde_derive/default) < 2.0.0)
 Problem 32: nothing provides requested (crate(serde_json/default) >= 1.0.0 with crate(serde_json/default) < 2.0.0)
 Problem 33: nothing provides requested (crate(sha2/default) >= 0.8.0 with crate(sha2/default) < 0.9.0)
 Problem 34: nothing provides requested (crate(slotmap/default) >= 0.4.0 with crate(slotmap/default) < 0.5.0)
 Problem 35: nothing provides requested (crate(slug/default) >= 0.1.0 with crate(slug/default) < 0.2.0)
 Problem 36: nothing provides requested (crate(syntect/default) >= 4.1.0 with crate(syntect/default) < 5.0.0)
 Problem 37: nothing provides requested (crate(tempfile/default) >= 3.0.0 with crate(tempfile/default) < 4.0.0)
 Problem 38: nothing provides requested (crate(tera/default) >= 1.0.0 with crate(tera/default) < 2.0.0)
 Problem 39: nothing provides requested (crate(tera/preserve_order) >= 1.0.0 with crate(tera/preserve_order) < 2.0.0)
 Problem 40: nothing provides requested (crate(termcolor/default) >= 1.0.4 with crate(termcolor/default) < 2.0.0)
 Problem 41: nothing provides requested (crate(tokio) >= 0.2.0 with crate(tokio) < 0.3.0)
 Problem 42: nothing provides requested (crate(toml/default) >= 0.5.0 with crate(toml/default) < 0.6.0)
 Problem 43: nothing provides requested (crate(unicode-segmentation/default) >= 1.2.0 with crate(unicode-segmentation/default) < 2.0.0)
 Problem 44: nothing provides requested (crate(url/default) >= 2.0.0 with crate(url/default) < 3.0.0)
 Problem 45: nothing provides requested (crate(walkdir/default) >= 2.0.0 with crate(walkdir/default) < 3.0.0)
 Problem 46: nothing provides requested (crate(ws/default) >= 0.9.0 with crate(ws/default) < 0.10.0)
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

Qu'est ce que je rate?

Doit on se faire une configuration pour mock ou celle par défaut est suffisante?
J'ai regardé un peu (beaucoup) les posts parlant de mock mais ça ressemble pas.

Merci de votre aide.
Essayez :
mock -r fedora-rawhide-x86_64 rebuild zola-0.11.0-1.fc33.src.rpm
Le packaging dans Rust a été historiquement une prise de tête à cause de la rapidité de mise à jour et l'inexistence d'une ABI stable. On ne peut construire des paquets que dans Rawhide, et la seule façon d'en avoir pour les autres versions de Fedora est soit d'utiliser l'infrastructure de Fedora, soit d'utiliser cargo directement dans le build (ce qui est interdit au passage pour les paquets officiels).

Heureusement, ce problème va être résolu à partir de Fedora 34 grâce à cette proposition. En attendant, la seule façon pour que ça marche est d'utiliser rawhide.
Merci Lyes Saadi de votre réponse.

Je vais tenter ça de suite, mais j'ai aussi et je pense que c'est une configuration non faite de ma part, un soucis avec le *init*:
mock -r fedora-33-x86_64 --init
INFO: mock.py version 2.8 starting (python version = 3.9.1, NVR = mock-2.8-1.fc33)...
Start(bootstrap): init plugins
INFO: selinux enabled
Finish(bootstrap): init plugins
Start: init plugins
INFO: selinux enabled
Finish: init plugins
INFO: Signal handler active
Start: run
Start: clean chroot
Finish: clean chroot
Start(bootstrap): chroot init
INFO: calling preinit hooks
INFO: enabled root cache
INFO: enabled package manager cache
Start(bootstrap): cleaning package manager metadata
Finish(bootstrap): cleaning package manager metadata
INFO: enabled HW Info plugin
Mock Version: 2.8
INFO: Mock Version: 2.8
Finish(bootstrap): chroot init
Start: chroot init
INFO: calling preinit hooks
INFO: enabled root cache
Start: unpacking root cache
Finish: unpacking root cache
INFO: enabled package manager cache
Start: cleaning package manager metadata
Finish: cleaning package manager metadata
INFO: enabled HW Info plugin
Mock Version: 2.8
INFO: Mock Version: 2.8
ERROR: Command failed: 
 # /usr/bin/systemd-nspawn -q -M c90b5d6c89c8406b9435d17eeb90229d -D /var/lib/mock/fedora-33-x86_64/root -a --console=pipe --setenv=TERM=vt100 --setenv=SHELL=/bin/bash --setenv=HOME=/builddir --setenv=HOSTNAME=mock --setenv=PATH=/usr/bin:/bin:/usr/sbin:/sbin --setenv=PROMPT_COMMAND=printf "\033]0;<mock-chroot>\007" --setenv=PS1=<mock-chroot> \s-\v\$  --setenv=LANG=C.UTF-8 --resolv-conf=off /usr/sbin/usermod -u 1000 mockbuild
Je vais alors tester sur un autre paquet (malgré que je l'ai aussi fais) car même avec
mock -r fedora-rawhide-x86_64 rebuild zola-0.11.0-1.fc33.src.rpm
ça me fait une erreur.

Je regarde aussi cette page https://fedoraproject.org/wiki/Using_Mock_to_test_package_builds pour voir si il y a pas une configuration minimal à faire.
seb95 wrote:Je vais alors tester sur un autre paquet (malgré que je l'ai aussi fais) car même avec
mock -r fedora-rawhide-x86_64 rebuild zola-0.11.0-1.fc33.src.rpm
ça me fait une erreur.
Quel est donc l'erreur ? Ça pourrait être aussi juste des dépendances manquantes ?

Aussi, t'es-tu ajouté au groupe mock ?
Oui je me suis rajouté au groupe mock.

Pour l'erreur, en fait je m’aperçois que c'est avec tous les paquets que je fais, j'en reprends depuis les dépots de Fedora et j'ai à chaque fois une erreur, donc je me dis qu'il faut faire un minimum de config.
mock -r fedora-rawhide-x86_64 rebuild zola-0.11.0-1.fc33.src.rpm
Error: 
 Problem 1: nothing provides requested (crate(mockito/default) >= 0.25.0 with crate(mockito/default) < 0.26.0~)
 Problem 2: nothing provides requested (crate(pulldown-cmark/default) >= 0.7.0 with crate(pulldown-cmark/default) < 0.8.0~)
 Problem 3: nothing provides requested (crate(sha2/default) >= 0.8.0 with crate(sha2/default) < 0.9.0~)
Finish: rpmbuild zola-0.11.0-1.fc33.src.rpm
Finish: build phase for zola-0.11.0-1.fc33.src.rpm
ERROR: Exception(zola-0.11.0-1.fc33.src.rpm) Config(fedora-rawhide-x86_64) 2 minutes 6 seconds
INFO: Results and/or logs in: /var/lib/mock/fedora-rawhide-x86_64/result
ERROR: Command failed: 
 # /usr/bin/systemd-nspawn -q -M d5df9bc8d4c64978892a648ff8cf78ee -D /var/lib/mock/fedora-rawhide-x86_64-bootstrap/root -a --capability=cap_ipc_lock --bind=/tmp/mock-resolv.xfqnfxkj:/etc/resolv.conf --console=pipe --setenv=TERM=vt100 --setenv=SHELL=/bin/bash --setenv=HOME=/var/lib/mock/fedora-rawhide-x86_64/root/installation-homedir --setenv=HOSTNAME=mock --setenv=PATH=/usr/bin:/bin:/usr/sbin:/sbin --setenv=PROMPT_COMMAND=printf "\033]0;<mock-chroot>\007" --setenv=PS1=<mock-chroot> \s-\v\$  --setenv=LANG=C.UTF-8 --setenv=LC_MESSAGES=C.UTF-8 --resolv-conf=off /usr/bin/dnf builddep --installroot /var/lib/mock/fedora-rawhide-x86_64/root/ --releasever 34 --setopt=deltarpm=False --allowerasing --disableplugin=local --disableplugin=spacewalk --disableplugin=local --disableplugin=spacewalk --disableplugin=local --disableplugin=spacewalk /var/lib/mock/fedora-rawhide-x86_64/root/builddir/build/SRPMS/zola-0.11.0-1.fc34.buildreqs.nosrc.rpm --setopt=tsflags=nocontexts
No matches found for the following disable plugin patterns: local, spacewalk
fedora                                           39 kB/s |  18 kB     00:00    
Package rust-packaging-17-2.fc34.x86_64 is already installed.
Package rust-packaging-17-2.fc34.x86_64 is already installed.
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
Error: 
 Problem 1: nothing provides requested (crate(mockito/default) >= 0.25.0 with crate(mockito/default) < 0.26.0~)
 Problem 2: nothing provides requested (crate(pulldown-cmark/default) >= 0.7.0 with crate(pulldown-cmark/default) < 0.8.0~)
 Problem 3: nothing provides requested (crate(sha2/default) >= 0.8.0 with crate(sha2/default) < 0.9.0~)

Wrote: /builddir/build/RPMS/quodlibet-zsh-completion-4.3.0-4.fc34.noarch.rpm
Wrote: /builddir/build/RPMS/quodlibet-4.3.0-4.fc34.noarch.rpm
Wrote: /builddir/build/RPMS/exfalso-4.3.0-4.fc34.noarch.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.NPL8lu
+ umask 022
+ cd /builddir/build/BUILD
+ cd quodlibet-4.3.0
+ /usr/bin/rm -rf /builddir/build/BUILDROOT/quodlibet-4.3.0-4.fc34.x86_64
+ RPM_EC=0
++ jobs -p
+ exit 0
Finish: rpmbuild quodlibet-4.3.0-4.fc33.src.rpm
Finish: build phase for quodlibet-4.3.0-4.fc33.src.rpm
INFO: Done(quodlibet-4.3.0-4.fc33.src.rpm) Config(fedora-rawhide-x86_64) 2 minutes 20 seconds
INFO: Results and/or logs in: /var/lib/mock/fedora-rawhide-x86_64/result
Finish: run
Bon là cette fois avec quodlibet ça marche, donc pas de soucis de config.
Alors, cette fois-ci c'est un autre problème : mockito, pulldown-cmark et sha2 ont été mis à jour, mais pas les versions requises dans les dépendances de zola... Encore une fois, ceci est un problème spécifique à Rust.

La seule façon de résoudre cela serait de patcher le Cargo.toml de zola pour accepter les nouvelles versions :-?...

Comme je l'ai déjà précisé, le packaging avec Rust est une prise de tête sans fin.

Je conseillerais de s'orienter plutôt vers le packaging de logiciels Python (comme quodlibet par exemple) et C/C++ qui sont bien plus accessibles ! Ou d'utiliser cargo directement, comme le fait atim dans son package nushell !
Merci bien de votre patience, en effet ça à l'air d'être prise de tête pour cargo:)

Par contre mock permet de fabriquer un paquet RPM depuis un spec et une source ou seulement depuis des rpmsources? Et sinon, si mock ne permet de faire que depuis des rpmsources, on utilise principalement rpmbuild pour le reste? C'est bien ça?

Merci en tout cas d'avoir prit du temps pour moi.
Généralement, on utilise mock pour s'assurer qu'on a oublié aucune dépendance de construction (BuildRequires), quand on n'est pas sûr de la sécurité du package (Un rpmbuild pourrait facilement avoir un rm -rf / et supprimer l'entièreté des fichiers de l'hôte. Crois-moi, n'oublie jamais de rajouter %{buildroot} avec rpmbuild, ou ça pourrait très mal tourner :-P !), ou quand on ne veut pas installer toutes les dépendances sur son ordinateur. Sinon, rpmbuild fait très bien l'affaire et est beaucoup plus rapide.

Il est possible de créer des RPM grâce mock en lui donnant directement des spec et les sources, mais c'est assez compliqué et je ne me souviens même plus de la démarche à suivre. Un rpmbuild -bs fait très bien l'affaire !
Y a aussi COPR qui est gratuit et un bon starting point pour les packagers !

Pour commencer avec COPR, la documentation est un très bon début : https://docs.pagure.org/copr.copr/user_documentation.html

Aussi, si tu veux créer des paquets officiels, la référence est le GIGANTESQUE document qu'est le Fedora Packaging Guidelines : https://docs.fedoraproject.org/en-US/packaging-guidelines/ (Les liens dans la barre à droite font aussi parti du Packaging Guidelines).

Enfin, pour une bonne façon de voir des paquets Fedora officiels et de voir comment ils font, y a le dépôt source : https://src.fedoraproject.org/ ! C'est une mine d'or pour voir comment les packagers font !

Parmi les packagers Fedora, il y a aussi des règles de styles non-officiel très épurés et basées sur la lisibilité (Bien différentes de celles d'OpenSUSE) pour lesquels voir les fichiers SPEC est la seule façon d'apprendre le style en question !

Il y a aussi des "macros" très pratiques comme les macros "%forge" qui n'existent pas sous OpenSUSE (à ma connaissance, ou ça a récemment changé) et qui sont très pratique !
Merci Lyes Saadi pour toutes les informations et liens.

J'admets être perdu vu l'abondance de documents possibles de lire, et aussi à mes habitudes sur openSUSE et surtout Debian.

Bien amicalement.
Seb
Je me rends compte que mon post fait un peu de matraquage d'information en effet :-P !

COPR c'est basiquement l'équivalent de OBS pour Fedora. Et ça utilise mock directement ! On peut même facilement importer des paquets des repos officiels. COPR permet aussi de créer des paquets pour OpenSUSE, Mageia, CentOS, RHEL et toute distribution RPM théoriquement. Et, il y a des intentions de même y intégrer les Flatpaks (par une technologie qui converti les RPMs en Flatpak) !

Aussi, les Guidelines, s'ils sont obligatoires pour les packages officiels de Fedora, il n'est pas nécessaire de les suivre pour des paquets en dehors des repos officiels. Mais, ça reste une mine d'or d'infos pour énormément de souci que quelqu'un pourrait rencontrer.

Enfin, demander à devenir packager est très simple. Il faut juste prouver sa valeur en passant par un processus de sponsoring, en packageant un paquet qui n'existe toujours pas, pour montrer qu'on a bien tout compris des Guidelines. (Et chaque paquet qu'on propose à l'avenir doit aussi passer par processus de validation, plus simple et rapide, mais ça c'est pour tout le monde, même le FPL (Fedora Project Leader) :-P !)
Hey !

Je viens de te trouver par hasard sur COPR :-P !

Bonne continuation 😉 ! Si t'as besoin d'aide pour autre chose, n'hésite pas à demander dans cette section du forum :-D !
Coucou,

Oui je me suis fais un compte pour voir comment ça marche, je dois savoir si Fedora restera comme second OS à la place d'une Ubuntu (ça c'est sûr que Fedora prend sa place) et une openSUSE (là, justement je teste mais pour le moment je suis de mieux en mieux avec cette Fedora) et voir si elle peut pourquoi pas passer en OS principale à la place de ma Debian qui me suit depuis 2006.

Pour ça il faut que j'arrive à retrouver mes petits dans la création de paquets, bon c'est pas si dur car ça ressemble assez à openSUSE, si il y a des automates assez simple un peu comme sous Debian avec
apt source 
pour rappatrier les sources (j'ai vu
yumdownloader --source nom_du_paquet --enablerepo=nom_du_depot-source
et j'ai testé mais bizarre que c'est pas avec DNF, en tout cas j'ai rien vu avec
dnf --help
), ensuite faut que je regarde si il y a pas un script qui peut rapatrier les nouvelles sources d'un programme comme le ferait
uscan
chez Debian, et pour finir voir un chroot comme avec
pbuilder
mais il y a
mock
qui peut faire l'affaire, bien que j'ai un peu de mal (beaucoup de ratés).

J'ai fais quelques billets dessus, si ça t'intéresse:
https://passiongnulinux.tuxfamily.org/posts/2018-04-20-construire-des-paquets-deb-pour-debian-premiere-partie/
https://passiongnulinux.tuxfamily.org/posts/2018-04-21-construire-des-paquets-deb-pour-debian-deuxieme-partie/
https://passiongnulinux.tuxfamily.org/posts/2019-11-19-construire-des-paquets-deb-pour-debian-avec-pbuilder/

Je pense que j'aurai du mal à quitter près de 15 ans de Debian, mais je me plais bien pour le moment sur ce que je vois.
En tout cas merci pour ton aide et tous les liens.
Hum, j'avoue que le packaging Debian me tente ! Merci pour ces liens 😉 !

Pour télécharger le paquet source par DNF, il y a :
sudo dnf download --source [PAQUETS...]
Pour uscan, je ne suis pas sûr à 100% de ce que c'est, mais si j'ai bien compris c'est un service qui automatise le packaging des nouvelles versions ? Si c'est bien ça, il y a plusieurs programmes différents qui gèrent ça :
  1. Pour alerter des nouvelles versions : Il y a Anitya qui permet d'avertir les packagers et est intégré directement dans le Bugzilla de Fedora. Néanmoins, ce dernier ne marche toujours pas avec COPR, mais c'est sur la feuille de route de 2021. En attendant, j'ai moi-même développé un rapide programme CLI qui envoie des notifs quand ça arrive, Aytina.
  2. Pour actualiser la version d'un fichier SPEC : C'est très simple de mettre à jour un fichier SPEC, vu qu'il suffit de mettre à jour la version et de rajouter une entrée dans le Changelog. Cela n'empêche pas l'existence de "rpmdev-bumpspec" qui automatise cela ! Exemple :
    rpmdev-bumpspec -n 3.0.0 -c "Update to 3.0.0" -D package.spec
  3. Pour télécharger les nouvelles sources : Il y a spectool avec l'option "-g" qui automatise cela ! Il prend l'URL dans Source0 et télécharge la nouvelle version. De plus, si l'URL contient des macros pour déterminer où trouver la nouvelle version du tarball, comme il est standard, même pas besoin de mettre à jour l'URL après le rpmdev-bumpspec ! Et, si l'option "-R" est utilisée, spectool va même automatiquement placer les sources dans le bon chemin ("rpmbuild/SOURCES") ! Exemple :
    spectool -g package.spec
Aussi, il est possible de créer un repo git et d'y mettre seulement le fichier SPEC et quelques patchs s'il est nécessaire, et COPR téléchargera automatiquement les sources, en choisissant le type de source "SCM".

Enfin, pour automatiquement reconstruire des paquets RPM officiels de Fedora, il y a le type de source "DistGit" et il faut mettre le nom du paquet dans le champ "Namespace". Ça marche aussi avec les paquets CentOS et COPR.
Hummmm , merci pour tout ça, ça fait longtemps que je traine sur des forums RPM et pourtant personne ne m'a autant apporter en réponse!
Pour télécharger le paquet source par DNF, il y a : sudo dnf download --source [PAQUETS...]
Oui, je suis un peu bête, ne m'en veux pas, j'ai juste oublié de le signaler dans le poste précédent, cest en cherchant dans les options de DNF que je l'ai vu, du coup c'est ce que j'utilise.
Pour uscan, je ne suis pas sûr à 100% de ce que c'est, mais si j'ai bien compris c'est un service qui automatise le packaging des nouvelles versions ?
Oui c'est ça, en tout cas quand le fichier "watch" est bien fait, cette commande cherche une nouvelle version amont du logiciel, rapatrie les nouvelles sources, fait une sauvegarde des sources en nom-des-sources-version-orig.tar.(gz, xg,...) décompresse les sources et ajoute la "debianisation" et il ne te reste plus qu'a changer le changelog et lancer le build.

Alors pour ce qui suit, tu m'as comblé, je vais avoir du mal à ne pas passer à Fedora 🙂

Je ne connaissais rien de tout ces programmes que tu cites. Je vais me mettre à la recherche de doc pour les programmes cités, avec ça je suis paré.
Je pense que j'ai trouvé la personne que je vais venir embêter quand j'aurai une question sur un build, tu m'as apporter plus en une journée que dix ans sur des forum fr de distributions RPM...

Une petite question pour la route, j'ai cru comprendre que Copr savait le faire, mais, avec Copr, si je fais un paquet qui a besoin d'une dépendance non à jour dans les dépôts, va t'il prendre en compte si je fais cette dépendance directement depuis lui?

En gros car je m'exprime mal, je fais un paquet C depuis Copr qui a besoin d'un paquet A et B, si je fais depuis Copr A et B, va t'il les prendre en compte pour faire C? Ou il y a une façon de faire?
N'hésite pas à venir m'embêter :-P ! Je suis packager depuis un an, et tout ça est quelque peu appris sur le tas et à travers la mailing-list devel@fedoraproject.org !
seb95 wrote:Une petite question pour la route, j'ai cru comprendre que Copr savait le faire, mais, avec Copr, si je fais un paquet qui a besoin d'une dépendance non à jour dans les dépôts, va t'il prendre en compte si je fais cette dépendance directement depuis lui?

En gros car je m'exprime mal, je fais un paquet C depuis Copr qui a besoin d'un paquet A et B, si je fais depuis Copr A et B, va t'il les prendre en compte pour faire C? Ou il y a une façon de faire?
Oui :-D ! Mais, si A ou B sont déjà présent dans les dépôts officiels et que C est incompatible avec cette version, ça peut quelques fois générer des problèmes. Si c'est donc le cas, faire un "compat package" est la meilleure solution.

Un compat package est juste un paquet dont le nom a la version majeure à la fin, comme python3 ou libhandy1 et où les conflits de fichiers doivent être évité avec les autres versions (je ne peux pas donner de conseil sur comment faire, vu que c'est au cas par cas, mais, généralement, il n'y a même pas de conflit, vu qu'un bon projet prend déjà en compte cette possibilité).