C'est tout a fait possible et il faut évidemment le faire de manière automatisée comme déjà indique au dessus. C'est la valeur ajoutee de snap.
Pas vraiment en pratique.
Parce que ça signifie (et c’est particulièrement visible chez Docker) des Go de téléchargement chaque jour pour chaque utilisateur final...
Et aussi d’avoir des systèmes de notification si une dépendance bouge (c’est un problème difficile à résoudre et qui nécessite... de recoder un équivalent à APT !).
Si je prend l’exemple de FreeCAD, c’est (sorry pour le spam...) :
Rien que la détection d’un changement de version dans au moins une de ces dépendances pour éviter de reconstruire une image alors qu’il n’y a pas de changement, ça va être un enfer. Le yaml ne gère absolument pas ce cas actuellement et rebuildera à tous les coups sans possibilité de savoir s’il faut incrémenter la version ou non.
Autant te dire que c’est chaque jour que ton snap doit être reconstruit et poussé chez tes utilisateurs... Ils vont légèrement faire la gueule. Surtout que FreeCAD lui n’a absolument pas changé de version.
En plus si tu veux maintenir un snap pour plusieurs versions de FreeCAD, tu te tires juste une énorme balle dans le pied en terme de gestion...
Concrètement, je pense qu'avoir une version support long terme d'un paquet, va simplement consister a spécifier une branche du repo git du projet
Je ne te suis pas là... Pour l’utilisateur final, ça sera effectivement suivre my-application.latest ou my-application.esr.
Mais pour le mainteneur de l’image, c’est suivre tous les lib-xxx.{latest,esr} et reconstruire les images en conséquence.
[^] # Re: Mise-à-jour de sécurité sous snap
Posté par Aeris (site web personnel) . En réponse au journal Mon premier snap sur Xenial. Évalué à 5. Dernière modification le 06 juin 2016 à 13:21.
Pas vraiment en pratique.
Parce que ça signifie (et c’est particulièrement visible chez Docker) des Go de téléchargement chaque jour pour chaque utilisateur final...
Et aussi d’avoir des systèmes de notification si une dépendance bouge (c’est un problème difficile à résoudre et qui nécessite... de recoder un équivalent à APT !).
Si je prend l’exemple de FreeCAD, c’est (sorry pour le spam...) :
coreutils debconf debconf-2.0 debianutils dpkg fontconfig fontconfig-config fonts-dejavu-core fonts-freefont fonts-freefont-ttf fonts-liberation fonts-lyx freecad gcc-6-base install-info iso-codes liba52-0.7.4 libaa1 libasound2 libasound2-data libass5 libasyncns0 libatk1.0-0 libatk1.0-data libaudio2 libaudit1 libaudit-common libavahi-client3 libavahi-common3 libavahi-common-data libavc1394-0 libavcodec57 libavcodec-extra57 libavutil55 libbasicusageenvironment1 libblas3 libblas-common libblas.so.3 libbluray1 libboost-atomic1.58.0 libboost-chrono1.58.0 libboost-date-time1.58.0 libboost-filesystem1.58.0 libboost-program-options1.58.0 libboost-python1.58.0 libboost-regex1.58.0 libboost-signals1.58.0 libboost-system1.58.0 libboost-thread1.58.0 libbsd0 libbz2-1.0 libc6 libcaca0 libcairo2 libcap2 libcap2-bin libcddb2 libcdio13 libchromaprint0 libcoin80v5 libcomerr2 libcroco3 libcrystalhd3 libcups2 libdatrie1 libdb5.3 libdbus-1-3 libdc1394-22 libdca0 libdirectfb-1.2-9 libdrm2 libdvbpsi10 libdvdnav4 libdvdread4 libebml4v5 libegl1-mesa libegl1-x11 libevdev2 libexpat1 libfaad2 libffi6 libflac8 libfontconfig1 libfreeimage3 libfreerdp-cache1.1 libfreerdp-client1.1 libfreerdp-codec1.1 libfreerdp-common1.1.0 libfreerdp-core1.1 libfreerdp-crypto1.1 libfreerdp-gdi1.1 libfreerdp-locale1.1 libfreerdp-primitives1.1 libfreerdp-utils1.1 libfreetype6 libfribidi0 libgbm1 libgcc1 libgcrypt20 libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-common libgfortran3 libgl1 libgl1-mesa-glx libgl2ps1 libglapi-mesa libgles1 libgles1-mesa libgles2 libgles2-mesa libglib2.0-0 libglu1 libglu1-mesa libgme0 libgmp10 libgnutls30 libgomp1 libgpg-error0 libgpm2 libgraphite2-3 libgroupsock8 libgsm1 libgssapi-krb5-2 libgstreamer1.0-0 libgstreamer-plugins-base1.0-0 libgtk2.0-0 libgtk2.0-common libgudev-1.0-0 libharfbuzz0b libhogweed4 libice6 libicu55 libidn11 libilmbase12 libinput10 libinput-bin libiso9660-8 libjasper1 libjbig0 libjpeg62-turbo libjs-jquery libjs-jquery-ui libjson-c3 libjs-sphinxdoc libjs-underscore libjxr0 libk5crypto3 libkate1 libkeyutils1 libkrb5-3 libkrb5support0 liblapack3 liblapack.so.3 liblcms2-2 liblircclient0 liblivemedia52 liblua5.2-0 liblzma5 libmad0 libmatroska6v5 libmng1 libmodplug1 libmp3lame0 libmpcdec6 libmpeg2-4 libmtdev1 libmtp9 libmtp-common libncurses5 libncursesw5 libnettle6 libnuma1 liboce-foundation10 liboce-modeling10 liboce-ocaf10 liboce-ocaf-lite10 liboce-visualization10 libogg0 libopencore-amrnb0 libopencore-amrwb0 libopenexr22 libopenjp2-7 libopenjpeg5 libopus0 liborc-0.4-0 libp11-kit0 libpam0g libpam-modules libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpcre16-3 libpcre3 libphonon4 libpixman-1-0 libpng16-16 libproxy1v5 libproxy-tools libpulse0 libpulse-mainloop-glib0 libpyside1.2 libpython2.7 libpython2.7-minimal libpython2.7-stdlib libpython-stdlib libqt4-dbus libqt4-declarative libqt4-designer libqt4-help libqt4-network libqt4-opengl libqt4-script libqt4-scripttools libqt4-sql libqt4-svg libqt4-test libqt4-xml libqt4-xmlpatterns libqt5core5a libqt5dbus5 libqt5gui5 libqt5network5 libqt5widgets5 libqt5x11extras5 libqtassistantclient4 libqtcore4 libqtdbus4 libqtgui4 libqtwebkit4 libquadmath0 libraw1394-11 libraw15 libreadline6 libresid-builder0c2a librsvg2-2 librtmp1 libsamplerate0 libschroedinger-1.0-0 libsdl1.2debian libsdl-image1.2 libselinux1 libsemanage1 libsemanage-common libsepol1 libshiboken1.2v5 libshine3 libshout3 libsidplay2 libslang2 libsm6 libsnappy1v5 libsndfile1 libsndio6.1 libsoqt4-20 libsoxr0 libspeex1 libspeexdsp1 libspnav0 libsqlite3-0 libssh2-1 libssh-gcrypt-4 libssl1.0.2 libstdc++6 libswresample2 libsystemd0 libtag1v5 libtag1v5-vanilla libtasn1-6 libtcl8.6 libthai0 libthai-data libtheora0 libtiff5 libtinfo5 libtk8.6 libtwolame0 libudev1 libupnp6 libusageenvironment3 libusb-1.0-0 libustr-1.0-1 libuuid1 libva1 libva-drm1 libva-x11-1 libvcdinfo0 libvlc5 libvlccore8 libvncclient1 libvo-amrwbenc0 libvorbis0a libvorbisenc2 libvpx3 libwacom2 libwacom-common libwavpack1 libwayland-client0 libwayland-server0 libwebp5 libwebpmux1 libwinpr-crt0.1 libwinpr-crypto0.1 libwinpr-dsparse0.1 libwinpr-environment0.1 libwinpr-file0.1 libwinpr-handle0.1 libwinpr-heap0.1 libwinpr-input0.1 libwinpr-interlocked0.1 libwinpr-library0.1 libwinpr-path0.1 libwinpr-pool0.1 libwinpr-registry0.1 libwinpr-rpc0.1 libwinpr-sspi0.1 libwinpr-synch0.1 libwinpr-sysinfo0.1 libwinpr-thread0.1 libwinpr-utils0.1 libwrap0 libx11-6 libx11-data libx11-xcb1 libx264-148 libx265-79 libxau6 libxcb1 libxcb-composite0 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-present0 libxcb-randr0 libxcb-render0 libxcb-render-util0 libxcb-shape0 libxcb-shm0 libxcb-sync1 libxcb-util0 libxcb-xfixes0 libxcb-xkb1 libxcb-xv0 libxcomposite1 libxcursor1 libxdamage1 libxdmcp6 libxerces-c3.1 libxext6 libxfixes3 libxft2 libxi6 libxinerama1 libxkbcommon0 libxkbcommon-x11-0 libxkbfile1 libxml2 libxmu6 libxpm4 libxrandr2 libxrender1 libxshmfence1 libxslt1.1 libxss1 libxt6 libxtst6 libxvidcore4 libxxf86vm1 libzipios++0v5 libzvbi0 libzvbi-common lsb-base mime-support passwd phonon phonon-backend phonon-backend-vlc pyside-tools python python2.7 python2.7:any python2.7-minimal python:any python-collada python-cycler python-dateutil python-lxml python-matplotlib python-matplotlib-data python-numpy python-numpy-abi9 python-pivy python-ply python-pyparsing python-pyside python-pyside.phonon python-pyside.qtcore python-pyside.qtdeclarative python-pyside.qtgui python-pyside.qthelp python-pyside.qtnetwork python-pyside.qtopengl python-pyside.qtscript python-pyside.qtsql python-pyside.qtsvg python-pyside.qttest python-pyside.qtuitools python-pyside.qtwebkit python-pyside.qtxml python-qt4 python-qt4-gl python-six python-tz qdbus qtbase-abi-5-5-1 qtchooser qtcore4-l10n readline-common sensible-utils shared-mime-info sip-api-11.3 ttf-bitstream-vera tzdata ucf vlc vlc-data vlc-nox x11-common xkb-data zlib1gRien que la détection d’un changement de version dans au moins une de ces dépendances pour éviter de reconstruire une image alors qu’il n’y a pas de changement, ça va être un enfer. Le yaml ne gère absolument pas ce cas actuellement et rebuildera à tous les coups sans possibilité de savoir s’il faut incrémenter la version ou non.
Autant te dire que c’est chaque jour que ton snap doit être reconstruit et poussé chez tes utilisateurs... Ils vont légèrement faire la gueule. Surtout que FreeCAD lui n’a absolument pas changé de version.
En plus si tu veux maintenir un snap pour plusieurs versions de FreeCAD, tu te tires juste une énorme balle dans le pied en terme de gestion...
Je ne te suis pas là... Pour l’utilisateur final, ça sera effectivement suivre
my-application.latestoumy-application.esr.Mais pour le mainteneur de l’image, c’est suivre tous les
lib-xxx.{latest,esr}et reconstruire les images en conséquence.